diff --git a/packages/actions/actions.spec.js b/packages/actions/actions.spec.js deleted file mode 100644 index 9e7edd042..000000000 --- a/packages/actions/actions.spec.js +++ /dev/null @@ -1,35 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import pointerUtils from '@interactjs/utils/pointerUtils'; -import * as actions from './index'; -test('actions integration', t => { - const scope = helpers.mockScope(); - const event = pointerUtils.coordsToEvent(pointerUtils.newCoords()); - const element = scope.document.body; - scope.usePlugin(actions); - const interactable = scope.interactables.new(element); - // make a dropzone - scope.interactables.new(scope.document.documentElement).dropzone({}); - const interaction1 = scope.interactions.new({}); - interaction1.pointerDown(event, event, element); - for (const name of scope.actions.names) { - interaction1.start({ name }, interactable, element); - interaction1.stop(); - t.doesNotThrow(() => { - t.notOk(interaction1.interacting(), `${name} interaction starts and stops as expected`); - }, `${name} start and stop does not throw`); - } - for (const order of [scope.actions.names, [...scope.actions.names].reverse()]) { - const interaction2 = scope.interactions.new({}); - for (const name of order) { - t.doesNotThrow(() => { - interaction2.start({ name }, interactable, element); - interaction2.pointerMove(event, event, element); - interaction2.pointerUp(event, event, element, element); - t.notOk(interaction2.interacting(), `${name} interaction starts, moves and ends as expected`); - }, `${name} sequence does not throw`); - } - } - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYWN0aW9ucy5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxZQUFZLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUE7QUFFbEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzlCLE1BQU0sS0FBSyxHQUFtQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDakQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtJQUVuQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXhCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JELGtCQUFrQjtJQUNsQixLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNwRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUUvQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFL0MsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUN0QyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ25ELFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUVuQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtZQUNsQixDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksMkNBQTJDLENBQUMsQ0FBQTtRQUN6RixDQUFDLEVBQUUsR0FBRyxJQUFJLGdDQUFnQyxDQUFDLENBQUE7S0FDNUM7SUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtRQUM3RSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUUvQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtnQkFDbEIsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDbkQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUMvQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUV0RCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksaURBQWlELENBQUMsQ0FBQTtZQUMvRixDQUFDLEVBQUUsR0FBRyxJQUFJLDBCQUEwQixDQUFDLENBQUE7U0FDdEM7S0FDRjtJQUVELENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvX2hlbHBlcnMnXG5pbXBvcnQgcG9pbnRlclV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3BvaW50ZXJVdGlscydcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9pbmRleCdcblxudGVzdCgnYWN0aW9ucyBpbnRlZ3JhdGlvbicsIHQgPT4ge1xuICBjb25zdCBzY29wZTogSW50ZXJhY3QuU2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG4gIGNvbnN0IGV2ZW50ID0gcG9pbnRlclV0aWxzLmNvb3Jkc1RvRXZlbnQocG9pbnRlclV0aWxzLm5ld0Nvb3JkcygpKVxuICBjb25zdCBlbGVtZW50ID0gc2NvcGUuZG9jdW1lbnQuYm9keVxuXG4gIHNjb3BlLnVzZVBsdWdpbihhY3Rpb25zKVxuXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KGVsZW1lbnQpXG4gIC8vIG1ha2UgYSBkcm9wem9uZVxuICBzY29wZS5pbnRlcmFjdGFibGVzLm5ldyhzY29wZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmRyb3B6b25lKHt9KVxuICBjb25zdCBpbnRlcmFjdGlvbjEgPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KVxuXG4gIGludGVyYWN0aW9uMS5wb2ludGVyRG93bihldmVudCwgZXZlbnQsIGVsZW1lbnQpXG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIHNjb3BlLmFjdGlvbnMubmFtZXMpIHtcbiAgICBpbnRlcmFjdGlvbjEuc3RhcnQoeyBuYW1lIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgICBpbnRlcmFjdGlvbjEuc3RvcCgpXG5cbiAgICB0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICB0Lm5vdE9rKGludGVyYWN0aW9uMS5pbnRlcmFjdGluZygpLCBgJHtuYW1lfSBpbnRlcmFjdGlvbiBzdGFydHMgYW5kIHN0b3BzIGFzIGV4cGVjdGVkYClcbiAgICB9LCBgJHtuYW1lfSBzdGFydCBhbmQgc3RvcCBkb2VzIG5vdCB0aHJvd2ApXG4gIH1cblxuICBmb3IgKGNvbnN0IG9yZGVyIG9mIFtzY29wZS5hY3Rpb25zLm5hbWVzLCBbLi4uc2NvcGUuYWN0aW9ucy5uYW1lc10ucmV2ZXJzZSgpXSkge1xuICAgIGNvbnN0IGludGVyYWN0aW9uMiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygb3JkZXIpIHtcbiAgICAgIHQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgaW50ZXJhY3Rpb24yLnN0YXJ0KHsgbmFtZSB9LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG4gICAgICAgIGludGVyYWN0aW9uMi5wb2ludGVyTW92ZShldmVudCwgZXZlbnQsIGVsZW1lbnQpXG4gICAgICAgIGludGVyYWN0aW9uMi5wb2ludGVyVXAoZXZlbnQsIGV2ZW50LCBlbGVtZW50LCBlbGVtZW50KVxuXG4gICAgICAgIHQubm90T2soaW50ZXJhY3Rpb24yLmludGVyYWN0aW5nKCksIGAke25hbWV9IGludGVyYWN0aW9uIHN0YXJ0cywgbW92ZXMgYW5kIGVuZHMgYXMgZXhwZWN0ZWRgKVxuICAgICAgfSwgYCR7bmFtZX0gc2VxdWVuY2UgZG9lcyBub3QgdGhyb3dgKVxuICAgIH1cbiAgfVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/actions/drag.d.ts b/packages/actions/drag.d.ts index 3f880d4db..3dc4aafb7 100644 --- a/packages/actions/drag.d.ts +++ b/packages/actions/drag.d.ts @@ -1,4 +1,4 @@ -import { ActionName } from '@interactjs/core/scope'; +import { ActionName } from '../core/scope'; declare module '@interactjs/core/Interactable' { interface Interactable { draggable: DraggableMethod; diff --git a/packages/actions/drag.js b/packages/actions/drag.js index 07e7fe309..dde9f4886 100644 --- a/packages/actions/drag.js +++ b/packages/actions/drag.js @@ -1,55 +1,66 @@ -import { ActionName } from '@interactjs/core/scope'; -import * as arr from '@interactjs/utils/arr'; -import * as is from '@interactjs/utils/is'; +import { ActionName } from "../core/scope.js"; +import * as arr from "../utils/arr.js"; +import * as is from "../utils/is.js"; ActionName.Drag = 'drag'; + function install(scope) { - const { actions, Interactable, interactions, defaults, } = scope; - interactions.signals.on('before-action-move', beforeMove); - interactions.signals.on('action-resume', beforeMove); + const { + actions, + Interactable, + defaults + } = scope; + scope.addListeners({ + 'interactions:before-action-move': beforeMove, + 'interactions:action-resume': beforeMove, // dragmove - interactions.signals.on('action-move', move); - Interactable.prototype.draggable = drag.draggable; - actions[ActionName.Drag] = drag; - actions.names.push(ActionName.Drag); - arr.merge(actions.eventTypes, [ - 'dragstart', - 'dragmove', - 'draginertiastart', - 'dragresume', - 'dragend', - ]); - actions.methodDict.drag = 'draggable'; - defaults.actions.drag = drag.defaults; + 'interactions:action-move': move + }); + Interactable.prototype.draggable = drag.draggable; + actions[ActionName.Drag] = drag; + actions.names.push(ActionName.Drag); + arr.merge(actions.eventTypes, ['dragstart', 'dragmove', 'draginertiastart', 'dragresume', 'dragend']); + actions.methodDict.drag = 'draggable'; + defaults.actions.drag = drag.defaults; } -function beforeMove({ interaction }) { - if (interaction.prepared.name !== 'drag') { - return; - } - const axis = interaction.prepared.axis; - if (axis === 'x') { - interaction.coords.cur.page.y = interaction.coords.start.page.y; - interaction.coords.cur.client.y = interaction.coords.start.client.y; - interaction.coords.velocity.client.y = 0; - interaction.coords.velocity.page.y = 0; - } - else if (axis === 'y') { - interaction.coords.cur.page.x = interaction.coords.start.page.x; - interaction.coords.cur.client.x = interaction.coords.start.client.x; - interaction.coords.velocity.client.x = 0; - interaction.coords.velocity.page.x = 0; - } + +function beforeMove({ + interaction +}) { + if (interaction.prepared.name !== 'drag') { + return; + } + + const axis = interaction.prepared.axis; + + if (axis === 'x') { + interaction.coords.cur.page.y = interaction.coords.start.page.y; + interaction.coords.cur.client.y = interaction.coords.start.client.y; + interaction.coords.velocity.client.y = 0; + interaction.coords.velocity.page.y = 0; + } else if (axis === 'y') { + interaction.coords.cur.page.x = interaction.coords.start.page.x; + interaction.coords.cur.client.x = interaction.coords.start.client.x; + interaction.coords.velocity.client.x = 0; + interaction.coords.velocity.page.x = 0; + } } -function move({ iEvent, interaction }) { - if (interaction.prepared.name !== 'drag') { - return; - } - const axis = interaction.prepared.axis; - if (axis === 'x' || axis === 'y') { - const opposite = axis === 'x' ? 'y' : 'x'; - iEvent.page[opposite] = interaction.coords.start.page[opposite]; - iEvent.client[opposite] = interaction.coords.start.client[opposite]; - iEvent.delta[opposite] = 0; - } + +function move({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'drag') { + return; + } + + const axis = interaction.prepared.axis; + + if (axis === 'x' || axis === 'y') { + const opposite = axis === 'x' ? 'y' : 'x'; + iEvent.page[opposite] = interaction.coords.start.page[opposite]; + iEvent.client[opposite] = interaction.coords.start.client[opposite]; + iEvent.delta[opposite] = 0; + } } /** * ```js @@ -90,49 +101,56 @@ function move({ iEvent, interaction }) { * @return {boolean | Interactable} boolean indicating if this can be the * target of drag events, or this Interctable */ + + const draggable = function draggable(options) { - if (is.object(options)) { - this.options.drag.enabled = options.enabled !== false; - this.setPerAction('drag', options); - this.setOnEvents('drag', options); - if (/^(xy|x|y|start)$/.test(options.lockAxis)) { - this.options.drag.lockAxis = options.lockAxis; - } - if (/^(xy|x|y)$/.test(options.startAxis)) { - this.options.drag.startAxis = options.startAxis; - } - return this; + if (is.object(options)) { + this.options.drag.enabled = options.enabled !== false; + this.setPerAction('drag', options); + this.setOnEvents('drag', options); + + if (/^(xy|x|y|start)$/.test(options.lockAxis)) { + this.options.drag.lockAxis = options.lockAxis; } - if (is.bool(options)) { - this.options.drag.enabled = options; - return this; + + if (/^(xy|x|y)$/.test(options.startAxis)) { + this.options.drag.startAxis = options.startAxis; } - return this.options.drag; + + return this; + } + + if (is.bool(options)) { + this.options.drag.enabled = options; + return this; + } + + return this.options.drag; }; + const drag = { - id: 'actions/drag', - install, - draggable, - beforeMove, - move, - defaults: { - startAxis: 'xy', - lockAxis: 'xy', - }, - checker(_pointer, _event, interactable) { - const dragOptions = interactable.options.drag; - return dragOptions.enabled - ? { - name: 'drag', - axis: (dragOptions.lockAxis === 'start' - ? dragOptions.startAxis - : dragOptions.lockAxis), - } - : null; - }, - getCursor() { - return 'move'; - }, + id: 'actions/drag', + install, + draggable, + beforeMove, + move, + defaults: { + startAxis: 'xy', + lockAxis: 'xy' + }, + + checker(_pointer, _event, interactable) { + const dragOptions = interactable.options.drag; + return dragOptions.enabled ? { + name: 'drag', + axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis + } : null; + }, + + getCursor() { + return 'move'; + } + }; export default drag; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQXlCekMsVUFBa0IsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBTWpDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3pELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVwRCxXQUFXO0lBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRTVDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7SUFFakQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUE7SUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUM1QixXQUFXO1FBQ1gsVUFBVTtRQUNWLGtCQUFrQjtRQUNsQixZQUFZO1FBQ1osU0FBUztLQUNWLENBQUMsQ0FBQTtJQUNGLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQTtJQUVyQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksR0FB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QUM7YUFDMUI7WUFDRCxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ1YsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7Q0FDRixDQUFBO0FBRUQsZUFBZSxJQUFJLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25OYW1lLCBTY29wZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgKiBhcyBhcnIgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvYXJyJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RhYmxlIHtcbiAgICBkcmFnZ2FibGU6IERyYWdnYWJsZU1ldGhvZFxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBBY3Rpb25EZWZhdWx0cyB7XG4gICAgZHJhZzogSW50ZXJhY3QuRHJhZ2dhYmxlT3B0aW9uc1xuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBBY3Rpb25zIHtcbiAgICBbQWN0aW9uTmFtZS5EcmFnXT86IHR5cGVvZiBkcmFnXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIGVudW0gQWN0aW9uTmFtZSB7XG4gICAgRHJhZyA9ICdkcmFnJ1xuICB9XG59XG5cbihBY3Rpb25OYW1lIGFzIGFueSkuRHJhZyA9ICdkcmFnJ1xuXG5leHBvcnQgdHlwZSBEcmFnRXZlbnQgPSBJbnRlcmFjdC5JbnRlcmFjdEV2ZW50PEFjdGlvbk5hbWUuRHJhZz5cblxuZXhwb3J0IHR5cGUgRHJhZ2dhYmxlTWV0aG9kID0gSW50ZXJhY3QuQWN0aW9uTWV0aG9kPEludGVyYWN0LkRyYWdnYWJsZU9wdGlvbnM+XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgYWN0aW9ucyxcbiAgICBJbnRlcmFjdGFibGUsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIGRlZmF1bHRzLFxuICB9ID0gc2NvcGVcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1tb3ZlJywgYmVmb3JlTW92ZSlcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1yZXN1bWUnLCBiZWZvcmVNb3ZlKVxuXG4gIC8vIGRyYWdtb3ZlXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIG1vdmUpXG5cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcmFnZ2FibGUgPSBkcmFnLmRyYWdnYWJsZVxuXG4gIGFjdGlvbnNbQWN0aW9uTmFtZS5EcmFnXSA9IGRyYWdcbiAgYWN0aW9ucy5uYW1lcy5wdXNoKEFjdGlvbk5hbWUuRHJhZylcbiAgYXJyLm1lcmdlKGFjdGlvbnMuZXZlbnRUeXBlcywgW1xuICAgICdkcmFnc3RhcnQnLFxuICAgICdkcmFnbW92ZScsXG4gICAgJ2RyYWdpbmVydGlhc3RhcnQnLFxuICAgICdkcmFncmVzdW1lJyxcbiAgICAnZHJhZ2VuZCcsXG4gIF0pXG4gIGFjdGlvbnMubWV0aG9kRGljdC5kcmFnID0gJ2RyYWdnYWJsZSdcblxuICBkZWZhdWx0cy5hY3Rpb25zLmRyYWcgPSBkcmFnLmRlZmF1bHRzXG59XG5cbmZ1bmN0aW9uIGJlZm9yZU1vdmUgKHsgaW50ZXJhY3Rpb24gfSkge1xuICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgY29uc3QgYXhpcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmF4aXNcblxuICBpZiAoYXhpcyA9PT0gJ3gnKSB7XG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlLnkgICA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlLnlcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLmNsaWVudC55ID0gaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LmNsaWVudC55XG5cbiAgICBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHkuY2xpZW50LnkgPSAwXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5LnBhZ2UueSAgID0gMFxuICB9XG4gIGVsc2UgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZS54ICAgPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZS54XG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5jbGllbnQueCA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5jbGllbnQueFxuXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLnZlbG9jaXR5LmNsaWVudC54ID0gMFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy52ZWxvY2l0eS5wYWdlLnggICA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3ZlICh7IGlFdmVudCwgaW50ZXJhY3Rpb24gfSkge1xuICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgY29uc3QgYXhpcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmF4aXNcblxuICBpZiAoYXhpcyA9PT0gJ3gnIHx8IGF4aXMgPT09ICd5Jykge1xuICAgIGNvbnN0IG9wcG9zaXRlID0gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnXG5cbiAgICBpRXZlbnQucGFnZVtvcHBvc2l0ZV0gICA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5wYWdlW29wcG9zaXRlXVxuICAgIGlFdmVudC5jbGllbnRbb3Bwb3NpdGVdID0gaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LmNsaWVudFtvcHBvc2l0ZV1cbiAgICBpRXZlbnQuZGVsdGFbb3Bwb3NpdGVdID0gMFxuICB9XG59XG5cbi8qKlxuICogYGBganNcbiAqIGludGVyYWN0KGVsZW1lbnQpLmRyYWdnYWJsZSh7XG4gKiAgICAgb25zdGFydDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAqICAgICBvbm1vdmUgOiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICogICAgIG9uZW5kICA6IGZ1bmN0aW9uIChldmVudCkge30sXG4gKlxuICogICAgIC8vIHRoZSBheGlzIGluIHdoaWNoIHRoZSBmaXJzdCBtb3ZlbWVudCBtdXN0IGJlXG4gKiAgICAgLy8gZm9yIHRoZSBkcmFnIHNlcXVlbmNlIHRvIHN0YXJ0XG4gKiAgICAgLy8gJ3h5JyBieSBkZWZhdWx0IC0gYW55IGRpcmVjdGlvblxuICogICAgIHN0YXJ0QXhpczogJ3gnIHx8ICd5JyB8fCAneHknLFxuICpcbiAqICAgICAvLyAneHknIGJ5IGRlZmF1bHQgLSBkb24ndCByZXN0cmljdCB0byBvbmUgYXhpcyAobW92ZSBpbiBhbnkgZGlyZWN0aW9uKVxuICogICAgIC8vICd4JyBvciAneScgdG8gcmVzdHJpY3QgbW92ZW1lbnQgdG8gZWl0aGVyIGF4aXNcbiAqICAgICAvLyAnc3RhcnQnIHRvIHJlc3RyaWN0IG1vdmVtZW50IHRvIHRoZSBheGlzIHRoZSBkcmFnIHN0YXJ0ZWQgaW5cbiAqICAgICBsb2NrQXhpczogJ3gnIHx8ICd5JyB8fCAneHknIHx8ICdzdGFydCcsXG4gKlxuICogICAgIC8vIG1heCBudW1iZXIgb2YgZHJhZ3MgdGhhdCBjYW4gaGFwcGVuIGNvbmN1cnJlbnRseVxuICogICAgIC8vIHdpdGggZWxlbWVudHMgb2YgdGhpcyBJbnRlcmFjdGFibGUuIEluZmluaXR5IGJ5IGRlZmF1bHRcbiAqICAgICBtYXg6IEluZmluaXR5LFxuICpcbiAqICAgICAvLyBtYXggbnVtYmVyIG9mIGRyYWdzIHRoYXQgY2FuIHRhcmdldCB0aGUgc2FtZSBlbGVtZW50K0ludGVyYWN0YWJsZVxuICogICAgIC8vIDEgYnkgZGVmYXVsdFxuICogICAgIG1heFBlckVsZW1lbnQ6IDJcbiAqIH0pXG4gKlxuICogdmFyIGlzRHJhZ2dhYmxlID0gaW50ZXJhY3QoJ2VsZW1lbnQnKS5kcmFnZ2FibGUoKTsgLy8gdHJ1ZVxuICogYGBgXG4gKlxuICogR2V0IG9yIHNldCB3aGV0aGVyIGRyYWcgYWN0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uIHRoZSB0YXJnZXRcbiAqXG4gKiBAYWxpYXMgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcmFnZ2FibGVcbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3R9IFtvcHRpb25zXSB0cnVlL2ZhbHNlIG9yIEFuIG9iamVjdCB3aXRoIGV2ZW50XG4gKiBsaXN0ZW5lcnMgdG8gYmUgZmlyZWQgb24gZHJhZyBldmVudHMgKG9iamVjdCBtYWtlcyB0aGUgSW50ZXJhY3RhYmxlXG4gKiBkcmFnZ2FibGUpXG4gKiBAcmV0dXJuIHtib29sZWFuIHwgSW50ZXJhY3RhYmxlfSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhpcyBjYW4gYmUgdGhlXG4gKiB0YXJnZXQgb2YgZHJhZyBldmVudHMsIG9yIHRoaXMgSW50ZXJjdGFibGVcbiAqL1xuY29uc3QgZHJhZ2dhYmxlOiBEcmFnZ2FibGVNZXRob2QgPSBmdW5jdGlvbiBkcmFnZ2FibGUgKHRoaXM6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9ucz86IEludGVyYWN0LkRyYWdnYWJsZU9wdGlvbnMgfCBib29sZWFuKTogYW55IHtcbiAgaWYgKGlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIHRoaXMub3B0aW9ucy5kcmFnLmVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlXG4gICAgdGhpcy5zZXRQZXJBY3Rpb24oJ2RyYWcnLCBvcHRpb25zKVxuICAgIHRoaXMuc2V0T25FdmVudHMoJ2RyYWcnLCBvcHRpb25zKVxuXG4gICAgaWYgKC9eKHh5fHh8eXxzdGFydCkkLy50ZXN0KG9wdGlvbnMubG9ja0F4aXMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZHJhZy5sb2NrQXhpcyA9IG9wdGlvbnMubG9ja0F4aXNcbiAgICB9XG4gICAgaWYgKC9eKHh5fHh8eSkkLy50ZXN0KG9wdGlvbnMuc3RhcnRBeGlzKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRyYWcuc3RhcnRBeGlzID0gb3B0aW9ucy5zdGFydEF4aXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgaWYgKGlzLmJvb2wob3B0aW9ucykpIHtcbiAgICB0aGlzLm9wdGlvbnMuZHJhZy5lbmFibGVkID0gb3B0aW9uc1xuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJldHVybiB0aGlzLm9wdGlvbnMuZHJhZ1xufVxuXG5jb25zdCBkcmFnOiBJbnRlcmFjdC5QbHVnaW4gPSB7XG4gIGlkOiAnYWN0aW9ucy9kcmFnJyxcbiAgaW5zdGFsbCxcbiAgZHJhZ2dhYmxlLFxuICBiZWZvcmVNb3ZlLFxuICBtb3ZlLFxuICBkZWZhdWx0czoge1xuICAgIHN0YXJ0QXhpcyA6ICd4eScsXG4gICAgbG9ja0F4aXMgIDogJ3h5JyxcbiAgfSBhcyBJbnRlcmFjdC5Ecm9wem9uZU9wdGlvbnMsXG5cbiAgY2hlY2tlciAoX3BvaW50ZXIsIF9ldmVudCwgaW50ZXJhY3RhYmxlKSB7XG4gICAgY29uc3QgZHJhZ09wdGlvbnMgPSBpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnXG5cbiAgICByZXR1cm4gZHJhZ09wdGlvbnMuZW5hYmxlZFxuICAgICAgPyB7XG4gICAgICAgIG5hbWU6ICdkcmFnJyxcbiAgICAgICAgYXhpczogKGRyYWdPcHRpb25zLmxvY2tBeGlzID09PSAnc3RhcnQnXG4gICAgICAgICAgPyBkcmFnT3B0aW9ucy5zdGFydEF4aXNcbiAgICAgICAgICA6IGRyYWdPcHRpb25zLmxvY2tBeGlzKSxcbiAgICAgIH1cbiAgICAgIDogbnVsbFxuICB9LFxuXG4gIGdldEN1cnNvciAoKSB7XG4gICAgcmV0dXJuICdtb3ZlJ1xuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBkcmFnXG4iXX0= \ No newline at end of file +//# sourceMappingURL=drag.js.map \ No newline at end of file diff --git a/packages/actions/drag.js.map b/packages/actions/drag.js.map new file mode 100644 index 000000000..b4fe35a61 --- /dev/null +++ b/packages/actions/drag.js.map @@ -0,0 +1,63 @@ +{ + "version": 3, + "sources": [ + "drag.ts" + ], + "names": [ + "ActionName", + "arr", + "is", + "Drag", + "install", + "scope", + "actions", + "Interactable", + "defaults", + "addListeners", + "beforeMove", + "move", + "prototype", + "draggable", + "drag", + "names", + "push", + "merge", + "eventTypes", + "methodDict", + "interaction", + "prepared", + "name", + "axis", + "coords", + "cur", + "page", + "y", + "start", + "client", + "velocity", + "x", + "iEvent", + "opposite", + "delta", + "options", + "object", + "enabled", + "setPerAction", + "setOnEvents", + "test", + "lockAxis", + "startAxis", + "bool", + "id", + "checker", + "_pointer", + "_event", + "interactable", + "dragOptions", + "getCursor" + ], + "mappings": "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", + "sourcesContent": [ + "import { ActionName, Scope } from '../core/scope'\nimport * as arr from '../utils/arr'\nimport * as is from '../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 defaults,\n } = scope\n\n scope.addListeners({\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n })\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag: Interact.Plugin = {\n id: 'actions/drag',\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n" + ] +} \ No newline at end of file diff --git a/packages/actions/drag.spec.js b/packages/actions/drag.spec.js deleted file mode 100644 index 1c8a14d17..000000000 --- a/packages/actions/drag.spec.js +++ /dev/null @@ -1,112 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -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(); - scope.usePlugin(drag); - 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(); - scope.usePlugin(drag); - 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.interact = 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJhZy5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNuRCxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLFlBQVksTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLElBQUksTUFBTSxRQUFRLENBQUE7QUFFekIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzNCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUVqQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXJCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO0lBQzlFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ25ELENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFbEUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDeEMsTUFBTSxZQUFZLEdBQUc7UUFDbkIsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLEVBQUU7U0FDVDtRQUNELFNBQVMsRUFBRSxJQUFJ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QyxDQUFDLENBQUE7U0FDaEU7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCB7IEFjdGlvbk5hbWUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgcG9pbnRlclV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3BvaW50ZXJVdGlscydcbmltcG9ydCBkcmFnIGZyb20gJy4vZHJhZydcblxudGVzdCgnZHJhZyBhY3Rpb24gaW5pdCcsIHQgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBzY29wZS51c2VQbHVnaW4oZHJhZylcblxuICB0Lm9rKHNjb3BlLmFjdGlvbnMubmFtZXMuaW5jbHVkZXMoQWN0aW9uTmFtZS5EcmFnKSwgJ1wiZHJhZ1wiIGluIGFjdGlvbnMubmFtZXMnKVxuICB0LmVxdWFsKHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdC5kcmFnLCAnZHJhZ2dhYmxlJylcbiAgdC5lcXVhbCh0eXBlb2Ygc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcmFnZ2FibGUsICdmdW5jdGlvbicpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnSW50ZXJhY3RhYmxlLmRyYWdnYWJsZSBtZXRob2QnLCB0ID0+IHtcbiAgY29uc3QgaW50ZXJhY3RhYmxlID0ge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIGRyYWc6IHt9LFxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiBkcmFnLmRyYWdnYWJsZSxcbiAgICBzZXRQZXJBY3Rpb246ICgpID0+IHsgY2FsbGVkU2V0UGVyQWN0aW9uID0gdHJ1ZSB9LFxuICAgIHNldE9uRXZlbnRzOiAoKSA9PiB7IGNhbGxlZFNldE9uRXZlbnRzID0gdHJ1ZSB9LFxuICB9IGFzIHVua25vd24gYXMgSW50ZXJhY3QuSW50ZXJhY3RhYmxlXG4gIGxldCBjYWxsZWRTZXRQZXJBY3Rpb24gPSBmYWxzZVxuICBsZXQgY2FsbGVkU2V0T25FdmVudHMgPSBmYWxzZVxuXG4gIHQuZXF1YWwoaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSgpLCBpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnLFxuICAgICdpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKCkgcmV0dXJucyBpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnIG9iamVjdCcpXG5cbiAgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh0cnVlKVxuICB0Lm9rKGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWcuZW5hYmxlZCxcbiAgICAnY2FsbGluZyBgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh0cnVlKWAgZW5hYmxlcyBkcmFnZ2luZycpXG5cbiAgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZShmYWxzZSlcbiAgdC5ub3RPayhpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnLmVuYWJsZWQsXG4gICAgJ2NhbGxpbmcgYGludGVyYWN0YWJsZS5kcmFnZ2FibGUoZmFsc2UpYCBkaXNhYmxlcyBkcmFnZ2luZycpXG5cbiAgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7fSlcbiAgdC5vayhpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnLmVuYWJsZWQsXG4gICAgJ2NhbGxpbmcgYGludGVyYWN0YWJsZS5kcmFnZ2FibGUoe30pYCBlbmFibGVzIGRyYWdnaW5nJylcbiAgdC5vayhjYWxsZWRTZXRPbkV2ZW50cyxcbiAgICAnY2FsbGluZyBgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7fSlgIGNhbGxzIHRoaXMuc2V0T25FdmVudHMnKVxuICB0Lm9rKGNhbGxlZFNldFBlckFjdGlvbixcbiAgICAnY2FsbGluZyBgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7fSlgIGNhbGxzIHRoaXMuc2V0UGVyQWN0aW9uJylcblxuICBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHsgZW5hYmxlZDogZmFsc2UgfSlcbiAgdC5ub3RPayhpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnLmVuYWJsZWQsXG4gICAgJ2NhbGxpbmcgYGludGVyYWN0YWJsZS5kcmFnZ2FibGUoeyBlbmFibGVkOiBmYWxzZSB9KWAgZGlzYWJsZXMgZHJhZ2dpbmcnKVxuXG4gIGNvbnN0IGF4aXNTZXR0aW5ncyA9IHtcbiAgICBsb2NrQXhpczogWyd4JywgJ3knLCAneHknLCAnc3RhcnQnXSxcbiAgICBzdGFydEF4aXM6IFsneCcsICd5JywgJ3h5J10sXG4gIH1cblxuICBmb3IgKGNvbnN0IGF4aXMgaW4gYXhpc1NldHRpbmdzKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBheGlzU2V0dGluZ3NbYXhpc10pIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fVxuXG4gICAgICBvcHRpb25zW2F4aXNdID0gdmFsdWVcblxuICAgICAgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZShvcHRpb25zKVxuICAgICAgdC5lcXVhbChpbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnW2F4aXNdLCB2YWx1ZSxcbiAgICAgICAgJ2AnICsgYXhpcyArICc6IFwiJyArIHZhbHVlICsgJ1wiYCBpcyBzZXQgY29ycmVjdGx5JylcblxuICAgICAgZGVsZXRlIGludGVyYWN0YWJsZS5vcHRpb25zLmRyYWdbYXhpc11cbiAgICB9XG4gIH1cblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdkcmFnIGF4aXMnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgc2NvcGUudXNlUGx1Z2luKGRyYWcpXG5cbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KVxuICBjb25zdCBlbGVtZW50ID0ge31cbiAgY29uc3QgaW50ZXJhY3RhYmxlID0ge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIGRyYWc6IHt9LFxuICAgIH0sXG4gICAgdGFyZ2V0OiBlbGVtZW50LFxuICB9IGFzIEludGVyYWN0LkludGVyYWN0YWJsZVxuICBjb25zdCBpRXZlbnQgPSB7IHBhZ2U6IHt9LCBjbGllbnQ6IHt9LCBkZWx0YToge30sIHR5cGU6ICdkcmFnbW92ZScgfSBhcyBJbnRlcmFjdC5JbnRlcmFjdEV2ZW50XG5cbiAgY29uc3Qgb3Bwb3NpdGVzID0geyB4OiAneScsIHk6ICd4JyB9XG4gIGNvbnN0IGV2ZW50Q29vcmRzID0ge1xuICAgIHBhZ2U6IHsgeDogLTEsIHk6IC0yIH0sXG4gICAgY2xpZW50OiB7IHg6IC0zLCB5OiAtNCB9LFxuICAgIGRlbHRhOiB7IHg6IC01LCB5OiAtNiB9LFxuICB9XG4gIGNvbnN0IGNvb3JkcyA9IGhlbHBlcnMubmV3Q29vcmRzU2V0KClcblxuICByZXNldENvb3JkcygpXG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0geyBuYW1lOiAnZHJhZycsIGF4aXM6ICd4eScgfVxuICBpbnRlcmFjdGlvbi5pbnRlcmFjdCA9IGludGVyYWN0YWJsZVxuXG4gIHQudGVzdCgneHkgKGFueSBkaXJlY3Rpb24pJywgdHQgPT4ge1xuICAgIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2JlZm9yZS1hY3Rpb24tbW92ZScsIHsgaW50ZXJhY3Rpb24gfSlcblxuICAgIHR0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQsIGNvb3Jkcy5zdGFydCxcbiAgICAgICdjb29yZHMuc3RhcnQgaXMgbm90IG1vZGlmaWVkJylcbiAgICB0dC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24uY29vcmRzLmRlbHRhLCBjb29yZHMuZGVsdGEsXG4gICAgICAnY29vcmRzLmRlbHRhIGlzIG5vdCBtb2RpZmllZCcpXG5cbiAgICBzY29wZS5pbnRlcmFjdGlvbnMuc2lnbmFscy5maXJlKCdhY3Rpb24tbW92ZScsIHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9KVxuXG4gICAgdHQuZGVlcEVxdWFsKGlFdmVudC5wYWdlLCBldmVudENvb3Jkcy5wYWdlLCAncGFnZSBjb29yZHMgYXJlIG5vdCBtb2RpZmllZCcpXG4gICAgdHQuZGVlcEVxdWFsKGlFdmVudC5kZWx0YSwgZXZlbnRDb29yZHMuZGVsdGEsICdkZWx0YSBpcyBub3QgbW9kaWZpZWQnKVxuXG4gICAgdHQuZW5kKClcbiAgfSlcblxuICBmb3IgKGNvbnN0IGF4aXMgaW4gb3Bwb3NpdGVzKSB7XG4gICAgY29uc3Qgb3Bwb3NpdGUgPSBvcHBvc2l0ZXNbYXhpc11cblxuICAgIHQudGVzdChheGlzICsgJy1heGlzJywgdHQgPT4ge1xuICAgICAgcmVzZXRDb29yZHMoKVxuICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuYXhpcyA9IGF4aXMgYXMgYW55XG5cbiAgICAgIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2FjdGlvbi1tb3ZlJywgeyBpRXZlbnQsIGludGVyYWN0aW9uIH0pXG5cbiAgICAgIHR0LmRlZXBFcXVhbChcbiAgICAgICAgaUV2ZW50LmRlbHRhLFxuICAgICAgICB7XG4gICAgICAgICAgW29wcG9zaXRlXTogMCxcbiAgICAgICAgICBbYXhpc106IGV2ZW50Q29vcmRzLmRlbHRhW2F4aXNdLFxuICAgICAgICB9LFxuICAgICAgICBgb3Bwb3NpdGUgYXhpcyAoJHtvcHBvc2l0ZX0pIGRlbHRhIGlzIDA7IHRhcmdldCBheGlzICgke2F4aXN9KSBkZWx0YSBpcyBub3QgbW9kaWZpZWRgKVxuXG4gICAgICB0dC5kZWVwRXF1YWwoXG4gICAgICAgIGlFdmVudC5wYWdlLFxuICAgICAgICB7XG4gICAgICAgICAgW29wcG9zaXRlXTogY29vcmRzLnN0YXJ0LnBhZ2Vbb3Bwb3NpdGVdLFxuICAgICAgICAgIFtheGlzXTogZXZlbnRDb29yZHMucGFnZVtheGlzXSxcbiAgICAgICAgfSxcbiAgICAgICAgYHBhZ2UuJHtvcHBvc2l0ZX0gaXMgY29vcmRzLnN0YXJ0IHZhbHVlYFxuICAgICAgKVxuXG4gICAgICB0dC5lcXVhbChcbiAgICAgICAgaUV2ZW50LnBhZ2VbYXhpc10sXG4gICAgICAgIGV2ZW50Q29vcmRzLnBhZ2VbYXhpc10sXG4gICAgICAgIGBwYWdlLiR7YXhpc30gaXMgbm90IG1vZGlmaWVkYFxuICAgICAgKVxuXG4gICAgICB0dC5lcXVhbChcbiAgICAgICAgaUV2ZW50LmNsaWVudFtvcHBvc2l0ZV0sXG4gICAgICAgIGNvb3Jkcy5zdGFydC5jbGllbnRbb3Bwb3NpdGVdLFxuICAgICAgICBgY2xpZW50LiR7b3Bwb3NpdGV9IGlzIGNvb3Jkcy5zdGFydCB2YWx1ZWBcbiAgICAgIClcbiAgICAgIHR0LmVxdWFsKFxuICAgICAgICBpRXZlbnQuY2xpZW50W2F4aXNdLFxuICAgICAgICBldmVudENvb3Jkcy5jbGllbnRbYXhpc10sXG4gICAgICAgIGBjbGllbnQuJHtheGlzfSBpcyBub3QgbW9kaWZpZWRgXG4gICAgICApXG5cbiAgICAgIHR0LmVuZCgpXG4gICAgfSlcbiAgfVxuXG4gIHQuZW5kKClcblxuICBmdW5jdGlvbiByZXNldENvb3JkcyAoKSB7XG4gICAgcG9pbnRlclV0aWxzLmNvcHlDb29yZHMoaUV2ZW50LCBldmVudENvb3JkcylcbiAgICBleHRlbmQoaUV2ZW50LmRlbHRhLCBldmVudENvb3Jkcy5kZWx0YSlcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBjb29yZHMpIHtcbiAgICAgIHBvaW50ZXJVdGlscy5jb3B5Q29vcmRzKGludGVyYWN0aW9uLmNvb3Jkc1twcm9wXSwgY29vcmRzW3Byb3BdKVxuICAgIH1cbiAgfVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/actions/drop/DropEvent.d.ts b/packages/actions/drop/DropEvent.d.ts index 1816fc271..42fd5e576 100644 --- a/packages/actions/drop/DropEvent.d.ts +++ b/packages/actions/drop/DropEvent.d.ts @@ -1,8 +1,8 @@ -import BaseEvent from '@interactjs/core/BaseEvent'; -import Interactable from '@interactjs/core/Interactable'; -import InteractEvent from '@interactjs/core/InteractEvent'; -import Interaction from '@interactjs/core/Interaction'; -import { ActionName } from '@interactjs/core/scope'; +import BaseEvent from '../../core/BaseEvent'; +import Interactable from '../../core/Interactable'; +import InteractEvent from '../../core/InteractEvent'; +import Interaction from '../../core/Interaction'; +import { ActionName } from '../../core/scope'; declare class DropEvent extends BaseEvent { target: Interact.Element; dropzone: Interactable; diff --git a/packages/actions/drop/DropEvent.js b/packages/actions/drop/DropEvent.js index f72dbf7c1..35e4267f2 100644 --- a/packages/actions/drop/DropEvent.js +++ b/packages/actions/drop/DropEvent.js @@ -1,67 +1,95 @@ -import BaseEvent from '@interactjs/core/BaseEvent'; -import * as arr from '@interactjs/utils/arr'; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import BaseEvent from "../../core/BaseEvent.js"; +import * as arr from "../../utils/arr.js"; + class DropEvent extends BaseEvent { - /** - * Class of events fired on dropzones during drags with acceptable targets. - */ - constructor(dropState, dragEvent, type) { - super(dragEvent._interaction); - this.propagationStopped = false; - this.immediatePropagationStopped = false; - const { element, dropzone } = type === 'dragleave' - ? dropState.prev - : dropState.cur; - this.type = type; - this.target = element; - this.currentTarget = element; - this.dropzone = dropzone; - this.dragEvent = dragEvent; - this.relatedTarget = dragEvent.target; - this.draggable = dragEvent.interactable; - this.timeStamp = dragEvent.timeStamp; + /** + * Class of events fired on dropzones during drags with acceptable targets. + */ + constructor(dropState, dragEvent, type) { + super(dragEvent._interaction); + + _defineProperty(this, "target", void 0); + + _defineProperty(this, "dropzone", void 0); + + _defineProperty(this, "dragEvent", void 0); + + _defineProperty(this, "relatedTarget", void 0); + + _defineProperty(this, "draggable", void 0); + + _defineProperty(this, "timeStamp", void 0); + + _defineProperty(this, "propagationStopped", false); + + _defineProperty(this, "immediatePropagationStopped", false); + + const { + element, + dropzone + } = type === 'dragleave' ? dropState.prev : dropState.cur; + this.type = type; + this.target = element; + this.currentTarget = element; + this.dropzone = dropzone; + this.dragEvent = dragEvent; + this.relatedTarget = dragEvent.target; + this.draggable = dragEvent.interactable; + this.timeStamp = dragEvent.timeStamp; + } + /** + * If this is a `dropactivate` event, the dropzone element will be + * deactivated. + * + * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the + * dropzone element and more. + */ + + + reject() { + const { + dropState + } = this._interaction; + + if (this.type !== 'dropactivate' && (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)) { + return; } - /** - * If this is a `dropactivate` event, the dropzone element will be - * deactivated. - * - * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the - * dropzone element and more. - */ - reject() { - const { dropState } = this._interaction; - if ((this.type !== 'dropactivate') && (!this.dropzone || - dropState.cur.dropzone !== this.dropzone || - dropState.cur.element !== this.target)) { - return; - } - dropState.prev.dropzone = this.dropzone; - dropState.prev.element = this.target; - dropState.rejected = true; - dropState.events.enter = null; - this.stopImmediatePropagation(); - if (this.type === 'dropactivate') { - const activeDrops = dropState.activeDrops; - const index = arr.findIndex(activeDrops, ({ dropzone, element }) => dropzone === this.dropzone && element === this.target); - dropState.activeDrops = [ - ...activeDrops.slice(0, index), - ...activeDrops.slice(index + 1), - ]; - const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate'); - deactivateEvent.dropzone = this.dropzone; - deactivateEvent.target = this.target; - this.dropzone.fire(deactivateEvent); - } - else { - this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave')); - } - } - preventDefault() { } - stopPropagation() { - this.propagationStopped = true; - } - stopImmediatePropagation() { - this.immediatePropagationStopped = this.propagationStopped = true; + + dropState.prev.dropzone = this.dropzone; + dropState.prev.element = this.target; + dropState.rejected = true; + dropState.events.enter = null; + this.stopImmediatePropagation(); + + if (this.type === 'dropactivate') { + const activeDrops = dropState.activeDrops; + const index = arr.findIndex(activeDrops, ({ + dropzone, + element + }) => dropzone === this.dropzone && element === this.target); + dropState.activeDrops = [...activeDrops.slice(0, index), ...activeDrops.slice(index + 1)]; + const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate'); + deactivateEvent.dropzone = this.dropzone; + deactivateEvent.target = this.target; + this.dropzone.fire(deactivateEvent); + } else { + this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave')); } + } + + preventDefault() {} + + stopPropagation() { + this.propagationStopped = true; + } + + stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } + } + export default DropEvent; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHJvcEV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRHJvcEV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBUyxNQUFNLDRCQUE0QixDQUFBO0FBS2xELE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFFNUMsTUFBTSxTQUFVLFNBQVEsU0FBUztJQVUvQjs7T0FFRztJQUNILFlBQWEsU0FBbUMsRUFBRSxTQUF3QixFQUFFLElBQVk7UUFDdEYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQVAvQix1QkFBa0IsR0FBRyxLQUFLLENBQUE7UUFDMUIsZ0NBQTJCLEdBQUcsS0FBSyxDQUFBO1FBUWpDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxLQUFLLFdBQVc7WUFDaEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQ2hCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFBO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQVksSUFBSSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQVUsT0FBTyxDQUFBO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQVEsUUFBUSxDQUFBO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQU8sU0FBUyxDQUFBO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQTtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUE7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBTyxTQUFTLENBQUMsU0FBUyxDQUFBO0lBQzFDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNO1FBQ0osTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFFdkMsSUFDRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLElBQUksQ0FDaEMsQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNkLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQ3hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQyxPQUFNO1NBQ1A7UUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFFcEMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDekIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBRTdCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1FBRS9CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDaEMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQTtZQUN6QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FDakUsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUV4RCxTQUFTLENBQUMsV0FBVyxHQUFHO2dCQUN0QixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDOUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7YUFDaEMsQ0FBQTtZQUVELE1BQU0sZUFBZSxHQUFHLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUE7WUFFbEYsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1lBQ3hDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtZQUVwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtTQUNwQzthQUNJO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtTQUMxRTtJQUNILENBQUM7SUFFRCxjQUFjLEtBQUssQ0FBQztJQUVwQixlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtJQUNoQyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0lBQ25FLENBQUM7Q0FDRjtBQUVELGVBQWUsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VFdmVudCBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0Jhc2VFdmVudCdcbmltcG9ydCBJbnRlcmFjdGFibGUgZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnXG5pbXBvcnQgSW50ZXJhY3RFdmVudCBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgSW50ZXJhY3Rpb24gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCB7IEFjdGlvbk5hbWUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgYXJyIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2FycidcblxuY2xhc3MgRHJvcEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdGFyZ2V0OiBJbnRlcmFjdC5FbGVtZW50XG4gIGRyb3B6b25lOiBJbnRlcmFjdGFibGVcbiAgZHJhZ0V2ZW50OiBJbnRlcmFjdEV2ZW50PEFjdGlvbk5hbWUuRHJhZz5cbiAgcmVsYXRlZFRhcmdldDogSW50ZXJhY3QuRWxlbWVudFxuICBkcmFnZ2FibGU6IEludGVyYWN0YWJsZVxuICB0aW1lU3RhbXA6IG51bWJlclxuICBwcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZVxuICBpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBDbGFzcyBvZiBldmVudHMgZmlyZWQgb24gZHJvcHpvbmVzIGR1cmluZyBkcmFncyB3aXRoIGFjY2VwdGFibGUgdGFyZ2V0cy5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChkcm9wU3RhdGU6IEludGVyYWN0aW9uWydkcm9wU3RhdGUnXSwgZHJhZ0V2ZW50OiBJbnRlcmFjdEV2ZW50LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihkcmFnRXZlbnQuX2ludGVyYWN0aW9uKVxuXG4gICAgY29uc3QgeyBlbGVtZW50LCBkcm9wem9uZSB9ID0gdHlwZSA9PT0gJ2RyYWdsZWF2ZSdcbiAgICAgID8gZHJvcFN0YXRlLnByZXZcbiAgICAgIDogZHJvcFN0YXRlLmN1clxuXG4gICAgdGhpcy50eXBlICAgICAgICAgID0gdHlwZVxuICAgIHRoaXMudGFyZ2V0ICAgICAgICA9IGVsZW1lbnRcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBlbGVtZW50XG4gICAgdGhpcy5kcm9wem9uZSAgICAgID0gZHJvcHpvbmVcbiAgICB0aGlzLmRyYWdFdmVudCAgICAgPSBkcmFnRXZlbnRcbiAgICB0aGlzLnJlbGF0ZWRUYXJnZXQgPSBkcmFnRXZlbnQudGFyZ2V0XG4gICAgdGhpcy5kcmFnZ2FibGUgICAgID0gZHJhZ0V2ZW50LmludGVyYWN0YWJsZVxuICAgIHRoaXMudGltZVN0YW1wICAgICA9IGRyYWdFdmVudC50aW1lU3RhbXBcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIGEgYGRyb3BhY3RpdmF0ZWAgZXZlbnQsIHRoZSBkcm9wem9uZSBlbGVtZW50IHdpbGwgYmVcbiAgICogZGVhY3RpdmF0ZWQuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYSBgZHJhZ21vdmVgIG9yIGBkcmFnZW50ZXJgLCBhIGBkcmFnbGVhdmVgIHdpbGwgYmUgZmlyZWQgb24gdGhlXG4gICAqIGRyb3B6b25lIGVsZW1lbnQgYW5kIG1vcmUuXG4gICAqL1xuICByZWplY3QgKCkge1xuICAgIGNvbnN0IHsgZHJvcFN0YXRlIH0gPSB0aGlzLl9pbnRlcmFjdGlvblxuXG4gICAgaWYgKFxuICAgICAgKHRoaXMudHlwZSAhPT0gJ2Ryb3BhY3RpdmF0ZScpICYmIChcbiAgICAgICAgIXRoaXMuZHJvcHpvbmUgfHxcbiAgICAgICAgZHJvcFN0YXRlLmN1ci5kcm9wem9uZSAhPT0gdGhpcy5kcm9wem9uZSB8fFxuICAgICAgICBkcm9wU3RhdGUuY3VyLmVsZW1lbnQgIT09IHRoaXMudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZHJvcFN0YXRlLnByZXYuZHJvcHpvbmUgPSB0aGlzLmRyb3B6b25lXG4gICAgZHJvcFN0YXRlLnByZXYuZWxlbWVudCA9IHRoaXMudGFyZ2V0XG5cbiAgICBkcm9wU3RhdGUucmVqZWN0ZWQgPSB0cnVlXG4gICAgZHJvcFN0YXRlLmV2ZW50cy5lbnRlciA9IG51bGxcblxuICAgIHRoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdkcm9wYWN0aXZhdGUnKSB7XG4gICAgICBjb25zdCBhY3RpdmVEcm9wcyA9IGRyb3BTdGF0ZS5hY3RpdmVEcm9wc1xuICAgICAgY29uc3QgaW5kZXggPSBhcnIuZmluZEluZGV4KGFjdGl2ZURyb3BzLCAoeyBkcm9wem9uZSwgZWxlbWVudCB9KSA9PlxuICAgICAgICBkcm9wem9uZSA9PT0gdGhpcy5kcm9wem9uZSAmJiBlbGVtZW50ID09PSB0aGlzLnRhcmdldClcblxuICAgICAgZHJvcFN0YXRlLmFjdGl2ZURyb3BzID0gW1xuICAgICAgICAuLi5hY3RpdmVEcm9wcy5zbGljZSgwLCBpbmRleCksXG4gICAgICAgIC4uLmFjdGl2ZURyb3BzLnNsaWNlKGluZGV4ICsgMSksXG4gICAgICBdXG5cbiAgICAgIGNvbnN0IGRlYWN0aXZhdGVFdmVudCA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXRlLCB0aGlzLmRyYWdFdmVudCwgJ2Ryb3BkZWFjdGl2YXRlJylcblxuICAgICAgZGVhY3RpdmF0ZUV2ZW50LmRyb3B6b25lID0gdGhpcy5kcm9wem9uZVxuICAgICAgZGVhY3RpdmF0ZUV2ZW50LnRhcmdldCA9IHRoaXMudGFyZ2V0XG5cbiAgICAgIHRoaXMuZHJvcHpvbmUuZmlyZShkZWFjdGl2YXRlRXZlbnQpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kcm9wem9uZS5maXJlKG5ldyBEcm9wRXZlbnQoZHJvcFN0YXRlLCB0aGlzLmRyYWdFdmVudCwgJ2RyYWdsZWF2ZScpKVxuICAgIH1cbiAgfVxuXG4gIHByZXZlbnREZWZhdWx0ICgpIHt9XG5cbiAgc3RvcFByb3BhZ2F0aW9uICgpIHtcbiAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWVcbiAgfVxuXG4gIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAoKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wRXZlbnRcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=DropEvent.js.map \ No newline at end of file diff --git a/packages/actions/drop/DropEvent.js.map b/packages/actions/drop/DropEvent.js.map index 2c55cf9f6..0c101e65b 100644 --- a/packages/actions/drop/DropEvent.js.map +++ b/packages/actions/drop/DropEvent.js.map @@ -1 +1,45 @@ -{"version":3,"file":"DropEvent.js","sourceRoot":"","sources":["DropEvent.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "DropEvent.ts" + ], + "names": [ + "BaseEvent", + "arr", + "DropEvent", + "constructor", + "dropState", + "dragEvent", + "type", + "_interaction", + "element", + "dropzone", + "prev", + "cur", + "target", + "currentTarget", + "relatedTarget", + "draggable", + "interactable", + "timeStamp", + "reject", + "rejected", + "events", + "enter", + "stopImmediatePropagation", + "activeDrops", + "index", + "findIndex", + "slice", + "deactivateEvent", + "fire", + "preventDefault", + "stopPropagation", + "propagationStopped", + "immediatePropagationStopped" + ], + "mappings": "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", + "sourcesContent": [ + "import BaseEvent from '../../core/BaseEvent'\nimport Interactable from '../../core/Interactable'\nimport InteractEvent from '../../core/InteractEvent'\nimport Interaction from '../../core/Interaction'\nimport { ActionName } from '../../core/scope'\nimport * as arr from '../../utils/arr'\n\nclass DropEvent extends BaseEvent {\n target: Interact.Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Interact.Element\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: Interaction['dropState'], dragEvent: InteractEvent, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave'\n ? dropState.prev\n : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject () {\n const { dropState } = this._interaction\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropState.cur.dropzone !== this.dropzone ||\n dropState.cur.element !== this.target)) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target)\n\n dropState.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ]\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n }\n else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default DropEvent\n" + ] +} \ No newline at end of file diff --git a/packages/actions/drop/DropEvent.spec.js b/packages/actions/drop/DropEvent.spec.js deleted file mode 100644 index 6000c666f..000000000 --- a/packages/actions/drop/DropEvent.spec.js +++ /dev/null @@ -1,85 +0,0 @@ -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 = { dropState: {} }; - const dragEvent = Object.freeze({ - interactable, - _interaction: interaction, - target: dragElement, - timeStamp: 10, - }); - utils.extend(interaction.dropState, { - 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.dropState, dragEvent, 'dropmove'); - t.equal(dropmove.target, el1, 'dropmove uses dropState.cur.element'); - t.equal(dropmove.dropzone, dz1, 'dropmove uses dropState.cur.dropzone'); - t.equal(dropmove.relatedTarget, dragElement); - const dragleave = new DropEvent(interaction.dropState, dragEvent, 'dragleave'); - t.equal(dragleave.target, el2, 'dropmove uses dropState.prev.element'); - t.equal(dragleave.dropzone, dz2, 'dropmove uses dropState.prev.dropzone'); - t.equal(dragleave.relatedTarget, dragElement); - t.end(); -}); -test('DropEvent.reject()', t => { - const interaction = { dropState: {} }; - const dragEvent = Object.freeze({ - interactable, - _interaction: interaction, - target: dragElement, - timeStamp: 10, - }); - utils.extend(interaction.dropState, { - 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.dropState, 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.dropState.activeDrops, [{ dropzone: dz2, element: el2 }], 'activeDrop of rejected dropactivate event is removed'); - t.deepEqual(interaction.dropState.cur, { dropzone: null, element: null }, 'dropState.cur dropzone and element are set to null after rejecting dropactivate'); - utils.extend(interaction.dropState, { - cur: { dropzone: dz1, element: el1 }, - prev: { dropzone: null, element: null }, - events: {}, - }); - const dropmove = new DropEvent(interaction.dropState, dragEvent, 'dropmove'); - dropmove.reject(); - t.deepEqual(interaction.dropState.cur, { dropzone: dz1, element: el1 }, 'dropState.cur remains the same after rejecting non activate event'); - t.ok(interaction.dropState.rejected, 'dropState.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHJvcEV2ZW50LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJEcm9wRXZlbnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUU3QyxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFBO0FBRXpDLE1BQU0sR0FBRyxHQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDdkUsTUFBTSxHQUFHLEdBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUN2RSxNQUFNLEdBQUcsR0FBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDOUIsTUFBTSxHQUFHLEdBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzlCLE1BQU0sWUFBWSxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNoRCxNQUFNLFdBQVcsR0FBUSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFMUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2hDLE1BQU0sV0FBVyxHQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFBO0lBQzFDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDOUIsWUFBWTtRQUNaLFlBQVksRUFBRSxXQUFXO1FBQ3pCLE1BQU0sRUFBRSxXQUFXO1FBQ25CLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBa0IsQ0FBQTtJQUVuQixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7UUFDbEMsV0FBVyxFQUFFO1lBQ1gsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDL0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7U0FDaEM7UUFDRCxHQUFHLEVBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDckMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sRUFBRSxFQUFFO0tBQ1gsQ0FBQyxDQUFBO0lBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFNUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFBO0lBQ3BFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsc0NBQXNDLENBQUMsQ0FBQTtJQUN2RSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFFNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFFOUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFBO0lBQ3RFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLENBQUMsQ0FBQTtJQUN6RSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFFN0MsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDN0IsTUFBTSxXQUFXLEdBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5QixZQUFZO1FBQ1osWUFBWSxFQUFFLFdBQVc7UUFDekIsTUFBTSxFQUFFLFdBQVc7UUFDbkIsU0FBUyxFQUFFLEVBQUU7S0FDZCxDQUFrQixDQUFBO0lBRW5CLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtRQUNsQyxXQUFXLEVBQUU7WUFDWCxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUMvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtTQUNoQztRQUNELEdBQUcsRUFBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtRQUN2QyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDdkMsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDLENBQUE7SUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUVwRixZQUFZLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQTtJQUMzQixZQUFZLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQTtJQUN6QixZQUFZLENBQUMsTUFBTSxFQUFFLENBQUE7SUFFckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLElBQUksWUFBWSxDQUFDLDJCQUEyQixFQUM5RSx1Q0FBdUMsQ0FBQyxDQUFBO0lBRTFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsOENBQThDLENBQUMsQ0FBQTtJQUV6RixDQUFDLENBQUMsU0FBUyxDQUNULFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUNqQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFDakMsc0RBQXNELENBQUMsQ0FBQTtJQUV6RCxDQUFDLENBQUMsU0FBUyxDQUNULFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUN6QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUNqQyxpRkFBaUYsQ0FBQyxDQUFBO0lBRXBGLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtRQUNsQyxHQUFHLEVBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDckMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1FBQ3ZDLE1BQU0sRUFBRSxFQUFFO0tBQ1gsQ0FBQyxDQUFBO0lBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFNUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBRWpCLENBQUMsQ0FBQyxTQUFTLENBQ1QsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQ3pCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQy9CLG1FQUFtRSxDQUFDLENBQUE7SUFFdEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSw2QkFBNkIsQ0FBQyxDQUFBO0lBRW5FLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLHlDQUF5QyxDQUFDLENBQUE7SUFFL0UsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFTLEVBQUUsRUFBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRTFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGtCQUFrQixJQUFJLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBRTlFLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtJQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFFOUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtJQUVwQyxTQUFTLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtJQUNwQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsSUFBSSxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtJQUUzRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IEludGVyYWN0RXZlbnQgZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdEV2ZW50J1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgRHJvcEV2ZW50IGZyb20gJy4uL2Ryb3AvRHJvcEV2ZW50J1xuXG5jb25zdCBkejE6IGFueSA9IHsgdGFyZ2V0OiAnZHoxJywgZmlyZSAoZXZlbnQpIHsgdGhpcy5maXJlZCA9IGV2ZW50IH0gfVxuY29uc3QgZHoyOiBhbnkgPSB7IHRhcmdldDogJ2R6MicsIGZpcmUgKGV2ZW50KSB7IHRoaXMuZmlyZWQgPSBldmVudCB9IH1cbmNvbnN0IGVsMTogYW55ID0gU3ltYm9sKCdlbDEnKVxuY29uc3QgZWwyOiBhbnkgPSBTeW1ib2woJ2VsMicpXG5jb25zdCBpbnRlcmFjdGFibGU6IGFueSA9IFN5bWJvbCgnaW50ZXJhY3RhYmxlJylcbmNvbnN0IGRyYWdFbGVtZW50OiBhbnkgPSBTeW1ib2woJ2RyYWctZWwnKVxuXG50ZXN0KCdEcm9wRXZlbnQgY29uc3RydWN0b3InLCB0ID0+IHtcbiAgY29uc3QgaW50ZXJhY3Rpb246IGFueSA9IHsgZHJvcFN0YXRlOiB7fSB9XG4gIGNvbnN0IGRyYWdFdmVudCA9IE9iamVjdC5mcmVlemUoe1xuICAgIGludGVyYWN0YWJsZSxcbiAgICBfaW50ZXJhY3Rpb246IGludGVyYWN0aW9uLFxuICAgIHRhcmdldDogZHJhZ0VsZW1lbnQsXG4gICAgdGltZVN0YW1wOiAxMCxcbiAgfSkgYXMgSW50ZXJhY3RFdmVudFxuXG4gIHV0aWxzLmV4dGVuZChpbnRlcmFjdGlvbi5kcm9wU3RhdGUsIHtcbiAgICBhY3RpdmVEcm9wczogW1xuICAgICAgeyBkcm9wem9uZTogZHoxLCBlbGVtZW50OiBlbDEgfSxcbiAgICAgIHsgZHJvcHpvbmU6IGR6MiwgZWxlbWVudDogZWwyIH0sXG4gICAgXSxcbiAgICBjdXIgOiB7IGRyb3B6b25lOiBkejEsIGVsZW1lbnQ6IGVsMSB9LFxuICAgIHByZXY6IHsgZHJvcHpvbmU6IGR6MiwgZWxlbWVudDogZWwyIH0sXG4gICAgZXZlbnRzOiB7fSxcbiAgfSlcblxuICBjb25zdCBkcm9wbW92ZSA9IG5ldyBEcm9wRXZlbnQoaW50ZXJhY3Rpb24uZHJvcFN0YXRlLCBkcmFnRXZlbnQsICdkcm9wbW92ZScpXG5cbiAgdC5lcXVhbChkcm9wbW92ZS50YXJnZXQsIGVsMSwgJ2Ryb3Btb3ZlIHVzZXMgZHJvcFN0YXRlLmN1ci5lbGVtZW50JylcbiAgdC5lcXVhbChkcm9wbW92ZS5kcm9wem9uZSwgZHoxLCAnZHJvcG1vdmUgdXNlcyBkcm9wU3RhdGUuY3VyLmRyb3B6b25lJylcbiAgdC5lcXVhbChkcm9wbW92ZS5yZWxhdGVkVGFyZ2V0LCBkcmFnRWxlbWVudClcblxuICBjb25zdCBkcmFnbGVhdmUgPSBuZXcgRHJvcEV2ZW50KGludGVyYWN0aW9uLmRyb3BTdGF0ZSwgZHJhZ0V2ZW50LCAnZHJhZ2xlYXZlJylcblxuICB0LmVxdWFsKGRyYWdsZWF2ZS50YXJnZXQsIGVsMiwgJ2Ryb3Btb3ZlIHVzZXMgZHJvcFN0YXRlLnByZXYuZWxlbWVudCcpXG4gIHQuZXF1YWwoZHJhZ2xlYXZlLmRyb3B6b25lLCBkejIsICdkcm9wbW92ZSB1c2VzIGRyb3BTdGF0ZS5wcmV2LmRyb3B6b25lJylcbiAgdC5lcXVhbChkcmFnbGVhdmUucmVsYXRlZFRhcmdldCwgZHJhZ0VsZW1lbnQpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnRHJvcEV2ZW50LnJlamVjdCgpJywgdCA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uOiBhbnkgPSB7IGRyb3BTdGF0ZToge30gfVxuICBjb25zdCBkcmFnRXZlbnQgPSBPYmplY3QuZnJlZXplKHtcbiAgICBpbnRlcmFjdGFibGUsXG4gICAgX2ludGVyYWN0aW9uOiBpbnRlcmFjdGlvbixcbiAgICB0YXJnZXQ6IGRyYWdFbGVtZW50LFxuICAgIHRpbWVTdGFtcDogMTAsXG4gIH0pIGFzIEludGVyYWN0RXZlbnRcblxuICB1dGlscy5leHRlbmQoaW50ZXJhY3Rpb24uZHJvcFN0YXRlLCB7XG4gICAgYWN0aXZlRHJvcHM6IFtcbiAgICAgIHsgZHJvcHpvbmU6IGR6MSwgZWxlbWVudDogZWwxIH0sXG4gICAgICB7IGRyb3B6b25lOiBkejIsIGVsZW1lbnQ6IGVsMiB9LFxuICAgIF0sXG4gICAgY3VyIDogeyBkcm9wem9uZTogbnVsbCwgZWxlbWVudDogbnVsbCB9LFxuICAgIHByZXY6IHsgZHJvcHpvbmU6IG51bGwsIGVsZW1lbnQ6IG51bGwgfSxcbiAgICBldmVudHM6IHt9LFxuICB9KVxuXG4gIGNvbnN0IGRyb3BhY3RpdmF0ZSA9IG5ldyBEcm9wRXZlbnQoaW50ZXJhY3Rpb24uZHJvcFN0YXRlLCBkcmFnRXZlbnQsICdkcm9wYWN0aXZhdGUnKVxuXG4gIGRyb3BhY3RpdmF0ZS5kcm9wem9uZSA9IGR6MVxuICBkcm9wYWN0aXZhdGUudGFyZ2V0ID0gZWwxXG4gIGRyb3BhY3RpdmF0ZS5yZWplY3QoKVxuXG4gIHQub2soZHJvcGFjdGl2YXRlLnByb3BhZ2F0aW9uU3RvcHBlZCAmJiBkcm9wYWN0aXZhdGUuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkLFxuICAgICdyZWplY3RlZCBldmVudCBwcm9wYWdhdGlvbiBpcyBzdG9wcGVkJylcblxuICB0LmVxdWFsKGR6MS5maXJlZC50eXBlLCAnZHJvcGRlYWN0aXZhdGUnLCAnZHJvcGRlYWN0aXZhdGUgaXMgZmlyZWQgb24gcmVqZWN0ZWQgZHJvcHpvbmUnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmRyb3BTdGF0ZS5hY3RpdmVEcm9wcyxcbiAgICBbeyBkcm9wem9uZTogZHoyLCBlbGVtZW50OiBlbDIgfV0sXG4gICAgJ2FjdGl2ZURyb3Agb2YgcmVqZWN0ZWQgZHJvcGFjdGl2YXRlIGV2ZW50IGlzIHJlbW92ZWQnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmRyb3BTdGF0ZS5jdXIsXG4gICAgeyBkcm9wem9uZTogbnVsbCwgZWxlbWVudDogbnVsbCB9LFxuICAgICdkcm9wU3RhdGUuY3VyIGRyb3B6b25lIGFuZCBlbGVtZW50IGFyZSBzZXQgdG8gbnVsbCBhZnRlciByZWplY3RpbmcgZHJvcGFjdGl2YXRlJylcblxuICB1dGlscy5leHRlbmQoaW50ZXJhY3Rpb24uZHJvcFN0YXRlLCB7XG4gICAgY3VyIDogeyBkcm9wem9uZTogZHoxLCBlbGVtZW50OiBlbDEgfSxcbiAgICBwcmV2OiB7IGRyb3B6b25lOiBudWxsLCBlbGVtZW50OiBudWxsIH0sXG4gICAgZXZlbnRzOiB7fSxcbiAgfSlcblxuICBjb25zdCBkcm9wbW92ZSA9IG5ldyBEcm9wRXZlbnQoaW50ZXJhY3Rpb24uZHJvcFN0YXRlLCBkcmFnRXZlbnQsICdkcm9wbW92ZScpXG5cbiAgZHJvcG1vdmUucmVqZWN0KClcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5kcm9wU3RhdGUuY3VyLFxuICAgIHsgZHJvcHpvbmU6IGR6MSwgZWxlbWVudDogZWwxIH0sXG4gICAgJ2Ryb3BTdGF0ZS5jdXIgcmVtYWlucyB0aGUgc2FtZSBhZnRlciByZWplY3Rpbmcgbm9uIGFjdGl2YXRlIGV2ZW50JylcblxuICB0Lm9rKGludGVyYWN0aW9uLmRyb3BTdGF0ZS5yZWplY3RlZCwgJ2Ryb3BTdGF0ZS5yZWplY3RlZCA9PT0gdHJ1ZScpXG5cbiAgdC5lcXVhbChkejEuZmlyZWQudHlwZSwgJ2RyYWdsZWF2ZScsICdkcmFnbGVhdmUgaXMgZmlyZWQgb24gcmVqZWN0ZWQgZHJvcHpvbmUnKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0Ryb3BFdmVudC5zdG9wW0ltbWVkaWF0ZV1Qcm9wYWdhdGlvbigpJywgdCA9PiB7XG4gIGNvbnN0IGRyb3BFdmVudCA9IG5ldyBEcm9wRXZlbnQoeyBjdXI6IHt9IH0gYXMgYW55LCB7fSBhcyBhbnksICdkcmFnbW92ZScpXG5cbiAgdC5ub3RPayhkcm9wRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkIHx8IGRyb3BFdmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpXG5cbiAgZHJvcEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIHQub2soZHJvcEV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZClcbiAgdC5ub3RPayhkcm9wRXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKVxuXG4gIGRyb3BFdmVudC5wcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZVxuXG4gIGRyb3BFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICB0Lm9rKGRyb3BFdmVudC5wcm9wYWdhdGlvblN0b3BwZWQgJiYgZHJvcEV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZClcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/actions/drop/drop.spec.js b/packages/actions/drop/drop.spec.js deleted file mode 100644 index 38189120e..000000000 --- a/packages/actions/drop/drop.spec.js +++ /dev/null @@ -1,56 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import pointerUtils from '@interactjs/utils/pointerUtils'; -import drag from '../drag'; -import drop from '../drop'; -test('actions/drop options', t => { - const scope = helpers.mockScope(); - scope.interact = {}; - scope.usePlugin(drop); - const interactable = scope.interactables.new({ pointerType: '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(); -}); -test('actions/drop start', t => { - const scope = helpers.mockScope(); - scope.interact = {}; - scope.usePlugin(drag); - scope.usePlugin(drop); - let interaction; - const draggable = scope.interactables.new(scope.document.body).draggable({}); - const event = pointerUtils.coordsToEvent(pointerUtils.newCoords()); - t.doesNotThrow(() => { - scope.interact.dynamicDrop(false); - interaction = scope.interactions.new({}); - interaction.pointerDown(event, event, scope.document.body); - interaction.start({ name: 'drag' }, draggable, scope.document.documentElement); - interaction.move(); - interaction.end(); - }, 'no error with dynamicDrop === false'); - t.doesNotThrow(() => { - interaction = scope.interactions.new({}); - scope.interact.dynamicDrop(true); - interaction.pointerDown(event, event, scope.document.body); - interaction.start({ name: 'drag' }, draggable, scope.document.documentElement); - interaction.move(); - interaction.end(); - }, 'no error with dynamicDrop === true'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJvcC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxZQUFZLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxJQUFJLE1BQU0sU0FBUyxDQUFBO0FBQzFCLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQTtBQUUxQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ2pDLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ25CLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFckIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUVyRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDO1FBQ1YsUUFBUSxLQUFLLENBQUM7UUFDZCxVQUFVLEtBQUssQ0FBQztRQUNoQixRQUFRLEtBQUssQ0FBQztRQUNkLFNBQVMsS0FBSyxDQUFDO1FBQ2YsU0FBUyxLQUFLLENBQUM7S0FDaEIsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUNwQixTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDbkIsQ0FBQyxDQUFBO0lBRUYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RELENBQUMsQ0FBQyxLQUFLLENBQUMs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QW9DLENBQUMsQ0FBQTtJQUV4QyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0IHBvaW50ZXJVdGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9wb2ludGVyVXRpbHMnXG5pbXBvcnQgZHJhZyBmcm9tICcuLi9kcmFnJ1xuaW1wb3J0IGRyb3AgZnJvbSAnLi4vZHJvcCdcblxudGVzdCgnYWN0aW9ucy9kcm9wIG9wdGlvbnMnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG4gIHNjb3BlLmludGVyYWN0ID0ge31cbiAgc2NvcGUudXNlUGx1Z2luKGRyb3ApXG5cbiAgY29uc3QgaW50ZXJhY3RhYmxlID0gc2NvcGUuaW50ZXJhY3RhYmxlcy5uZXcoeyBwb2ludGVyVHlwZTogJ3Rlc3QnIH0pXG5cbiAgY29uc3QgZnVuY3MgPSBPYmplY3QuZnJlZXplKHtcbiAgICBkcm9wICgpIHt9LFxuICAgIGFjdGl2YXRlICgpIHt9LFxuICAgIGRlYWN0aXZhdGUgKCkge30sXG4gICAgZHJvcG1vdmUgKCkge30sXG4gICAgZHJhZ2VudGVyICgpIHt9LFxuICAgIGRyYWdsZWF2ZSAoKSB7fSxcbiAgfSlcblxuICBpbnRlcmFjdGFibGUuZHJvcHpvbmUoe1xuICAgIGxpc3RlbmVyczogW2Z1bmNzXSxcbiAgfSlcblxuICB0LmVxdWFsKGludGVyYWN0YWJsZS5ldmVudHMudHlwZXMuZHJvcFswXSwgZnVuY3MuZHJvcClcbiAgdC5lcXVhbChpbnRlcmFjdGFibGUuZXZlbnRzLnR5cGVzLmRyb3BhY3RpdmF0ZVswXSwgZnVuY3MuYWN0aXZhdGUpXG4gIHQuZXF1YWwoaW50ZXJhY3RhYmxlLmV2ZW50cy50eXBlcy5kcm9wZGVhY3RpdmF0ZVswXSwgZnVuY3MuZGVhY3RpdmF0ZSlcbiAgdC5lcXVhbChpbnRlcmFjdGFibGUuZXZlbnRzLnR5cGVzLmRyb3Btb3ZlWzBdLCBmdW5jcy5kcm9wbW92ZSlcbiAgdC5lcXVhbChpbnRlcmFjdGFibGUuZXZlbnRzLnR5cGVzLmRyYWdlbnRlclswXSwgZnVuY3MuZHJhZ2VudGVyKVxuICB0LmVxdWFsKGludGVyYWN0YWJsZS5ldmVudHMudHlwZXMuZHJhZ2xlYXZlWzBdLCBmdW5jcy5kcmFnbGVhdmUpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnYWN0aW9ucy9kcm9wIHN0YXJ0JywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlOiBJbnRlcmFjdC5TY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcbiAgc2NvcGUuaW50ZXJhY3QgPSB7fSBhcyBhbnlcbiAgc2NvcGUudXNlUGx1Z2luKGRyYWcpXG4gIHNjb3BlLnVzZVBsdWdpbihkcm9wKVxuXG4gIGxldCBpbnRlcmFjdGlvblxuICBjb25zdCBkcmFnZ2FibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLm5ldyhzY29wZS5kb2N1bWVudC5ib2R5KS5kcmFnZ2FibGUoe30pXG5cbiAgY29uc3QgZXZlbnQgPSBwb2ludGVyVXRpbHMuY29vcmRzVG9FdmVudChwb2ludGVyVXRpbHMubmV3Q29vcmRzKCkpXG5cbiAgdC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgIHNjb3BlLmludGVyYWN0LmR5bmFtaWNEcm9wKGZhbHNlKVxuXG4gICAgaW50ZXJhY3Rpb24gPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KVxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKGV2ZW50LCBldmVudCwgc2NvcGUuZG9jdW1lbnQuYm9keSlcbiAgICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdkcmFnJyB9LCBkcmFnZ2FibGUsIHNjb3BlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICBpbnRlcmFjdGlvbi5tb3ZlKClcbiAgICBpbnRlcmFjdGlvbi5lbmQoKVxuICB9LCAnbm8gZXJyb3Igd2l0aCBkeW5hbWljRHJvcCA9PT0gZmFsc2UnKVxuXG4gIHQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG4gICAgc2NvcGUuaW50ZXJhY3QuZHluYW1pY0Ryb3AodHJ1ZSlcbiAgICBpbnRlcmFjdGlvbi5wb2ludGVyRG93bihldmVudCwgZXZlbnQsIHNjb3BlLmRvY3VtZW50LmJvZHkpXG4gICAgaW50ZXJhY3Rpb24uc3RhcnQoeyBuYW1lOiAnZHJhZycgfSwgZHJhZ2dhYmxlLCBzY29wZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgaW50ZXJhY3Rpb24ubW92ZSgpXG4gICAgaW50ZXJhY3Rpb24uZW5kKClcbiAgfSwgJ25vIGVycm9yIHdpdGggZHluYW1pY0Ryb3AgPT09IHRydWUnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/actions/drop/index.d.ts b/packages/actions/drop/index.d.ts index 40606a375..605120673 100644 --- a/packages/actions/drop/index.d.ts +++ b/packages/actions/drop/index.d.ts @@ -1,6 +1,6 @@ -import Interactable from '@interactjs/core/Interactable'; -import InteractEvent from '@interactjs/core/InteractEvent'; -import { Scope } from '@interactjs/core/scope'; +import Interactable from '../../core/Interactable'; +import InteractEvent from '../../core/InteractEvent'; +import { Scope } from '../../core/scope'; export interface DropzoneMethod { (options: Interact.DropzoneOptions | boolean): Interact.Interactable; (): Interact.DropzoneOptions; @@ -63,9 +63,31 @@ declare function getDropEvents(interaction: Interact.Interaction, _pointerEvent: drop: any; }; declare function fireDropEvents(interaction: Interact.Interaction, events: any): void; +declare function onEventCreated({ interaction, iEvent, event }: Interact.DoPhaseArg, scope: any): void; declare const drop: { id: string; install: typeof install; + listeners: { + 'interactions:before-action-start': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:after-action-start': ({ interaction, event, iEvent: dragEvent }: { + interaction: any; + event: any; + iEvent: any; + }, scope: any) => void; + 'interactions:action-move': typeof onEventCreated; + 'interactions:action-end': typeof onEventCreated; + 'interactions:after-action-move': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:after-action-end': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:stop': ({ interaction }: { + interaction: any; + }) => void; + }; getActiveDrops: typeof getActiveDrops; getDrop: typeof getDrop; getDropEvents: typeof getDropEvents; diff --git a/packages/actions/drop/index.js b/packages/actions/drop/index.js index a86b0680d..544097766 100644 --- a/packages/actions/drop/index.js +++ b/packages/actions/drop/index.js @@ -1,425 +1,524 @@ -import * as utils from '@interactjs/utils'; -import drag from '../drag'; -import DropEvent from './DropEvent'; +import Interactable from "../../core/Interactable.js"; +import { Scope } from "../../core/scope.js"; +import * as utils from "../../utils/index.js"; +import drag from "../drag.js"; +import DropEvent from "./DropEvent.js"; + function install(scope) { - const { actions, + const { + actions, + /** @lends module:interact */ - interact, + interact, + /** @lends Interactable */ - Interactable, // eslint-disable-line no-shadow - interactions, defaults, } = scope; - scope.usePlugin(drag); - interactions.signals.on('before-action-start', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { - return; - } - interaction.dropState = { - cur: { - dropzone: null, - element: null, - }, - prev: { - dropzone: null, - element: null, - }, - rejected: null, - events: null, - activeDrops: null, - }; - }); - interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => { - if (interaction.prepared.name !== 'drag') { - return; - } - const { dropState } = interaction; - // reset active dropzones - dropState.activeDrops = null; - dropState.events = null; - dropState.activeDrops = getActiveDrops(scope, interaction.element); - dropState.events = getDropEvents(interaction, event, dragEvent); - if (dropState.events.activate) { - fireActivationEvents(dropState.activeDrops, dropState.events.activate); - } - }); - // FIXME proper signal types - interactions.signals.on('action-move', arg => onEventCreated(arg, scope)); - interactions.signals.on('action-end', arg => onEventCreated(arg, scope)); - interactions.signals.on('after-action-move', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { - return; - } - fireDropEvents(interaction, interaction.dropState.events); - interaction.dropState.events = {}; - }); - interactions.signals.on('after-action-end', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { - return; - } - fireDropEvents(interaction, interaction.dropState.events); - }); - interactions.signals.on('stop', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { - return; - } - const { dropState } = interaction; - if (dropState) { - dropState.activeDrops = null; - dropState.events = null; - dropState.cur.dropzone = null; - dropState.cur.element = null; - dropState.prev.dropzone = null; - dropState.prev.element = null; - dropState.rejected = false; - } - }); - /** - * - * ```js - * interact('.drop').dropzone({ - * accept: '.can-drop' || document.getElementById('single-drop'), - * overlap: 'pointer' || 'center' || zeroToOne - * } - * ``` - * - * Returns or sets whether draggables can be dropped onto this target to - * trigger drop events - * - * Dropzones can receive the following events: - * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends - * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone - * - `dragmove` when a draggable that has entered the dropzone is moved - * - `drop` when a draggable is dropped into this dropzone - * - * Use the `accept` option to allow only elements that match the given CSS - * selector or element. The value can be: - * - * - **an Element** - only that element can be dropped into this dropzone. - * - **a string**, - the element being dragged must match it as a CSS selector. - * - **`null`** - accept options is cleared - it accepts any element. - * - * Use the `overlap` option to set how drops are checked for. The allowed - * values are: - * - * - `'pointer'`, the pointer must be over the dropzone (default) - * - `'center'`, the draggable element's center must be over the dropzone - * - a number from 0-1 which is the `(intersection area) / (draggable area)`. - * e.g. `0.5` for drop to happen when half of the area of the draggable is - * over the dropzone - * - * Use the `checker` option to specify a function to check if a dragged element - * is over this Interactable. - * - * @param {boolean | object | null} [options] The new options to be set. - * @return {boolean | Interactable} The current setting or this Interactable - */ - Interactable.prototype.dropzone = function (options) { - return dropzoneMethod(this, options); - }; - /** - * ```js - * interact(target) - * .dropChecker(function(dragEvent, // related dragmove or dragend event - * event, // TouchEvent/PointerEvent/MouseEvent - * dropped, // bool result of the default checker - * dropzone, // dropzone Interactable - * dropElement, // dropzone elemnt - * draggable, // draggable Interactable - * draggableElement) {// draggable element - * - * return dropped && event.target.hasAttribute('allow-drop') - * } - * ``` - */ - Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) { - return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect); - }; - /** - * Returns or sets whether the dimensions of dropzone elements are calculated - * on every dragmove or only on dragstart for the default dropChecker - * - * @param {boolean} [newValue] True to check on each move. False to check only - * before start - * @return {boolean | interact} The current setting or interact - */ - interact.dynamicDrop = function (newValue) { - if (utils.is.bool(newValue)) { - // if (dragging && scope.dynamicDrop !== newValue && !newValue) { - // calcRects(dropzones) - // } - scope.dynamicDrop = newValue; - return interact; - } - return scope.dynamicDrop; - }; - utils.arr.merge(actions.eventTypes, [ - 'dragenter', - 'dragleave', - 'dropactivate', - 'dropdeactivate', - 'dropmove', - 'drop', - ]); - actions.methodDict.drop = 'dropzone'; - scope.dynamicDrop = false; - defaults.actions.drop = drop.defaults; -} -function collectDrops({ interactables }, draggableElement) { - const drops = []; - // collect all dropzones and their elements which qualify for a drop - for (const dropzone of interactables.list) { - if (!dropzone.options.drop.enabled) { - continue; - } - const accept = dropzone.options.drop.accept; - // test the draggable draggableElement against the dropzone's accept setting - if ((utils.is.element(accept) && accept !== draggableElement) || - (utils.is.string(accept) && - !utils.dom.matchesSelector(draggableElement, accept)) || - (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) { - continue; - } - // query for new elements if necessary - const dropElements = utils.is.string(dropzone.target) - ? dropzone._context.querySelectorAll(dropzone.target) - : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]; - for (const dropzoneElement of dropElements) { - if (dropzoneElement !== draggableElement) { - drops.push({ - dropzone, - element: dropzoneElement, - }); - } - } + Interactable, + // eslint-disable-line no-shadow + defaults + } = scope; + scope.usePlugin(drag); + /** + * + * ```js + * interact('.drop').dropzone({ + * accept: '.can-drop' || document.getElementById('single-drop'), + * overlap: 'pointer' || 'center' || zeroToOne + * } + * ``` + * + * Returns or sets whether draggables can be dropped onto this target to + * trigger drop events + * + * Dropzones can receive the following events: + * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends + * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone + * - `dragmove` when a draggable that has entered the dropzone is moved + * - `drop` when a draggable is dropped into this dropzone + * + * Use the `accept` option to allow only elements that match the given CSS + * selector or element. The value can be: + * + * - **an Element** - only that element can be dropped into this dropzone. + * - **a string**, - the element being dragged must match it as a CSS selector. + * - **`null`** - accept options is cleared - it accepts any element. + * + * Use the `overlap` option to set how drops are checked for. The allowed + * values are: + * + * - `'pointer'`, the pointer must be over the dropzone (default) + * - `'center'`, the draggable element's center must be over the dropzone + * - a number from 0-1 which is the `(intersection area) / (draggable area)`. + * e.g. `0.5` for drop to happen when half of the area of the draggable is + * over the dropzone + * + * Use the `checker` option to specify a function to check if a dragged element + * is over this Interactable. + * + * @param {boolean | object | null} [options] The new options to be set. + * @return {boolean | Interactable} The current setting or this Interactable + */ + + Interactable.prototype.dropzone = function (options) { + return dropzoneMethod(this, options); + }; + /** + * ```js + * interact(target) + * .dropChecker(function(dragEvent, // related dragmove or dragend event + * event, // TouchEvent/PointerEvent/MouseEvent + * dropped, // bool result of the default checker + * dropzone, // dropzone Interactable + * dropElement, // dropzone elemnt + * draggable, // draggable Interactable + * draggableElement) {// draggable element + * + * return dropped && event.target.hasAttribute('allow-drop') + * } + * ``` + */ + + + Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) { + return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect); + }; + /** + * Returns or sets whether the dimensions of dropzone elements are calculated + * on every dragmove or only on dragstart for the default dropChecker + * + * @param {boolean} [newValue] True to check on each move. False to check only + * before start + * @return {boolean | interact} The current setting or interact + */ + + + interact.dynamicDrop = function (newValue) { + if (utils.is.bool(newValue)) { + // if (dragging && scope.dynamicDrop !== newValue && !newValue) { + // calcRects(dropzones) + // } + scope.dynamicDrop = newValue; + return interact; } - return drops; + + return scope.dynamicDrop; + }; + + utils.arr.merge(actions.eventTypes, ['dragenter', 'dragleave', 'dropactivate', 'dropdeactivate', 'dropmove', 'drop']); + actions.methodDict.drop = 'dropzone'; + scope.dynamicDrop = false; + defaults.actions.drop = drop.defaults; } -function fireActivationEvents(activeDrops, event) { - // loop through all active dropzones and trigger event - for (const { dropzone, element } of activeDrops) { - event.dropzone = dropzone; - // set current element as event target - event.target = element; - dropzone.fire(event); - event.propagationStopped = event.immediatePropagationStopped = false; + +function collectDrops({ + interactables +}, draggableElement) { + const drops = []; // collect all dropzones and their elements which qualify for a drop + + for (const dropzone of interactables.list) { + if (!dropzone.options.drop.enabled) { + continue; + } + + const accept = dropzone.options.drop.accept; // test the draggable draggableElement against the dropzone's accept setting + + if (utils.is.element(accept) && accept !== draggableElement || utils.is.string(accept) && !utils.dom.matchesSelector(draggableElement, accept) || utils.is.func(accept) && !accept({ + dropzone, + draggableElement + })) { + continue; + } // query for new elements if necessary + + + const dropElements = utils.is.string(dropzone.target) ? dropzone._context.querySelectorAll(dropzone.target) : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]; + + for (const dropzoneElement of dropElements) { + if (dropzoneElement !== draggableElement) { + drops.push({ + dropzone, + element: dropzoneElement + }); + } } + } + + return drops; } -// return a new array of possible drops. getActiveDrops should always be + +function fireActivationEvents(activeDrops, event) { + // loop through all active dropzones and trigger event + for (const { + dropzone, + element + } of activeDrops) { + event.dropzone = dropzone; // set current element as event target + + event.target = element; + dropzone.fire(event); + event.propagationStopped = event.immediatePropagationStopped = false; + } +} // return a new array of possible drops. getActiveDrops should always be // called when a drag has just started or a drag event happens while // dynamicDrop is true + + function getActiveDrops(scope, dragElement) { - // get dropzones and their elements that could receive the draggable - const activeDrops = collectDrops(scope, dragElement); - for (const activeDrop of activeDrops) { - activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element); - } - return activeDrops; + // get dropzones and their elements that could receive the draggable + const activeDrops = collectDrops(scope, dragElement); + + for (const activeDrop of activeDrops) { + activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element); + } + + return activeDrops; } -function getDrop({ dropState, interactable: draggable, element: dragElement }, dragEvent, pointerEvent) { - const validDrops = []; - // collect all dropzones and their elements which qualify for a drop - for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) { - validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect) - ? dropzoneElement - : null); - } - // get the most appropriate dropzone based on DOM depth and order - const dropIndex = utils.dom.indexOfDeepestElement(validDrops); - return dropState.activeDrops[dropIndex] || null; + +function getDrop({ + dropState, + interactable: draggable, + element: dragElement +}, dragEvent, pointerEvent) { + const validDrops = []; // collect all dropzones and their elements which qualify for a drop + + for (const { + dropzone, + element: dropzoneElement, + rect + } of dropState.activeDrops) { + validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect) ? dropzoneElement : null); + } // get the most appropriate dropzone based on DOM depth and order + + + const dropIndex = utils.dom.indexOfDeepestElement(validDrops); + return dropState.activeDrops[dropIndex] || null; } + function getDropEvents(interaction, _pointerEvent, dragEvent) { - const { dropState } = interaction; - const dropEvents = { - enter: null, - leave: null, - activate: null, - deactivate: null, - move: null, - drop: null, - }; - if (dragEvent.type === 'dragstart') { - dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate'); - dropEvents.activate.target = null; - dropEvents.activate.dropzone = null; - } - if (dragEvent.type === 'dragend') { - dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate'); - dropEvents.deactivate.target = null; - dropEvents.deactivate.dropzone = null; - } - if (dropState.rejected) { - return dropEvents; - } - if (dropState.cur.element !== dropState.prev.element) { - // if there was a previous dropzone, create a dragleave event - if (dropState.prev.dropzone) { - dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave'); - dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element; - dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone; - } - // if dropzone is not null, create a dragenter event - if (dropState.cur.dropzone) { - dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter'); - dragEvent.dragEnter = dropState.cur.element; - dragEvent.dropzone = dropState.cur.dropzone; - } - } - if (dragEvent.type === 'dragend' && dropState.cur.dropzone) { - dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop'); - dragEvent.dropzone = dropState.cur.dropzone; - dragEvent.relatedTarget = dropState.cur.element; - } - if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) { - dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove'); - dropEvents.move.dragmove = dragEvent; - dragEvent.dropzone = dropState.cur.dropzone; - } + const { + dropState + } = interaction; + const dropEvents = { + enter: null, + leave: null, + activate: null, + deactivate: null, + move: null, + drop: null + }; + + if (dragEvent.type === 'dragstart') { + dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate'); + dropEvents.activate.target = null; + dropEvents.activate.dropzone = null; + } + + if (dragEvent.type === 'dragend') { + dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate'); + dropEvents.deactivate.target = null; + dropEvents.deactivate.dropzone = null; + } + + if (dropState.rejected) { return dropEvents; + } + + if (dropState.cur.element !== dropState.prev.element) { + // if there was a previous dropzone, create a dragleave event + if (dropState.prev.dropzone) { + dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave'); + dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element; + dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone; + } // if dropzone is not null, create a dragenter event + + + if (dropState.cur.dropzone) { + dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter'); + dragEvent.dragEnter = dropState.cur.element; + dragEvent.dropzone = dropState.cur.dropzone; + } + } + + if (dragEvent.type === 'dragend' && dropState.cur.dropzone) { + dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop'); + dragEvent.dropzone = dropState.cur.dropzone; + dragEvent.relatedTarget = dropState.cur.element; + } + + if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) { + dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove'); + dropEvents.move.dragmove = dragEvent; + dragEvent.dropzone = dropState.cur.dropzone; + } + + return dropEvents; } + function fireDropEvents(interaction, events) { - const { dropState } = interaction; - const { activeDrops, cur, prev, } = dropState; - if (events.leave) { - prev.dropzone.fire(events.leave); + const { + dropState + } = interaction; + const { + activeDrops, + cur, + prev + } = dropState; + + if (events.leave) { + prev.dropzone.fire(events.leave); + } + + if (events.move) { + cur.dropzone.fire(events.move); + } + + if (events.enter) { + cur.dropzone.fire(events.enter); + } + + if (events.drop) { + cur.dropzone.fire(events.drop); + } + + if (events.deactivate) { + fireActivationEvents(activeDrops, events.deactivate); + } + + dropState.prev.dropzone = cur.dropzone; + dropState.prev.element = cur.element; +} + +function onEventCreated({ + interaction, + iEvent, + event +}, scope) { + if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { + return; + } + + const { + dropState + } = interaction; + + if (scope.dynamicDrop) { + dropState.activeDrops = getActiveDrops(scope, interaction.element); + } + + const dragEvent = iEvent; + const dropResult = getDrop(interaction, dragEvent, event); // update rejected status + + dropState.rejected = dropState.rejected && !!dropResult && dropResult.dropzone === dropState.cur.dropzone && dropResult.element === dropState.cur.element; + dropState.cur.dropzone = dropResult && dropResult.dropzone; + dropState.cur.element = dropResult && dropResult.element; + dropState.events = getDropEvents(interaction, event, dragEvent); +} + +function dropzoneMethod(interactable, options) { + if (utils.is.object(options)) { + interactable.options.drop.enabled = options.enabled !== false; + + if (options.listeners) { + const normalized = utils.normalizeListeners(options.listeners); // rename 'drop' to '' as it will be prefixed with 'drop' + + const corrected = Object.keys(normalized).reduce((acc, type) => { + const correctedType = /^(enter|leave)/.test(type) ? `drag${type}` : /^(activate|deactivate|move)/.test(type) ? `drop${type}` : type; + acc[correctedType] = normalized[type]; + return acc; + }, {}); + interactable.off(interactable.options.drop.listeners); + interactable.on(corrected); + interactable.options.drop.listeners = corrected; } - if (events.move) { - cur.dropzone.fire(events.move); + + if (utils.is.func(options.ondrop)) { + interactable.on('drop', options.ondrop); } - if (events.enter) { - cur.dropzone.fire(events.enter); + + if (utils.is.func(options.ondropactivate)) { + interactable.on('dropactivate', options.ondropactivate); } - if (events.drop) { - cur.dropzone.fire(events.drop); + + if (utils.is.func(options.ondropdeactivate)) { + interactable.on('dropdeactivate', options.ondropdeactivate); } - if (events.deactivate) { - fireActivationEvents(activeDrops, events.deactivate); + + if (utils.is.func(options.ondragenter)) { + interactable.on('dragenter', options.ondragenter); } - dropState.prev.dropzone = cur.dropzone; - dropState.prev.element = cur.element; -} -function onEventCreated({ interaction, iEvent, event }, scope) { - if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { - return; + + if (utils.is.func(options.ondragleave)) { + interactable.on('dragleave', options.ondragleave); } - const { dropState } = interaction; - if (scope.dynamicDrop) { - dropState.activeDrops = getActiveDrops(scope, interaction.element); + + if (utils.is.func(options.ondropmove)) { + interactable.on('dropmove', options.ondropmove); } - const dragEvent = iEvent; - const dropResult = getDrop(interaction, dragEvent, event); - // update rejected status - dropState.rejected = dropState.rejected && - !!dropResult && - dropResult.dropzone === dropState.cur.dropzone && - dropResult.element === dropState.cur.element; - dropState.cur.dropzone = dropResult && dropResult.dropzone; - dropState.cur.element = dropResult && dropResult.element; - dropState.events = getDropEvents(interaction, event, dragEvent); -} -function dropzoneMethod(interactable, options) { - if (utils.is.object(options)) { - interactable.options.drop.enabled = options.enabled !== false; - if (options.listeners) { - const normalized = utils.normalizeListeners(options.listeners); - // rename 'drop' to '' as it will be prefixed with 'drop' - const corrected = Object.keys(normalized).reduce((acc, type) => { - const correctedType = /^(enter|leave)/.test(type) - ? `drag${type}` - : /^(activate|deactivate|move)/.test(type) - ? `drop${type}` - : type; - acc[correctedType] = normalized[type]; - return acc; - }, {}); - interactable.off(interactable.options.drop.listeners); - interactable.on(corrected); - interactable.options.drop.listeners = corrected; - } - if (utils.is.func(options.ondrop)) { - interactable.on('drop', options.ondrop); - } - if (utils.is.func(options.ondropactivate)) { - interactable.on('dropactivate', options.ondropactivate); - } - if (utils.is.func(options.ondropdeactivate)) { - interactable.on('dropdeactivate', options.ondropdeactivate); - } - if (utils.is.func(options.ondragenter)) { - interactable.on('dragenter', options.ondragenter); - } - if (utils.is.func(options.ondragleave)) { - interactable.on('dragleave', options.ondragleave); - } - if (utils.is.func(options.ondropmove)) { - interactable.on('dropmove', options.ondropmove); - } - if (/^(pointer|center)$/.test(options.overlap)) { - interactable.options.drop.overlap = options.overlap; - } - else if (utils.is.number(options.overlap)) { - interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0); - } - if ('accept' in options) { - interactable.options.drop.accept = options.accept; - } - if ('checker' in options) { - interactable.options.drop.checker = options.checker; - } - return interactable; + + if (/^(pointer|center)$/.test(options.overlap)) { + interactable.options.drop.overlap = options.overlap; + } else if (utils.is.number(options.overlap)) { + interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0); + } + + if ('accept' in options) { + interactable.options.drop.accept = options.accept; } - if (utils.is.bool(options)) { - interactable.options.drop.enabled = options; - return interactable; + + if ('checker' in options) { + interactable.options.drop.checker = options.checker; } - return interactable.options.drop; + + return interactable; + } + + if (utils.is.bool(options)) { + interactable.options.drop.enabled = options; + return interactable; + } + + return interactable.options.drop; } + function dropCheckMethod(interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) { - let dropped = false; - // if the dropzone has no rect (eg. display: none) - // call the custom dropChecker or just return false - if (!(rect = rect || interactable.getRect(dropElement))) { - return (interactable.options.drop.checker - ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement) - : false); - } - const dropOverlap = interactable.options.drop.overlap; - if (dropOverlap === 'pointer') { - const origin = utils.getOriginXY(draggable, draggableElement, 'drag'); - const page = utils.pointer.getPageXY(dragEvent); - page.x += origin.x; - page.y += origin.y; - const horizontal = (page.x > rect.left) && (page.x < rect.right); - const vertical = (page.y > rect.top) && (page.y < rect.bottom); - dropped = horizontal && vertical; - } - const dragRect = draggable.getRect(draggableElement); - if (dragRect && dropOverlap === 'center') { - const cx = dragRect.left + dragRect.width / 2; - const cy = dragRect.top + dragRect.height / 2; - dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom; - } - if (dragRect && utils.is.number(dropOverlap)) { - const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) * - Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))); - const overlapRatio = overlapArea / (dragRect.width * dragRect.height); - dropped = overlapRatio >= dropOverlap; - } - if (interactable.options.drop.checker) { - dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement); - } - return dropped; + let dropped = false; // if the dropzone has no rect (eg. display: none) + // call the custom dropChecker or just return false + + if (!(rect = rect || interactable.getRect(dropElement))) { + return interactable.options.drop.checker ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement) : false; + } + + const dropOverlap = interactable.options.drop.overlap; + + if (dropOverlap === 'pointer') { + const origin = utils.getOriginXY(draggable, draggableElement, 'drag'); + const page = utils.pointer.getPageXY(dragEvent); + page.x += origin.x; + page.y += origin.y; + const horizontal = page.x > rect.left && page.x < rect.right; + const vertical = page.y > rect.top && page.y < rect.bottom; + dropped = horizontal && vertical; + } + + const dragRect = draggable.getRect(draggableElement); + + if (dragRect && dropOverlap === 'center') { + const cx = dragRect.left + dragRect.width / 2; + const cy = dragRect.top + dragRect.height / 2; + dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom; + } + + if (dragRect && utils.is.number(dropOverlap)) { + const overlapArea = Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)); + const overlapRatio = overlapArea / (dragRect.width * dragRect.height); + dropped = overlapRatio >= dropOverlap; + } + + if (interactable.options.drop.checker) { + dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement); + } + + return dropped; } + const drop = { - id: 'actions/drop', - install, - getActiveDrops, - getDrop, - getDropEvents, - fireDropEvents, - defaults: { - enabled: false, - accept: null, - overlap: 'pointer', + id: 'actions/drop', + install, + listeners: { + 'interactions:before-action-start': ({ + interaction + }) => { + if (interaction.prepared.name !== 'drag') { + return; + } + + interaction.dropState = { + cur: { + dropzone: null, + element: null + }, + prev: { + dropzone: null, + element: null + }, + rejected: null, + events: null, + activeDrops: null + }; + }, + 'interactions:after-action-start': ({ + interaction, + event, + iEvent: dragEvent + }, scope) => { + if (interaction.prepared.name !== 'drag') { + return; + } + + const { + dropState + } = interaction; // reset active dropzones + + dropState.activeDrops = null; + dropState.events = null; + dropState.activeDrops = getActiveDrops(scope, interaction.element); + dropState.events = getDropEvents(interaction, event, dragEvent); + + if (dropState.events.activate) { + fireActivationEvents(dropState.activeDrops, dropState.events.activate); + } + }, + // FIXME proper signal types + 'interactions:action-move': onEventCreated, + 'interactions:action-end': onEventCreated, + 'interactions:after-action-move': function fireDropAfterMove({ + interaction + }) { + if (interaction.prepared.name !== 'drag') { + return; + } + + fireDropEvents(interaction, interaction.dropState.events); + interaction.dropState.events = {}; + }, + 'interactions:after-action-end': ({ + interaction + }) => { + if (interaction.prepared.name !== 'drag') { + return; + } + + fireDropEvents(interaction, interaction.dropState.events); }, + 'interactions:stop': ({ + interaction + }) => { + if (interaction.prepared.name !== 'drag') { + return; + } + + const { + dropState + } = interaction; + + if (dropState) { + dropState.activeDrops = null; + dropState.events = null; + dropState.cur.dropzone = null; + dropState.cur.element = null; + dropState.prev.dropzone = null; + dropState.prev.element = null; + dropState.rejected = false; + } + } + }, + getActiveDrops, + getDrop, + getDropEvents, + fireDropEvents, + defaults: { + enabled: false, + accept: null, + overlap: 'pointer' + } }; export default drop; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQTtBQUMxQixPQUFPLFNBQVMsTUFBTSxhQUFhLENBQUE7QUE2RG5DLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLE9BQU87SUFDUCw2QkFBNkI7SUFDN0IsUUFBUTtJQUNSLDBCQUEwQjtJQUMxQixZQUFZLEVBQUUsZ0NBQWdDO0lBQzlDLFlBQVksRUFDWixRQUFRLEdBQ1QsR0FBRyxLQUFLLENBQUE7SUFFVCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXJCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQ2pFLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRXBELFdBQVcsQ0FBQyxTQUFTLEdBQUc7WUFDdEIsR0FBRyxFQUFFO2dCQUNILFFBQVEsRUFBRSxJQUFJO2dCQUNkLE9BQU8sRUFBRSxJQUFJO2FBQ2Q7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLElBQUk7Z0JBQ2QsT0FBTyxFQUFFLElBQUk7YUFDZDtZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLElBQUk7WUFDWixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtRQUMxRixJQUFJLFdBQVcsQ0FBQyxRQUFRLENB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QUFDLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFckUsT0FBTyxHQUFHLFlBQVksSUFBSSxXQUFXLENBQUE7S0FDdEM7SUFFRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNyQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUE7S0FDL0g7SUFFRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUc7SUFDWCxFQUFFLEVBQUUsY0FBYztJQUNsQixPQUFPO0lBQ1AsY0FBYztJQUNkLE9BQU87SUFDUCxhQUFhO0lBQ2IsY0FBYztJQUNkLFFBQVEsRUFBRTtRQUNSLE9BQU8sRUFBRSxLQUFLO1FBQ2QsTUFBTSxFQUFHLElBQUk7UUFDYixPQUFPLEVBQUUsU0FBUztLQUNTO0NBQzlCLENBQUE7QUFFRCxlQUFlLElBQUksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJbnRlcmFjdGFibGUgZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnXG5pbXBvcnQgSW50ZXJhY3RFdmVudCBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcbmltcG9ydCBkcmFnIGZyb20gJy4uL2RyYWcnXG5pbXBvcnQgRHJvcEV2ZW50IGZyb20gJy4vRHJvcEV2ZW50J1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3B6b25lTWV0aG9kIHtcbiAgKG9wdGlvbnM6IEludGVyYWN0LkRyb3B6b25lT3B0aW9ucyB8IGJvb2xlYW4pOiBJbnRlcmFjdC5JbnRlcmFjdGFibGVcbiAgKCk6IEludGVyYWN0LkRyb3B6b25lT3B0aW9uc1xufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0YWJsZSB7XG4gICAgZHJvcHpvbmU6IERyb3B6b25lTWV0aG9kXG4gICAgZHJvcENoZWNrOiAoXG4gICAgICBkcmFnRXZlbnQ6IEludGVyYWN0RXZlbnQsXG4gICAgICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgICAgIGRyYWdnYWJsZTogSW50ZXJhY3RhYmxlLFxuICAgICAgZHJhZ2dhYmxlRWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCxcbiAgICAgIGRyb3BFbGVtZW46IEludGVyYWN0LkVsZW1lbnQsXG4gICAgICByZWN0OiBhbnlcbiAgICApID0+IGJvb2xlYW5cbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIGRyb3BTdGF0ZT86IHtcbiAgICAgIGN1cjoge1xuICAgICAgICBkcm9wem9uZTogSW50ZXJhY3RhYmxlICAgIC8vIHRoZSBkcm9wem9uZSBhIGRyYWcgdGFyZ2V0IG1pZ2h0IGJlIGRyb3BwZWQgaW50b1xuICAgICAgICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50IC8vIHRoZSBlbGVtZW50IGF0IHRoZSB0aW1lIG9mIGNoZWNraW5nXG4gICAgICB9XG4gICAgICBwcmV2OiB7XG4gICAgICAgIGRyb3B6b25lOiBJbnRlcmFjdGFibGUgICAgLy8gdGhlIGRyb3B6b25lIHRoYXQgd2FzIHJlY2VudGx5IGRyYWdnZWQgYXdheSBmcm9tXG4gICAgICAgIGVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQgLy8gdGhlIGVsZW1lbnQgYXQgdGhlIHRpbWUgb2YgY2hlY2tpbmdcbiAgICAgIH1cbiAgICAgIHJlamVjdGVkOiBib29sZWFuICAgICAgICAgICAvLyB3aGVhdGhlciB0aGUgcG90ZW50aWFsIGRyb3Agd2FzIHJlamVjdGVkIGZyb20gYSBsaXN0ZW5lclxuICAgICAgZXZlbnRzOiBhbnkgICAgICAgICAgICAgICAgIC8vIHRoZSBkcm9wIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IGRyYWcgZXZlbnRcbiAgICAgIGFjdGl2ZURyb3BzOiBBcnJheTx7XG4gICAgICAgIGRyb3B6b25lOiBJbnRlcmFjdGFibGVcbiAgICAgICAgZWxlbWVudDogSW50ZXJhY3QuRWxlbWVudFxuICAgICAgICByZWN0OiBJbnRlcmFjdC5SZWN0XG4gICAgICB9PlxuICAgIH1cbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xuICAgIGRyb3A6IEludGVyYWN0LkRyb3B6b25lT3B0aW9uc1xuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgZHluYW1pY0Ryb3A/OiBib29sZWFuXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2ludGVyYWN0L2ludGVyYWN0JyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdFN0YXRpYyB7XG4gICAgZHluYW1pY0Ryb3A6IChuZXdWYWx1ZT86IGJvb2xlYW4pID0+IGJvb2xlYW4gfCBJbnRlcmFjdC5pbnRlcmFjdFxuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgYWN0aW9ucyxcbiAgICAvKiogQGxlbmRzIG1vZHVsZTppbnRlcmFjdCAqL1xuICAgIGludGVyYWN0LFxuICAgIC8qKiBAbGVuZHMgSW50ZXJhY3RhYmxlICovXG4gICAgSW50ZXJhY3RhYmxlLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNoYWRvd1xuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgc2NvcGUudXNlUGx1Z2luKGRyYWcpXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tc3RhcnQnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaWYgKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgIT09ICdkcmFnJykgeyByZXR1cm4gfVxuXG4gICAgaW50ZXJhY3Rpb24uZHJvcFN0YXRlID0ge1xuICAgICAgY3VyOiB7XG4gICAgICAgIGRyb3B6b25lOiBudWxsLFxuICAgICAgICBlbGVtZW50OiBudWxsLFxuICAgICAgfSxcbiAgICAgIHByZXY6IHtcbiAgICAgICAgZHJvcHpvbmU6IG51bGwsXG4gICAgICAgIGVsZW1lbnQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgcmVqZWN0ZWQ6IG51bGwsXG4gICAgICBldmVudHM6IG51bGwsXG4gICAgICBhY3RpdmVEcm9wczogbnVsbCxcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FmdGVyLWFjdGlvbi1zdGFydCcsICh7IGludGVyYWN0aW9uLCBldmVudCwgaUV2ZW50OiBkcmFnRXZlbnQgfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZHJhZycpIHsgcmV0dXJuIH1cblxuICAgIGNvbnN0IHsgZHJvcFN0YXRlIH0gPSBpbnRlcmFjdGlvblxuXG4gICAgLy8gcmVzZXQgYWN0aXZlIGRyb3B6b25lc1xuICAgIGRyb3BTdGF0ZS5hY3RpdmVEcm9wcyA9IG51bGxcbiAgICBkcm9wU3RhdGUuZXZlbnRzID0gbnVsbFxuICAgIGRyb3BTdGF0ZS5hY3RpdmVEcm9wcyA9IGdldEFjdGl2ZURyb3BzKHNjb3BlLCBpbnRlcmFjdGlvbi5lbGVtZW50KVxuICAgIGRyb3BTdGF0ZS5ldmVudHMgPSBnZXREcm9wRXZlbnRzKGludGVyYWN0aW9uLCBldmVudCwgZHJhZ0V2ZW50KVxuXG4gICAgaWYgKGRyb3BTdGF0ZS5ldmVudHMuYWN0aXZhdGUpIHtcbiAgICAgIGZpcmVBY3RpdmF0aW9uRXZlbnRzKGRyb3BTdGF0ZS5hY3RpdmVEcm9wcywgZHJvcFN0YXRlLmV2ZW50cy5hY3RpdmF0ZSlcbiAgICB9XG4gIH0pXG5cbiAgLy8gRklYTUUgcHJvcGVyIHNpZ25hbCB0eXBlc1xuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCBhcmcgPT4gb25FdmVudENyZWF0ZWQoYXJnIGFzIGFueSwgc2NvcGUpKVxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLWVuZCcsIGFyZyA9PiBvbkV2ZW50Q3JlYXRlZChhcmcgYXMgYW55LCBzY29wZSkpXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FmdGVyLWFjdGlvbi1tb3ZlJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZHJhZycpIHsgcmV0dXJuIH1cblxuICAgIGZpcmVEcm9wRXZlbnRzKGludGVyYWN0aW9uLCBpbnRlcmFjdGlvbi5kcm9wU3RhdGUuZXZlbnRzKVxuICAgIGludGVyYWN0aW9uLmRyb3BTdGF0ZS5ldmVudHMgPSB7fVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhZnRlci1hY3Rpb24tZW5kJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZHJhZycpIHsgcmV0dXJuIH1cblxuICAgIGZpcmVEcm9wRXZlbnRzKGludGVyYWN0aW9uLCBpbnRlcmFjdGlvbi5kcm9wU3RhdGUuZXZlbnRzKVxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdzdG9wJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZHJhZycpIHsgcmV0dXJuIH1cblxuICAgIGNvbnN0IHsgZHJvcFN0YXRlIH0gPSBpbnRlcmFjdGlvblxuXG4gICAgaWYgKGRyb3BTdGF0ZSkge1xuICAgICAgZHJvcFN0YXRlLmFjdGl2ZURyb3BzID0gbnVsbFxuICAgICAgZHJvcFN0YXRlLmV2ZW50cyA9IG51bGxcbiAgICAgIGRyb3BTdGF0ZS5jdXIuZHJvcHpvbmUgPSBudWxsXG4gICAgICBkcm9wU3RhdGUuY3VyLmVsZW1lbnQgPSBudWxsXG4gICAgICBkcm9wU3RhdGUucHJldi5kcm9wem9uZSA9IG51bGxcbiAgICAgIGRyb3BTdGF0ZS5wcmV2LmVsZW1lbnQgPSBudWxsXG4gICAgICBkcm9wU3RhdGUucmVqZWN0ZWQgPSBmYWxzZVxuICAgIH1cbiAgfSlcblxuICAvKipcbiAgICpcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QoJy5kcm9wJykuZHJvcHpvbmUoe1xuICAgKiAgIGFjY2VwdDogJy5jYW4tZHJvcCcgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpbmdsZS1kcm9wJyksXG4gICAqICAgb3ZlcmxhcDogJ3BvaW50ZXInIHx8ICdjZW50ZXInIHx8IHplcm9Ub09uZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZXR1cm5zIG9yIHNldHMgd2hldGhlciBkcmFnZ2FibGVzIGNhbiBiZSBkcm9wcGVkIG9udG8gdGhpcyB0YXJnZXQgdG9cbiAgICogdHJpZ2dlciBkcm9wIGV2ZW50c1xuICAgKlxuICAgKiBEcm9wem9uZXMgY2FuIHJlY2VpdmUgdGhlIGZvbGxvd2luZyBldmVudHM6XG4gICAqICAtIGBkcm9wYWN0aXZhdGVgIGFuZCBgZHJvcGRlYWN0aXZhdGVgIHdoZW4gYW4gYWNjZXB0YWJsZSBkcmFnIHN0YXJ0cyBhbmQgZW5kc1xuICAgKiAgLSBgZHJhZ2VudGVyYCBhbmQgYGRyYWdsZWF2ZWAgd2hlbiBhIGRyYWdnYWJsZSBlbnRlcnMgYW5kIGxlYXZlcyB0aGUgZHJvcHpvbmVcbiAgICogIC0gYGRyYWdtb3ZlYCB3aGVuIGEgZHJhZ2dhYmxlIHRoYXQgaGFzIGVudGVyZWQgdGhlIGRyb3B6b25lIGlzIG1vdmVkXG4gICAqICAtIGBkcm9wYCB3aGVuIGEgZHJhZ2dhYmxlIGlzIGRyb3BwZWQgaW50byB0aGlzIGRyb3B6b25lXG4gICAqXG4gICAqIFVzZSB0aGUgYGFjY2VwdGAgb3B0aW9uIHRvIGFsbG93IG9ubHkgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gQ1NTXG4gICAqIHNlbGVjdG9yIG9yIGVsZW1lbnQuIFRoZSB2YWx1ZSBjYW4gYmU6XG4gICAqXG4gICAqICAtICoqYW4gRWxlbWVudCoqIC0gb25seSB0aGF0IGVsZW1lbnQgY2FuIGJlIGRyb3BwZWQgaW50byB0aGlzIGRyb3B6b25lLlxuICAgKiAgLSAqKmEgc3RyaW5nKiosIC0gdGhlIGVsZW1lbnQgYmVpbmcgZHJhZ2dlZCBtdXN0IG1hdGNoIGl0IGFzIGEgQ1NTIHNlbGVjdG9yLlxuICAgKiAgLSAqKmBudWxsYCoqIC0gYWNjZXB0IG9wdGlvbnMgaXMgY2xlYXJlZCAtIGl0IGFjY2VwdHMgYW55IGVsZW1lbnQuXG4gICAqXG4gICAqIFVzZSB0aGUgYG92ZXJsYXBgIG9wdGlvbiB0byBzZXQgaG93IGRyb3BzIGFyZSBjaGVja2VkIGZvci4gVGhlIGFsbG93ZWRcbiAgICogdmFsdWVzIGFyZTpcbiAgICpcbiAgICogICAtIGAncG9pbnRlcidgLCB0aGUgcG9pbnRlciBtdXN0IGJlIG92ZXIgdGhlIGRyb3B6b25lIChkZWZhdWx0KVxuICAgKiAgIC0gYCdjZW50ZXInYCwgdGhlIGRyYWdnYWJsZSBlbGVtZW50J3MgY2VudGVyIG11c3QgYmUgb3ZlciB0aGUgZHJvcHpvbmVcbiAgICogICAtIGEgbnVtYmVyIGZyb20gMC0xIHdoaWNoIGlzIHRoZSBgKGludGVyc2VjdGlvbiBhcmVhKSAvIChkcmFnZ2FibGUgYXJlYSlgLlxuICAgKiAgIGUuZy4gYDAuNWAgZm9yIGRyb3AgdG8gaGFwcGVuIHdoZW4gaGFsZiBvZiB0aGUgYXJlYSBvZiB0aGUgZHJhZ2dhYmxlIGlzXG4gICAqICAgb3ZlciB0aGUgZHJvcHpvbmVcbiAgICpcbiAgICogVXNlIHRoZSBgY2hlY2tlcmAgb3B0aW9uIHRvIHNwZWNpZnkgYSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIGRyYWdnZWQgZWxlbWVudFxuICAgKiBpcyBvdmVyIHRoaXMgSW50ZXJhY3RhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3QgfCBudWxsfSBbb3B0aW9uc10gVGhlIG5ldyBvcHRpb25zIHRvIGJlIHNldC5cbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEludGVyYWN0YWJsZX0gVGhlIGN1cnJlbnQgc2V0dGluZyBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kcm9wem9uZSA9IGZ1bmN0aW9uICh0aGlzOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsIG9wdGlvbnM/OiBJbnRlcmFjdC5Ecm9wem9uZU9wdGlvbnMgfCBib29sZWFuKSB7XG4gICAgcmV0dXJuIGRyb3B6b25lTWV0aG9kKHRoaXMsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QodGFyZ2V0KVxuICAgKiAuZHJvcENoZWNrZXIoZnVuY3Rpb24oZHJhZ0V2ZW50LCAgICAgICAgIC8vIHJlbGF0ZWQgZHJhZ21vdmUgb3IgZHJhZ2VuZCBldmVudFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsICAgICAgICAgICAgIC8vIFRvdWNoRXZlbnQvUG9pbnRlckV2ZW50L01vdXNlRXZlbnRcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGRyb3BwZWQsICAgICAgICAgICAvLyBib29sIHJlc3VsdCBvZiB0aGUgZGVmYXVsdCBjaGVja2VyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBkcm9wem9uZSwgICAgICAgICAgLy8gZHJvcHpvbmUgSW50ZXJhY3RhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBkcm9wRWxlbWVudCwgICAgICAgLy8gZHJvcHpvbmUgZWxlbW50XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGUsICAgICAgICAgLy8gZHJhZ2dhYmxlIEludGVyYWN0YWJsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlRWxlbWVudCkgey8vIGRyYWdnYWJsZSBlbGVtZW50XG4gICAqXG4gICAqICAgcmV0dXJuIGRyb3BwZWQgJiYgZXZlbnQudGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnYWxsb3ctZHJvcCcpXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLmRyb3BDaGVjayA9IGZ1bmN0aW9uICh0aGlzOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsIGRyYWdFdmVudCwgZXZlbnQsIGRyYWdnYWJsZSwgZHJhZ2dhYmxlRWxlbWVudCwgZHJvcEVsZW1lbnQsIHJlY3QpIHtcbiAgICByZXR1cm4gZHJvcENoZWNrTWV0aG9kKHRoaXMsIGRyYWdFdmVudCwgZXZlbnQsIGRyYWdnYWJsZSwgZHJhZ2dhYmxlRWxlbWVudCwgZHJvcEVsZW1lbnQsIHJlY3QpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBvciBzZXRzIHdoZXRoZXIgdGhlIGRpbWVuc2lvbnMgb2YgZHJvcHpvbmUgZWxlbWVudHMgYXJlIGNhbGN1bGF0ZWRcbiAgICogb24gZXZlcnkgZHJhZ21vdmUgb3Igb25seSBvbiBkcmFnc3RhcnQgZm9yIHRoZSBkZWZhdWx0IGRyb3BDaGVja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25ld1ZhbHVlXSBUcnVlIHRvIGNoZWNrIG9uIGVhY2ggbW92ZS4gRmFsc2UgdG8gY2hlY2sgb25seVxuICAgKiBiZWZvcmUgc3RhcnRcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IGludGVyYWN0fSBUaGUgY3VycmVudCBzZXR0aW5nIG9yIGludGVyYWN0XG4gICAqL1xuICBpbnRlcmFjdC5keW5hbWljRHJvcCA9IGZ1bmN0aW9uIChuZXdWYWx1ZT86IGJvb2xlYW4pIHtcbiAgICBpZiAodXRpbHMuaXMuYm9vbChuZXdWYWx1ZSkpIHtcbiAgICAgIC8vIGlmIChkcmFnZ2luZyAmJiBzY29wZS5keW5hbWljRHJvcCAhPT0gbmV3VmFsdWUgJiYgIW5ld1ZhbHVlKSB7XG4gICAgICAvLyAgY2FsY1JlY3RzKGRyb3B6b25lcylcbiAgICAgIC8vIH1cblxuICAgICAgc2NvcGUuZHluYW1pY0Ryb3AgPSBuZXdWYWx1ZVxuXG4gICAgICByZXR1cm4gaW50ZXJhY3RcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlLmR5bmFtaWNEcm9wXG4gIH1cblxuICB1dGlscy5hcnIubWVyZ2UoYWN0aW9ucy5ldmVudFR5cGVzLCBbXG4gICAgJ2RyYWdlbnRlcicsXG4gICAgJ2RyYWdsZWF2ZScsXG4gICAgJ2Ryb3BhY3RpdmF0ZScsXG4gICAgJ2Ryb3BkZWFjdGl2YXRlJyxcbiAgICAnZHJvcG1vdmUnLFxuICAgICdkcm9wJyxcbiAgXSlcbiAgYWN0aW9ucy5tZXRob2REaWN0LmRyb3AgPSAnZHJvcHpvbmUnXG5cbiAgc2NvcGUuZHluYW1pY0Ryb3AgPSBmYWxzZVxuXG4gIGRlZmF1bHRzLmFjdGlvbnMuZHJvcCA9IGRyb3AuZGVmYXVsdHNcbn1cblxuZnVuY3Rpb24gY29sbGVjdERyb3BzICh7IGludGVyYWN0YWJsZXMgfSwgZHJhZ2dhYmxlRWxlbWVudCkge1xuICBjb25zdCBkcm9wcyA9IFtdXG5cbiAgLy8gY29sbGVjdCBhbGwgZHJvcHpvbmVzIGFuZCB0aGVpciBlbGVtZW50cyB3aGljaCBxdWFsaWZ5IGZvciBhIGRyb3BcbiAgZm9yIChjb25zdCBkcm9wem9uZSBvZiBpbnRlcmFjdGFibGVzLmxpc3QpIHtcbiAgICBpZiAoIWRyb3B6b25lLm9wdGlvbnMuZHJvcC5lbmFibGVkKSB7IGNvbnRpbnVlIH1cblxuICAgIGNvbnN0IGFjY2VwdCA9IGRyb3B6b25lLm9wdGlvbnMuZHJvcC5hY2NlcHRcblxuICAgIC8vIHRlc3QgdGhlIGRyYWdnYWJsZSBkcmFnZ2FibGVFbGVtZW50IGFnYWluc3QgdGhlIGRyb3B6b25lJ3MgYWNjZXB0IHNldHRpbmdcbiAgICBpZiAoKHV0aWxzLmlzLmVsZW1lbnQoYWNjZXB0KSAmJiBhY2NlcHQgIT09IGRyYWdnYWJsZUVsZW1lbnQpIHx8XG4gICAgICAgICh1dGlscy5pcy5zdHJpbmcoYWNjZXB0KSAmJlxuICAgICAgICAhdXRpbHMuZG9tLm1hdGNoZXNTZWxlY3RvcihkcmFnZ2FibGVFbGVtZW50LCBhY2NlcHQpKSB8fFxuICAgICAgICAodXRpbHMuaXMuZnVuYyhhY2NlcHQpICYmICFhY2NlcHQoeyBkcm9wem9uZSwgZHJhZ2dhYmxlRWxlbWVudCB9KSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gcXVlcnkgZm9yIG5ldyBlbGVtZW50cyBpZiBuZWNlc3NhcnlcbiAgICBjb25zdCBkcm9wRWxlbWVudHMgPSB1dGlscy5pcy5zdHJpbmcoZHJvcHpvbmUudGFyZ2V0KVxuICAgICAgPyBkcm9wem9uZS5fY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKGRyb3B6b25lLnRhcmdldClcbiAgICAgIDogdXRpbHMuaXMuYXJyYXkoZHJvcHpvbmUudGFyZ2V0KSA/IGRyb3B6b25lLnRhcmdldCA6IFtkcm9wem9uZS50YXJnZXRdXG5cbiAgICBmb3IgKGNvbnN0IGRyb3B6b25lRWxlbWVudCBvZiBkcm9wRWxlbWVudHMpIHtcbiAgICAgIGlmIChkcm9wem9uZUVsZW1lbnQgIT09IGRyYWdnYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgZHJvcHMucHVzaCh7XG4gICAgICAgICAgZHJvcHpvbmUsXG4gICAgICAgICAgZWxlbWVudDogZHJvcHpvbmVFbGVtZW50LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkcm9wc1xufVxuXG5mdW5jdGlvbiBmaXJlQWN0aXZhdGlvbkV2ZW50cyAoYWN0aXZlRHJvcHMsIGV2ZW50KSB7XG4gIC8vIGxvb3AgdGhyb3VnaCBhbGwgYWN0aXZlIGRyb3B6b25lcyBhbmQgdHJpZ2dlciBldmVudFxuICBmb3IgKGNvbnN0IHsgZHJvcHpvbmUsIGVsZW1lbnQgfSBvZiBhY3RpdmVEcm9wcykge1xuICAgIGV2ZW50LmRyb3B6b25lID0gZHJvcHpvbmVcblxuICAgIC8vIHNldCBjdXJyZW50IGVsZW1lbnQgYXMgZXZlbnQgdGFyZ2V0XG4gICAgZXZlbnQudGFyZ2V0ID0gZWxlbWVudFxuICAgIGRyb3B6b25lLmZpcmUoZXZlbnQpXG4gICAgZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkID0gZXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2VcbiAgfVxufVxuXG4vLyByZXR1cm4gYSBuZXcgYXJyYXkgb2YgcG9zc2libGUgZHJvcHMuIGdldEFjdGl2ZURyb3BzIHNob3VsZCBhbHdheXMgYmVcbi8vIGNhbGxlZCB3aGVuIGEgZHJhZyBoYXMganVzdCBzdGFydGVkIG9yIGEgZHJhZyBldmVudCBoYXBwZW5zIHdoaWxlXG4vLyBkeW5hbWljRHJvcCBpcyB0cnVlXG5mdW5jdGlvbiBnZXRBY3RpdmVEcm9wcyAoc2NvcGU6IFNjb3BlLCBkcmFnRWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCkge1xuICAvLyBnZXQgZHJvcHpvbmVzIGFuZCB0aGVpciBlbGVtZW50cyB0aGF0IGNvdWxkIHJlY2VpdmUgdGhlIGRyYWdnYWJsZVxuICBjb25zdCBhY3RpdmVEcm9wcyA9IGNvbGxlY3REcm9wcyhzY29wZSwgZHJhZ0VsZW1lbnQpXG5cbiAgZm9yIChjb25zdCBhY3RpdmVEcm9wIG9mIGFjdGl2ZURyb3BzKSB7XG4gICAgYWN0aXZlRHJvcC5yZWN0ID0gYWN0aXZlRHJvcC5kcm9wem9uZS5nZXRSZWN0KGFjdGl2ZURyb3AuZWxlbWVudClcbiAgfVxuXG4gIHJldHVybiBhY3RpdmVEcm9wc1xufVxuXG5mdW5jdGlvbiBnZXREcm9wICh7IGRyb3BTdGF0ZSwgaW50ZXJhY3RhYmxlOiBkcmFnZ2FibGUsIGVsZW1lbnQ6IGRyYWdFbGVtZW50IH06IFBhcnRpYWw8SW50ZXJhY3QuSW50ZXJhY3Rpb24+LCBkcmFnRXZlbnQsIHBvaW50ZXJFdmVudCkge1xuICBjb25zdCB2YWxpZERyb3BzID0gW11cblxuICAvLyBjb2xsZWN0IGFsbCBkcm9wem9uZXMgYW5kIHRoZWlyIGVsZW1lbnRzIHdoaWNoIHF1YWxpZnkgZm9yIGEgZHJvcFxuICBmb3IgKGNvbnN0IHsgZHJvcHpvbmUsIGVsZW1lbnQ6IGRyb3B6b25lRWxlbWVudCwgcmVjdCB9IG9mIGRyb3BTdGF0ZS5hY3RpdmVEcm9wcykge1xuICAgIHZhbGlkRHJvcHMucHVzaChkcm9wem9uZS5kcm9wQ2hlY2soZHJhZ0V2ZW50LCBwb2ludGVyRXZlbnQsIGRyYWdnYWJsZSwgZHJhZ0VsZW1lbnQsIGRyb3B6b25lRWxlbWVudCwgcmVjdClcbiAgICAgID8gZHJvcHpvbmVFbGVtZW50XG4gICAgICA6IG51bGwpXG4gIH1cblxuICAvLyBnZXQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZHJvcHpvbmUgYmFzZWQgb24gRE9NIGRlcHRoIGFuZCBvcmRlclxuICBjb25zdCBkcm9wSW5kZXggPSB1dGlscy5kb20uaW5kZXhPZkRlZXBlc3RFbGVtZW50KHZhbGlkRHJvcHMpXG5cbiAgcmV0dXJuIGRyb3BTdGF0ZS5hY3RpdmVEcm9wc1tkcm9wSW5kZXhdIHx8IG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0RHJvcEV2ZW50cyAoaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uLCBfcG9pbnRlckV2ZW50LCBkcmFnRXZlbnQpIHtcbiAgY29uc3QgeyBkcm9wU3RhdGUgfSA9IGludGVyYWN0aW9uXG4gIGNvbnN0IGRyb3BFdmVudHMgPSB7XG4gICAgZW50ZXIgICAgIDogbnVsbCxcbiAgICBsZWF2ZSAgICAgOiBudWxsLFxuICAgIGFjdGl2YXRlICA6IG51bGwsXG4gICAgZGVhY3RpdmF0ZTogbnVsbCxcbiAgICBtb3ZlICAgICAgOiBudWxsLFxuICAgIGRyb3AgICAgICA6IG51bGwsXG4gIH1cblxuICBpZiAoZHJhZ0V2ZW50LnR5cGUgPT09ICdkcmFnc3RhcnQnKSB7XG4gICAgZHJvcEV2ZW50cy5hY3RpdmF0ZSA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXRlLCBkcmFnRXZlbnQsICdkcm9wYWN0aXZhdGUnKVxuXG4gICAgZHJvcEV2ZW50cy5hY3RpdmF0ZS50YXJnZXQgICA9IG51bGxcbiAgICBkcm9wRXZlbnRzLmFjdGl2YXRlLmRyb3B6b25lID0gbnVsbFxuICB9XG4gIGlmIChkcmFnRXZlbnQudHlwZSA9PT0gJ2RyYWdlbmQnKSB7XG4gICAgZHJvcEV2ZW50cy5kZWFjdGl2YXRlID0gbmV3IERyb3BFdmVudChkcm9wU3RhdGUsIGRyYWdFdmVudCwgJ2Ryb3BkZWFjdGl2YXRlJylcblxuICAgIGRyb3BFdmVudHMuZGVhY3RpdmF0ZS50YXJnZXQgICA9IG51bGxcbiAgICBkcm9wRXZlbnRzLmRlYWN0aXZhdGUuZHJvcHpvbmUgPSBudWxsXG4gIH1cblxuICBpZiAoZHJvcFN0YXRlLnJlamVjdGVkKSB7XG4gICAgcmV0dXJuIGRyb3BFdmVudHNcbiAgfVxuXG4gIGlmIChkcm9wU3RhdGUuY3VyLmVsZW1lbnQgIT09IGRyb3BTdGF0ZS5wcmV2LmVsZW1lbnQpIHtcbiAgICAvLyBpZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBkcm9wem9uZSwgY3JlYXRlIGEgZHJhZ2xlYXZlIGV2ZW50XG4gICAgaWYgKGRyb3BTdGF0ZS5wcmV2LmRyb3B6b25lKSB7XG4gICAgICBkcm9wRXZlbnRzLmxlYXZlID0gbmV3IERyb3BFdmVudChkcm9wU3RhdGUsIGRyYWdFdmVudCwgJ2RyYWdsZWF2ZScpXG5cbiAgICAgIGRyYWdFdmVudC5kcmFnTGVhdmUgICAgPSBkcm9wRXZlbnRzLmxlYXZlLnRhcmdldCAgID0gZHJvcFN0YXRlLnByZXYuZWxlbWVudFxuICAgICAgZHJhZ0V2ZW50LnByZXZEcm9wem9uZSA9IGRyb3BFdmVudHMubGVhdmUuZHJvcHpvbmUgPSBkcm9wU3RhdGUucHJldi5kcm9wem9uZVxuICAgIH1cbiAgICAvLyBpZiBkcm9wem9uZSBpcyBub3QgbnVsbCwgY3JlYXRlIGEgZHJhZ2VudGVyIGV2ZW50XG4gICAgaWYgKGRyb3BTdGF0ZS5jdXIuZHJvcHpvbmUpIHtcbiAgICAgIGRyb3BFdmVudHMuZW50ZXIgPSBuZXcgRHJvcEV2ZW50KGRyb3BTdGF0ZSwgZHJhZ0V2ZW50LCAnZHJhZ2VudGVyJylcblxuICAgICAgZHJhZ0V2ZW50LmRyYWdFbnRlciA9IGRyb3BTdGF0ZS5jdXIuZWxlbWVudFxuICAgICAgZHJhZ0V2ZW50LmRyb3B6b25lID0gZHJvcFN0YXRlLmN1ci5kcm9wem9uZVxuICAgIH1cbiAgfVxuXG4gIGlmIChkcmFnRXZlbnQudHlwZSA9PT0gJ2RyYWdlbmQnICYmIGRyb3BTdGF0ZS5jdXIuZHJvcHpvbmUpIHtcbiAgICBkcm9wRXZlbnRzLmRyb3AgPSBuZXcgRHJvcEV2ZW50KGRyb3BTdGF0ZSwgZHJhZ0V2ZW50LCAnZHJvcCcpXG5cbiAgICBkcmFnRXZlbnQuZHJvcHpvbmUgPSBkcm9wU3RhdGUuY3VyLmRyb3B6b25lXG4gICAgZHJhZ0V2ZW50LnJlbGF0ZWRUYXJnZXQgPSBkcm9wU3RhdGUuY3VyLmVsZW1lbnRcbiAgfVxuICBpZiAoZHJhZ0V2ZW50LnR5cGUgPT09ICdkcmFnbW92ZScgJiYgZHJvcFN0YXRlLmN1ci5kcm9wem9uZSkge1xuICAgIGRyb3BFdmVudHMubW92ZSA9IG5ldyBEcm9wRXZlbnQoZHJvcFN0YXRlLCBkcmFnRXZlbnQsICdkcm9wbW92ZScpXG5cbiAgICBkcm9wRXZlbnRzLm1vdmUuZHJhZ21vdmUgPSBkcmFnRXZlbnRcbiAgICBkcmFnRXZlbnQuZHJvcHpvbmUgPSBkcm9wU3RhdGUuY3VyLmRyb3B6b25lXG4gIH1cblxuICByZXR1cm4gZHJvcEV2ZW50c1xufVxuXG5mdW5jdGlvbiBmaXJlRHJvcEV2ZW50cyAoaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uLCBldmVudHMpIHtcbiAgY29uc3QgeyBkcm9wU3RhdGUgfSA9IGludGVyYWN0aW9uXG4gIGNvbnN0IHtcbiAgICBhY3RpdmVEcm9wcyxcbiAgICBjdXIsXG4gICAgcHJldixcbiAgfSA9IGRyb3BTdGF0ZVxuXG4gIGlmIChldmVudHMubGVhdmUpIHsgcHJldi5kcm9wem9uZS5maXJlKGV2ZW50cy5sZWF2ZSkgfVxuICBpZiAoZXZlbnRzLm1vdmUpIHsgY3VyLmRyb3B6b25lLmZpcmUoZXZlbnRzLm1vdmUpIH1cbiAgaWYgKGV2ZW50cy5lbnRlcikgeyBjdXIuZHJvcHpvbmUuZmlyZShldmVudHMuZW50ZXIpIH1cbiAgaWYgKGV2ZW50cy5kcm9wKSB7IGN1ci5kcm9wem9uZS5maXJlKGV2ZW50cy5kcm9wKSB9XG5cbiAgaWYgKGV2ZW50cy5kZWFjdGl2YXRlKSB7XG4gICAgZmlyZUFjdGl2YXRpb25FdmVudHMoYWN0aXZlRHJvcHMsIGV2ZW50cy5kZWFjdGl2YXRlKVxuICB9XG5cbiAgZHJvcFN0YXRlLnByZXYuZHJvcHpvbmUgID0gY3VyLmRyb3B6b25lXG4gIGRyb3BTdGF0ZS5wcmV2LmVsZW1lbnQgPSBjdXIuZWxlbWVudFxufVxuXG5mdW5jdGlvbiBvbkV2ZW50Q3JlYXRlZCAoeyBpbnRlcmFjdGlvbiwgaUV2ZW50LCBldmVudCB9OiBJbnRlcmFjdC5TaWduYWxBcmcsIHNjb3BlKSB7XG4gIGlmIChpRXZlbnQudHlwZSAhPT0gJ2RyYWdtb3ZlJyAmJiBpRXZlbnQudHlwZSAhPT0gJ2RyYWdlbmQnKSB7IHJldHVybiB9XG5cbiAgY29uc3QgeyBkcm9wU3RhdGUgfSA9IGludGVyYWN0aW9uXG5cbiAgaWYgKHNjb3BlLmR5bmFtaWNEcm9wKSB7XG4gICAgZHJvcFN0YXRlLmFjdGl2ZURyb3BzID0gZ2V0QWN0aXZlRHJvcHMoc2NvcGUsIGludGVyYWN0aW9uLmVsZW1lbnQpXG4gIH1cblxuICBjb25zdCBkcmFnRXZlbnQgPSBpRXZlbnRcbiAgY29uc3QgZHJvcFJlc3VsdCA9IGdldERyb3AoaW50ZXJhY3Rpb24sIGRyYWdFdmVudCwgZXZlbnQpXG5cbiAgLy8gdXBkYXRlIHJlamVjdGVkIHN0YXR1c1xuICBkcm9wU3RhdGUucmVqZWN0ZWQgPSBkcm9wU3RhdGUucmVqZWN0ZWQgJiZcbiAgICAhIWRyb3BSZXN1bHQgJiZcbiAgICBkcm9wUmVzdWx0LmRyb3B6b25lID09PSBkcm9wU3RhdGUuY3VyLmRyb3B6b25lICYmXG4gICAgZHJvcFJlc3VsdC5lbGVtZW50ID09PSBkcm9wU3RhdGUuY3VyLmVsZW1lbnRcblxuICBkcm9wU3RhdGUuY3VyLmRyb3B6b25lICA9IGRyb3BSZXN1bHQgJiYgZHJvcFJlc3VsdC5kcm9wem9uZVxuICBkcm9wU3RhdGUuY3VyLmVsZW1lbnQgPSBkcm9wUmVzdWx0ICYmIGRyb3BSZXN1bHQuZWxlbWVudFxuXG4gIGRyb3BTdGF0ZS5ldmVudHMgPSBnZXREcm9wRXZlbnRzKGludGVyYWN0aW9uLCBldmVudCwgZHJhZ0V2ZW50KVxufVxuXG5mdW5jdGlvbiBkcm9wem9uZU1ldGhvZCAoaW50ZXJhY3RhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUpOiBJbnRlcmFjdC5Ecm9wem9uZU9wdGlvbnNcbmZ1bmN0aW9uIGRyb3B6b25lTWV0aG9kIChpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9uczogSW50ZXJhY3QuRHJvcHpvbmVPcHRpb25zIHwgYm9vbGVhbilcbmZ1bmN0aW9uIGRyb3B6b25lTWV0aG9kIChpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9ucz86IEludGVyYWN0LkRyb3B6b25lT3B0aW9ucyB8IGJvb2xlYW4pIHtcbiAgaWYgKHV0aWxzLmlzLm9iamVjdChvcHRpb25zKSkge1xuICAgIGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcblxuICAgIGlmIChvcHRpb25zLmxpc3RlbmVycykge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHV0aWxzLm5vcm1hbGl6ZUxpc3RlbmVycyhvcHRpb25zLmxpc3RlbmVycylcbiAgICAgIC8vIHJlbmFtZSAnZHJvcCcgdG8gJycgYXMgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICdkcm9wJ1xuICAgICAgY29uc3QgY29ycmVjdGVkID0gT2JqZWN0LmtleXMobm9ybWFsaXplZCkucmVkdWNlKChhY2MsIHR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgY29ycmVjdGVkVHlwZSA9IC9eKGVudGVyfGxlYXZlKS8udGVzdCh0eXBlKVxuICAgICAgICAgID8gYGRyYWcke3R5cGV9YFxuICAgICAgICAgIDogL14oYWN0aXZhdGV8ZGVhY3RpdmF0ZXxtb3ZlKS8udGVzdCh0eXBlKVxuICAgICAgICAgICAgPyBgZHJvcCR7dHlwZX1gXG4gICAgICAgICAgICA6IHR5cGVcblxuICAgICAgICBhY2NbY29ycmVjdGVkVHlwZV0gPSBub3JtYWxpemVkW3R5cGVdXG5cbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwge30pXG5cbiAgICAgIGludGVyYWN0YWJsZS5vZmYoaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5saXN0ZW5lcnMpXG4gICAgICBpbnRlcmFjdGFibGUub24oY29ycmVjdGVkKVxuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5saXN0ZW5lcnMgPSBjb3JyZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcCkpIHsgaW50ZXJhY3RhYmxlLm9uKCdkcm9wJywgb3B0aW9ucy5vbmRyb3ApIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcGFjdGl2YXRlKSkgeyBpbnRlcmFjdGFibGUub24oJ2Ryb3BhY3RpdmF0ZScsIG9wdGlvbnMub25kcm9wYWN0aXZhdGUpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcGRlYWN0aXZhdGUpKSB7IGludGVyYWN0YWJsZS5vbignZHJvcGRlYWN0aXZhdGUnLCBvcHRpb25zLm9uZHJvcGRlYWN0aXZhdGUpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJhZ2VudGVyKSkgeyBpbnRlcmFjdGFibGUub24oJ2RyYWdlbnRlcicsIG9wdGlvbnMub25kcmFnZW50ZXIpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJhZ2xlYXZlKSkgeyBpbnRlcmFjdGFibGUub24oJ2RyYWdsZWF2ZScsIG9wdGlvbnMub25kcmFnbGVhdmUpIH1cbiAgICBpZiAodXRpbHMuaXMuZnVuYyhvcHRpb25zLm9uZHJvcG1vdmUpKSB7IGludGVyYWN0YWJsZS5vbignZHJvcG1vdmUnLCBvcHRpb25zLm9uZHJvcG1vdmUpIH1cblxuICAgIGlmICgvXihwb2ludGVyfGNlbnRlcikkLy50ZXN0KG9wdGlvbnMub3ZlcmxhcCBhcyBzdHJpbmcpKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLm92ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXBcbiAgICB9XG4gICAgZWxzZSBpZiAodXRpbHMuaXMubnVtYmVyKG9wdGlvbnMub3ZlcmxhcCkpIHtcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3Aub3ZlcmxhcCA9IE1hdGgubWF4KE1hdGgubWluKDEsIG9wdGlvbnMub3ZlcmxhcCksIDApXG4gICAgfVxuICAgIGlmICgnYWNjZXB0JyBpbiBvcHRpb25zKSB7XG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmFjY2VwdCA9IG9wdGlvbnMuYWNjZXB0XG4gICAgfVxuICAgIGlmICgnY2hlY2tlcicgaW4gb3B0aW9ucykge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5jaGVja2VyID0gb3B0aW9ucy5jaGVja2VyXG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyYWN0YWJsZVxuICB9XG5cbiAgaWYgKHV0aWxzLmlzLmJvb2wob3B0aW9ucykpIHtcbiAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmVuYWJsZWQgPSBvcHRpb25zXG5cbiAgICByZXR1cm4gaW50ZXJhY3RhYmxlXG4gIH1cblxuICByZXR1cm4gaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcFxufVxuXG5mdW5jdGlvbiBkcm9wQ2hlY2tNZXRob2QgKFxuICBpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSxcbiAgZHJhZ0V2ZW50OiBJbnRlcmFjdEV2ZW50LFxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgZHJhZ2dhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsXG4gIGRyYWdnYWJsZUVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQsXG4gIGRyb3BFbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50LFxuICByZWN0OiBhbnlcbikge1xuICBsZXQgZHJvcHBlZCA9IGZhbHNlXG5cbiAgLy8gaWYgdGhlIGRyb3B6b25lIGhhcyBubyByZWN0IChlZy4gZGlzcGxheTogbm9uZSlcbiAgLy8gY2FsbCB0aGUgY3VzdG9tIGRyb3BDaGVja2VyIG9yIGp1c3QgcmV0dXJuIGZhbHNlXG4gIGlmICghKHJlY3QgPSByZWN0IHx8IGludGVyYWN0YWJsZS5nZXRSZWN0KGRyb3BFbGVtZW50KSkpIHtcbiAgICByZXR1cm4gKGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AuY2hlY2tlclxuICAgICAgPyBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmNoZWNrZXIoZHJhZ0V2ZW50LCBldmVudCwgZHJvcHBlZCwgaW50ZXJhY3RhYmxlLCBkcm9wRWxlbWVudCwgZHJhZ2dhYmxlLCBkcmFnZ2FibGVFbGVtZW50KVxuICAgICAgOiBmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGRyb3BPdmVybGFwID0gaW50ZXJhY3RhYmxlLm9wdGlvbnMuZHJvcC5vdmVybGFwXG5cbiAgaWYgKGRyb3BPdmVybGFwID09PSAncG9pbnRlcicpIHtcbiAgICBjb25zdCBvcmlnaW4gPSB1dGlscy5nZXRPcmlnaW5YWShkcmFnZ2FibGUsIGRyYWdnYWJsZUVsZW1lbnQsICdkcmFnJylcbiAgICBjb25zdCBwYWdlID0gdXRpbHMucG9pbnRlci5nZXRQYWdlWFkoZHJhZ0V2ZW50KVxuXG4gICAgcGFnZS54ICs9IG9yaWdpbi54XG4gICAgcGFnZS55ICs9IG9yaWdpbi55XG5cbiAgICBjb25zdCBob3Jpem9udGFsID0gKHBhZ2UueCA+IHJlY3QubGVmdCkgJiYgKHBhZ2UueCA8IHJlY3QucmlnaHQpXG4gICAgY29uc3QgdmVydGljYWwgICA9IChwYWdlLnkgPiByZWN0LnRvcCkgJiYgKHBhZ2UueSA8IHJlY3QuYm90dG9tKVxuXG4gICAgZHJvcHBlZCA9IGhvcml6b250YWwgJiYgdmVydGljYWxcbiAgfVxuXG4gIGNvbnN0IGRyYWdSZWN0ID0gZHJhZ2dhYmxlLmdldFJlY3QoZHJhZ2dhYmxlRWxlbWVudClcblxuICBpZiAoZHJhZ1JlY3QgJiYgZHJvcE92ZXJsYXAgPT09ICdjZW50ZXInKSB7XG4gICAgY29uc3QgY3ggPSBkcmFnUmVjdC5sZWZ0ICsgZHJhZ1JlY3Qud2lkdGggIC8gMlxuICAgIGNvbnN0IGN5ID0gZHJhZ1JlY3QudG9wICArIGRyYWdSZWN0LmhlaWdodCAvIDJcblxuICAgIGRyb3BwZWQgPSBjeCA+PSByZWN0LmxlZnQgJiYgY3ggPD0gcmVjdC5yaWdodCAmJiBjeSA+PSByZWN0LnRvcCAmJiBjeSA8PSByZWN0LmJvdHRvbVxuICB9XG5cbiAgaWYgKGRyYWdSZWN0ICYmIHV0aWxzLmlzLm51bWJlcihkcm9wT3ZlcmxhcCkpIHtcbiAgICBjb25zdCBvdmVybGFwQXJlYSAgPSAoTWF0aC5tYXgoMCwgTWF0aC5taW4ocmVjdC5yaWdodCwgZHJhZ1JlY3QucmlnaHQpIC0gTWF0aC5tYXgocmVjdC5sZWZ0LCBkcmFnUmVjdC5sZWZ0KSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyZWN0LmJvdHRvbSwgZHJhZ1JlY3QuYm90dG9tKSAtIE1hdGgubWF4KHJlY3QudG9wLCBkcmFnUmVjdC50b3ApKSlcblxuICAgIGNvbnN0IG92ZXJsYXBSYXRpbyA9IG92ZXJsYXBBcmVhIC8gKGRyYWdSZWN0LndpZHRoICogZHJhZ1JlY3QuaGVpZ2h0KVxuXG4gICAgZHJvcHBlZCA9IG92ZXJsYXBSYXRpbyA+PSBkcm9wT3ZlcmxhcFxuICB9XG5cbiAgaWYgKGludGVyYWN0YWJsZS5vcHRpb25zLmRyb3AuY2hlY2tlcikge1xuICAgIGRyb3BwZWQgPSBpbnRlcmFjdGFibGUub3B0aW9ucy5kcm9wLmNoZWNrZXIoZHJhZ0V2ZW50LCBldmVudCwgZHJvcHBlZCwgaW50ZXJhY3RhYmxlLCBkcm9wRWxlbWVudCwgZHJhZ2dhYmxlLCBkcmFnZ2FibGVFbGVtZW50KVxuICB9XG5cbiAgcmV0dXJuIGRyb3BwZWRcbn1cblxuY29uc3QgZHJvcCA9IHtcbiAgaWQ6ICdhY3Rpb25zL2Ryb3AnLFxuICBpbnN0YWxsLFxuICBnZXRBY3RpdmVEcm9wcyxcbiAgZ2V0RHJvcCxcbiAgZ2V0RHJvcEV2ZW50cyxcbiAgZmlyZURyb3BFdmVudHMsXG4gIGRlZmF1bHRzOiB7XG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgYWNjZXB0IDogbnVsbCxcbiAgICBvdmVybGFwOiAncG9pbnRlcicsXG4gIH0gYXMgSW50ZXJhY3QuRHJvcHpvbmVPcHRpb25zLFxufVxuXG5leHBvcnQgZGVmYXVsdCBkcm9wXG4iXX0= \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/actions/drop/index.js.map b/packages/actions/drop/index.js.map index 3befbc64a..aa530e837 100644 --- a/packages/actions/drop/index.js.map +++ b/packages/actions/drop/index.js.map @@ -1 +1,152 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "Interactable", + "Scope", + "utils", + "drag", + "DropEvent", + "install", + "scope", + "actions", + "interact", + "defaults", + "usePlugin", + "prototype", + "dropzone", + "options", + "dropzoneMethod", + "dropCheck", + "dragEvent", + "event", + "draggable", + "draggableElement", + "dropElement", + "rect", + "dropCheckMethod", + "dynamicDrop", + "newValue", + "is", + "bool", + "arr", + "merge", + "eventTypes", + "methodDict", + "drop", + "collectDrops", + "interactables", + "drops", + "list", + "enabled", + "accept", + "element", + "string", + "dom", + "matchesSelector", + "func", + "dropElements", + "target", + "_context", + "querySelectorAll", + "array", + "dropzoneElement", + "push", + "fireActivationEvents", + "activeDrops", + "fire", + "propagationStopped", + "immediatePropagationStopped", + "getActiveDrops", + "dragElement", + "activeDrop", + "getRect", + "getDrop", + "dropState", + "interactable", + "pointerEvent", + "validDrops", + "dropIndex", + "indexOfDeepestElement", + "getDropEvents", + "interaction", + "_pointerEvent", + "dropEvents", + "enter", + "leave", + "activate", + "deactivate", + "move", + "type", + "rejected", + "cur", + "prev", + "dragLeave", + "prevDropzone", + "dragEnter", + "relatedTarget", + "dragmove", + "fireDropEvents", + "events", + "onEventCreated", + "iEvent", + "dropResult", + "object", + "listeners", + "normalized", + "normalizeListeners", + "corrected", + "Object", + "keys", + "reduce", + "acc", + "correctedType", + "test", + "off", + "on", + "ondrop", + "ondropactivate", + "ondropdeactivate", + "ondragenter", + "ondragleave", + "ondropmove", + "overlap", + "number", + "Math", + "max", + "min", + "checker", + "dropped", + "dropOverlap", + "origin", + "getOriginXY", + "page", + "pointer", + "getPageXY", + "x", + "y", + "horizontal", + "left", + "right", + "vertical", + "top", + "bottom", + "dragRect", + "cx", + "width", + "cy", + "height", + "overlapArea", + "overlapRatio", + "id", + "prepared", + "name", + "fireDropAfterMove" + ], + "mappings": "AAAA,OAAOA,YAAP;AAEA,SAASC,KAAT;AACA,OAAO,KAAKC,KAAZ;AACA,OAAOC,IAAP;AACA,OAAOC,SAAP;;AA6DA,SAASC,OAAT,CAAkBC,KAAlB,EAAgC;AAC9B,QAAM;AACJC,IAAAA,OADI;;AAEJ;AACAC,IAAAA,QAHI;;AAIJ;AACAR,IAAAA,YALI;AAKU;AACdS,IAAAA;AANI,MAOFH,KAPJ;AASAA,EAAAA,KAAK,CAACI,SAAN,CAAgBP,IAAhB;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCAH,EAAAA,YAAY,CAACW,SAAb,CAAuBC,QAAvB,GAAkC,UAAuCC,OAAvC,EAAqF;AACrH,WAAOC,cAAc,CAAC,IAAD,EAAOD,OAAP,CAArB;AACD,GAFD;AAIA;;;;;;;;;;;;;;;;;AAeAb,EAAAA,YAAY,CAACW,SAAb,CAAuBI,SAAvB,GAAmC,UAAuCC,SAAvC,EAAkDC,KAAlD,EAAyDC,SAAzD,EAAoEC,gBAApE,EAAsFC,WAAtF,EAAmGC,IAAnG,EAAyG;AAC1I,WAAOC,eAAe,CAAC,IAAD,EAAON,SAAP,EAAkBC,KAAlB,EAAyBC,SAAzB,EAAoCC,gBAApC,EAAsDC,WAAtD,EAAmEC,IAAnE,CAAtB;AACD,GAFD;AAIA;;;;;;;;;;AAQAb,EAAAA,QAAQ,CAACe,WAAT,GAAuB,UAAUC,QAAV,EAA8B;AACnD,QAAItB,KAAK,CAACuB,EAAN,CAASC,IAAT,CAAcF,QAAd,CAAJ,EAA6B;AAC3B;AACA;AACA;AAEAlB,MAAAA,KAAK,CAACiB,WAAN,GAAoBC,QAApB;AAEA,aAAOhB,QAAP;AACD;;AACD,WAAOF,KAAK,CAACiB,WAAb;AACD,GAXD;;AAaArB,EAAAA,KAAK,CAACyB,GAAN,CAAUC,KAAV,CAAgBrB,OAAO,CAACsB,UAAxB,EAAoC,CAClC,WADkC,EAElC,WAFkC,EAGlC,cAHkC,EAIlC,gBAJkC,EAKlC,UALkC,EAMlC,MANkC,CAApC;AAQAtB,EAAAA,OAAO,CAACuB,UAAR,CAAmBC,IAAnB,GAA0B,UAA1B;AAEAzB,EAAAA,KAAK,CAACiB,WAAN,GAAoB,KAApB;AAEAd,EAAAA,QAAQ,CAACF,OAAT,CAAiBwB,IAAjB,GAAwBA,IAAI,CAACtB,QAA7B;AACD;;AAED,SAASuB,YAAT,CAAuB;AAAEC,EAAAA;AAAF,CAAvB,EAA0Cd,gBAA1C,EAA4D;AAC1D,QAAMe,KAAK,GAAG,EAAd,CAD0D,CAG1D;;AACA,OAAK,MAAMtB,QAAX,IAAuBqB,aAAa,CAACE,IAArC,EAA2C;AACzC,QAAI,CAACvB,QAAQ,CAACC,OAAT,CAAiBkB,IAAjB,CAAsBK,OAA3B,EAAoC;AAAE;AAAU;;AAEhD,UAAMC,MAAM,GAAGzB,QAAQ,CAACC,OAAT,CAAiBkB,IAAjB,CAAsBM,MAArC,CAHyC,CAKzC;;AACA,QAAKnC,KAAK,CAACuB,EAAN,CAASa,OAAT,CAAiBD,MAAjB,KAA4BA,MAAM,KAAKlB,gBAAxC,IACCjB,KAAK,CAACuB,EAAN,CAASc,MAAT,CAAgBF,MAAhB,KACD,CAACnC,KAAK,CAACsC,GAAN,CAAUC,eAAV,CAA0BtB,gBAA1B,EAA4CkB,MAA5C,CAFD,IAGCnC,KAAK,CAACuB,EAAN,CAASiB,IAAT,CAAcL,MAAd,KAAyB,CAACA,MAAM,CAAC;AAAEzB,MAAAA,QAAF;AAAYO,MAAAA;AAAZ,KAAD,CAHrC,EAGwE;AACtE;AACD,KAXwC,CAazC;;;AACA,UAAMwB,YAAY,GAAGzC,KAAK,CAACuB,EAAN,CAASc,MAAT,CAAgB3B,QAAQ,CAACgC,MAAzB,IACjBhC,QAAQ,CAACiC,QAAT,CAAkBC,gBAAlB,CAAmClC,QAAQ,CAACgC,MAA5C,CADiB,GAEjB1C,KAAK,CAACuB,EAAN,CAASsB,KAAT,CAAenC,QAAQ,CAACgC,MAAxB,IAAkChC,QAAQ,CAACgC,MAA3C,GAAoD,CAAChC,QAAQ,CAACgC,MAAV,CAFxD;;AAIA,SAAK,MAAMI,eAAX,IAA8BL,YAA9B,EAA4C;AAC1C,UAAIK,eAAe,KAAK7B,gBAAxB,EAA0C;AACxCe,QAAAA,KAAK,CAACe,IAAN,CAAW;AACTrC,UAAAA,QADS;AAET0B,UAAAA,OAAO,EAAEU;AAFA,SAAX;AAID;AACF;AACF;;AAED,SAAOd,KAAP;AACD;;AAED,SAASgB,oBAAT,CAA+BC,WAA/B,EAA4ClC,KAA5C,EAAmD;AACjD;AACA,OAAK,MAAM;AAAEL,IAAAA,QAAF;AAAY0B,IAAAA;AAAZ,GAAX,IAAoCa,WAApC,EAAiD;AAC/ClC,IAAAA,KAAK,CAACL,QAAN,GAAiBA,QAAjB,CAD+C,CAG/C;;AACAK,IAAAA,KAAK,CAAC2B,MAAN,GAAeN,OAAf;AACA1B,IAAAA,QAAQ,CAACwC,IAAT,CAAcnC,KAAd;AACAA,IAAAA,KAAK,CAACoC,kBAAN,GAA2BpC,KAAK,CAACqC,2BAAN,GAAoC,KAA/D;AACD;AACF,C,CAED;AACA;AACA;;;AACA,SAASC,cAAT,CAAyBjD,KAAzB,EAAuCkD,WAAvC,EAAsE;AACpE;AACA,QAAML,WAAW,GAAGnB,YAAY,CAAC1B,KAAD,EAAQkD,WAAR,CAAhC;;AAEA,OAAK,MAAMC,UAAX,IAAyBN,WAAzB,EAAsC;AACpCM,IAAAA,UAAU,CAACpC,IAAX,GAAkBoC,UAAU,CAAC7C,QAAX,CAAoB8C,OAApB,CAA4BD,UAAU,CAACnB,OAAvC,CAAlB;AACD;;AAED,SAAOa,WAAP;AACD;;AAED,SAASQ,OAAT,CAAkB;AAAEC,EAAAA,SAAF;AAAaC,EAAAA,YAAY,EAAE3C,SAA3B;AAAsCoB,EAAAA,OAAO,EAAEkB;AAA/C,CAAlB,EAA+GxC,SAA/G,EAA0H8C,YAA1H,EAAwI;AACtI,QAAMC,UAAU,GAAG,EAAnB,CADsI,CAGtI;;AACA,OAAK,MAAM;AAAEnD,IAAAA,QAAF;AAAY0B,IAAAA,OAAO,EAAEU,eAArB;AAAsC3B,IAAAA;AAAtC,GAAX,IAA2DuC,SAAS,CAACT,WAArE,EAAkF;AAChFY,IAAAA,UAAU,CAACd,IAAX,CAAgBrC,QAAQ,CAACG,SAAT,CAAmBC,SAAnB,EAA8B8C,YAA9B,EAA4C5C,SAA5C,EAAuDsC,WAAvD,EAAoER,eAApE,EAAqF3B,IAArF,IACZ2B,eADY,GAEZ,IAFJ;AAGD,GARqI,CAUtI;;;AACA,QAAMgB,SAAS,GAAG9D,KAAK,CAACsC,GAAN,CAAUyB,qBAAV,CAAgCF,UAAhC,CAAlB;AAEA,SAAOH,SAAS,CAACT,WAAV,CAAsBa,SAAtB,KAAoC,IAA3C;AACD;;AAED,SAASE,aAAT,CAAwBC,WAAxB,EAA2DC,aAA3D,EAA0EpD,SAA1E,EAAqF;AACnF,QAAM;AAAE4C,IAAAA;AAAF,MAAgBO,WAAtB;AACA,QAAME,UAAU,GAAG;AACjBC,IAAAA,KAAK,EAAO,IADK;AAEjBC,IAAAA,KAAK,EAAO,IAFK;AAGjBC,IAAAA,QAAQ,EAAI,IAHK;AAIjBC,IAAAA,UAAU,EAAE,IAJK;AAKjBC,IAAAA,IAAI,EAAQ,IALK;AAMjB3C,IAAAA,IAAI,EAAQ;AANK,GAAnB;;AASA,MAAIf,SAAS,CAAC2D,IAAV,KAAmB,WAAvB,EAAoC;AAClCN,IAAAA,UAAU,CAACG,QAAX,GAAsB,IAAIpE,SAAJ,CAAcwD,SAAd,EAAyB5C,SAAzB,EAAoC,cAApC,CAAtB;AAEAqD,IAAAA,UAAU,CAACG,QAAX,CAAoB5B,MAApB,GAA+B,IAA/B;AACAyB,IAAAA,UAAU,CAACG,QAAX,CAAoB5D,QAApB,GAA+B,IAA/B;AACD;;AACD,MAAII,SAAS,CAAC2D,IAAV,KAAmB,SAAvB,EAAkC;AAChCN,IAAAA,UAAU,CAACI,UAAX,GAAwB,IAAIrE,SAAJ,CAAcwD,SAAd,EAAyB5C,SAAzB,EAAoC,gBAApC,CAAxB;AAEAqD,IAAAA,UAAU,CAACI,UAAX,CAAsB7B,MAAtB,GAAiC,IAAjC;AACAyB,IAAAA,UAAU,CAACI,UAAX,CAAsB7D,QAAtB,GAAiC,IAAjC;AACD;;AAED,MAAIgD,SAAS,CAACgB,QAAd,EAAwB;AACtB,WAAOP,UAAP;AACD;;AAED,MAAIT,SAAS,CAACiB,GAAV,CAAcvC,OAAd,KAA0BsB,SAAS,CAACkB,IAAV,CAAexC,OAA7C,EAAsD;AACpD;AACA,QAAIsB,SAAS,CAACkB,IAAV,CAAelE,QAAnB,EAA6B;AAC3ByD,MAAAA,UAAU,CAACE,KAAX,GAAmB,IAAInE,SAAJ,CAAcwD,SAAd,EAAyB5C,SAAzB,EAAoC,WAApC,CAAnB;AAEAA,MAAAA,SAAS,CAAC+D,SAAV,GAAyBV,UAAU,CAACE,KAAX,CAAiB3B,MAAjB,GAA4BgB,SAAS,CAACkB,IAAV,CAAexC,OAApE;AACAtB,MAAAA,SAAS,CAACgE,YAAV,GAAyBX,UAAU,CAACE,KAAX,CAAiB3D,QAAjB,GAA4BgD,SAAS,CAACkB,IAAV,CAAelE,QAApE;AACD,KAPmD,CAQpD;;;AACA,QAAIgD,SAAS,CAACiB,GAAV,CAAcjE,QAAlB,EAA4B;AAC1ByD,MAAAA,UAAU,CAACC,KAAX,GAAmB,IAAIlE,SAAJ,CAAcwD,SAAd,EAAyB5C,SAAzB,EAAoC,WAApC,CAAnB;AAEAA,MAAAA,SAAS,CAACiE,SAAV,GAAsBrB,SAAS,CAACiB,GAAV,CAAcvC,OAApC;AACAtB,MAAAA,SAAS,CAACJ,QAAV,GAAqBgD,SAAS,CAACiB,GAAV,CAAcjE,QAAnC;AACD;AACF;;AAED,MAAII,SAAS,CAAC2D,IAAV,KAAmB,SAAnB,IAAgCf,SAAS,CAACiB,GAAV,CAAcjE,QAAlD,EAA4D;AAC1DyD,IAAAA,UAAU,CAACtC,IAAX,GAAkB,IAAI3B,SAAJ,CAAcwD,SAAd,EAAyB5C,SAAzB,EAAoC,MAApC,CAAlB;AAEAA,IAAAA,SAAS,CAACJ,QAAV,GAAqBgD,SAAS,CAACiB,GAAV,CAAcjE,QAAnC;AACAI,IAAAA,SAAS,CAACkE,aAAV,GAA0BtB,SAAS,CAACiB,GAAV,CAAcvC,OAAxC;AACD;;AACD,MAAItB,SAAS,CAAC2D,IAAV,KAAmB,UAAnB,IAAiCf,SAAS,CAACiB,GAAV,CAAcjE,QAAnD,EAA6D;AAC3DyD,IAAAA,UAAU,CAACK,IAAX,GAAkB,IAAItE,SAAJ,CAAcwD,SAAd,EAAyB5C,SAAzB,EAAoC,UAApC,CAAlB;AAEAqD,IAAAA,UAAU,CAACK,IAAX,CAAgBS,QAAhB,GAA2BnE,SAA3B;AACAA,IAAAA,SAAS,CAACJ,QAAV,GAAqBgD,SAAS,CAACiB,GAAV,CAAcjE,QAAnC;AACD;;AAED,SAAOyD,UAAP;AACD;;AAED,SAASe,cAAT,CAAyBjB,WAAzB,EAA4DkB,MAA5D,EAAoE;AAClE,QAAM;AAAEzB,IAAAA;AAAF,MAAgBO,WAAtB;AACA,QAAM;AACJhB,IAAAA,WADI;AAEJ0B,IAAAA,GAFI;AAGJC,IAAAA;AAHI,MAIFlB,SAJJ;;AAMA,MAAIyB,MAAM,CAACd,KAAX,EAAkB;AAAEO,IAAAA,IAAI,CAAClE,QAAL,CAAcwC,IAAd,CAAmBiC,MAAM,CAACd,KAA1B;AAAkC;;AACtD,MAAIc,MAAM,CAACX,IAAX,EAAiB;AAAEG,IAAAA,GAAG,CAACjE,QAAJ,CAAawC,IAAb,CAAkBiC,MAAM,CAACX,IAAzB;AAAgC;;AACnD,MAAIW,MAAM,CAACf,KAAX,EAAkB;AAAEO,IAAAA,GAAG,CAACjE,QAAJ,CAAawC,IAAb,CAAkBiC,MAAM,CAACf,KAAzB;AAAiC;;AACrD,MAAIe,MAAM,CAACtD,IAAX,EAAiB;AAAE8C,IAAAA,GAAG,CAACjE,QAAJ,CAAawC,IAAb,CAAkBiC,MAAM,CAACtD,IAAzB;AAAgC;;AAEnD,MAAIsD,MAAM,CAACZ,UAAX,EAAuB;AACrBvB,IAAAA,oBAAoB,CAACC,WAAD,EAAckC,MAAM,CAACZ,UAArB,CAApB;AACD;;AAEDb,EAAAA,SAAS,CAACkB,IAAV,CAAelE,QAAf,GAA2BiE,GAAG,CAACjE,QAA/B;AACAgD,EAAAA,SAAS,CAACkB,IAAV,CAAexC,OAAf,GAAyBuC,GAAG,CAACvC,OAA7B;AACD;;AAED,SAASgD,cAAT,CAAyB;AAAEnB,EAAAA,WAAF;AAAeoB,EAAAA,MAAf;AAAuBtE,EAAAA;AAAvB,CAAzB,EAA8EX,KAA9E,EAAqF;AACnF,MAAIiF,MAAM,CAACZ,IAAP,KAAgB,UAAhB,IAA8BY,MAAM,CAACZ,IAAP,KAAgB,SAAlD,EAA6D;AAAE;AAAQ;;AAEvE,QAAM;AAAEf,IAAAA;AAAF,MAAgBO,WAAtB;;AAEA,MAAI7D,KAAK,CAACiB,WAAV,EAAuB;AACrBqC,IAAAA,SAAS,CAACT,WAAV,GAAwBI,cAAc,CAACjD,KAAD,EAAQ6D,WAAW,CAAC7B,OAApB,CAAtC;AACD;;AAED,QAAMtB,SAAS,GAAGuE,MAAlB;AACA,QAAMC,UAAU,GAAG7B,OAAO,CAACQ,WAAD,EAAcnD,SAAd,EAAyBC,KAAzB,CAA1B,CAVmF,CAYnF;;AACA2C,EAAAA,SAAS,CAACgB,QAAV,GAAqBhB,SAAS,CAACgB,QAAV,IACnB,CAAC,CAACY,UADiB,IAEnBA,UAAU,CAAC5E,QAAX,KAAwBgD,SAAS,CAACiB,GAAV,CAAcjE,QAFnB,IAGnB4E,UAAU,CAAClD,OAAX,KAAuBsB,SAAS,CAACiB,GAAV,CAAcvC,OAHvC;AAKAsB,EAAAA,SAAS,CAACiB,GAAV,CAAcjE,QAAd,GAA0B4E,UAAU,IAAIA,UAAU,CAAC5E,QAAnD;AACAgD,EAAAA,SAAS,CAACiB,GAAV,CAAcvC,OAAd,GAAwBkD,UAAU,IAAIA,UAAU,CAAClD,OAAjD;AAEAsB,EAAAA,SAAS,CAACyB,MAAV,GAAmBnB,aAAa,CAACC,WAAD,EAAclD,KAAd,EAAqBD,SAArB,CAAhC;AACD;;AAID,SAASF,cAAT,CAAyB+C,YAAzB,EAA8DhD,OAA9D,EAA4G;AAC1G,MAAIX,KAAK,CAACuB,EAAN,CAASgE,MAAT,CAAgB5E,OAAhB,CAAJ,EAA8B;AAC5BgD,IAAAA,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BK,OAA1B,GAAoCvB,OAAO,CAACuB,OAAR,KAAoB,KAAxD;;AAEA,QAAIvB,OAAO,CAAC6E,SAAZ,EAAuB;AACrB,YAAMC,UAAU,GAAGzF,KAAK,CAAC0F,kBAAN,CAAyB/E,OAAO,CAAC6E,SAAjC,CAAnB,CADqB,CAErB;;AACA,YAAMG,SAAS,GAAGC,MAAM,CAACC,IAAP,CAAYJ,UAAZ,EAAwBK,MAAxB,CAA+B,CAACC,GAAD,EAAMtB,IAAN,KAAe;AAC9D,cAAMuB,aAAa,GAAG,iBAAiBC,IAAjB,CAAsBxB,IAAtB,IACjB,OAAMA,IAAK,EADM,GAElB,8BAA8BwB,IAA9B,CAAmCxB,IAAnC,IACG,OAAMA,IAAK,EADd,GAEEA,IAJN;AAMAsB,QAAAA,GAAG,CAACC,aAAD,CAAH,GAAqBP,UAAU,CAAChB,IAAD,CAA/B;AAEA,eAAOsB,GAAP;AACD,OAViB,EAUf,EAVe,CAAlB;AAYApC,MAAAA,YAAY,CAACuC,GAAb,CAAiBvC,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0B2D,SAA3C;AACA7B,MAAAA,YAAY,CAACwC,EAAb,CAAgBR,SAAhB;AACAhC,MAAAA,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0B2D,SAA1B,GAAsCG,SAAtC;AACD;;AAED,QAAI3F,KAAK,CAACuB,EAAN,CAASiB,IAAT,CAAc7B,OAAO,CAACyF,MAAtB,CAAJ,EAAmC;AAAEzC,MAAAA,YAAY,CAACwC,EAAb,CAAgB,MAAhB,EAAwBxF,OAAO,CAACyF,MAAhC;AAAyC;;AAC9E,QAAIpG,KAAK,CAACuB,EAAN,CAASiB,IAAT,CAAc7B,OAAO,CAAC0F,cAAtB,CAAJ,EAA2C;AAAE1C,MAAAA,YAAY,CAACwC,EAAb,CAAgB,cAAhB,EAAgCxF,OAAO,CAAC0F,cAAxC;AAAyD;;AACtG,QAAIrG,KAAK,CAACuB,EAAN,CAASiB,IAAT,CAAc7B,OAAO,CAAC2F,gBAAtB,CAAJ,EAA6C;AAAE3C,MAAAA,YAAY,CAACwC,EAAb,CAAgB,gBAAhB,EAAkCxF,OAAO,CAAC2F,gBAA1C;AAA6D;;AAC5G,QAAItG,KAAK,CAACuB,EAAN,CAASiB,IAAT,CAAc7B,OAAO,CAAC4F,WAAtB,CAAJ,EAAwC;AAAE5C,MAAAA,YAAY,CAACwC,EAAb,CAAgB,WAAhB,EAA6BxF,OAAO,CAAC4F,WAArC;AAAmD;;AAC7F,QAAIvG,KAAK,CAACuB,EAAN,CAASiB,IAAT,CAAc7B,OAAO,CAAC6F,WAAtB,CAAJ,EAAwC;AAAE7C,MAAAA,YAAY,CAACwC,EAAb,CAAgB,WAAhB,EAA6BxF,OAAO,CAAC6F,WAArC;AAAmD;;AAC7F,QAAIxG,KAAK,CAACuB,EAAN,CAASiB,IAAT,CAAc7B,OAAO,CAAC8F,UAAtB,CAAJ,EAAuC;AAAE9C,MAAAA,YAAY,CAACwC,EAAb,CAAgB,UAAhB,EAA4BxF,OAAO,CAAC8F,UAApC;AAAiD;;AAE1F,QAAI,qBAAqBR,IAArB,CAA0BtF,OAAO,CAAC+F,OAAlC,CAAJ,EAA0D;AACxD/C,MAAAA,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0B6E,OAA1B,GAAoC/F,OAAO,CAAC+F,OAA5C;AACD,KAFD,MAGK,IAAI1G,KAAK,CAACuB,EAAN,CAASoF,MAAT,CAAgBhG,OAAO,CAAC+F,OAAxB,CAAJ,EAAsC;AACzC/C,MAAAA,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0B6E,OAA1B,GAAoCE,IAAI,CAACC,GAAL,CAASD,IAAI,CAACE,GAAL,CAAS,CAAT,EAAYnG,OAAO,CAAC+F,OAApB,CAAT,EAAuC,CAAvC,CAApC;AACD;;AACD,QAAI,YAAY/F,OAAhB,EAAyB;AACvBgD,MAAAA,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BM,MAA1B,GAAmCxB,OAAO,CAACwB,MAA3C;AACD;;AACD,QAAI,aAAaxB,OAAjB,EAA0B;AACxBgD,MAAAA,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BkF,OAA1B,GAAoCpG,OAAO,CAACoG,OAA5C;AACD;;AAED,WAAOpD,YAAP;AACD;;AAED,MAAI3D,KAAK,CAACuB,EAAN,CAASC,IAAT,CAAcb,OAAd,CAAJ,EAA4B;AAC1BgD,IAAAA,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BK,OAA1B,GAAoCvB,OAApC;AAEA,WAAOgD,YAAP;AACD;;AAED,SAAOA,YAAY,CAAChD,OAAb,CAAqBkB,IAA5B;AACD;;AAED,SAAST,eAAT,CACEuC,YADF,EAEE7C,SAFF,EAGEC,KAHF,EAIEC,SAJF,EAKEC,gBALF,EAMEC,WANF,EAOEC,IAPF,EAQE;AACA,MAAI6F,OAAO,GAAG,KAAd,CADA,CAGA;AACA;;AACA,MAAI,EAAE7F,IAAI,GAAGA,IAAI,IAAIwC,YAAY,CAACH,OAAb,CAAqBtC,WAArB,CAAjB,CAAJ,EAAyD;AACvD,WAAQyC,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BkF,OAA1B,GACJpD,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BkF,OAA1B,CAAkCjG,SAAlC,EAA6CC,KAA7C,EAAoDiG,OAApD,EAA6DrD,YAA7D,EAA2EzC,WAA3E,EAAwFF,SAAxF,EAAmGC,gBAAnG,CADI,GAEJ,KAFJ;AAGD;;AAED,QAAMgG,WAAW,GAAGtD,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0B6E,OAA9C;;AAEA,MAAIO,WAAW,KAAK,SAApB,EAA+B;AAC7B,UAAMC,MAAM,GAAGlH,KAAK,CAACmH,WAAN,CAAkBnG,SAAlB,EAA6BC,gBAA7B,EAA+C,MAA/C,CAAf;AACA,UAAMmG,IAAI,GAAGpH,KAAK,CAACqH,OAAN,CAAcC,SAAd,CAAwBxG,SAAxB,CAAb;AAEAsG,IAAAA,IAAI,CAACG,CAAL,IAAUL,MAAM,CAACK,CAAjB;AACAH,IAAAA,IAAI,CAACI,CAAL,IAAUN,MAAM,CAACM,CAAjB;AAEA,UAAMC,UAAU,GAAIL,IAAI,CAACG,CAAL,GAASpG,IAAI,CAACuG,IAAf,IAAyBN,IAAI,CAACG,CAAL,GAASpG,IAAI,CAACwG,KAA1D;AACA,UAAMC,QAAQ,GAAMR,IAAI,CAACI,CAAL,GAASrG,IAAI,CAAC0G,GAAf,IAAwBT,IAAI,CAACI,CAAL,GAASrG,IAAI,CAAC2G,MAAzD;AAEAd,IAAAA,OAAO,GAAGS,UAAU,IAAIG,QAAxB;AACD;;AAED,QAAMG,QAAQ,GAAG/G,SAAS,CAACwC,OAAV,CAAkBvC,gBAAlB,CAAjB;;AAEA,MAAI8G,QAAQ,IAAId,WAAW,KAAK,QAAhC,EAA0C;AACxC,UAAMe,EAAE,GAAGD,QAAQ,CAACL,IAAT,GAAgBK,QAAQ,CAACE,KAAT,GAAkB,CAA7C;AACA,UAAMC,EAAE,GAAGH,QAAQ,CAACF,GAAT,GAAgBE,QAAQ,CAACI,MAAT,GAAkB,CAA7C;AAEAnB,IAAAA,OAAO,GAAGgB,EAAE,IAAI7G,IAAI,CAACuG,IAAX,IAAmBM,EAAE,IAAI7G,IAAI,CAACwG,KAA9B,IAAuCO,EAAE,IAAI/G,IAAI,CAAC0G,GAAlD,IAAyDK,EAAE,IAAI/G,IAAI,CAAC2G,MAA9E;AACD;;AAED,MAAIC,QAAQ,IAAI/H,KAAK,CAACuB,EAAN,CAASoF,MAAT,CAAgBM,WAAhB,CAAhB,EAA8C;AAC5C,UAAMmB,WAAW,GAAKxB,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYD,IAAI,CAACE,GAAL,CAAS3F,IAAI,CAACwG,KAAd,EAAqBI,QAAQ,CAACJ,KAA9B,IAAuCf,IAAI,CAACC,GAAL,CAAS1F,IAAI,CAACuG,IAAd,EAAoBK,QAAQ,CAACL,IAA7B,CAAnD,IACAd,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYD,IAAI,CAACE,GAAL,CAAS3F,IAAI,CAAC2G,MAAd,EAAsBC,QAAQ,CAACD,MAA/B,IAAyClB,IAAI,CAACC,GAAL,CAAS1F,IAAI,CAAC0G,GAAd,EAAmBE,QAAQ,CAACF,GAA5B,CAArD,CADtB;AAGA,UAAMQ,YAAY,GAAGD,WAAW,IAAIL,QAAQ,CAACE,KAAT,GAAiBF,QAAQ,CAACI,MAA9B,CAAhC;AAEAnB,IAAAA,OAAO,GAAGqB,YAAY,IAAIpB,WAA1B;AACD;;AAED,MAAItD,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BkF,OAA9B,EAAuC;AACrCC,IAAAA,OAAO,GAAGrD,YAAY,CAAChD,OAAb,CAAqBkB,IAArB,CAA0BkF,OAA1B,CAAkCjG,SAAlC,EAA6CC,KAA7C,EAAoDiG,OAApD,EAA6DrD,YAA7D,EAA2EzC,WAA3E,EAAwFF,SAAxF,EAAmGC,gBAAnG,CAAV;AACD;;AAED,SAAO+F,OAAP;AACD;;AAED,MAAMnF,IAAI,GAAG;AACXyG,EAAAA,EAAE,EAAE,cADO;AAEXnI,EAAAA,OAFW;AAGXqF,EAAAA,SAAS,EAAE;AACT,wCAAoC,CAAC;AAAEvB,MAAAA;AAAF,KAAD,KAAqB;AACvD,UAAIA,WAAW,CAACsE,QAAZ,CAAqBC,IAArB,KAA8B,MAAlC,EAA0C;AAAE;AAAQ;;AAEpDvE,MAAAA,WAAW,CAACP,SAAZ,GAAwB;AACtBiB,QAAAA,GAAG,EAAE;AACHjE,UAAAA,QAAQ,EAAE,IADP;AAEH0B,UAAAA,OAAO,EAAE;AAFN,SADiB;AAKtBwC,QAAAA,IAAI,EAAE;AACJlE,UAAAA,QAAQ,EAAE,IADN;AAEJ0B,UAAAA,OAAO,EAAE;AAFL,SALgB;AAStBsC,QAAAA,QAAQ,EAAE,IATY;AAUtBS,QAAAA,MAAM,EAAE,IAVc;AAWtBlC,QAAAA,WAAW,EAAE;AAXS,OAAxB;AAaD,KAjBQ;AAmBT,uCAAmC,CAAC;AAAEgB,MAAAA,WAAF;AAAelD,MAAAA,KAAf;AAAsBsE,MAAAA,MAAM,EAAEvE;AAA9B,KAAD,EAA4CV,KAA5C,KAAsD;AACvF,UAAI6D,WAAW,CAACsE,QAAZ,CAAqBC,IAArB,KAA8B,MAAlC,EAA0C;AAAE;AAAQ;;AAEpD,YAAM;AAAE9E,QAAAA;AAAF,UAAgBO,WAAtB,CAHuF,CAKvF;;AACAP,MAAAA,SAAS,CAACT,WAAV,GAAwB,IAAxB;AACAS,MAAAA,SAAS,CAACyB,MAAV,GAAmB,IAAnB;AACAzB,MAAAA,SAAS,CAACT,WAAV,GAAwBI,cAAc,CAACjD,KAAD,EAAQ6D,WAAW,CAAC7B,OAApB,CAAtC;AACAsB,MAAAA,SAAS,CAACyB,MAAV,GAAmBnB,aAAa,CAACC,WAAD,EAAclD,KAAd,EAAqBD,SAArB,CAAhC;;AAEA,UAAI4C,SAAS,CAACyB,MAAV,CAAiBb,QAArB,EAA+B;AAC7BtB,QAAAA,oBAAoB,CAACU,SAAS,CAACT,WAAX,EAAwBS,SAAS,CAACyB,MAAV,CAAiBb,QAAzC,CAApB;AACD;AACF,KAjCQ;AAmCT;AACA,gCAA4Bc,cApCnB;AAqCT,+BAA2BA,cArClB;AAuCT,sCAAkC,SAASqD,iBAAT,CAA4B;AAAExE,MAAAA;AAAF,KAA5B,EAA6C;AAC7E,UAAIA,WAAW,CAACsE,QAAZ,CAAqBC,IAArB,KAA8B,MAAlC,EAA0C;AAAE;AAAQ;;AAEpDtD,MAAAA,cAAc,CAACjB,WAAD,EAAcA,WAAW,CAACP,SAAZ,CAAsByB,MAApC,CAAd;AACAlB,MAAAA,WAAW,CAACP,SAAZ,CAAsByB,MAAtB,GAA+B,EAA/B;AACD,KA5CQ;AA8CT,qCAAiC,CAAC;AAAElB,MAAAA;AAAF,KAAD,KAAqB;AACpD,UAAIA,WAAW,CAACsE,QAAZ,CAAqBC,IAArB,KAA8B,MAAlC,EAA0C;AAAE;AAAQ;;AAEpDtD,MAAAA,cAAc,CAACjB,WAAD,EAAcA,WAAW,CAACP,SAAZ,CAAsByB,MAApC,CAAd;AACD,KAlDQ;AAoDT,yBAAqB,CAAC;AAAElB,MAAAA;AAAF,KAAD,KAAqB;AACxC,UAAIA,WAAW,CAACsE,QAAZ,CAAqBC,IAArB,KAA8B,MAAlC,EAA0C;AAAE;AAAQ;;AAEpD,YAAM;AAAE9E,QAAAA;AAAF,UAAgBO,WAAtB;;AAEA,UAAIP,SAAJ,EAAe;AACbA,QAAAA,SAAS,CAACT,WAAV,GAAwB,IAAxB;AACAS,QAAAA,SAAS,CAACyB,MAAV,GAAmB,IAAnB;AACAzB,QAAAA,SAAS,CAACiB,GAAV,CAAcjE,QAAd,GAAyB,IAAzB;AACAgD,QAAAA,SAAS,CAACiB,GAAV,CAAcvC,OAAd,GAAwB,IAAxB;AACAsB,QAAAA,SAAS,CAACkB,IAAV,CAAelE,QAAf,GAA0B,IAA1B;AACAgD,QAAAA,SAAS,CAACkB,IAAV,CAAexC,OAAf,GAAyB,IAAzB;AACAsB,QAAAA,SAAS,CAACgB,QAAV,GAAqB,KAArB;AACD;AACF;AAlEQ,GAHA;AAuEXrB,EAAAA,cAvEW;AAwEXI,EAAAA,OAxEW;AAyEXO,EAAAA,aAzEW;AA0EXkB,EAAAA,cA1EW;AA2EX3E,EAAAA,QAAQ,EAAE;AACR2B,IAAAA,OAAO,EAAE,KADD;AAERC,IAAAA,MAAM,EAAG,IAFD;AAGRuE,IAAAA,OAAO,EAAE;AAHD;AA3EC,CAAb;AAkFA,eAAe7E,IAAf", + "sourcesContent": [ + "import Interactable from '../../core/Interactable'\nimport InteractEvent from '../../core/InteractEvent'\nimport { Scope } from '../../core/scope'\nimport * as utils from '../../utils/index'\nimport drag from '../drag'\nimport DropEvent from './DropEvent'\n\nexport interface DropzoneMethod {\n (options: Interact.DropzoneOptions | boolean): Interact.Interactable\n (): Interact.DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Interact.Element,\n dropElemen: Interact.Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: {\n cur: {\n dropzone: Interactable // the dropzone a drag target might be dropped into\n element: Interact.Element // the element at the time of checking\n }\n prev: {\n dropzone: Interactable // the dropzone that was recently dragged away from\n element: Interact.Element // the element at the time of checking\n }\n rejected: boolean // wheather the potential drop was rejected from a listener\n events: any // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n element: Interact.Element\n rect: Interact.Rect\n }>\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n defaults,\n } = scope\n\n scope.usePlugin(drag)\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Interact.Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ dropState, interactable: draggable, element: dragElement }: Partial, dragEvent, pointerEvent) {\n const validDrops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interact.Interaction, _pointerEvent, dragEvent) {\n const { dropState } = interaction\n const dropEvents = {\n enter : null,\n leave : null,\n activate : null,\n deactivate: null,\n move : null,\n drop : null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null\n dropEvents.activate.dropzone = null\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null\n dropEvents.deactivate.dropzone = null\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dropEvents.move.dragmove = dragEvent\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\nfunction fireDropEvents (interaction: Interact.Interaction, events) {\n const { dropState } = interaction\n const {\n activeDrops,\n cur,\n prev,\n } = dropState\n\n if (events.leave) { prev.dropzone.fire(events.leave) }\n if (events.move) { cur.dropzone.fire(events.move) }\n if (events.enter) { cur.dropzone.fire(events.enter) }\n if (events.drop) { cur.dropzone.fire(events.drop) }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }: Interact.DoPhaseArg, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return }\n\n const { dropState } = interaction\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected = dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod (interactable: Interact.Interactable): Interact.DropzoneOptions\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean)\nfunction dropzoneMethod (interactable: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Interact.Element,\n dropElement: Interact.Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n },\n\n 'interactions:after-action-start': ({ interaction, event, iEvent: dragEvent }, scope) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n // reset active dropzones\n dropState.activeDrops = null\n dropState.events = null\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n }\n },\n\n // FIXME proper signal types\n 'interactions:action-move': onEventCreated,\n 'interactions:action-end': onEventCreated,\n\n 'interactions:after-action-move': function fireDropAfterMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n interaction.dropState.events = {}\n },\n\n 'interactions:after-action-end': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null\n dropState.events = null\n dropState.cur.dropzone = null\n dropState.cur.element = null\n dropState.prev.dropzone = null\n dropState.prev.element = null\n dropState.rejected = false\n }\n },\n },\n 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" + ] +} \ No newline at end of file diff --git a/packages/actions/gesture.d.ts b/packages/actions/gesture.d.ts index 4881d1571..4083113b1 100644 --- a/packages/actions/gesture.d.ts +++ b/packages/actions/gesture.d.ts @@ -1,4 +1,4 @@ -import { ActionName, Scope } from '@interactjs/core/scope'; +import { ActionName, Scope } from '../core/scope'; export declare type GesturableMethod = Interact.ActionMethod; declare module '@interactjs/core/Interaction' { interface Interaction { @@ -38,7 +38,7 @@ export interface GestureEvent extends Interact.InteractEvent box: Interact.Rect; touches: Interact.PointerType[]; } -export interface GestureSignalArg extends Interact.SignalArg { +export interface GestureSignalArg extends Interact.DoPhaseArg { iEvent: GestureEvent; interaction: Interact.Interaction; event: Interact.PointerEventType | GestureEvent; @@ -47,6 +47,14 @@ declare function install(scope: Scope): void; declare const gesture: { id: string; install: typeof install; + listeners: { + 'interactions:action-start': typeof updateGestureProps; + 'interactions:action-move': typeof updateGestureProps; + 'interactions:action-end': typeof updateGestureProps; + 'interactions:new': ({ interaction }: { + interaction: any; + }) => void; + }; defaults: {}; checker(_pointer: any, _event: any, _interactable: any, _element: any, interaction: { pointers: { @@ -57,4 +65,5 @@ declare const gesture: { }; getCursor(): string; }; +declare function updateGestureProps({ interaction, iEvent, event, phase }: GestureSignalArg): void; export default gesture; diff --git a/packages/actions/gesture.js b/packages/actions/gesture.js index 6c84c91ba..128a1a9d0 100644 --- a/packages/actions/gesture.js +++ b/packages/actions/gesture.js @@ -1,124 +1,147 @@ -import InteractEvent from '@interactjs/core/InteractEvent'; -import { ActionName } from '@interactjs/core/scope'; -import * as utils from '@interactjs/utils'; +import InteractEvent from "../core/InteractEvent.js"; +import { ActionName } from "../core/scope.js"; +import * as utils from "../utils/index.js"; ActionName.Gesture = 'gesture'; + function install(scope) { - const { actions, Interactable, interactions, defaults, } = scope; - /** - * ```js - * interact(element).gesturable({ - * onstart: function (event) {}, - * onmove : function (event) {}, - * onend : function (event) {}, - * - * // limit multiple gestures. - * // See the explanation in {@link Interactable.draggable} example - * max: Infinity, - * maxPerElement: 1, - * }) - * - * var isGestureable = interact(element).gesturable() - * ``` - * - * Gets or sets whether multitouch gestures can be performed on the target - * - * @param {boolean | object} [options] true/false or An object with event - * listeners to be fired on gesture events (makes the Interactable gesturable) - * @return {boolean | Interactable} A boolean indicating if this can be the - * target of gesture events, or this Interactable - */ - Interactable.prototype.gesturable = function (options) { - if (utils.is.object(options)) { - this.options.gesture.enabled = options.enabled !== false; - this.setPerAction('gesture', options); - this.setOnEvents('gesture', options); - return this; - } - if (utils.is.bool(options)) { - this.options.gesture.enabled = options; - return this; - } - return this.options.gesture; - }; - interactions.signals.on('action-start', updateGestureProps); - interactions.signals.on('action-move', updateGestureProps); - interactions.signals.on('action-end', updateGestureProps); - interactions.signals.on('new', ({ interaction }) => { - interaction.gesture = { - angle: 0, - distance: 0, - scale: 1, - startAngle: 0, - startDistance: 0, - }; - }); - actions[ActionName.Gesture] = gesture; - actions.names.push(ActionName.Gesture); - utils.arr.merge(actions.eventTypes, [ - 'gesturestart', - 'gesturemove', - 'gestureend', - ]); - actions.methodDict.gesture = 'gesturable'; - defaults.actions.gesture = gesture.defaults; -} -const gesture = { - id: 'actions/gesture', - install, - defaults: {}, - checker(_pointer, _event, _interactable, _element, interaction) { - if (interaction.pointers.length >= 2) { - return { name: 'gesture' }; - } - return null; - }, - getCursor() { - return ''; - }, -}; -function updateGestureProps({ interaction, iEvent, event, phase }) { - if (interaction.prepared.name !== 'gesture') { - return; - } - const pointers = interaction.pointers.map(p => p.pointer); - const starting = phase === 'start'; - const ending = phase === 'end'; - const deltaSource = interaction.interactable.options.deltaSource; - iEvent.touches = [pointers[0], pointers[1]]; - if (starting) { - iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource); - iEvent.box = utils.pointer.touchBBox(pointers); - iEvent.scale = 1; - iEvent.ds = 0; - iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource); - iEvent.da = 0; - interaction.gesture.startDistance = iEvent.distance; - interaction.gesture.startAngle = iEvent.angle; + const { + actions, + Interactable, + defaults + } = scope; + /** + * ```js + * interact(element).gesturable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * // limit multiple gestures. + * // See the explanation in {@link Interactable.draggable} example + * max: Infinity, + * maxPerElement: 1, + * }) + * + * var isGestureable = interact(element).gesturable() + * ``` + * + * Gets or sets whether multitouch gestures can be performed on the target + * + * @param {boolean | object} [options] true/false or An object with event + * listeners to be fired on gesture events (makes the Interactable gesturable) + * @return {boolean | Interactable} A boolean indicating if this can be the + * target of gesture events, or this Interactable + */ + + Interactable.prototype.gesturable = function (options) { + if (utils.is.object(options)) { + this.options.gesture.enabled = options.enabled !== false; + this.setPerAction('gesture', options); + this.setOnEvents('gesture', options); + return this; } - else if (ending || event instanceof InteractEvent) { - const prevEvent = interaction.prevEvent; - iEvent.distance = prevEvent.distance; - iEvent.box = prevEvent.box; - iEvent.scale = prevEvent.scale; - iEvent.ds = 0; - iEvent.angle = prevEvent.angle; - iEvent.da = 0; + + if (utils.is.bool(options)) { + this.options.gesture.enabled = options; + return this; } - else { - iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource); - iEvent.box = utils.pointer.touchBBox(pointers); - iEvent.scale = iEvent.distance / interaction.gesture.startDistance; - iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource); - iEvent.ds = iEvent.scale - interaction.gesture.scale; - iEvent.da = iEvent.angle - interaction.gesture.angle; + + return this.options.gesture; + }; + + actions[ActionName.Gesture] = gesture; + actions.names.push(ActionName.Gesture); + utils.arr.merge(actions.eventTypes, ['gesturestart', 'gesturemove', 'gestureend']); + actions.methodDict.gesture = 'gesturable'; + defaults.actions.gesture = gesture.defaults; +} + +const gesture = { + id: 'actions/gesture', + install, + listeners: { + 'interactions:action-start': updateGestureProps, + 'interactions:action-move': updateGestureProps, + 'interactions:action-end': updateGestureProps, + 'interactions:new': ({ + interaction + }) => { + interaction.gesture = { + angle: 0, + distance: 0, + scale: 1, + startAngle: 0, + startDistance: 0 + }; } - interaction.gesture.distance = iEvent.distance; - interaction.gesture.angle = iEvent.angle; - if (utils.is.number(iEvent.scale) && - iEvent.scale !== Infinity && - !isNaN(iEvent.scale)) { - interaction.gesture.scale = iEvent.scale; + }, + defaults: {}, + + checker(_pointer, _event, _interactable, _element, interaction) { + if (interaction.pointers.length >= 2) { + return { + name: 'gesture' + }; } + + return null; + }, + + getCursor() { + return ''; + } + +}; + +function updateGestureProps({ + interaction, + iEvent, + event, + phase +}) { + if (interaction.prepared.name !== 'gesture') { + return; + } + + const pointers = interaction.pointers.map(p => p.pointer); + const starting = phase === 'start'; + const ending = phase === 'end'; + const deltaSource = interaction.interactable.options.deltaSource; + iEvent.touches = [pointers[0], pointers[1]]; + + if (starting) { + iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource); + iEvent.box = utils.pointer.touchBBox(pointers); + iEvent.scale = 1; + iEvent.ds = 0; + iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource); + iEvent.da = 0; + interaction.gesture.startDistance = iEvent.distance; + interaction.gesture.startAngle = iEvent.angle; + } else if (ending || event instanceof InteractEvent) { + const prevEvent = interaction.prevEvent; + iEvent.distance = prevEvent.distance; + iEvent.box = prevEvent.box; + iEvent.scale = prevEvent.scale; + iEvent.ds = 0; + iEvent.angle = prevEvent.angle; + iEvent.da = 0; + } else { + iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource); + iEvent.box = utils.pointer.touchBBox(pointers); + iEvent.scale = iEvent.distance / interaction.gesture.startDistance; + iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource); + iEvent.ds = iEvent.scale - interaction.gesture.scale; + iEvent.da = iEvent.angle - interaction.gesture.angle; + } + + interaction.gesture.distance = iEvent.distance; + interaction.gesture.angle = iEvent.angle; + + if (utils.is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) { + interaction.gesture.scale = iEvent.scale; + } } + export default gesture; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdlc3R1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUF1Q3pDLFVBQWtCLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQTtBQWtCdkMsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixNQUFNLEVBQ0osT0FBTyxFQUNQLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxHQUNULEdBQUcsS0FBSyxDQUFBO0lBRVQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQkc7SUFDSCxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUF1QyxPQUE2QztRQUN0SCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQTtZQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVwQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1lBRXRDLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBMkIsQ0FBQTtJQUNqRCxDQUFxQixDQUFBO0lBRXJCLFlBQVksQ0FBQyxPQUFP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LEtBQUssQ0FBQTtRQUNwRCxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUE7S0FDckQ7SUFFRCxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQzlDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUE7SUFFeEMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUN6QixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtLQUN6QztBQUNILENBQUM7QUFFRCxlQUFlLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJbnRlcmFjdEV2ZW50IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RFdmVudCdcbmltcG9ydCB7IEFjdGlvbk5hbWUsIFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuXG5leHBvcnQgdHlwZSBHZXN0dXJhYmxlTWV0aG9kID0gSW50ZXJhY3QuQWN0aW9uTWV0aG9kPEludGVyYWN0Lkdlc3R1cmFibGVPcHRpb25zPlxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIGdlc3R1cmU/OiB7XG4gICAgICBhbmdsZTogbnVtYmVyICAgICAgICAgICAvLyBhbmdsZSBmcm9tIGZpcnN0IHRvIHNlY29uZCB0b3VjaFxuICAgICAgZGlzdGFuY2U6IG51bWJlclxuICAgICAgc2NhbGU6IG51bWJlciAgICAgICAgICAgLy8gZ2VzdHVyZS5kaXN0YW5jZSAvIGdlc3R1cmUuc3RhcnREaXN0YW5jZVxuICAgICAgc3RhcnRBbmdsZTogbnVtYmVyICAgICAgLy8gYW5nbGUgb2YgbGluZSBqb2luaW5nIHR3byB0b3VjaGVzXG4gICAgICBzdGFydERpc3RhbmNlOiBudW1iZXIgICAvLyBkaXN0YW5jZSBiZXR3ZWVuIHR3byB0b3VjaGVzIG9mIHRvdWNoU3RhcnRcbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGFibGUge1xuICAgIGdlc3R1cmFibGU6IEdlc3R1cmFibGVNZXRob2RcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xuICAgIGdlc3R1cmU6IEludGVyYWN0Lkdlc3R1cmFibGVPcHRpb25zXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbnMge1xuICAgIFtBY3Rpb25OYW1lLkdlc3R1cmVdPzogdHlwZW9mIGdlc3R1cmVcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgZW51bSBBY3Rpb25OYW1lIHtcbiAgICBHZXN0dXJlID0gJ2dlc3R1cmUnXG4gIH1cbn1cblxuKEFjdGlvbk5hbWUgYXMgYW55KS5HZXN0dXJlID0gJ2dlc3R1cmUnXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VzdHVyZUV2ZW50IGV4dGVuZHMgSW50ZXJhY3QuSW50ZXJhY3RFdmVudDxBY3Rpb25OYW1lLkdlc3R1cmU+IHtcbiAgZGlzdGFuY2U6IG51bWJlclxuICBhbmdsZTogbnVtYmVyXG4gIGRhOiBudW1iZXIgLy8gYW5nbGUgY2hhbmdlXG4gIHNjYWxlOiBudW1iZXIgLy8gcmF0aW8gb2YgZGlzdGFuY2Ugc3RhcnQgdG8gY3VycmVudCBldmVudFxuICBkczogbnVtYmVyIC8vIHNjYWxlIGNoYW5nZVxuICBib3g6IEludGVyYWN0LlJlY3QgLy8gZW5jbG9zaW5nIGJveCBvZiBhbGwgcG9pbnRzXG4gIHRvdWNoZXM6IEludGVyYWN0LlBvaW50ZXJUeXBlW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXN0dXJlU2lnbmFsQXJnIGV4dGVuZHMgSW50ZXJhY3QuU2lnbmFsQXJnIHtcbiAgaUV2ZW50OiBHZXN0dXJlRXZlbnRcbiAgaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uPEFjdGlvbk5hbWUuR2VzdHVyZT5cbiAgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUgfCBHZXN0dXJlRXZlbnRcbn1cblxuZnVuY3Rpb24gaW5zdGFsbCAoc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBhY3Rpb25zLFxuICAgIEludGVyYWN0YWJsZSxcbiAgICBpbnRlcmFjdGlvbnMsXG4gICAgZGVmYXVsdHMsXG4gIH0gPSBzY29wZVxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBpbnRlcmFjdChlbGVtZW50KS5nZXN0dXJhYmxlKHtcbiAgICogICAgIG9uc3RhcnQ6IGZ1bmN0aW9uIChldmVudCkge30sXG4gICAqICAgICBvbm1vdmUgOiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICAgKiAgICAgb25lbmQgIDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAgICpcbiAgICogICAgIC8vIGxpbWl0IG11bHRpcGxlIGdlc3R1cmVzLlxuICAgKiAgICAgLy8gU2VlIHRoZSBleHBsYW5hdGlvbiBpbiB7QGxpbmsgSW50ZXJhY3RhYmxlLmRyYWdnYWJsZX0gZXhhbXBsZVxuICAgKiAgICAgbWF4OiBJbmZpbml0eSxcbiAgICogICAgIG1heFBlckVsZW1lbnQ6IDEsXG4gICAqIH0pXG4gICAqXG4gICAqIHZhciBpc0dlc3R1cmVhYmxlID0gaW50ZXJhY3QoZWxlbWVudCkuZ2VzdHVyYWJsZSgpXG4gICAqIGBgYFxuICAgKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciBtdWx0aXRvdWNoIGdlc3R1cmVzIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3R9IFtvcHRpb25zXSB0cnVlL2ZhbHNlIG9yIEFuIG9iamVjdCB3aXRoIGV2ZW50XG4gICAqIGxpc3RlbmVycyB0byBiZSBmaXJlZCBvbiBnZXN0dXJlIGV2ZW50cyAobWFrZXMgdGhlIEludGVyYWN0YWJsZSBnZXN0dXJhYmxlKVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgSW50ZXJhY3RhYmxlfSBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIGNhbiBiZSB0aGVcbiAgICogdGFyZ2V0IG9mIGdlc3R1cmUgZXZlbnRzLCBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5nZXN0dXJhYmxlID0gZnVuY3Rpb24gKHRoaXM6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9uczogSW50ZXJhY3QuR2VzdHVyYWJsZU9wdGlvbnMgfCBib29sZWFuKSB7XG4gICAgaWYgKHV0aWxzLmlzLm9iamVjdChvcHRpb25zKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmdlc3R1cmUuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICAgIHRoaXMuc2V0UGVyQWN0aW9uKCdnZXN0dXJlJywgb3B0aW9ucylcbiAgICAgIHRoaXMuc2V0T25FdmVudHMoJ2dlc3R1cmUnLCBvcHRpb25zKVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pcy5ib29sKG9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZ2VzdHVyZS5lbmFibGVkID0gb3B0aW9uc1xuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2VzdHVyZSBhcyBJbnRlcmFjdC5PcHRpb25zXG4gIH0gYXMgR2VzdHVyYWJsZU1ldGhvZFxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tc3RhcnQnLCB1cGRhdGVHZXN0dXJlUHJvcHMpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIHVwZGF0ZUdlc3R1cmVQcm9wcylcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1lbmQnLCB1cGRhdGVHZXN0dXJlUHJvcHMpXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ25ldycsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5nZXN0dXJlID0ge1xuICAgICAgYW5nbGU6IDAsXG4gICAgICBkaXN0YW5jZTogMCxcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgc3RhcnRBbmdsZTogMCxcbiAgICAgIHN0YXJ0RGlzdGFuY2U6IDAsXG4gICAgfVxuICB9KVxuXG4gIGFjdGlvbnNbQWN0aW9uTmFtZS5HZXN0dXJlXSA9IGdlc3R1cmVcbiAgYWN0aW9ucy5uYW1lcy5wdXNoKEFjdGlvbk5hbWUuR2VzdHVyZSlcbiAgdXRpbHMuYXJyLm1lcmdlKGFjdGlvbnMuZXZlbnRUeXBlcywgW1xuICAgICdnZXN0dXJlc3RhcnQnLFxuICAgICdnZXN0dXJlbW92ZScsXG4gICAgJ2dlc3R1cmVlbmQnLFxuICBdKVxuICBhY3Rpb25zLm1ldGhvZERpY3QuZ2VzdHVyZSA9ICdnZXN0dXJhYmxlJ1xuXG4gIGRlZmF1bHRzLmFjdGlvbnMuZ2VzdHVyZSA9IGdlc3R1cmUuZGVmYXVsdHNcbn1cblxuY29uc3QgZ2VzdHVyZSA9IHtcbiAgaWQ6ICdhY3Rpb25zL2dlc3R1cmUnLFxuICBpbnN0YWxsLFxuICBkZWZhdWx0czoge1xuICB9LFxuXG4gIGNoZWNrZXIgKF9wb2ludGVyLCBfZXZlbnQsIF9pbnRlcmFjdGFibGUsIF9lbGVtZW50LCBpbnRlcmFjdGlvbjogeyBwb2ludGVyczogeyBsZW5ndGg6IG51bWJlciB9IH0pIHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcnMubGVuZ3RoID49IDIpIHtcbiAgICAgIHJldHVybiB7IG5hbWU6ICdnZXN0dXJlJyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICBnZXRDdXJzb3IgKCkge1xuICAgIHJldHVybiAnJ1xuICB9LFxufVxuXG5mdW5jdGlvbiB1cGRhdGVHZXN0dXJlUHJvcHMgKHsgaW50ZXJhY3Rpb24sIGlFdmVudCwgZXZlbnQsIHBoYXNlIH06IEdlc3R1cmVTaWduYWxBcmcpIHtcbiAgaWYgKGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgIT09ICdnZXN0dXJlJykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IHBvaW50ZXJzID0gaW50ZXJhY3Rpb24ucG9pbnRlcnMubWFwKHAgPT4gcC5wb2ludGVyKVxuICBjb25zdCBzdGFydGluZyA9IHBoYXNlID09PSAnc3RhcnQnXG4gIGNvbnN0IGVuZGluZyA9IHBoYXNlID09PSAnZW5kJ1xuICBjb25zdCBkZWx0YVNvdXJjZSA9IGludGVyYWN0aW9uLmludGVyYWN0YWJsZS5vcHRpb25zLmRlbHRhU291cmNlXG5cbiAgaUV2ZW50LnRvdWNoZXMgPSBbcG9pbnRlcnNbMF0sIHBvaW50ZXJzWzFdXVxuXG4gIGlmIChzdGFydGluZykge1xuICAgIGlFdmVudC5kaXN0YW5jZSA9IHV0aWxzLnBvaW50ZXIudG91Y2hEaXN0YW5jZShwb2ludGVycywgZGVsdGFTb3VyY2UpXG4gICAgaUV2ZW50LmJveCAgICAgID0gdXRpbHMucG9pbnRlci50b3VjaEJCb3gocG9pbnRlcnMpXG4gICAgaUV2ZW50LnNjYWxlICAgID0gMVxuICAgIGlFdmVudC5kcyAgICAgICA9IDBcbiAgICBpRXZlbnQuYW5nbGUgICAgPSB1dGlscy5wb2ludGVyLnRvdWNoQW5nbGUocG9pbnRlcnMsIGRlbHRhU291cmNlKVxuICAgIGlFdmVudC5kYSAgICAgICA9IDBcblxuICAgIGludGVyYWN0aW9uLmdlc3R1cmUuc3RhcnREaXN0YW5jZSA9IGlFdmVudC5kaXN0YW5jZVxuICAgIGludGVyYWN0aW9uLmdlc3R1cmUuc3RhcnRBbmdsZSA9IGlFdmVudC5hbmdsZVxuICB9XG4gIGVsc2UgaWYgKGVuZGluZyB8fCBldmVudCBpbnN0YW5jZW9mIEludGVyYWN0RXZlbnQpIHtcbiAgICBjb25zdCBwcmV2RXZlbnQgPSBpbnRlcmFjdGlvbi5wcmV2RXZlbnQgYXMgR2VzdHVyZUV2ZW50XG5cbiAgICBpRXZlbnQuZGlzdGFuY2UgPSBwcmV2RXZlbnQuZGlzdGFuY2VcbiAgICBpRXZlbnQuYm94ICAgICAgPSBwcmV2RXZlbnQuYm94XG4gICAgaUV2ZW50LnNjYWxlICAgID0gcHJldkV2ZW50LnNjYWxlXG4gICAgaUV2ZW50LmRzICAgICAgID0gMFxuICAgIGlFdmVudC5hbmdsZSAgICA9IHByZXZFdmVudC5hbmdsZVxuICAgIGlFdmVudC5kYSAgICAgICA9IDBcbiAgfVxuICBlbHNlIHtcbiAgICBpRXZlbnQuZGlzdGFuY2UgPSB1dGlscy5wb2ludGVyLnRvdWNoRGlzdGFuY2UocG9pbnRlcnMsIGRlbHRhU291cmNlKVxuICAgIGlFdmVudC5ib3ggICAgICA9IHV0aWxzLnBvaW50ZXIudG91Y2hCQm94KHBvaW50ZXJzKVxuICAgIGlFdmVudC5zY2FsZSAgICA9IGlFdmVudC5kaXN0YW5jZSAvIGludGVyYWN0aW9uLmdlc3R1cmUuc3RhcnREaXN0YW5jZVxuICAgIGlFdmVudC5hbmdsZSAgICA9IHV0aWxzLnBvaW50ZXIudG91Y2hBbmdsZShwb2ludGVycywgZGVsdGFTb3VyY2UpXG5cbiAgICBpRXZlbnQuZHMgPSBpRXZlbnQuc2NhbGUgLSBpbnRlcmFjdGlvbi5nZXN0dXJlLnNjYWxlXG4gICAgaUV2ZW50LmRhID0gaUV2ZW50LmFuZ2xlIC0gaW50ZXJhY3Rpb24uZ2VzdHVyZS5hbmdsZVxuICB9XG5cbiAgaW50ZXJhY3Rpb24uZ2VzdHVyZS5kaXN0YW5jZSA9IGlFdmVudC5kaXN0YW5jZVxuICBpbnRlcmFjdGlvbi5nZXN0dXJlLmFuZ2xlID0gaUV2ZW50LmFuZ2xlXG5cbiAgaWYgKHV0aWxzLmlzLm51bWJlcihpRXZlbnQuc2NhbGUpICYmXG4gICAgICBpRXZlbnQuc2NhbGUgIT09IEluZmluaXR5ICYmXG4gICAgICAhaXNOYU4oaUV2ZW50LnNjYWxlKSkge1xuICAgIGludGVyYWN0aW9uLmdlc3R1cmUuc2NhbGUgPSBpRXZlbnQuc2NhbGVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBnZXN0dXJlXG4iXX0= \ No newline at end of file +//# sourceMappingURL=gesture.js.map \ No newline at end of file diff --git a/packages/actions/gesture.js.map b/packages/actions/gesture.js.map new file mode 100644 index 000000000..39c1c44de --- /dev/null +++ b/packages/actions/gesture.js.map @@ -0,0 +1,77 @@ +{ + "version": 3, + "sources": [ + "gesture.ts" + ], + "names": [ + "InteractEvent", + "ActionName", + "utils", + "Gesture", + "install", + "scope", + "actions", + "Interactable", + "defaults", + "prototype", + "gesturable", + "options", + "is", + "object", + "gesture", + "enabled", + "setPerAction", + "setOnEvents", + "bool", + "names", + "push", + "arr", + "merge", + "eventTypes", + "methodDict", + "id", + "listeners", + "updateGestureProps", + "interaction", + "angle", + "distance", + "scale", + "startAngle", + "startDistance", + "checker", + "_pointer", + "_event", + "_interactable", + "_element", + "pointers", + "length", + "name", + "getCursor", + "iEvent", + "event", + "phase", + "prepared", + "map", + "p", + "pointer", + "starting", + "ending", + "deltaSource", + "interactable", + "touches", + "touchDistance", + "box", + "touchBBox", + "ds", + "touchAngle", + "da", + "prevEvent", + "number", + "Infinity", + "isNaN" + ], + "mappings": "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", + "sourcesContent": [ + "import InteractEvent from '../core/InteractEvent'\nimport { ActionName, Scope } from '../core/scope'\nimport * as utils from '../utils/index'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.DoPhaseArg {\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 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 actions[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n id: 'actions/gesture',\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n },\n\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number } }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map(p => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (utils.is.number(iEvent.scale) &&\n iEvent.scale !== Infinity &&\n !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nexport default gesture\n" + ] +} \ No newline at end of file diff --git a/packages/actions/gesture.spec.js b/packages/actions/gesture.spec.js deleted file mode 100644 index 2ca9cb5df..000000000 --- a/packages/actions/gesture.spec.js +++ /dev/null @@ -1,141 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import { ActionName } from '@interactjs/core/scope'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import * as utils from '@interactjs/utils'; -import gesture from './gesture'; -function getGestureProps(event) { - return helpers.getProps(event, ['type', 'angle', 'distance', 'scale', 'ds', 'da']); -} -test('gesture action init', t => { - const scope = helpers.mockScope(); - scope.usePlugin(gesture); - t.ok(scope.actions.names.includes(ActionName.Gesture), '"gesture" in actions.names'); - t.equal(scope.actions.methodDict.gesture, 'gesturable'); - t.equal(typeof scope.Interactable.prototype.gesturable, 'function'); - t.end(); -}); -test('Interactable.gesturable method', t => { - const scope = helpers.mockScope(); - scope.usePlugin(gesture); - const interaction = scope.interactions.new({}); - const element = scope.document.body; - const interactable = scope.interactables.new(element).gesturable(true); - const rect = Object.freeze({ top: 100, left: 200, bottom: 300, right: 400 }); - const touches = [ - utils.pointer.coordsToEvent(utils.pointer.newCoords()), - utils.pointer.coordsToEvent(utils.pointer.newCoords()), - ].map((touch, index) => Object.assign(touch.coords, { - pointerId: index, - client: touch.page, - }) && touch); - const events = []; - interactable.rectChecker(() => ({ ...rect })); - interactable.on('gesturestart gesturemove gestureend', (event) => { - events.push(event); - }); - // 0 --> 1 - utils.extend(touches[0].page, { x: 0, y: 0 }); - utils.extend(touches[1].page, { x: 100, y: 0 }); - interaction.pointerDown(touches[0], touches[0], element); - t.notOk(gesture.checker(touches[0], touches[0], interactable, element, interaction), 'not allowed with 1 pointer'); - interaction.pointerDown(touches[1], touches[1], element); - t.ok(gesture.checker(touches[1], touches[1], interactable, element, interaction), 'allowed with 2 pointers'); - interaction.start({ name: ActionName.Gesture }, interactable, element); - t.deepEqual(interaction.gesture, { - angle: 0, - distance: 100, - scale: 1, - startAngle: 0, - startDistance: 100, - }, 'start interaction properties are correct'); - t.deepEqual(getGestureProps(events[0]), { - type: 'gesturestart', - angle: 0, - distance: 100, - scale: 1, - ds: 0, - da: 0, - }, 'start event properties are correct'); - // 0 - // | - // v - // 1 - utils.extend(touches[1].page, { x: 0, y: 50 }); - interaction.pointerMove(touches[1], touches[1], element); - t.deepEqual(interaction.gesture, { - angle: 90, - distance: 50, - scale: 0.5, - startAngle: 0, - startDistance: 100, - }, 'move interaction properties are correct'); - t.deepEqual(getGestureProps(events[1]), { - type: 'gesturemove', - angle: 90, - distance: 50, - scale: 0.5, - ds: -0.5, - da: 90, - }, 'move event properties are correct'); - // 1 <-- 0 - utils.extend(touches[0].page, { x: 50, y: 50 }); - interaction.pointerMove(touches[0], touches[0], element); - t.deepEqual(interaction.gesture, { - angle: 180, - distance: 50, - scale: 0.5, - startAngle: 0, - startDistance: 100, - }, 'move interaction properties are correct'); - t.deepEqual(getGestureProps(events[2]), { - type: 'gesturemove', - angle: 180, - distance: 50, - scale: 0.5, - ds: 0, - da: 90, - }, 'move event properties are correct'); - interaction.pointerUp(touches[1], touches[1], element, element); - t.deepEqual(interaction.gesture, { - angle: 180, - distance: 50, - scale: 0.5, - startAngle: 0, - startDistance: 100, - }, 'move interaction properties are correct'); - t.deepEqual(getGestureProps(events[3]), { - type: 'gestureend', - angle: 180, - distance: 50, - scale: 0.5, - ds: 0, - da: 0, - }, 'end event properties are correct'); - // 0 - // | - // v - // 1 - interaction.pointerDown(touches[1], touches[1], element); - utils.extend(touches[0].page, { x: 0, y: -150 }); - interaction.pointerMove(touches[1], touches[1], element); - t.ok(gesture.checker(touches[0], touches[0], interactable, element, interaction), 'not allowed with re-added second pointers'); - interaction.start({ name: ActionName.Gesture }, interactable, element); - t.deepEqual(interaction.gesture, { - angle: 90, - distance: 200, - scale: 1, - startAngle: 90, - startDistance: 200, - }, 'move interaction properties are correct'); - t.deepEqual(getGestureProps(events[4]), { - type: 'gesturestart', - angle: 90, - distance: 200, - scale: 1, - ds: 0, - da: 0, - }, 'second start event properties are correct'); - t.equal(events.length, 5, 'correct number of events fired'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2VzdHVyZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNuRCxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFDMUMsT0FBTyxPQUFPLE1BQU0sV0FBVyxDQUFBO0FBRS9CLFNBQVMsZUFBZSxDQUFFLEtBQTRCO0lBQ3BELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDcEYsQ0FBQztBQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM5QixNQUFNLEtBQUssR0FBbUIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRWpELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLDRCQUE0QixDQUFDLENBQUE7SUFDcEYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDdkQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVuRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQTtB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SyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFdEUsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxXQUFXLENBQUMsT0FBTyxFQUNuQjtRQUNFLEtBQUssRUFBRSxFQUFFO1FBQ1QsUUFBUSxFQUFFLEdBQUc7UUFDYixLQUFLLEVBQUUsQ0FBQztRQUNSLFVBQVUsRUFBRSxFQUFFO1FBQ2QsYUFBYSxFQUFFLEdBQUc7S0FDbkIsRUFDRCx5Q0FBeUMsQ0FBQyxDQUFBO0lBRTVDLENBQUMsQ0FBQyxTQUFTLENBQ1QsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMxQjtRQUNFLElBQUksRUFBRSxjQUFjO1FBQ3BCLEtBQUssRUFBRSxFQUFFO1FBQ1QsUUFBUSxFQUFFLEdBQUc7UUFDYixLQUFLLEVBQUUsQ0FBQztRQUNSLEVBQUUsRUFBRSxDQUFDO1FBQ0wsRUFBRSxFQUFFLENBQUM7S0FDTixFQUNELDJDQUEyQyxDQUFDLENBQUE7SUFFOUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFBO0lBRTNELENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgeyBBY3Rpb25OYW1lIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9faGVscGVycydcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IGdlc3R1cmUgZnJvbSAnLi9nZXN0dXJlJ1xuXG5mdW5jdGlvbiBnZXRHZXN0dXJlUHJvcHMgKGV2ZW50OiBJbnRlcmFjdC5HZXN0dXJlRXZlbnQpIHtcbiAgcmV0dXJuIGhlbHBlcnMuZ2V0UHJvcHMoZXZlbnQsIFsndHlwZScsICdhbmdsZScsICdkaXN0YW5jZScsICdzY2FsZScsICdkcycsICdkYSddKVxufVxuXG50ZXN0KCdnZXN0dXJlIGFjdGlvbiBpbml0JywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlOiBJbnRlcmFjdC5TY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBzY29wZS51c2VQbHVnaW4oZ2VzdHVyZSlcblxuICB0Lm9rKHNjb3BlLmFjdGlvbnMubmFtZXMuaW5jbHVkZXMoQWN0aW9uTmFtZS5HZXN0dXJlKSwgJ1wiZ2VzdHVyZVwiIGluIGFjdGlvbnMubmFtZXMnKVxuICB0LmVxdWFsKHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdC5nZXN0dXJlLCAnZ2VzdHVyYWJsZScpXG4gIHQuZXF1YWwodHlwZW9mIHNjb3BlLkludGVyYWN0YWJsZS5wcm90b3R5cGUuZ2VzdHVyYWJsZSwgJ2Z1bmN0aW9uJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGFibGUuZ2VzdHVyYWJsZSBtZXRob2QnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGU6IEludGVyYWN0LlNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKVxuXG4gIHNjb3BlLnVzZVBsdWdpbihnZXN0dXJlKVxuXG4gIGNvbnN0IGludGVyYWN0aW9uID0gc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyh7fSlcbiAgY29uc3QgZWxlbWVudCA9IHNjb3BlLmRvY3VtZW50LmJvZHlcbiAgY29uc3QgaW50ZXJhY3RhYmxlID0gc2NvcGUuaW50ZXJhY3RhYmxlcy5uZXcoZWxlbWVudCkuZ2VzdHVyYWJsZSh0cnVlKVxuICBjb25zdCByZWN0ID0gT2JqZWN0LmZyZWV6ZSh7IHRvcDogMTAwLCBsZWZ0OiAyMDAsIGJvdHRvbTogMzAwLCByaWdodDogNDAwIH0pXG4gIGNvbnN0IHRvdWNoZXMgPSBbXG4gICAgdXRpbHMucG9pbnRlci5jb29yZHNUb0V2ZW50KHV0aWxzLnBvaW50ZXIubmV3Q29vcmRzKCkpLFxuICAgIHV0aWxzLnBvaW50ZXIuY29vcmRzVG9FdmVudCh1dGlscy5wb2ludGVyLm5ld0Nvb3JkcygpKSxcbiAgXS5tYXAoXG4gICAgKHRvdWNoLCBpbmRleCkgPT4gT2JqZWN0LmFzc2lnbih0b3VjaC5jb29yZHMsIHtcbiAgICAgIHBvaW50ZXJJZDogaW5kZXgsXG4gICAgICBjbGllbnQ6IHRvdWNoLnBhZ2UsXG4gICAgfSkgJiYgdG91Y2hcbiAgKVxuICBjb25zdCBldmVudHM6IEludGVyYWN0Lkdlc3R1cmVFdmVudFtdID0gW11cblxuICBpbnRlcmFjdGFibGUucmVjdENoZWNrZXIoKCkgPT4gKHsgLi4ucmVjdCB9KSlcbiAgaW50ZXJhY3RhYmxlLm9uKCdnZXN0dXJlc3RhcnQgZ2VzdHVyZW1vdmUgZ2VzdHVyZWVuZCcsIChldmVudDogSW50ZXJhY3QuR2VzdHVyZUV2ZW50KSA9PiB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpXG4gIH0pXG5cbiAgLy8gMCAtLT4gMVxuICB1dGlscy5leHRlbmQodG91Y2hlc1swXS5wYWdlLCB7IHg6IDAsIHk6IDAgfSlcbiAgdXRpbHMuZXh0ZW5kKHRvdWNoZXNbMV0ucGFnZSwgeyB4OiAxMDAsIHk6IDAgfSlcblxuICBpbnRlcmFjdGlvbi5wb2ludGVyRG93bih0b3VjaGVzWzBdLCB0b3VjaGVzWzBdLCBlbGVtZW50KVxuXG4gIHQubm90T2soXG4gICAgZ2VzdHVyZS5jaGVja2VyKHRvdWNoZXNbMF0sIHRvdWNoZXNbMF0sIGludGVyYWN0YWJsZSwgZWxlbWVudCwgaW50ZXJhY3Rpb24pLFxuICAgICdub3QgYWxsb3dlZCB3aXRoIDEgcG9pbnRlcicsXG4gIClcblxuICBpbnRlcmFjdGlvbi5wb2ludGVyRG93bih0b3VjaGVzWzFdLCB0b3VjaGVzWzFdLCBlbGVtZW50KVxuXG4gIHQub2soXG4gICAgZ2VzdHVyZS5jaGVja2VyKHRvdWNoZXNbMV0sIHRvdWNoZXNbMV0sIGludGVyYWN0YWJsZSwgZWxlbWVudCwgaW50ZXJhY3Rpb24pLFxuICAgICdhbGxvd2VkIHdpdGggMiBwb2ludGVycycsXG4gIClcblxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6IEFjdGlvbk5hbWUuR2VzdHVyZSB9LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24uZ2VzdHVyZSxcbiAgICB7XG4gICAgICBhbmdsZTogMCxcbiAgICAgIGRpc3RhbmNlOiAxMDAsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIHN0YXJ0QW5nbGU6IDAsXG4gICAgICBzdGFydERpc3RhbmNlOiAxMDAsXG4gICAgfSxcbiAgICAnc3RhcnQgaW50ZXJhY3Rpb24gcHJvcGVydGllcyBhcmUgY29ycmVjdCcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgZ2V0R2VzdHVyZVByb3BzKGV2ZW50c1swXSksXG4gICAge1xuICAgICAgdHlwZTogJ2dlc3R1cmVzdGFydCcsXG4gICAgICBhbmdsZTogMCxcbiAgICAgIGRpc3RhbmNlOiAxMDAsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIGRzOiAwLFxuICAgICAgZGE6IDAsXG4gICAgfSxcbiAgICAnc3RhcnQgZXZlbnQgcHJvcGVydGllcyBhcmUgY29ycmVjdCcpXG5cbiAgLy8gMFxuICAvLyB8XG4gIC8vIHZcbiAgLy8gMVxuICB1dGlscy5leHRlbmQodG91Y2hlc1sxXS5wYWdlLCB7IHg6IDAsIHk6IDUwIH0pXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlck1vdmUodG91Y2hlc1sxXSwgdG91Y2hlc1sxXSwgZWxlbWVudClcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5nZXN0dXJlLFxuICAgIHtcbiAgICAgIGFuZ2xlOiA5MCxcbiAgICAgIGRpc3RhbmNlOiA1MCxcbiAgICAgIHNjYWxlOiAwLjUsXG4gICAgICBzdGFydEFuZ2xlOiAwLFxuICAgICAgc3RhcnREaXN0YW5jZTogMTAwLFxuICAgIH0sXG4gICAgJ21vdmUgaW50ZXJhY3Rpb24gcHJvcGVydGllcyBhcmUgY29ycmVjdCcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgZ2V0R2VzdHVyZVByb3BzKGV2ZW50c1sxXSksXG4gICAge1xuICAgICAgdHlwZTogJ2dlc3R1cmVtb3ZlJyxcbiAgICAgIGFuZ2xlOiA5MCxcbiAgICAgIGRpc3RhbmNlOiA1MCxcbiAgICAgIHNjYWxlOiAwLjUsXG4gICAgICBkczogLTAuNSxcbiAgICAgIGRhOiA5MCxcbiAgICB9LFxuICAgICdtb3ZlIGV2ZW50IHByb3BlcnRpZXMgYXJlIGNvcnJlY3QnKVxuXG4gIC8vIDEgPC0tIDBcbiAgdXRpbHMuZXh0ZW5kKHRvdWNoZXNbMF0ucGFnZSwgeyB4OiA1MCwgeTogNTAgfSlcbiAgaW50ZXJhY3Rpb24ucG9pbnRlck1vdmUodG91Y2hlc1swXSwgdG91Y2hlc1swXSwgZWxlbWVudClcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5nZXN0dXJlLFxuICAgIHtcbiAgICAgIGFuZ2xlOiAxODAsXG4gICAgICBkaXN0YW5jZTogNTAsXG4gICAgICBzY2FsZTogMC41LFxuICAgICAgc3RhcnRBbmdsZTogMCxcbiAgICAgIHN0YXJ0RGlzdGFuY2U6IDEwMCxcbiAgICB9LFxuICAgICdtb3ZlIGludGVyYWN0aW9uIHByb3BlcnRpZXMgYXJlIGNvcnJlY3QnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGdldEdlc3R1cmVQcm9wcyhldmVudHNbMl0pLFxuICAgIHtcbiAgICAgIHR5cGU6ICdnZXN0dXJlbW92ZScsXG4gICAgICBhbmdsZTogMTgwLFxuICAgICAgZGlzdGFuY2U6IDUwLFxuICAgICAgc2NhbGU6IDAuNSxcbiAgICAgIGRzOiAwLFxuICAgICAgZGE6IDkwLFxuICAgIH0sXG4gICAgJ21vdmUgZXZlbnQgcHJvcGVydGllcyBhcmUgY29ycmVjdCcpXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlclVwKHRvdWNoZXNbMV0sIHRvdWNoZXNbMV0sIGVsZW1lbnQsIGVsZW1lbnQpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24uZ2VzdHVyZSxcbiAgICB7XG4gICAgICBhbmdsZTogMTgwLFxuICAgICAgZGlzdGFuY2U6IDUwLFxuICAgICAgc2NhbGU6IDAuNSxcbiAgICAgIHN0YXJ0QW5nbGU6IDAsXG4gICAgICBzdGFydERpc3RhbmNlOiAxMDAsXG4gICAgfSxcbiAgICAnbW92ZSBpbnRlcmFjdGlvbiBwcm9wZXJ0aWVzIGFyZSBjb3JyZWN0JylcblxuICB0LmRlZXBFcXVhbChcbiAgICBnZXRHZXN0dXJlUHJvcHMoZXZlbnRzWzNdKSxcbiAgICB7XG4gICAgICB0eXBlOiAnZ2VzdHVyZWVuZCcsXG4gICAgICBhbmdsZTogMTgwLFxuICAgICAgZGlzdGFuY2U6IDUwLFxuICAgICAgc2NhbGU6IDAuNSxcbiAgICAgIGRzOiAwLFxuICAgICAgZGE6IDAsXG4gICAgfSxcbiAgICAnZW5kIGV2ZW50IHByb3BlcnRpZXMgYXJlIGNvcnJlY3QnKVxuXG4gIC8vIDBcbiAgLy8gfFxuICAvLyB2XG4gIC8vIDFcbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24odG91Y2hlc1sxXSwgdG91Y2hlc1sxXSwgZWxlbWVudClcbiAgdXRpbHMuZXh0ZW5kKHRvdWNoZXNbMF0ucGFnZSwgeyB4OiAwLCB5OiAtMTUwIH0pXG4gIGludGVyYWN0aW9uLnBvaW50ZXJNb3ZlKHRvdWNoZXNbMV0sIHRvdWNoZXNbMV0sIGVsZW1lbnQpXG5cbiAgdC5vayhcbiAgICBnZXN0dXJlLmNoZWNrZXIodG91Y2hlc1swXSwgdG91Y2hlc1swXSwgaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBpbnRlcmFjdGlvbiksXG4gICAgJ25vdCBhbGxvd2VkIHdpdGggcmUtYWRkZWQgc2Vjb25kIHBvaW50ZXJzJyxcbiAgKVxuXG4gIGludGVyYWN0aW9uLnN0YXJ0KHsgbmFtZTogQWN0aW9uTmFtZS5HZXN0dXJlIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5nZXN0dXJlLFxuICAgIHtcbiAgICAgIGFuZ2xlOiA5MCxcbiAgICAgIGRpc3RhbmNlOiAyMDAsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIHN0YXJ0QW5nbGU6IDkwLFxuICAgICAgc3RhcnREaXN0YW5jZTogMjAwLFxuICAgIH0sXG4gICAgJ21vdmUgaW50ZXJhY3Rpb24gcHJvcGVydGllcyBhcmUgY29ycmVjdCcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgZ2V0R2VzdHVyZVByb3BzKGV2ZW50c1s0XSksXG4gICAge1xuICAgICAgdHlwZTogJ2dlc3R1cmVzdGFydCcsXG4gICAgICBhbmdsZTogOTAsXG4gICAgICBkaXN0YW5jZTogMjAwLFxuICAgICAgc2NhbGU6IDEsXG4gICAgICBkczogMCxcbiAgICAgIGRhOiAwLFxuICAgIH0sXG4gICAgJ3NlY29uZCBzdGFydCBldmVudCBwcm9wZXJ0aWVzIGFyZSBjb3JyZWN0JylcblxuICB0LmVxdWFsKGV2ZW50cy5sZW5ndGgsIDUsICdjb3JyZWN0IG51bWJlciBvZiBldmVudHMgZmlyZWQnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/actions/index.d.ts b/packages/actions/index.d.ts index 16743928c..2b100e2f2 100644 --- a/packages/actions/index.d.ts +++ b/packages/actions/index.d.ts @@ -1,8 +1,8 @@ -import { Scope } from '@interactjs/core/scope'; -import drag, { DragEvent } from './drag'; -import drop from './drop'; -import gesture, { GestureEvent } from './gesture'; -import resize, { ResizeEvent } from './resize'; +import { Scope } from '../core/scope'; +import drag from './drag'; +import drop from './drop/index'; +import gesture from './gesture'; +import resize from './resize'; declare function install(scope: Scope): void; declare const id = "actions"; -export { id, install, gesture, GestureEvent, resize, ResizeEvent, drag, DragEvent, drop, }; +export { id, install, gesture, resize, drag, drop, }; diff --git a/packages/actions/index.js b/packages/actions/index.js index 8285d588e..2257fd67b 100644 --- a/packages/actions/index.js +++ b/packages/actions/index.js @@ -1,13 +1,15 @@ -import drag from './drag'; -import drop from './drop'; -import gesture from './gesture'; -import resize from './resize'; +import drag from "./drag.js"; +import drop from "./drop/index.js"; +import gesture from "./gesture.js"; +import resize from "./resize.js"; + function install(scope) { - scope.usePlugin(gesture); - scope.usePlugin(resize); - scope.usePlugin(drag); - scope.usePlugin(drop); + scope.usePlugin(gesture); + scope.usePlugin(resize); + scope.usePlugin(drag); + scope.usePlugin(drop); } + const id = 'actions'; -export { id, install, gesture, resize, drag, drop, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQW1CLE1BQU0sUUFBUSxDQUFBO0FBQ3hDLE9BQU8sSUFBSSxNQUFNLFFBQVEsQ0FBQTtBQUN6QixPQUFPLE9BQXlCLE1BQU0sV0FBVyxDQUFBO0FBQ2pELE9BQU8sTUFBdUIsTUFBTSxVQUFVLENBQUE7QUFFOUMsU0FBUyxPQUFPLENBQUUsS0FBWTtJQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hCLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdkIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUE7QUFFcEIsT0FBTyxFQUNMLEVBQUUsRUFDRixPQUFPLEVBQ1AsT0FBTyxFQUVQLE1BQU0sRUFFTixJQUFJLEVBRUosSUFBSSxHQUNMLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgZHJhZywgeyBEcmFnRXZlbnQgfSBmcm9tICcuL2RyYWcnXG5pbXBvcnQgZHJvcCBmcm9tICcuL2Ryb3AnXG5pbXBvcnQgZ2VzdHVyZSwgeyBHZXN0dXJlRXZlbnQgfSBmcm9tICcuL2dlc3R1cmUnXG5pbXBvcnQgcmVzaXplLCB7IFJlc2l6ZUV2ZW50IH0gZnJvbSAnLi9yZXNpemUnXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBzY29wZS51c2VQbHVnaW4oZ2VzdHVyZSlcbiAgc2NvcGUudXNlUGx1Z2luKHJlc2l6ZSlcbiAgc2NvcGUudXNlUGx1Z2luKGRyYWcpXG4gIHNjb3BlLnVzZVBsdWdpbihkcm9wKVxufVxuXG5jb25zdCBpZCA9ICdhY3Rpb25zJ1xuXG5leHBvcnQge1xuICBpZCxcbiAgaW5zdGFsbCxcbiAgZ2VzdHVyZSxcbiAgR2VzdHVyZUV2ZW50LFxuICByZXNpemUsXG4gIFJlc2l6ZUV2ZW50LFxuICBkcmFnLFxuICBEcmFnRXZlbnQsXG4gIGRyb3AsXG59XG4iXX0= \ No newline at end of file +export { id, install, gesture, resize, drag, drop }; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/actions/index.js.map b/packages/actions/index.js.map new file mode 100644 index 000000000..6818ecc42 --- /dev/null +++ b/packages/actions/index.js.map @@ -0,0 +1,20 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "drag", + "drop", + "gesture", + "resize", + "install", + "scope", + "usePlugin", + "id" + ], + "mappings": "AACA,OAAOA,IAAP;AACA,OAAOC,IAAP;AACA,OAAOC,OAAP;AACA,OAAOC,MAAP;;AAEA,SAASC,OAAT,CAAkBC,KAAlB,EAAgC;AAC9BA,EAAAA,KAAK,CAACC,SAAN,CAAgBJ,OAAhB;AACAG,EAAAA,KAAK,CAACC,SAAN,CAAgBH,MAAhB;AACAE,EAAAA,KAAK,CAACC,SAAN,CAAgBN,IAAhB;AACAK,EAAAA,KAAK,CAACC,SAAN,CAAgBL,IAAhB;AACD;;AAED,MAAMM,EAAE,GAAG,SAAX;AAEA,SACEA,EADF,EAEEH,OAFF,EAGEF,OAHF,EAIEC,MAJF,EAKEH,IALF,EAMEC,IANF", + "sourcesContent": [ + "import { Scope } from '../core/scope'\nimport drag from './drag'\nimport drop from './drop/index'\nimport gesture from './gesture'\nimport resize from './resize'\n\nfunction install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n}\n\nconst id = 'actions'\n\nexport {\n id,\n install,\n gesture,\n resize,\n drag,\n drop,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/actions/resize.d.ts b/packages/actions/resize.d.ts index 721d64cbe..066c84cef 100644 --- a/packages/actions/resize.d.ts +++ b/packages/actions/resize.d.ts @@ -1,5 +1,5 @@ -import { ActionProps, Interaction } from '@interactjs/core/Interaction'; -import { ActionName, Scope } from '@interactjs/core/scope'; +import { Interaction } from '../core/Interaction'; +import { ActionName, Scope } from '../core/scope'; export declare type EdgeName = 'top' | 'left' | 'bottom' | 'right'; export declare type ResizableMethod = Interact.ActionMethod; declare module '@interactjs/core/Interactable' { @@ -49,6 +49,14 @@ declare function install(scope: Scope): void; declare const resize: { id: string; install: typeof install; + listeners: { + 'interactions:new': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:action-start': (arg: any) => void; + 'interactions:action-move': (arg: any) => void; + 'interactions:action-end': typeof end; + }; defaults: import("../types/types").ResizableOptions; checker(_pointer: import("../types/types").PointerType, _event: import("../types/types").PointerEventType, interactable: import("@interactjs/core/Interactable").Interactable, element: import("../types/types").Element, interaction: Interaction, rect: import("../types/types").Rect): { name: string; @@ -74,7 +82,11 @@ declare const resize: { topright: string; bottomleft: string; }; - getCursor({ edges, axis, name }: ActionProps): string; + getCursor({ edges, axis, name }: import("../types/types").ActionProps): string; defaultMargin: number; }; +declare function end({ iEvent, interaction }: { + iEvent: ResizeEvent; + interaction: Interaction; +}): void; export default resize; diff --git a/packages/actions/resize.js b/packages/actions/resize.js index 09944697b..1d5f058c2 100644 --- a/packages/actions/resize.js +++ b/packages/actions/resize.js @@ -1,425 +1,499 @@ -import { ActionName } from '@interactjs/core/scope'; -import * as arr from '@interactjs/utils/arr'; -import * as dom from '@interactjs/utils/domUtils'; -import extend from '@interactjs/utils/extend'; -import * as is from '@interactjs/utils/is'; +import { Interaction } from "../core/Interaction.js"; +import { ActionName } from "../core/scope.js"; +import * as arr from "../utils/arr.js"; +import * as dom from "../utils/domUtils.js"; +import extend from "../utils/extend.js"; +import * as is from "../utils/is.js"; ActionName.Resize = 'resize'; + function install(scope) { - const { actions, browser, + const { + actions, + browser, + /** @lends Interactable */ - Interactable, // tslint:disable-line no-shadowed-variable - interactions, defaults, } = scope; - // Less Precision with touch input - interactions.signals.on('new', interaction => { - interaction.resizeAxes = 'xy'; - }); - interactions.signals.on('action-start', start); - interactions.signals.on('action-move', move); - interactions.signals.on('action-end', end); - interactions.signals.on('action-start', updateEventAxes); - interactions.signals.on('action-move', updateEventAxes); - resize.cursors = initCursors(browser); - resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10; - /** - * ```js - * interact(element).resizable({ - * onstart: function (event) {}, - * onmove : function (event) {}, - * onend : function (event) {}, - * - * edges: { - * top : true, // Use pointer coords to check for resize. - * left : false, // Disable resizing from left edge. - * bottom: '.resize-s',// Resize if pointer target matches selector - * right : handleEl // Resize if pointer target is the given Element - * }, - * - * // Width and height can be adjusted independently. When `true`, width and - * // height are adjusted at a 1:1 ratio. - * square: false, - * - * // Width and height can be adjusted independently. When `true`, width and - * // height maintain the aspect ratio they had when resizing started. - * preserveAspectRatio: false, - * - * // a value of 'none' will limit the resize rect to a minimum of 0x0 - * // 'negate' will allow the rect to have negative width/height - * // 'reposition' will keep the width/height positive by swapping - * // the top and bottom edges and/or swapping the left and right edges - * invert: 'none' || 'negate' || 'reposition' - * - * // limit multiple resizes. - * // See the explanation in the {@link Interactable.draggable} example - * max: Infinity, - * maxPerElement: 1, - * }) - * - * var isResizeable = interact(element).resizable() - * ``` - * - * Gets or sets whether resize actions can be performed on the target - * - * @param {boolean | object} [options] true/false or An object with event - * listeners to be fired on resize events (object makes the Interactable - * resizable) - * @return {boolean | Interactable} A boolean indicating if this can be the - * target of resize elements, or this Interactable - */ - Interactable.prototype.resizable = function (options) { - return resizable(this, options, scope); - }; - actions[ActionName.Resize] = resize; - actions.names.push(ActionName.Resize); - arr.merge(actions.eventTypes, [ - 'resizestart', - 'resizemove', - 'resizeinertiastart', - 'resizeresume', - 'resizeend', - ]); - actions.methodDict.resize = 'resizable'; - defaults.actions.resize = resize.defaults; + Interactable, + // tslint:disable-line no-shadowed-variable + defaults + } = scope; // Less Precision with touch input + + resize.cursors = initCursors(browser); + resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10; + /** + * ```js + * interact(element).resizable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * edges: { + * top : true, // Use pointer coords to check for resize. + * left : false, // Disable resizing from left edge. + * bottom: '.resize-s',// Resize if pointer target matches selector + * right : handleEl // Resize if pointer target is the given Element + * }, + * + * // Width and height can be adjusted independently. When `true`, width and + * // height are adjusted at a 1:1 ratio. + * square: false, + * + * // Width and height can be adjusted independently. When `true`, width and + * // height maintain the aspect ratio they had when resizing started. + * preserveAspectRatio: false, + * + * // a value of 'none' will limit the resize rect to a minimum of 0x0 + * // 'negate' will allow the rect to have negative width/height + * // 'reposition' will keep the width/height positive by swapping + * // the top and bottom edges and/or swapping the left and right edges + * invert: 'none' || 'negate' || 'reposition' + * + * // limit multiple resizes. + * // See the explanation in the {@link Interactable.draggable} example + * max: Infinity, + * maxPerElement: 1, + * }) + * + * var isResizeable = interact(element).resizable() + * ``` + * + * Gets or sets whether resize actions can be performed on the target + * + * @param {boolean | object} [options] true/false or An object with event + * listeners to be fired on resize events (object makes the Interactable + * resizable) + * @return {boolean | Interactable} A boolean indicating if this can be the + * target of resize elements, or this Interactable + */ + + Interactable.prototype.resizable = function (options) { + return resizable(this, options, scope); + }; + + actions[ActionName.Resize] = resize; + actions.names.push(ActionName.Resize); + arr.merge(actions.eventTypes, ['resizestart', 'resizemove', 'resizeinertiastart', 'resizeresume', 'resizeend']); + actions.methodDict.resize = 'resizable'; + defaults.actions.resize = resize.defaults; } + const resize = { - id: 'actions/resize', - install, - defaults: { - square: false, - preserveAspectRatio: false, - axis: 'xy', - // use default margin - margin: NaN, - // object with props left, right, top, bottom which are - // true/false values to resize when the pointer is over that edge, - // CSS selectors to match the handles for each direction - // or the Elements for each handle - edges: null, - // a value of 'none' will limit the resize rect to a minimum of 0x0 - // 'negate' will alow the rect to have negative width/height - // 'reposition' will keep the width/height positive by swapping - // the top and bottom edges and/or swapping the left and right edges - invert: 'none', + id: 'actions/resize', + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.resizeAxes = 'xy'; }, - checker(_pointer, _event, interactable, element, interaction, rect) { - if (!rect) { - return null; - } - const page = extend({}, interaction.coords.cur.page); - const options = interactable.options; - if (options.resize.enabled) { - const resizeOptions = options.resize; - const resizeEdges = { left: false, right: false, top: false, bottom: false }; - // if using resize.edges - if (is.object(resizeOptions.edges)) { - for (const edge in resizeEdges) { - resizeEdges[edge] = checkResizeEdge(edge, resizeOptions.edges[edge], page, interaction._latestPointer.eventTarget, element, rect, resizeOptions.margin || this.defaultMargin); - } - resizeEdges.left = resizeEdges.left && !resizeEdges.right; - resizeEdges.top = resizeEdges.top && !resizeEdges.bottom; - if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) { - return { - name: 'resize', - edges: resizeEdges, - }; - } - } - else { - const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin); - const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin); - if (right || bottom) { - return { - name: 'resize', - axes: (right ? 'x' : '') + (bottom ? 'y' : ''), - }; - } - } - } - return null; + 'interactions:action-start': arg => { + start(arg); + updateEventAxes(arg); }, - cursors: null, - getCursor({ edges, axis, name }) { - const cursors = resize.cursors; - let result = null; - if (axis) { - result = cursors[name + axis]; - } - else if (edges) { - let cursorKey = ''; - for (const edge of ['top', 'bottom', 'left', 'right']) { - if (edges[edge]) { - cursorKey += edge; - } - } - result = cursors[cursorKey]; - } - return result; + 'interactions:action-move': arg => { + move(arg); + updateEventAxes(arg); }, - defaultMargin: null, -}; -function resizable(interactable, options, scope) { - if (is.object(options)) { - interactable.options.resize.enabled = options.enabled !== false; - interactable.setPerAction('resize', options); - interactable.setOnEvents('resize', options); - if (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; - } - if (is.bool(options.preserveAspectRatio)) { - interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio; - } - else if (is.bool(options.square)) { - interactable.options.resize.square = options.square; - } - return interactable; - } - if (is.bool(options)) { - interactable.options.resize.enabled = options; - return interactable; + 'interactions:action-end': end + }, + defaults: { + square: false, + preserveAspectRatio: false, + axis: 'xy', + // use default margin + margin: NaN, + // object with props left, right, top, bottom which are + // true/false values to resize when the pointer is over that edge, + // CSS selectors to match the handles for each direction + // or the Elements for each handle + edges: null, + // a value of 'none' will limit the resize rect to a minimum of 0x0 + // 'negate' will alow the rect to have negative width/height + // 'reposition' will keep the width/height positive by swapping + // the top and bottom edges and/or swapping the left and right edges + invert: 'none' + }, + + checker(_pointer, _event, interactable, element, interaction, rect) { + if (!rect) { + return null; } - return interactable.options.resize; -} -function checkResizeEdge(name, value, page, element, interactableElement, rect, margin) { - // false, '', undefined, null - if (!value) { - return false; - } - // true value, use pointer coords and element rect - if (value === true) { - // if dimensions are negative, "switch" edges - const width = is.number(rect.width) ? rect.width : rect.right - rect.left; - const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top; - // don't use margin greater than half the relevent dimension - margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2); - if (width < 0) { - if (name === 'left') { - name = 'right'; - } - else if (name === 'right') { - name = 'left'; - } - } - if (height < 0) { - if (name === 'top') { - name = 'bottom'; - } - else if (name === 'bottom') { - name = 'top'; - } - } - if (name === 'left') { - return page.x < ((width >= 0 ? rect.left : rect.right) + margin); + + const page = extend({}, interaction.coords.cur.page); + const options = interactable.options; + + if (options.resize.enabled) { + const resizeOptions = options.resize; + const resizeEdges = { + left: false, + right: false, + top: false, + bottom: false + }; // if using resize.edges + + if (is.object(resizeOptions.edges)) { + for (const edge in resizeEdges) { + resizeEdges[edge] = checkResizeEdge(edge, resizeOptions.edges[edge], page, interaction._latestPointer.eventTarget, element, rect, resizeOptions.margin || this.defaultMargin); } - if (name === 'top') { - return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin); + + resizeEdges.left = resizeEdges.left && !resizeEdges.right; + resizeEdges.top = resizeEdges.top && !resizeEdges.bottom; + + if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) { + return { + name: 'resize', + edges: resizeEdges + }; } - if (name === 'right') { - return page.x > ((width >= 0 ? rect.right : rect.left) - margin); + } else { + const right = options.resize.axis !== 'y' && page.x > rect.right - this.defaultMargin; + const bottom = options.resize.axis !== 'x' && page.y > rect.bottom - this.defaultMargin; + + if (right || bottom) { + return { + name: 'resize', + axes: (right ? 'x' : '') + (bottom ? 'y' : '') + }; } - if (name === 'bottom') { - return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin); - } - } - // the remaining checks require an element - if (!is.element(element)) { - return false; + } } - return is.element(value) - // the value is an element to use as a resize handle - ? value === element - // otherwise check if element matches value as selector - : dom.matchesUpTo(element, value, interactableElement); -} -function initCursors(browser) { - return (browser.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 start({ iEvent, interaction }) { - if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { - return; - } - const startRect = extend({}, interaction.rect); - const resizeOptions = interaction.interactable.options.resize; - /* - * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge - * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make - * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend - * on the active edges and the edge being interacted with. - */ - if (resizeOptions.square || resizeOptions.preserveAspectRatio) { - const linkedEdges = extend({}, interaction.prepared.edges); - linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom); - linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right); - linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top); - linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left); - interaction.prepared._linkedEdges = linkedEdges; + + return null; + }, + + cursors: null, + + getCursor({ + edges, + axis, + name + }) { + const cursors = resize.cursors; + let result = null; + + if (axis) { + result = cursors[name + axis]; + } else if (edges) { + let cursorKey = ''; + + for (const edge of ['top', 'bottom', 'left', 'right']) { + if (edges[edge]) { + cursorKey += edge; + } + } + + result = cursors[cursorKey]; } - else { - interaction.prepared._linkedEdges = null; + + return result; + }, + + defaultMargin: null +}; + +function resizable(interactable, options, scope) { + if (is.object(options)) { + interactable.options.resize.enabled = options.enabled !== false; + interactable.setPerAction('resize', options); + interactable.setOnEvents('resize', options); + + if (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; } - // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize - if (resizeOptions.preserveAspectRatio) { - interaction.resizeStartAspectRatio = startRect.width / startRect.height; + + if (is.bool(options.preserveAspectRatio)) { + interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio; + } else if (is.bool(options.square)) { + interactable.options.resize.square = options.square; } - interaction.resizeRects = { - start: startRect, - current: { - left: startRect.left, - right: startRect.right, - top: startRect.top, - bottom: startRect.bottom, - }, - inverted: extend({}, startRect), - previous: extend({}, startRect), - delta: { - left: 0, - right: 0, - width: 0, - top: 0, - bottom: 0, - height: 0, - }, - }; - iEvent.edges = interaction.prepared.edges; - iEvent.rect = interaction.resizeRects.inverted; - iEvent.deltaRect = interaction.resizeRects.delta; + + return interactable; + } + + if (is.bool(options)) { + interactable.options.resize.enabled = options; + return interactable; + } + + return interactable.options.resize; } -function move({ iEvent, interaction }) { - if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { - return; + +function checkResizeEdge(name, value, page, element, interactableElement, rect, margin) { + // false, '', undefined, null + if (!value) { + return false; + } // true value, use pointer coords and element rect + + + if (value === true) { + // if dimensions are negative, "switch" edges + const width = is.number(rect.width) ? rect.width : rect.right - rect.left; + const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top; // don't use margin greater than half the relevent dimension + + margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2); + + if (width < 0) { + if (name === 'left') { + name = 'right'; + } else if (name === 'right') { + name = 'left'; + } } - const resizeOptions = interaction.interactable.options.resize; - const invert = resizeOptions.invert; - const invertible = invert === 'reposition' || invert === 'negate'; - let edges = interaction.prepared.edges; - // eslint-disable-next-line no-shadow - const start = interaction.resizeRects.start; - const current = interaction.resizeRects.current; - const inverted = interaction.resizeRects.inverted; - const deltaRect = interaction.resizeRects.delta; - const previous = extend(interaction.resizeRects.previous, inverted); - const originalEdges = edges; - const eventDelta = extend({}, iEvent.delta); - if (resizeOptions.preserveAspectRatio || resizeOptions.square) { - // `resize.preserveAspectRatio` takes precedence over `resize.square` - const startAspectRatio = resizeOptions.preserveAspectRatio - ? interaction.resizeStartAspectRatio - : 1; - edges = interaction.prepared._linkedEdges; - if ((originalEdges.left && originalEdges.bottom) || - (originalEdges.right && originalEdges.top)) { - eventDelta.y = -eventDelta.x / startAspectRatio; - } - else if (originalEdges.left || originalEdges.right) { - eventDelta.y = eventDelta.x / startAspectRatio; - } - else if (originalEdges.top || originalEdges.bottom) { - eventDelta.x = eventDelta.y * startAspectRatio; - } + + if (height < 0) { + if (name === 'top') { + name = 'bottom'; + } else if (name === 'bottom') { + name = 'top'; + } } - // update the 'current' rect without modifications - if (edges.top) { - current.top += eventDelta.y; + + if (name === 'left') { + return page.x < (width >= 0 ? rect.left : rect.right) + margin; } - if (edges.bottom) { - current.bottom += eventDelta.y; + + if (name === 'top') { + return page.y < (height >= 0 ? rect.top : rect.bottom) + margin; } - if (edges.left) { - current.left += eventDelta.x; + + if (name === 'right') { + return page.x > (width >= 0 ? rect.right : rect.left) - margin; } - if (edges.right) { - current.right += eventDelta.x; + + if (name === 'bottom') { + return page.y > (height >= 0 ? rect.bottom : rect.top) - margin; } - if (invertible) { - // if invertible, copy the current rect - extend(inverted, current); - if (invert === 'reposition') { - // swap edge values if necessary to keep width/height positive - let swap; - if (inverted.top > inverted.bottom) { - swap = inverted.top; - inverted.top = inverted.bottom; - inverted.bottom = swap; - } - if (inverted.left > inverted.right) { - swap = inverted.left; - inverted.left = inverted.right; - inverted.right = swap; - } - } + } // the remaining checks require an element + + + if (!is.element(element)) { + return false; + } + + return is.element(value) // the value is an element to use as a resize handle + ? value === element // otherwise check if element matches value as selector + : dom.matchesUpTo(element, value, interactableElement); +} + +function initCursors(browser) { + return browser.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 start({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { + return; + } + + const startRect = extend({}, interaction.rect); + const resizeOptions = interaction.interactable.options.resize; + /* + * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge + * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make + * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend + * on the active edges and the edge being interacted with. + */ + + if (resizeOptions.square || resizeOptions.preserveAspectRatio) { + const linkedEdges = extend({}, interaction.prepared.edges); + linkedEdges.top = linkedEdges.top || linkedEdges.left && !linkedEdges.bottom; + linkedEdges.left = linkedEdges.left || linkedEdges.top && !linkedEdges.right; + linkedEdges.bottom = linkedEdges.bottom || linkedEdges.right && !linkedEdges.top; + linkedEdges.right = linkedEdges.right || linkedEdges.bottom && !linkedEdges.left; + interaction.prepared._linkedEdges = linkedEdges; + } else { + interaction.prepared._linkedEdges = null; + } // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize + + + if (resizeOptions.preserveAspectRatio) { + interaction.resizeStartAspectRatio = startRect.width / startRect.height; + } + + interaction.resizeRects = { + start: startRect, + current: { + left: startRect.left, + right: startRect.right, + top: startRect.top, + bottom: startRect.bottom + }, + inverted: extend({}, startRect), + previous: extend({}, startRect), + delta: { + left: 0, + right: 0, + width: 0, + top: 0, + bottom: 0, + height: 0 } - else { - // if not invertible, restrict to minimum of 0x0 rect - inverted.top = Math.min(current.top, start.bottom); - inverted.bottom = Math.max(current.bottom, start.top); - inverted.left = Math.min(current.left, start.right); - inverted.right = Math.max(current.right, start.left); + }; + iEvent.edges = interaction.prepared.edges; + iEvent.rect = interaction.resizeRects.inverted; + iEvent.deltaRect = interaction.resizeRects.delta; +} + +function move({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { + return; + } + + const resizeOptions = interaction.interactable.options.resize; + const invert = resizeOptions.invert; + const invertible = invert === 'reposition' || invert === 'negate'; + let edges = interaction.prepared.edges; // eslint-disable-next-line no-shadow + + const start = interaction.resizeRects.start; + const current = interaction.resizeRects.current; + const inverted = interaction.resizeRects.inverted; + const deltaRect = interaction.resizeRects.delta; + const previous = extend(interaction.resizeRects.previous, inverted); + const originalEdges = edges; + const eventDelta = extend({}, iEvent.delta); + + if (resizeOptions.preserveAspectRatio || resizeOptions.square) { + // `resize.preserveAspectRatio` takes precedence over `resize.square` + const startAspectRatio = resizeOptions.preserveAspectRatio ? interaction.resizeStartAspectRatio : 1; + edges = interaction.prepared._linkedEdges; + + if (originalEdges.left && originalEdges.bottom || originalEdges.right && originalEdges.top) { + eventDelta.y = -eventDelta.x / startAspectRatio; + } else if (originalEdges.left || originalEdges.right) { + eventDelta.y = eventDelta.x / startAspectRatio; + } else if (originalEdges.top || originalEdges.bottom) { + eventDelta.x = eventDelta.y * startAspectRatio; } - inverted.width = inverted.right - inverted.left; - inverted.height = inverted.bottom - inverted.top; - for (const edge in inverted) { - deltaRect[edge] = inverted[edge] - previous[edge]; + } // update the 'current' rect without modifications + + + if (edges.top) { + current.top += eventDelta.y; + } + + if (edges.bottom) { + current.bottom += eventDelta.y; + } + + if (edges.left) { + current.left += eventDelta.x; + } + + if (edges.right) { + current.right += eventDelta.x; + } + + if (invertible) { + // if invertible, copy the current rect + extend(inverted, current); + + if (invert === 'reposition') { + // swap edge values if necessary to keep width/height positive + let swap; + + if (inverted.top > inverted.bottom) { + swap = inverted.top; + inverted.top = inverted.bottom; + inverted.bottom = swap; + } + + if (inverted.left > inverted.right) { + swap = inverted.left; + inverted.left = inverted.right; + inverted.right = swap; + } } - iEvent.edges = interaction.prepared.edges; - iEvent.rect = inverted; - iEvent.deltaRect = deltaRect; + } else { + // if not invertible, restrict to minimum of 0x0 rect + inverted.top = Math.min(current.top, start.bottom); + inverted.bottom = Math.max(current.bottom, start.top); + inverted.left = Math.min(current.left, start.right); + inverted.right = Math.max(current.right, start.left); + } + + inverted.width = inverted.right - inverted.left; + inverted.height = inverted.bottom - inverted.top; + + for (const edge in inverted) { + deltaRect[edge] = inverted[edge] - previous[edge]; + } + + iEvent.edges = interaction.prepared.edges; + iEvent.rect = inverted; + iEvent.deltaRect = deltaRect; } -function end({ iEvent, interaction }) { - if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { - return; - } - iEvent.edges = interaction.prepared.edges; - iEvent.rect = interaction.resizeRects.inverted; - iEvent.deltaRect = interaction.resizeRects.delta; + +function end({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { + return; + } + + iEvent.edges = interaction.prepared.edges; + iEvent.rect = interaction.resizeRects.inverted; + iEvent.deltaRect = interaction.resizeRects.delta; } -function updateEventAxes({ iEvent, interaction, action }) { - if (action !== ActionName.Resize || !interaction.resizeAxes) { - return; + +function updateEventAxes({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== ActionName.Resize || !interaction.resizeAxes) { + return; + } + + const options = interaction.interactable.options; + + if (options.resize.square) { + if (interaction.resizeAxes === 'y') { + iEvent.delta.x = iEvent.delta.y; + } else { + iEvent.delta.y = iEvent.delta.x; } - const options = interaction.interactable.options; - if (options.resize.square) { - if (interaction.resizeAxes === 'y') { - iEvent.delta.x = iEvent.delta.y; - } - else { - iEvent.delta.y = iEvent.delta.x; - } - iEvent.axes = 'xy'; - } - else { - iEvent.axes = interaction.resizeAxes; - if (interaction.resizeAxes === 'x') { - iEvent.delta.y = 0; - } - else if (interaction.resizeAxes === 'y') { - iEvent.delta.x = 0; - } + + iEvent.axes = 'xy'; + } else { + iEvent.axes = interaction.resizeAxes; + + if (interaction.resizeAxes === 'x') { + iEvent.delta.y = 0; + } else if (interaction.resizeAxes === 'y') { + iEvent.delta.x = 0; } + } } + export default resize; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEtBQUssR0FBRyxNQUFNLHVCQUF1QixDQUFBO0FBQzVDLE9BQU8sS0FBSyxHQUFHLE1BQU0sNEJBQTRCLENBQUE7QUFDakQsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQWdEekMsVUFBa0IsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFBO0FBT3JDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLE9BQU8sRUFDUCxPQUFPO0lBQ1AsMEJBQTBCO0lBQzFCLFlBQVksRUFBRSwyQ0FBMkM7SUFDekQsWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULGtDQUFrQztJQUVsQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDM0MsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7SUFDL0IsQ0FBQyxDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDOUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzVDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUUxQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDeEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBRXZELE1BQU0s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TSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQXlFO0lBQzlILElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1FBQUUsT0FBTTtLQUFFO0lBRXZFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFBO0lBRWhELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDekIsSUFBSSxXQUFXLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRTtZQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtTQUNoQzthQUNJO1lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7U0FDaEM7UUFDRCxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtLQUNuQjtTQUNJO1FBQ0gsTUFBTSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFBO1FBRXBDLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUU7WUFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQ25CO2FBQ0ksSUFBSSxXQUFXLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRTtZQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDbkI7S0FDRjtBQUNILENBQUM7QUFFRCxlQUFlLE1BQU0sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvblByb3BzLCBJbnRlcmFjdGlvbiB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nXG5pbXBvcnQgeyBBY3Rpb25OYW1lLCBTY29wZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgKiBhcyBhcnIgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvYXJyJ1xuaW1wb3J0ICogYXMgZG9tIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2RvbVV0aWxzJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9leHRlbmQnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcblxuZXhwb3J0IHR5cGUgRWRnZU5hbWUgPSAndG9wJyB8ICdsZWZ0JyB8ICdib3R0b20nIHwgJ3JpZ2h0J1xuXG5leHBvcnQgdHlwZSBSZXNpemFibGVNZXRob2QgPSBJbnRlcmFjdC5BY3Rpb25NZXRob2Q8SW50ZXJhY3QuUmVzaXphYmxlT3B0aW9ucz5cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGFibGUge1xuICAgIHJlc2l6YWJsZTogUmVzaXphYmxlTWV0aG9kXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICByZXNpemVBeGVzOiAneCcgfCAneScgfCAneHknXG4gICAgcmVzaXplUmVjdHM6IHtcbiAgICAgIHN0YXJ0OiBJbnRlcmFjdC5GdWxsUmVjdFxuICAgICAgY3VycmVudDogSW50ZXJhY3QuUmVjdFxuICAgICAgaW52ZXJ0ZWQ6IEludGVyYWN0LkZ1bGxSZWN0XG4gICAgICBwcmV2aW91czogSW50ZXJhY3QuRnVsbFJlY3RcbiAgICAgIGRlbHRhOiBJbnRlcmFjdC5GdWxsUmVjdFxuICAgIH1cbiAgICByZXNpemVTdGFydEFzcGVjdFJhdGlvOiBudW1iZXJcbiAgfVxuXG4gIGludGVyZmFjZSBBY3Rpb25Qcm9wcyB7XG4gICAgZWRnZXM/OiB7IFtlZGdlIGluICd0b3AnIHwgJ2xlZnQnIHwgJ2JvdHRvbScgfCAncmlnaHQnXT86IGJvb2xlYW4gfVxuICAgIF9saW5rZWRFZGdlcz86IHsgW2VkZ2UgaW4gJ3RvcCcgfCAnbGVmdCcgfCAnYm90dG9tJyB8ICdyaWdodCddPzogYm9vbGVhbiB9XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICByZXNpemU6IEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgQWN0aW9ucyB7XG4gICAgW0FjdGlvbk5hbWUuUmVzaXplXT86IHR5cGVvZiByZXNpemVcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgZW51bSBBY3Rpb25OYW1lIHtcbiAgICBSZXNpemUgPSAncmVzaXplJ1xuICB9XG59XG5cbihBY3Rpb25OYW1lIGFzIGFueSkuUmVzaXplID0gJ3Jlc2l6ZSdcblxuZXhwb3J0IGludGVyZmFjZSBSZXNpemVFdmVudCBleHRlbmRzIEludGVyYWN0LkludGVyYWN0RXZlbnQ8QWN0aW9uTmFtZS5SZXNpemU+IHtcbiAgZGVsdGFSZWN0PzogSW50ZXJhY3QuRnVsbFJlY3RcbiAgZWRnZXM/OiBJbnRlcmFjdC5BY3Rpb25Qcm9wc1snZWRnZXMnXVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgYnJvd3NlcixcbiAgICAvKiogQGxlbmRzIEludGVyYWN0YWJsZSAqL1xuICAgIEludGVyYWN0YWJsZSwgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgLy8gTGVzcyBQcmVjaXNpb24gd2l0aCB0b3VjaCBpbnB1dFxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCduZXcnLCBpbnRlcmFjdGlvbiA9PiB7XG4gICAgaW50ZXJhY3Rpb24ucmVzaXplQXhlcyA9ICd4eSdcbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLXN0YXJ0Jywgc3RhcnQpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIG1vdmUpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tZW5kJywgZW5kKVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tc3RhcnQnLCB1cGRhdGVFdmVudEF4ZXMpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tbW92ZScsIHVwZGF0ZUV2ZW50QXhlcylcblxuICByZXNpemUuY3Vyc29ycyA9IGluaXRDdXJzb3JzKGJyb3dzZXIpXG4gIHJlc2l6ZS5kZWZhdWx0TWFyZ2luID0gYnJvd3Nlci5zdXBwb3J0c1RvdWNoIHx8IGJyb3dzZXIuc3VwcG9ydHNQb2ludGVyRXZlbnQgPyAyMCA6IDEwXG5cbiAgLyoqXG4gICAqIGBgYGpzXG4gICAqIGludGVyYWN0KGVsZW1lbnQpLnJlc2l6YWJsZSh7XG4gICAqICAgb25zdGFydDogZnVuY3Rpb24gKGV2ZW50KSB7fSxcbiAgICogICBvbm1vdmUgOiBmdW5jdGlvbiAoZXZlbnQpIHt9LFxuICAgKiAgIG9uZW5kICA6IGZ1bmN0aW9uIChldmVudCkge30sXG4gICAqXG4gICAqICAgZWRnZXM6IHtcbiAgICogICAgIHRvcCAgIDogdHJ1ZSwgICAgICAgLy8gVXNlIHBvaW50ZXIgY29vcmRzIHRvIGNoZWNrIGZvciByZXNpemUuXG4gICAqICAgICBsZWZ0ICA6IGZhbHNlLCAgICAgIC8vIERpc2FibGUgcmVzaXppbmcgZnJvbSBsZWZ0IGVkZ2UuXG4gICAqICAgICBib3R0b206ICcucmVzaXplLXMnLC8vIFJlc2l6ZSBpZiBwb2ludGVyIHRhcmdldCBtYXRjaGVzIHNlbGVjdG9yXG4gICAqICAgICByaWdodCA6IGhhbmRsZUVsICAgIC8vIFJlc2l6ZSBpZiBwb2ludGVyIHRhcmdldCBpcyB0aGUgZ2l2ZW4gRWxlbWVudFxuICAgKiAgIH0sXG4gICAqXG4gICAqICAgICAvLyBXaWR0aCBhbmQgaGVpZ2h0IGNhbiBiZSBhZGp1c3RlZCBpbmRlcGVuZGVudGx5LiBXaGVuIGB0cnVlYCwgd2lkdGggYW5kXG4gICAqICAgICAvLyBoZWlnaHQgYXJlIGFkanVzdGVkIGF0IGEgMToxIHJhdGlvLlxuICAgKiAgICAgc3F1YXJlOiBmYWxzZSxcbiAgICpcbiAgICogICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgY2FuIGJlIGFkanVzdGVkIGluZGVwZW5kZW50bHkuIFdoZW4gYHRydWVgLCB3aWR0aCBhbmRcbiAgICogICAgIC8vIGhlaWdodCBtYWludGFpbiB0aGUgYXNwZWN0IHJhdGlvIHRoZXkgaGFkIHdoZW4gcmVzaXppbmcgc3RhcnRlZC5cbiAgICogICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgKlxuICAgKiAgIC8vIGEgdmFsdWUgb2YgJ25vbmUnIHdpbGwgbGltaXQgdGhlIHJlc2l6ZSByZWN0IHRvIGEgbWluaW11bSBvZiAweDBcbiAgICogICAvLyAnbmVnYXRlJyB3aWxsIGFsbG93IHRoZSByZWN0IHRvIGhhdmUgbmVnYXRpdmUgd2lkdGgvaGVpZ2h0XG4gICAqICAgLy8gJ3JlcG9zaXRpb24nIHdpbGwga2VlcCB0aGUgd2lkdGgvaGVpZ2h0IHBvc2l0aXZlIGJ5IHN3YXBwaW5nXG4gICAqICAgLy8gdGhlIHRvcCBhbmQgYm90dG9tIGVkZ2VzIGFuZC9vciBzd2FwcGluZyB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXNcbiAgICogICBpbnZlcnQ6ICdub25lJyB8fCAnbmVnYXRlJyB8fCAncmVwb3NpdGlvbidcbiAgICpcbiAgICogICAvLyBsaW1pdCBtdWx0aXBsZSByZXNpemVzLlxuICAgKiAgIC8vIFNlZSB0aGUgZXhwbGFuYXRpb24gaW4gdGhlIHtAbGluayBJbnRlcmFjdGFibGUuZHJhZ2dhYmxlfSBleGFtcGxlXG4gICAqICAgbWF4OiBJbmZpbml0eSxcbiAgICogICBtYXhQZXJFbGVtZW50OiAxLFxuICAgKiB9KVxuICAgKlxuICAgKiB2YXIgaXNSZXNpemVhYmxlID0gaW50ZXJhY3QoZWxlbWVudCkucmVzaXphYmxlKClcbiAgICogYGBgXG4gICAqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHJlc2l6ZSBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBvYmplY3R9IFtvcHRpb25zXSB0cnVlL2ZhbHNlIG9yIEFuIG9iamVjdCB3aXRoIGV2ZW50XG4gICAqIGxpc3RlbmVycyB0byBiZSBmaXJlZCBvbiByZXNpemUgZXZlbnRzIChvYmplY3QgbWFrZXMgdGhlIEludGVyYWN0YWJsZVxuICAgKiByZXNpemFibGUpXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBJbnRlcmFjdGFibGV9IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgY2FuIGJlIHRoZVxuICAgKiB0YXJnZXQgb2YgcmVzaXplIGVsZW1lbnRzLCBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5yZXNpemFibGUgPSBmdW5jdGlvbiAodGhpczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLCBvcHRpb25zOiBJbnRlcmFjdC5SZXNpemFibGVPcHRpb25zIHwgYm9vbGVhbikge1xuICAgIHJldHVybiByZXNpemFibGUodGhpcywgb3B0aW9ucywgc2NvcGUpXG4gIH0gYXMgUmVzaXphYmxlTWV0aG9kXG5cbiAgYWN0aW9uc1tBY3Rpb25OYW1lLlJlc2l6ZV0gPSByZXNpemVcbiAgYWN0aW9ucy5uYW1lcy5wdXNoKEFjdGlvbk5hbWUuUmVzaXplKVxuICBhcnIubWVyZ2UoYWN0aW9ucy5ldmVudFR5cGVzLCBbXG4gICAgJ3Jlc2l6ZXN0YXJ0JyxcbiAgICAncmVzaXplbW92ZScsXG4gICAgJ3Jlc2l6ZWluZXJ0aWFzdGFydCcsXG4gICAgJ3Jlc2l6ZXJlc3VtZScsXG4gICAgJ3Jlc2l6ZWVuZCcsXG4gIF0pXG4gIGFjdGlvbnMubWV0aG9kRGljdC5yZXNpemUgPSAncmVzaXphYmxlJ1xuXG4gIGRlZmF1bHRzLmFjdGlvbnMucmVzaXplID0gcmVzaXplLmRlZmF1bHRzXG59XG5cbmNvbnN0IHJlc2l6ZSA9IHtcbiAgaWQ6ICdhY3Rpb25zL3Jlc2l6ZScsXG4gIGluc3RhbGwsXG4gIGRlZmF1bHRzOiB7XG4gICAgc3F1YXJlOiBmYWxzZSxcbiAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICBheGlzOiAneHknLFxuXG4gICAgLy8gdXNlIGRlZmF1bHQgbWFyZ2luXG4gICAgbWFyZ2luOiBOYU4sXG5cbiAgICAvLyBvYmplY3Qgd2l0aCBwcm9wcyBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20gd2hpY2ggYXJlXG4gICAgLy8gdHJ1ZS9mYWxzZSB2YWx1ZXMgdG8gcmVzaXplIHdoZW4gdGhlIHBvaW50ZXIgaXMgb3ZlciB0aGF0IGVkZ2UsXG4gICAgLy8gQ1NTIHNlbGVjdG9ycyB0byBtYXRjaCB0aGUgaGFuZGxlcyBmb3IgZWFjaCBkaXJlY3Rpb25cbiAgICAvLyBvciB0aGUgRWxlbWVudHMgZm9yIGVhY2ggaGFuZGxlXG4gICAgZWRnZXM6IG51bGwsXG5cbiAgICAvLyBhIHZhbHVlIG9mICdub25lJyB3aWxsIGxpbWl0IHRoZSByZXNpemUgcmVjdCB0byBhIG1pbmltdW0gb2YgMHgwXG4gICAgLy8gJ25lZ2F0ZScgd2lsbCBhbG93IHRoZSByZWN0IHRvIGhhdmUgbmVnYXRpdmUgd2lkdGgvaGVpZ2h0XG4gICAgLy8gJ3JlcG9zaXRpb24nIHdpbGwga2VlcCB0aGUgd2lkdGgvaGVpZ2h0IHBvc2l0aXZlIGJ5IHN3YXBwaW5nXG4gICAgLy8gdGhlIHRvcCBhbmQgYm90dG9tIGVkZ2VzIGFuZC9vciBzd2FwcGluZyB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXNcbiAgICBpbnZlcnQ6ICdub25lJyxcbiAgfSBhcyBJbnRlcmFjdC5SZXNpemFibGVPcHRpb25zLFxuXG4gIGNoZWNrZXIgKFxuICAgIF9wb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZSxcbiAgICBfZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsXG4gICAgaW50ZXJhY3RhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsXG4gICAgZWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCxcbiAgICBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24sXG4gICAgcmVjdDogSW50ZXJhY3QuUmVjdFxuICApIHtcbiAgICBpZiAoIXJlY3QpIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgY29uc3QgcGFnZSA9IGV4dGVuZCh7fSwgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlKVxuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGFibGUub3B0aW9uc1xuXG4gICAgaWYgKG9wdGlvbnMucmVzaXplLmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZU9wdGlvbnMgPSBvcHRpb25zLnJlc2l6ZVxuICAgICAgY29uc3QgcmVzaXplRWRnZXM6IHsgW2VkZ2U6IHN0cmluZ106IGJvb2xlYW4gfSA9IHsgbGVmdDogZmFsc2UsIHJpZ2h0OiBmYWxzZSwgdG9wOiBmYWxzZSwgYm90dG9tOiBmYWxzZSB9XG5cbiAgICAgIC8vIGlmIHVzaW5nIHJlc2l6ZS5lZGdlc1xuICAgICAgaWYgKGlzLm9iamVjdChyZXNpemVPcHRpb25zLmVkZ2VzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVkZ2UgaW4gcmVzaXplRWRnZXMpIHtcbiAgICAgICAgICByZXNpemVFZGdlc1tlZGdlXSA9IGNoZWNrUmVzaXplRWRnZShlZGdlLFxuICAgICAgICAgICAgcmVzaXplT3B0aW9ucy5lZGdlc1tlZGdlXSxcbiAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICBpbnRlcmFjdGlvbi5fbGF0ZXN0UG9pbnRlci5ldmVudFRhcmdldCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICByZWN0LFxuICAgICAgICAgICAgcmVzaXplT3B0aW9ucy5tYXJnaW4gfHwgdGhpcy5kZWZhdWx0TWFyZ2luKVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzaXplRWRnZXMubGVmdCA9IHJlc2l6ZUVkZ2VzLmxlZnQgJiYgIXJlc2l6ZUVkZ2VzLnJpZ2h0XG4gICAgICAgIHJlc2l6ZUVkZ2VzLnRvcCAgPSByZXNpemVFZGdlcy50b3AgICYmICFyZXNpemVFZGdlcy5ib3R0b21cblxuICAgICAgICBpZiAocmVzaXplRWRnZXMubGVmdCB8fCByZXNpemVFZGdlcy5yaWdodCB8fCByZXNpemVFZGdlcy50b3AgfHwgcmVzaXplRWRnZXMuYm90dG9tKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdyZXNpemUnLFxuICAgICAgICAgICAgZWRnZXM6IHJlc2l6ZUVkZ2VzLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHJpZ2h0ICA9IG9wdGlvbnMucmVzaXplLmF4aXMgIT09ICd5JyAmJiBwYWdlLnggPiAocmVjdC5yaWdodCAgLSB0aGlzLmRlZmF1bHRNYXJnaW4pXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IG9wdGlvbnMucmVzaXplLmF4aXMgIT09ICd4JyAmJiBwYWdlLnkgPiAocmVjdC5ib3R0b20gLSB0aGlzLmRlZmF1bHRNYXJnaW4pXG5cbiAgICAgICAgaWYgKHJpZ2h0IHx8IGJvdHRvbSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAncmVzaXplJyxcbiAgICAgICAgICAgIGF4ZXM6IChyaWdodCA/ICd4JyA6ICcnKSArIChib3R0b20gPyAneScgOiAnJyksXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICBjdXJzb3JzOiBudWxsIGFzIFJldHVyblR5cGU8dHlwZW9mIGluaXRDdXJzb3JzPixcblxuICBnZXRDdXJzb3IgKHsgZWRnZXMsIGF4aXMsIG5hbWUgfTogQWN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBjdXJzb3JzID0gcmVzaXplLmN1cnNvcnNcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsXG5cbiAgICBpZiAoYXhpcykge1xuICAgICAgcmVzdWx0ID0gY3Vyc29yc1tuYW1lICsgYXhpc11cbiAgICB9XG4gICAgZWxzZSBpZiAoZWRnZXMpIHtcbiAgICAgIGxldCBjdXJzb3JLZXkgPSAnJ1xuXG4gICAgICBmb3IgKGNvbnN0IGVkZ2Ugb2YgWyd0b3AnLCAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnXSkge1xuICAgICAgICBpZiAoZWRnZXNbZWRnZV0pIHtcbiAgICAgICAgICBjdXJzb3JLZXkgKz0gZWRnZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IGN1cnNvcnNbY3Vyc29yS2V5XVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfSxcblxuICBkZWZhdWx0TWFyZ2luOiBudWxsIGFzIG51bWJlcixcbn1cblxuZnVuY3Rpb24gcmVzaXphYmxlIChpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgb3B0aW9uczogSW50ZXJhY3QuT3JCb29sZWFuPEludGVyYWN0LlJlc2l6YWJsZU9wdGlvbnM+IHwgYm9vbGVhbiwgc2NvcGU6IFNjb3BlKSB7XG4gIGlmIChpcy5vYmplY3Qob3B0aW9ucykpIHtcbiAgICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICBpbnRlcmFjdGFibGUuc2V0UGVyQWN0aW9uKCdyZXNpemUnLCBvcHRpb25zKVxuICAgIGludGVyYWN0YWJsZS5zZXRPbkV2ZW50cygncmVzaXplJywgb3B0aW9ucylcblxuICAgIGlmIChpcy5zdHJpbmcob3B0aW9ucy5heGlzKSAmJiAvXngkfF55JHxeeHkkLy50ZXN0KG9wdGlvbnMuYXhpcykpIHtcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZS5heGlzID0gb3B0aW9ucy5heGlzXG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMuYXhpcyA9PT0gbnVsbCkge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplLmF4aXMgPSBzY29wZS5kZWZhdWx0cy5hY3Rpb25zLnJlc2l6ZS5heGlzXG4gICAgfVxuXG4gICAgaWYgKGlzLmJvb2wob3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvKSkge1xuICAgICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplLnByZXNlcnZlQXNwZWN0UmF0aW8gPSBvcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW9cbiAgICB9XG4gICAgZWxzZSBpZiAoaXMuYm9vbChvcHRpb25zLnNxdWFyZSkpIHtcbiAgICAgIGludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZS5zcXVhcmUgPSBvcHRpb25zLnNxdWFyZVxuICAgIH1cblxuICAgIHJldHVybiBpbnRlcmFjdGFibGVcbiAgfVxuICBpZiAoaXMuYm9vbChvcHRpb25zKSkge1xuICAgIGludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZS5lbmFibGVkID0gb3B0aW9uc1xuXG4gICAgcmV0dXJuIGludGVyYWN0YWJsZVxuICB9XG4gIHJldHVybiBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemVcbn1cblxuZnVuY3Rpb24gY2hlY2tSZXNpemVFZGdlIChcbiAgbmFtZTogc3RyaW5nLFxuICB2YWx1ZTogYW55LFxuICBwYWdlOiBJbnRlcmFjdC5Qb2ludCxcbiAgZWxlbWVudDogTm9kZSxcbiAgaW50ZXJhY3RhYmxlRWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCxcbiAgcmVjdDogSW50ZXJhY3QuUmVjdCxcbiAgbWFyZ2luOiBudW1iZXIsXG4pIHtcbiAgLy8gZmFsc2UsICcnLCB1bmRlZmluZWQsIG51bGxcbiAgaWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIC8vIHRydWUgdmFsdWUsIHVzZSBwb2ludGVyIGNvb3JkcyBhbmQgZWxlbWVudCByZWN0XG4gIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgIC8vIGlmIGRpbWVuc2lvbnMgYXJlIG5lZ2F0aXZlLCBcInN3aXRjaFwiIGVkZ2VzXG4gICAgY29uc3Qgd2lkdGggID0gaXMubnVtYmVyKHJlY3Qud2lkdGgpID8gcmVjdC53aWR0aCAgOiByZWN0LnJpZ2h0ICAtIHJlY3QubGVmdFxuICAgIGNvbnN0IGhlaWdodCA9IGlzLm51bWJlcihyZWN0LmhlaWdodCkgPyByZWN0LmhlaWdodCA6IHJlY3QuYm90dG9tIC0gcmVjdC50b3BcblxuICAgIC8vIGRvbid0IHVzZSBtYXJnaW4gZ3JlYXRlciB0aGFuIGhhbGYgdGhlIHJlbGV2ZW50IGRpbWVuc2lvblxuICAgIG1hcmdpbiA9IE1hdGgubWluKG1hcmdpbiwgKG5hbWUgPT09ICdsZWZ0JyB8fCBuYW1lID09PSAncmlnaHQnID8gd2lkdGggOiBoZWlnaHQpIC8gMilcblxuICAgIGlmICh3aWR0aCA8IDApIHtcbiAgICAgIGlmICAgICAgKG5hbWUgPT09ICdsZWZ0JykgIHsgbmFtZSA9ICdyaWdodCcgfVxuICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ3JpZ2h0JykgeyBuYW1lID0gJ2xlZnQnICB9XG4gICAgfVxuICAgIGlmIChoZWlnaHQgPCAwKSB7XG4gICAgICBpZiAgICAgIChuYW1lID09PSAndG9wJykgICAgeyBuYW1lID0gJ2JvdHRvbScgfVxuICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2JvdHRvbScpIHsgbmFtZSA9ICd0b3AnICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSA9PT0gJ2xlZnQnKSB7IHJldHVybiBwYWdlLnggPCAoKHdpZHRoICA+PSAwID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgKyBtYXJnaW4pIH1cbiAgICBpZiAobmFtZSA9PT0gJ3RvcCcpIHsgcmV0dXJuIHBhZ2UueSA8ICgoaGVpZ2h0ID49IDAgPyByZWN0LnRvcCA6IHJlY3QuYm90dG9tKSArIG1hcmdpbikgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdyaWdodCcpIHsgcmV0dXJuIHBhZ2UueCA+ICgod2lkdGggID49IDAgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIG1hcmdpbikgfVxuICAgIGlmIChuYW1lID09PSAnYm90dG9tJykgeyByZXR1cm4gcGFnZS55ID4gKChoZWlnaHQgPj0gMCA/IHJlY3QuYm90dG9tIDogcmVjdC50b3ApIC0gbWFyZ2luKSB9XG4gIH1cblxuICAvLyB0aGUgcmVtYWluaW5nIGNoZWNrcyByZXF1aXJlIGFuIGVsZW1lbnRcbiAgaWYgKCFpcy5lbGVtZW50KGVsZW1lbnQpKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgcmV0dXJuIGlzLmVsZW1lbnQodmFsdWUpXG4gIC8vIHRoZSB2YWx1ZSBpcyBhbiBlbGVtZW50IHRvIHVzZSBhcyBhIHJlc2l6ZSBoYW5kbGVcbiAgICA/IHZhbHVlID09PSBlbGVtZW50XG4gICAgLy8gb3RoZXJ3aXNlIGNoZWNrIGlmIGVsZW1lbnQgbWF0Y2hlcyB2YWx1ZSBhcyBzZWxlY3RvclxuICAgIDogZG9tLm1hdGNoZXNVcFRvKGVsZW1lbnQsIHZhbHVlLCBpbnRlcmFjdGFibGVFbGVtZW50KVxufVxuXG5mdW5jdGlvbiBpbml0Q3Vyc29ycyAoYnJvd3NlcjogdHlwZW9mIGltcG9ydCAoJ0BpbnRlcmFjdGpzL3V0aWxzL2Jyb3dzZXInKS5kZWZhdWx0KSB7XG4gIHJldHVybiAoYnJvd3Nlci5pc0llOSA/IHtcbiAgICB4IDogJ2UtcmVzaXplJyxcbiAgICB5IDogJ3MtcmVzaXplJyxcbiAgICB4eTogJ3NlLXJlc2l6ZScsXG5cbiAgICB0b3AgICAgICAgIDogJ24tcmVzaXplJyxcbiAgICBsZWZ0ICAgICAgIDogJ3ctcmVzaXplJyxcbiAgICBib3R0b20gICAgIDogJ3MtcmVzaXplJyxcbiAgICByaWdodCAgICAgIDogJ2UtcmVzaXplJyxcbiAgICB0b3BsZWZ0ICAgIDogJ3NlLXJlc2l6ZScsXG4gICAgYm90dG9tcmlnaHQ6ICdzZS1yZXNpemUnLFxuICAgIHRvcHJpZ2h0ICAgOiAnbmUtcmVzaXplJyxcbiAgICBib3R0b21sZWZ0IDogJ25lLXJlc2l6ZScsXG4gIH0gOiB7XG4gICAgeCA6ICdldy1yZXNpemUnLFxuICAgIHkgOiAnbnMtcmVzaXplJyxcbiAgICB4eTogJ253c2UtcmVzaXplJyxcblxuICAgIHRvcCAgICAgICAgOiAnbnMtcmVzaXplJyxcbiAgICBsZWZ0ICAgICAgIDogJ2V3LXJlc2l6ZScsXG4gICAgYm90dG9tICAgICA6ICducy1yZXNpemUnLFxuICAgIHJpZ2h0ICAgICAgOiAnZXctcmVzaXplJyxcbiAgICB0b3BsZWZ0ICAgIDogJ253c2UtcmVzaXplJyxcbiAgICBib3R0b21yaWdodDogJ253c2UtcmVzaXplJyxcbiAgICB0b3ByaWdodCAgIDogJ25lc3ctcmVzaXplJyxcbiAgICBib3R0b21sZWZ0IDogJ25lc3ctcmVzaXplJyxcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3RhcnQgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9OiB7IGlFdmVudDogUmVzaXplRXZlbnQsIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB9KSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0UmVjdCA9IGV4dGVuZCh7fSwgaW50ZXJhY3Rpb24ucmVjdClcbiAgY29uc3QgcmVzaXplT3B0aW9ucyA9IGludGVyYWN0aW9uLmludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZVxuXG4gIC8qXG4gICAqIFdoZW4gdXNpbmcgdGhlIGByZXNpemFibGUuc3F1YXJlYCBvciBgcmVzaXphYmxlLnByZXNlcnZlQXNwZWN0UmF0aW9gIG9wdGlvbnMsIHJlc2l6aW5nIGZyb20gb25lIGVkZ2VcbiAgICogd2lsbCBhZmZlY3QgYW5vdGhlci4gRS5nLiB3aXRoIGByZXNpemFibGUuc3F1YXJlYCwgcmVzaXppbmcgdG8gbWFrZSB0aGUgcmlnaHQgZWRnZSBsYXJnZXIgd2lsbCBtYWtlXG4gICAqIHRoZSBib3R0b20gZWRnZSBsYXJnZXIgYnkgdGhlIHNhbWUgYW1vdW50LiBXZSBjYWxsIHRoZXNlICdsaW5rZWQnIGVkZ2VzLiBBbnkgbGlua2VkIGVkZ2VzIHdpbGwgZGVwZW5kXG4gICAqIG9uIHRoZSBhY3RpdmUgZWRnZXMgYW5kIHRoZSBlZGdlIGJlaW5nIGludGVyYWN0ZWQgd2l0aC5cbiAgICovXG4gIGlmIChyZXNpemVPcHRpb25zLnNxdWFyZSB8fCByZXNpemVPcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW8pIHtcbiAgICBjb25zdCBsaW5rZWRFZGdlcyA9IGV4dGVuZCh7fSwgaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMpXG5cbiAgICBsaW5rZWRFZGdlcy50b3AgICAgPSBsaW5rZWRFZGdlcy50b3AgICAgfHwgKGxpbmtlZEVkZ2VzLmxlZnQgICAmJiAhbGlua2VkRWRnZXMuYm90dG9tKVxuICAgIGxpbmtlZEVkZ2VzLmxlZnQgICA9IGxpbmtlZEVkZ2VzLmxlZnQgICB8fCAobGlua2VkRWRnZXMudG9wICAgICYmICFsaW5rZWRFZGdlcy5yaWdodClcbiAgICBsaW5rZWRFZGdlcy5ib3R0b20gPSBsaW5rZWRFZGdlcy5ib3R0b20gfHwgKGxpbmtlZEVkZ2VzLnJpZ2h0ICAmJiAhbGlua2VkRWRnZXMudG9wKVxuICAgIGxpbmtlZEVkZ2VzLnJpZ2h0ICA9IGxpbmtlZEVkZ2VzLnJpZ2h0ICB8fCAobGlua2VkRWRnZXMuYm90dG9tICYmICFsaW5rZWRFZGdlcy5sZWZ0KVxuXG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuX2xpbmtlZEVkZ2VzID0gbGlua2VkRWRnZXNcbiAgfVxuICBlbHNlIHtcbiAgICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5fbGlua2VkRWRnZXMgPSBudWxsXG4gIH1cblxuICAvLyBpZiB1c2luZyBgcmVzaXphYmxlLnByZXNlcnZlQXNwZWN0UmF0aW9gIG9wdGlvbiwgcmVjb3JkIGFzcGVjdCByYXRpbyBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlc2l6ZVxuICBpZiAocmVzaXplT3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvKSB7XG4gICAgaW50ZXJhY3Rpb24ucmVzaXplU3RhcnRBc3BlY3RSYXRpbyA9IHN0YXJ0UmVjdC53aWR0aCAvIHN0YXJ0UmVjdC5oZWlnaHRcbiAgfVxuXG4gIGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzID0ge1xuICAgIHN0YXJ0ICAgICA6IHN0YXJ0UmVjdCxcbiAgICBjdXJyZW50ICAgOiB7XG4gICAgICBsZWZ0OiBzdGFydFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiBzdGFydFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHN0YXJ0UmVjdC50b3AsXG4gICAgICBib3R0b206IHN0YXJ0UmVjdC5ib3R0b20sXG4gICAgfSxcbiAgICBpbnZlcnRlZCAgOiBleHRlbmQoe30sIHN0YXJ0UmVjdCksXG4gICAgcHJldmlvdXMgIDogZXh0ZW5kKHt9LCBzdGFydFJlY3QpLFxuICAgIGRlbHRhICAgICA6IHtcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodCA6IDAsXG4gICAgICB3aWR0aCA6IDAsXG4gICAgICB0b3AgOiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgIH0sXG4gIH1cblxuICBpRXZlbnQuZWRnZXMgPSBpbnRlcmFjdGlvbi5wcmVwYXJlZC5lZGdlc1xuICBpRXZlbnQucmVjdCA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmludmVydGVkXG4gIGlFdmVudC5kZWx0YVJlY3QgPSBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5kZWx0YVxufVxuXG5mdW5jdGlvbiBtb3ZlICh7IGlFdmVudCwgaW50ZXJhY3Rpb24gfTogeyBpRXZlbnQ6IFJlc2l6ZUV2ZW50LCBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24gfSkge1xuICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ3Jlc2l6ZScgfHwgIWludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzKSB7IHJldHVybiB9XG5cbiAgY29uc3QgcmVzaXplT3B0aW9ucyA9IGludGVyYWN0aW9uLmludGVyYWN0YWJsZS5vcHRpb25zLnJlc2l6ZVxuICBjb25zdCBpbnZlcnQgPSByZXNpemVPcHRpb25zLmludmVydFxuICBjb25zdCBpbnZlcnRpYmxlID0gaW52ZXJ0ID09PSAncmVwb3NpdGlvbicgfHwgaW52ZXJ0ID09PSAnbmVnYXRlJ1xuXG4gIGxldCBlZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICBjb25zdCBzdGFydCAgICAgID0gaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuc3RhcnRcbiAgY29uc3QgY3VycmVudCAgICA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmN1cnJlbnRcbiAgY29uc3QgaW52ZXJ0ZWQgICA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmludmVydGVkXG4gIGNvbnN0IGRlbHRhUmVjdCAgPSBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5kZWx0YVxuICBjb25zdCBwcmV2aW91cyAgID0gZXh0ZW5kKGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLnByZXZpb3VzLCBpbnZlcnRlZClcbiAgY29uc3Qgb3JpZ2luYWxFZGdlcyA9IGVkZ2VzXG5cbiAgY29uc3QgZXZlbnREZWx0YSA9IGV4dGVuZCh7fSwgaUV2ZW50LmRlbHRhKVxuXG4gIGlmIChyZXNpemVPcHRpb25zLnByZXNlcnZlQXNwZWN0UmF0aW8gfHwgcmVzaXplT3B0aW9ucy5zcXVhcmUpIHtcbiAgICAvLyBgcmVzaXplLnByZXNlcnZlQXNwZWN0UmF0aW9gIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgcmVzaXplLnNxdWFyZWBcbiAgICBjb25zdCBzdGFydEFzcGVjdFJhdGlvID0gcmVzaXplT3B0aW9ucy5wcmVzZXJ2ZUFzcGVjdFJhdGlvXG4gICAgICA/IGludGVyYWN0aW9uLnJlc2l6ZVN0YXJ0QXNwZWN0UmF0aW9cbiAgICAgIDogMVxuXG4gICAgZWRnZXMgPSBpbnRlcmFjdGlvbi5wcmVwYXJlZC5fbGlua2VkRWRnZXNcblxuICAgIGlmICgob3JpZ2luYWxFZGdlcy5sZWZ0ICYmIG9yaWdpbmFsRWRnZXMuYm90dG9tKSB8fFxuICAgICAgICAob3JpZ2luYWxFZGdlcy5yaWdodCAmJiBvcmlnaW5hbEVkZ2VzLnRvcCkpIHtcbiAgICAgIGV2ZW50RGVsdGEueSA9IC1ldmVudERlbHRhLnggLyBzdGFydEFzcGVjdFJhdGlvXG4gICAgfVxuICAgIGVsc2UgaWYgKG9yaWdpbmFsRWRnZXMubGVmdCB8fCBvcmlnaW5hbEVkZ2VzLnJpZ2h0KSB7IGV2ZW50RGVsdGEueSA9IGV2ZW50RGVsdGEueCAvIHN0YXJ0QXNwZWN0UmF0aW8gfVxuICAgIGVsc2UgaWYgKG9yaWdpbmFsRWRnZXMudG9wICB8fCBvcmlnaW5hbEVkZ2VzLmJvdHRvbSkgeyBldmVudERlbHRhLnggPSBldmVudERlbHRhLnkgKiBzdGFydEFzcGVjdFJhdGlvIH1cbiAgfVxuXG4gIC8vIHVwZGF0ZSB0aGUgJ2N1cnJlbnQnIHJlY3Qgd2l0aG91dCBtb2RpZmljYXRpb25zXG4gIGlmIChlZGdlcy50b3ApIHsgY3VycmVudC50b3AgICAgKz0gZXZlbnREZWx0YS55IH1cbiAgaWYgKGVkZ2VzLmJvdHRvbSkgeyBjdXJyZW50LmJvdHRvbSArPSBldmVudERlbHRhLnkgfVxuICBpZiAoZWRnZXMubGVmdCkgeyBjdXJyZW50LmxlZnQgICArPSBldmVudERlbHRhLnggfVxuICBpZiAoZWRnZXMucmlnaHQpIHsgY3VycmVudC5yaWdodCAgKz0gZXZlbnREZWx0YS54IH1cblxuICBpZiAoaW52ZXJ0aWJsZSkge1xuICAgIC8vIGlmIGludmVydGlibGUsIGNvcHkgdGhlIGN1cnJlbnQgcmVjdFxuICAgIGV4dGVuZChpbnZlcnRlZCwgY3VycmVudClcblxuICAgIGlmIChpbnZlcnQgPT09ICdyZXBvc2l0aW9uJykge1xuICAgICAgLy8gc3dhcCBlZGdlIHZhbHVlcyBpZiBuZWNlc3NhcnkgdG8ga2VlcCB3aWR0aC9oZWlnaHQgcG9zaXRpdmVcbiAgICAgIGxldCBzd2FwXG5cbiAgICAgIGlmIChpbnZlcnRlZC50b3AgPiBpbnZlcnRlZC5ib3R0b20pIHtcbiAgICAgICAgc3dhcCA9IGludmVydGVkLnRvcFxuXG4gICAgICAgIGludmVydGVkLnRvcCA9IGludmVydGVkLmJvdHRvbVxuICAgICAgICBpbnZlcnRlZC5ib3R0b20gPSBzd2FwXG4gICAgICB9XG4gICAgICBpZiAoaW52ZXJ0ZWQubGVmdCA+IGludmVydGVkLnJpZ2h0KSB7XG4gICAgICAgIHN3YXAgPSBpbnZlcnRlZC5sZWZ0XG5cbiAgICAgICAgaW52ZXJ0ZWQubGVmdCA9IGludmVydGVkLnJpZ2h0XG4gICAgICAgIGludmVydGVkLnJpZ2h0ID0gc3dhcFxuICAgICAgfVxuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBpZiBub3QgaW52ZXJ0aWJsZSwgcmVzdHJpY3QgdG8gbWluaW11bSBvZiAweDAgcmVjdFxuICAgIGludmVydGVkLnRvcCAgICA9IE1hdGgubWluKGN1cnJlbnQudG9wLCBzdGFydC5ib3R0b20pXG4gICAgaW52ZXJ0ZWQuYm90dG9tID0gTWF0aC5tYXgoY3VycmVudC5ib3R0b20sIHN0YXJ0LnRvcClcbiAgICBpbnZlcnRlZC5sZWZ0ICAgPSBNYXRoLm1pbihjdXJyZW50LmxlZnQsIHN0YXJ0LnJpZ2h0KVxuICAgIGludmVydGVkLnJpZ2h0ICA9IE1hdGgubWF4KGN1cnJlbnQucmlnaHQsIHN0YXJ0LmxlZnQpXG4gIH1cblxuICBpbnZlcnRlZC53aWR0aCAgPSBpbnZlcnRlZC5yaWdodCAgLSBpbnZlcnRlZC5sZWZ0XG4gIGludmVydGVkLmhlaWdodCA9IGludmVydGVkLmJvdHRvbSAtIGludmVydGVkLnRvcFxuXG4gIGZvciAoY29uc3QgZWRnZSBpbiBpbnZlcnRlZCkge1xuICAgIGRlbHRhUmVjdFtlZGdlXSA9IGludmVydGVkW2VkZ2VdIC0gcHJldmlvdXNbZWRnZV1cbiAgfVxuXG4gIGlFdmVudC5lZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzXG4gIGlFdmVudC5yZWN0ID0gaW52ZXJ0ZWRcbiAgaUV2ZW50LmRlbHRhUmVjdCA9IGRlbHRhUmVjdFxufVxuXG5mdW5jdGlvbiBlbmQgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiB9OiB7IGlFdmVudDogUmVzaXplRXZlbnQsIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvbiB9KSB7XG4gIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAncmVzaXplJyB8fCAhaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMpIHsgcmV0dXJuIH1cblxuICBpRXZlbnQuZWRnZXMgPSBpbnRlcmFjdGlvbi5wcmVwYXJlZC5lZGdlc1xuICBpRXZlbnQucmVjdCA9IGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLmludmVydGVkXG4gIGlFdmVudC5kZWx0YVJlY3QgPSBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5kZWx0YVxufVxuXG5mdW5jdGlvbiB1cGRhdGVFdmVudEF4ZXMgKHsgaUV2ZW50LCBpbnRlcmFjdGlvbiwgYWN0aW9uIH06IHsgaUV2ZW50OiBSZXNpemVFdmVudCwgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uLCBhY3Rpb246IEFjdGlvbk5hbWUgfSkge1xuICBpZiAoYWN0aW9uICE9PSBBY3Rpb25OYW1lLlJlc2l6ZSB8fCAhaW50ZXJhY3Rpb24ucmVzaXplQXhlcykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUub3B0aW9uc1xuXG4gIGlmIChvcHRpb25zLnJlc2l6ZS5zcXVhcmUpIHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucmVzaXplQXhlcyA9PT0gJ3knKSB7XG4gICAgICBpRXZlbnQuZGVsdGEueCA9IGlFdmVudC5kZWx0YS55XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaUV2ZW50LmRlbHRhLnkgPSBpRXZlbnQuZGVsdGEueFxuICAgIH1cbiAgICBpRXZlbnQuYXhlcyA9ICd4eSdcbiAgfVxuICBlbHNlIHtcbiAgICBpRXZlbnQuYXhlcyA9IGludGVyYWN0aW9uLnJlc2l6ZUF4ZXNcblxuICAgIGlmIChpbnRlcmFjdGlvbi5yZXNpemVBeGVzID09PSAneCcpIHtcbiAgICAgIGlFdmVudC5kZWx0YS55ID0gMFxuICAgIH1cbiAgICBlbHNlIGlmIChpbnRlcmFjdGlvbi5yZXNpemVBeGVzID09PSAneScpIHtcbiAgICAgIGlFdmVudC5kZWx0YS54ID0gMFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCByZXNpemVcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=resize.js.map \ No newline at end of file diff --git a/packages/actions/resize.js.map b/packages/actions/resize.js.map new file mode 100644 index 000000000..269132202 --- /dev/null +++ b/packages/actions/resize.js.map @@ -0,0 +1,120 @@ +{ + "version": 3, + "sources": [ + "resize.ts" + ], + "names": [ + "Interaction", + "ActionName", + "arr", + "dom", + "extend", + "is", + "Resize", + "install", + "scope", + "actions", + "browser", + "Interactable", + "defaults", + "resize", + "cursors", + "initCursors", + "defaultMargin", + "supportsTouch", + "supportsPointerEvent", + "prototype", + "resizable", + "options", + "names", + "push", + "merge", + "eventTypes", + "methodDict", + "id", + "listeners", + "interaction", + "resizeAxes", + "arg", + "start", + "updateEventAxes", + "move", + "end", + "square", + "preserveAspectRatio", + "axis", + "margin", + "NaN", + "edges", + "invert", + "checker", + "_pointer", + "_event", + "interactable", + "element", + "rect", + "page", + "coords", + "cur", + "enabled", + "resizeOptions", + "resizeEdges", + "left", + "right", + "top", + "bottom", + "object", + "edge", + "checkResizeEdge", + "_latestPointer", + "eventTarget", + "name", + "x", + "y", + "axes", + "getCursor", + "result", + "cursorKey", + "setPerAction", + "setOnEvents", + "string", + "test", + "bool", + "value", + "interactableElement", + "width", + "number", + "height", + "Math", + "min", + "matchesUpTo", + "isIe9", + "xy", + "topleft", + "bottomright", + "topright", + "bottomleft", + "iEvent", + "prepared", + "startRect", + "linkedEdges", + "_linkedEdges", + "resizeStartAspectRatio", + "resizeRects", + "current", + "inverted", + "previous", + "delta", + "deltaRect", + "invertible", + "originalEdges", + "eventDelta", + "startAspectRatio", + "swap", + "max" + ], + "mappings": "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", + "sourcesContent": [ + "import { Interaction } from '../core/Interaction'\nimport { ActionName, Scope } from '../core/scope'\nimport * as arr from '../utils/arr'\nimport * as dom from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.FullRect\n current: Interact.Rect\n inverted: Interact.FullRect\n previous: Interact.FullRect\n delta: Interact.FullRect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n edges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n _linkedEdges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.FullRect\n edges?: Interact.ActionProps['edges']\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n id: 'actions/resize',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': arg => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': arg => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Interact.Element,\n interaction: Interaction,\n rect: Interact.Rect,\n ) {\n if (!rect) { return null }\n\n const page = extend({}, interaction.coords.cur.page)\n const options = interactable.options\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize\n const resizeEdges: { [edge: string]: boolean } = { left: false, right: false, top: false, bottom: false }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as ReturnType,\n\n getCursor ({ edges, axis, name }: Interact.ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n }\n else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n defaultMargin: null as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (\n name: string,\n value: any,\n page: Interact.Point,\n element: Node,\n interactableElement: Interact.Element,\n rect: Interact.Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) { return false }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2)\n\n if (width < 0) {\n if (name === 'left') { name = 'right' }\n else if (name === 'right') { name = 'left' }\n }\n if (height < 0) {\n if (name === 'top') { name = 'bottom' }\n else if (name === 'bottom') { name = 'top' }\n }\n\n if (name === 'left') { return page.x < ((width >= 0 ? rect.left : rect.right) + margin) }\n if (name === 'top') { return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin) }\n\n if (name === 'right') { return page.x > ((width >= 0 ? rect.right : rect.left) - margin) }\n if (name === 'bottom') { return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin) }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) { return false }\n\n return is.element(value)\n // the value is an element to use as a resize handle\n ? value === element\n // otherwise check if element matches value as selector\n : dom.matchesUpTo(element, value, interactableElement)\n}\n\nfunction initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const startRect = extend({}, interaction.rect)\n const resizeOptions = interaction.interactable.options.resize\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = extend({}, interaction.prepared.edges)\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom)\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right)\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top)\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left)\n\n interaction.prepared._linkedEdges = linkedEdges\n }\n else {\n interaction.prepared._linkedEdges = null\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : {\n left: startRect.left,\n right: startRect.right,\n top: startRect.top,\n bottom: startRect.bottom,\n },\n inverted : extend({}, startRect),\n previous : extend({}, startRect),\n delta : {\n left: 0,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n let edges = interaction.prepared.edges\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start\n const current = interaction.resizeRects.current\n const inverted = interaction.resizeRects.inverted\n const deltaRect = interaction.resizeRects.delta\n const previous = extend(interaction.resizeRects.previous, inverted)\n const originalEdges = edges\n\n const eventDelta = extend({}, iEvent.delta)\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1\n\n edges = interaction.prepared._linkedEdges\n\n if ((originalEdges.left && originalEdges.bottom) ||\n (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio\n }\n else if (originalEdges.left || originalEdges.right) { eventDelta.y = eventDelta.x / startAspectRatio }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio }\n }\n\n // update the 'current' rect without modifications\n if (edges.top) { current.top += eventDelta.y }\n if (edges.bottom) { current.bottom += eventDelta.y }\n if (edges.left) { current.left += eventDelta.x }\n if (edges.right) { current.right += eventDelta.x }\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(inverted, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top\n\n inverted.top = inverted.bottom\n inverted.bottom = swap\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left\n\n inverted.left = inverted.right\n inverted.right = swap\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom)\n inverted.bottom = Math.max(current.bottom, start.top)\n inverted.left = Math.min(current.left, start.right)\n inverted.right = Math.max(current.right, start.left)\n }\n\n inverted.width = inverted.right - inverted.left\n inverted.height = inverted.bottom - inverted.top\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge]\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = inverted\n iEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction updateEventAxes ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== ActionName.Resize || !interaction.resizeAxes) { return }\n\n const options = interaction.interactable.options\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y\n }\n else {\n iEvent.delta.y = iEvent.delta.x\n }\n iEvent.axes = 'xy'\n }\n else {\n iEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0\n }\n }\n}\n\nexport default resize\n" + ] +} \ No newline at end of file diff --git a/packages/actions/resize.spec.js b/packages/actions/resize.spec.js deleted file mode 100644 index 7914a629f..000000000 --- a/packages/actions/resize.spec.js +++ /dev/null @@ -1,96 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import resize from './resize'; -test('resize', t => { - const rect = Object.freeze({ left: 0, top: 0, right: 10, bottom: 10, width: 10, height: 10 }); - const { scope, interactable, interaction, event, coords, target, } = helpers.testEnv({ - plugins: [resize], - rect, - }); - const element = target; - 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'); - interactable.resizable({ - edges: { left: true, top: true, right: true, bottom: true }, - // use margin greater than width and height - margin: Infinity, - }); - // resize top left - interaction.updatePointer(event, event, element, true); - t.deepEqual(resize.checker(event, event, interactable, element, interaction, rect), { - name: 'resize', - edges: { left: true, top: true, right: false, bottom: false }, - }, 'resize top left'); - // resize top right - coords.page.x = 10; - interaction.updatePointer(event, event, element, true); - t.deepEqual(resize.checker(event, event, interactable, element, interaction, rect), { - name: 'resize', - edges: { left: false, top: true, right: true, bottom: false }, - }, 'resize top right'); - // resize bottom right - coords.page.y = 10; - interaction.updatePointer(event, event, element, true); - t.deepEqual(resize.checker(event, event, interactable, element, interaction, rect), { - name: 'resize', - edges: { left: false, top: false, right: true, bottom: true }, - }, 'resize bottom right'); - const zeroRect = { left: 0, top: 0, right: 0, bottom: 0, width: 0, height: 0 }; - let resizeEvent = null; - interactable.on('resizestart resizemove resizeend', e => { - resizeEvent = e; - }); - coords.page.x = rect.right; - coords.page.y = rect.bottom; - interaction.updatePointer(event, event, element, true); - interaction.start({ name: 'resize', edges: { bottom: true, right: true } }, interactable, element); - t.deepEqual(interaction.resizeRects, { - start: rect, - current: helpers.getProps(rect, ['top', 'left', 'bottom', 'right']), - inverted: rect, - previous: rect, - delta: zeroRect, - }, 'sets starting interaction.resizeRect props'); - t.ok(hasResizeProps(resizeEvent), 'resizestart event has extra resize props'); - coords.page.x = -100; - coords.page.y = -200; - resizeEvent = null; - interaction.pointerMove(event, event, element); - t.deepEqual(interaction.resizeRects, { - start: rect, - current: { left: 0, top: 0, right: -100, bottom: -200 }, - inverted: zeroRect, - previous: rect, - delta: { ...zeroRect, right: -rect.width, bottom: -rect.bottom, width: -rect.width, height: -rect.height }, - }, "invert: 'none'"); - t.ok(hasResizeProps(resizeEvent), 'resizemove event has extra resize props'); - interactable.options.resize.invert = 'reposition'; - interaction.move(); - t.deepEqual(interaction.resizeRects, { - start: rect, - current: { left: 0, top: 0, right: -100, bottom: -200 }, - inverted: { ...zeroRect, left: -100, top: -200, width: 100, height: 200 }, - previous: interaction.resizeRects.previous, - delta: { ...zeroRect, left: -100, top: -200, width: 100, height: 200 }, - }, "invert: 'reposition'"); - interactable.options.resize.invert = 'none'; - interaction.move(); - interactable.options.resize.invert = 'negate'; - interaction.move(); - t.deepEqual(interaction.resizeRects, { - start: rect, - current: { left: 0, top: 0, right: -100, bottom: -200 }, - inverted: { ...zeroRect, right: -100, bottom: -200, width: -100, height: -200 }, - previous: interaction.resizeRects.previous, - delta: { ...zeroRect, right: -100, bottom: -200, width: -100, height: -200 }, - }, "invert: 'negate'"); - resizeEvent = null; - interaction.end(); - t.ok(hasResizeProps(resizeEvent), 'resizeend event has extra resize props'); - t.end(); -}); -function hasResizeProps(event) { - return !!(event.deltaRect && event.rect && event.edges); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXNpemUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUU3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDN0YsTUFBTSxFQUNKLEtBQUssRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNsQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakIsSUFBSTtLQUNMLENBQUMsQ0FBQTtJQUVGLE1BQU0sT0FBTyxHQUFHLE1BQXFCLENBQUE7SUFFckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBZSxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQTtJQUNoRixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO0lBRTVHLFlBQVks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IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvX2hlbHBlcnMnXG5pbXBvcnQgcmVzaXplIGZyb20gJy4vcmVzaXplJ1xuXG50ZXN0KCdyZXNpemUnLCB0ID0+IHtcbiAgY29uc3QgcmVjdCA9IE9iamVjdC5mcmVlemUoeyBsZWZ0OiAwLCB0b3A6IDAsIHJpZ2h0OiAxMCwgYm90dG9tOiAxMCwgd2lkdGg6IDEwLCBoZWlnaHQ6IDEwIH0pXG4gIGNvbnN0IHtcbiAgICBzY29wZSxcbiAgICBpbnRlcmFjdGFibGUsXG4gICAgaW50ZXJhY3Rpb24sXG4gICAgZXZlbnQsXG4gICAgY29vcmRzLFxuICAgIHRhcmdldCxcbiAgfSA9IGhlbHBlcnMudGVzdEVudih7XG4gICAgcGx1Z2luczogW3Jlc2l6ZV0sXG4gICAgcmVjdCxcbiAgfSlcblxuICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50XG5cbiAgdC5vayhzY29wZS5hY3Rpb25zLm5hbWVzLmluY2x1ZGVzKCdyZXNpemUnIGFzIGFueSksICdcInJlc2l6ZVwiIGluIGFjdGlvbnMubmFtZXMnKVxuICB0LmVxdWFsKHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdC5yZXNpemUsICdyZXNpemFibGUnKVxuICB0LmVxdWFsKHR5cGVvZiBzY29wZS5JbnRlcmFjdGFibGUucHJvdG90eXBlLnJlc2l6YWJsZSwgJ2Z1bmN0aW9uJywgJ0ludGVyYWN0YWJsZS5yZXNpemFibGUgbWV0aG9kIGlzIGFkZGVkJylcblxuICBpbnRlcmFjdGFibGUucmVzaXphYmxlKHtcbiAgICBlZGdlczogeyBsZWZ0OiB0cnVlLCB0b3A6IHRydWUsIHJpZ2h0OiB0cnVlLCBib3R0b206IHRydWUgfSxcbiAgICAvLyB1c2UgbWFyZ2luIGdyZWF0ZXIgdGhhbiB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgbWFyZ2luOiBJbmZpbml0eSxcbiAgfSlcblxuICAvLyByZXNpemUgdG9wIGxlZnRcbiAgaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihldmVudCwgZXZlbnQsIGVsZW1lbnQsIHRydWUpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgcmVzaXplLmNoZWNrZXIoZXZlbnQsIGV2ZW50LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGludGVyYWN0aW9uLCByZWN0KSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVzaXplJyxcbiAgICAgIGVkZ2VzOiB7IGxlZnQ6IHRydWUsIHRvcDogdHJ1ZSwgcmlnaHQ6IGZhbHNlLCBib3R0b206IGZhbHNlIH0sXG4gICAgfSxcbiAgICAncmVzaXplIHRvcCBsZWZ0JyxcbiAgKVxuXG4gIC8vIHJlc2l6ZSB0b3AgcmlnaHRcbiAgY29vcmRzLnBhZ2UueCA9IDEwXG4gIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIoZXZlbnQsIGV2ZW50LCBlbGVtZW50LCB0cnVlKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIHJlc2l6ZS5jaGVja2VyKGV2ZW50LCBldmVudCwgaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBpbnRlcmFjdGlvbiwgcmVjdCksXG4gICAge1xuICAgICAgbmFtZTogJ3Jlc2l6ZScsXG4gICAgICBlZGdlczogeyBsZWZ0OiBmYWxzZSwgdG9wOiB0cnVlLCByaWdodDogdHJ1ZSwgYm90dG9tOiBmYWxzZSB9LFxuICAgIH0sXG4gICAgJ3Jlc2l6ZSB0b3AgcmlnaHQnLFxuICApXG5cbiAgLy8gcmVzaXplIGJvdHRvbSByaWdodFxuICBjb29yZHMucGFnZS55ID0gMTBcbiAgaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihldmVudCwgZXZlbnQsIGVsZW1lbnQsIHRydWUpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgcmVzaXplLmNoZWNrZXIoZXZlbnQsIGV2ZW50LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGludGVyYWN0aW9uLCByZWN0KSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVzaXplJyxcbiAgICAgIGVkZ2VzOiB7IGxlZnQ6IGZhbHNlLCB0b3A6IGZhbHNlLCByaWdodDogdHJ1ZSwgYm90dG9tOiB0cnVlIH0sXG4gICAgfSxcbiAgICAncmVzaXplIGJvdHRvbSByaWdodCcsXG4gIClcblxuICBjb25zdCB6ZXJvUmVjdCA9IHsgbGVmdDogMCwgdG9wOiAwLCByaWdodDogMCwgYm90dG9tOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH1cbiAgbGV0IHJlc2l6ZUV2ZW50OiBJbnRlcmFjdC5SZXNpemVFdmVudCA9IG51bGxcblxuICBpbnRlcmFjdGFibGUub24oJ3Jlc2l6ZXN0YXJ0IHJlc2l6ZW1vdmUgcmVzaXplZW5kJywgZSA9PiB7XG4gICAgcmVzaXplRXZlbnQgPSBlXG4gIH0pXG5cbiAgY29vcmRzLnBhZ2UueCA9IHJlY3QucmlnaHRcbiAgY29vcmRzLnBhZ2UueSA9IHJlY3QuYm90dG9tXG4gIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIoZXZlbnQsIGV2ZW50LCBlbGVtZW50LCB0cnVlKVxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdyZXNpemUnLCBlZGdlczogeyBib3R0b206IHRydWUsIHJpZ2h0OiB0cnVlIH0gfSwgaW50ZXJhY3RhYmxlLCBlbGVtZW50KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLFxuICAgIHtcbiAgICAgIHN0YXJ0OiByZWN0LFxuICAgICAgY3VycmVudDogaGVscGVycy5nZXRQcm9wcyhyZWN0LCBbJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCddKSxcbiAgICAgIGludmVydGVkOiByZWN0LFxuICAgICAgcHJldmlvdXM6IHJlY3QsXG4gICAgICBkZWx0YTogemVyb1JlY3QsXG4gICAgfSxcbiAgICAnc2V0cyBzdGFydGluZyBpbnRlcmFjdGlvbi5yZXNpemVSZWN0IHByb3BzJyxcbiAgKVxuICB0Lm9rKGhhc1Jlc2l6ZVByb3BzKHJlc2l6ZUV2ZW50KSwgJ3Jlc2l6ZXN0YXJ0IGV2ZW50IGhhcyBleHRyYSByZXNpemUgcHJvcHMnKVxuXG4gIGNvb3Jkcy5wYWdlLnggPSAtMTAwXG4gIGNvb3Jkcy5wYWdlLnkgPSAtMjAwXG4gIHJlc2l6ZUV2ZW50ID0gbnVsbFxuICBpbnRlcmFjdGlvbi5wb2ludGVyTW92ZShldmVudCwgZXZlbnQsIGVsZW1lbnQpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMsXG4gICAge1xuICAgICAgc3RhcnQ6IHJlY3QsXG4gICAgICBjdXJyZW50OiB7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IC0xMDAsIGJvdHRvbTogLTIwMCB9LFxuICAgICAgaW52ZXJ0ZWQ6IHplcm9SZWN0LFxuICAgICAgcHJldmlvdXM6IHJlY3QsXG4gICAgICBkZWx0YTogeyAuLi56ZXJvUmVjdCwgcmlnaHQ6IC1yZWN0LndpZHRoLCBib3R0b206IC1yZWN0LmJvdHRvbSwgd2lkdGg6IC1yZWN0LndpZHRoLCBoZWlnaHQ6IC1yZWN0LmhlaWdodCB9LFxuICAgIH0sXG4gICAgXCJpbnZlcnQ6ICdub25lJ1wiLFxuICApXG4gIHQub2soaGFzUmVzaXplUHJvcHMocmVzaXplRXZlbnQpLCAncmVzaXplbW92ZSBldmVudCBoYXMgZXh0cmEgcmVzaXplIHByb3BzJylcblxuICBpbnRlcmFjdGFibGUub3B0aW9ucy5yZXNpemUuaW52ZXJ0ID0gJ3JlcG9zaXRpb24nXG4gIGludGVyYWN0aW9uLm1vdmUoKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLFxuICAgIHtcbiAgICAgIHN0YXJ0OiByZWN0LFxuICAgICAgY3VycmVudDogeyBsZWZ0OiAwLCB0b3A6IDAsIHJpZ2h0OiAtMTAwLCBib3R0b206IC0yMDAgfSxcbiAgICAgIGludmVydGVkOiB7IC4uLnplcm9SZWN0LCBsZWZ0OiAtMTAwLCB0b3A6IC0yMDAsIHdpZHRoOiAxMDAsIGhlaWdodDogMjAwIH0sXG4gICAgICBwcmV2aW91czogaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMucHJldmlvdXMsIC8vIG5vdCB0ZXN0aW5nIHByZXZpb3VzXG4gICAgICBkZWx0YTogeyAuLi56ZXJvUmVjdCwgbGVmdDogLTEwMCwgdG9wOiAtMjAwLCB3aWR0aDogMTAwLCBoZWlnaHQ6IDIwMCB9LFxuICAgIH0sXG4gICAgXCJpbnZlcnQ6ICdyZXBvc2l0aW9uJ1wiLFxuICApXG5cbiAgaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplLmludmVydCA9ICdub25lJ1xuICBpbnRlcmFjdGlvbi5tb3ZlKClcbiAgaW50ZXJhY3RhYmxlLm9wdGlvbnMucmVzaXplLmludmVydCA9ICduZWdhdGUnXG4gIGludGVyYWN0aW9uLm1vdmUoKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnJlc2l6ZVJlY3RzLFxuICAgIHtcbiAgICAgIHN0YXJ0OiByZWN0LFxuICAgICAgY3VycmVudDogeyBsZWZ0OiAwLCB0b3A6IDAsIHJpZ2h0OiAtMTAwLCBib3R0b206IC0yMDAgfSxcbiAgICAgIGludmVydGVkOiB7IC4uLnplcm9SZWN0LCByaWdodDogLTEwMCwgYm90dG9tOiAtMjAwLCB3aWR0aDogLTEwMCwgaGVpZ2h0OiAtMjAwIH0sXG4gICAgICBwcmV2aW91czogaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMucHJldmlvdXMsIC8vIG5vdCB0ZXN0aW5nIHByZXZpb3VzXG4gICAgICBkZWx0YTogeyAuLi56ZXJvUmVjdCwgcmlnaHQ6IC0xMDAsIGJvdHRvbTogLTIwMCwgd2lkdGg6IC0xMDAsIGhlaWdodDogLTIwMCB9LFxuICAgIH0sXG4gICAgXCJpbnZlcnQ6ICduZWdhdGUnXCIsXG4gIClcblxuICByZXNpemVFdmVudCA9IG51bGxcbiAgaW50ZXJhY3Rpb24uZW5kKClcbiAgdC5vayhoYXNSZXNpemVQcm9wcyhyZXNpemVFdmVudCksICdyZXNpemVlbmQgZXZlbnQgaGFzIGV4dHJhIHJlc2l6ZSBwcm9wcycpXG5cbiAgdC5lbmQoKVxufSlcblxuZnVuY3Rpb24gaGFzUmVzaXplUHJvcHMgKGV2ZW50OiBJbnRlcmFjdC5SZXNpemVFdmVudCkge1xuICByZXR1cm4gISEoZXZlbnQuZGVsdGFSZWN0ICYmIGV2ZW50LnJlY3QgJiYgZXZlbnQuZWRnZXMpXG59XG4iXX0= \ No newline at end of file diff --git a/packages/auto-scroll/index.d.ts b/packages/auto-scroll/index.d.ts index 6be1df446..0108bf72b 100644 --- a/packages/auto-scroll/index.d.ts +++ b/packages/auto-scroll/index.d.ts @@ -32,7 +32,7 @@ declare const autoScroll: { prevTime: number; margin: number; speed: number; - start(interaction: import("@interactjs/core/Interaction").Interaction): void; + start(interaction: import("../types/types").Interaction): void; stop(): void; scroll(): void; check(interactable: any, actionName: any): any; @@ -60,5 +60,15 @@ export declare function getScrollSizeDelta({ interaction, element }: { declare const _default: { id: string; install: typeof install; + listeners: { + 'interactions:new': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:destroy': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:stop': () => void; + 'interactions:action-move': (arg: any) => void; + }; }; export default _default; diff --git a/packages/auto-scroll/index.js b/packages/auto-scroll/index.js index 31a95adfe..51f7ccb31 100644 --- a/packages/auto-scroll/index.js +++ b/packages/auto-scroll/index.js @@ -1,183 +1,243 @@ -import * as domUtils from '@interactjs/utils/domUtils'; -import * as is from '@interactjs/utils/is'; -import raf from '@interactjs/utils/raf'; -import { getStringOptionResult } from '@interactjs/utils/rect'; -import { getWindow } from '@interactjs/utils/window'; +import * as domUtils from "../utils/domUtils.js"; +import * as is from "../utils/is.js"; +import raf from "../utils/raf.js"; +import { getStringOptionResult } from "../utils/rect.js"; +import { getWindow } from "../utils/window.js"; + function install(scope) { - const { interactions, defaults, actions, } = scope; - scope.autoScroll = autoScroll; - autoScroll.now = () => scope.now(); - interactions.signals.on('new', ({ interaction }) => { - interaction.autoScroll = null; - }); - interactions.signals.on('destroy', ({ interaction }) => { - interaction.autoScroll = null; - autoScroll.stop(); - if (autoScroll.interaction) { - autoScroll.interaction = null; - } - }); - interactions.signals.on('stop', autoScroll.stop); - interactions.signals.on('action-move', (arg) => autoScroll.onInteractionMove(arg)); - actions.eventTypes.push('autoscroll'); - defaults.perAction.autoScroll = autoScroll.defaults; + const { + defaults, + actions + } = scope; + scope.autoScroll = autoScroll; + + autoScroll.now = () => scope.now(); + + actions.eventTypes.push('autoscroll'); + defaults.perAction.autoScroll = autoScroll.defaults; } + const autoScroll = { - defaults: { - enabled: false, - margin: 60, - // the item that is scrolled (Window or HTMLElement) - container: null, - // the scroll speed in pixels per second - speed: 300, - }, - now: Date.now, - interaction: null, - i: null, - x: 0, - y: 0, - isScrolling: false, - prevTime: 0, - margin: 0, - speed: 0, - start(interaction) { - autoScroll.isScrolling = true; - raf.cancel(autoScroll.i); - interaction.autoScroll = autoScroll; - autoScroll.interaction = interaction; - autoScroll.prevTime = autoScroll.now(); - autoScroll.i = raf.request(autoScroll.scroll); - }, - stop() { - autoScroll.isScrolling = false; - if (autoScroll.interaction) { - autoScroll.interaction.autoScroll = null; - } - raf.cancel(autoScroll.i); - }, - // scroll the window by the values in scroll.x/y - scroll() { - const { interaction } = autoScroll; - const { interactable, element } = interaction; - const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll; - const container = getContainer(options.container, interactable, element); - const now = autoScroll.now(); - // change in time in seconds - const dt = (now - autoScroll.prevTime) / 1000; - // displacement - const s = options.speed * dt; - if (s >= 1) { - const scrollBy = { - x: autoScroll.x * s, - y: autoScroll.y * s, - }; - if (scrollBy.x || scrollBy.y) { - const prevScroll = getScroll(container); - if (is.window(container)) { - container.scrollBy(scrollBy.x, scrollBy.y); - } - else if (container) { - container.scrollLeft += scrollBy.x; - container.scrollTop += scrollBy.y; - } - const curScroll = getScroll(container); - const delta = { - x: curScroll.x - prevScroll.x, - y: curScroll.y - prevScroll.y, - }; - if (delta.x || delta.y) { - interactable.fire({ - type: 'autoscroll', - target: element, - interactable, - delta, - interaction, - container, - }); - } - } - autoScroll.prevTime = now; - } - if (autoScroll.isScrolling) { - raf.cancel(autoScroll.i); - autoScroll.i = raf.request(autoScroll.scroll); - } - }, - check(interactable, actionName) { - const options = interactable.options; - return options[actionName].autoScroll && options[actionName].autoScroll.enabled; - }, - onInteractionMove({ interaction, pointer }) { - if (!(interaction.interacting() && - autoScroll.check(interaction.interactable, interaction.prepared.name))) { - return; - } - if (interaction.simulation) { - autoScroll.x = autoScroll.y = 0; - return; - } - let top; - let right; - let bottom; - let left; - const { interactable, element } = interaction; - const options = interactable.options[interaction.prepared.name].autoScroll; - const container = getContainer(options.container, interactable, element); + defaults: { + enabled: false, + margin: 60, + // the item that is scrolled (Window or HTMLElement) + container: null, + // the scroll speed in pixels per second + speed: 300 + }, + now: Date.now, + interaction: null, + i: null, + // the handle returned by window.setInterval + x: 0, + y: 0, + // Direction each pulse is to scroll in + isScrolling: false, + prevTime: 0, + margin: 0, + speed: 0, + + start(interaction) { + autoScroll.isScrolling = true; + raf.cancel(autoScroll.i); + interaction.autoScroll = autoScroll; + autoScroll.interaction = interaction; + autoScroll.prevTime = autoScroll.now(); + autoScroll.i = raf.request(autoScroll.scroll); + }, + + stop() { + autoScroll.isScrolling = false; + + if (autoScroll.interaction) { + autoScroll.interaction.autoScroll = null; + } + + raf.cancel(autoScroll.i); + }, + + // scroll the window by the values in scroll.x/y + scroll() { + const { + interaction + } = autoScroll; + const { + interactable, + element + } = interaction; + const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll; + const container = getContainer(options.container, interactable, element); + const now = autoScroll.now(); // change in time in seconds + + const dt = (now - autoScroll.prevTime) / 1000; // displacement + + const s = options.speed * dt; + + if (s >= 1) { + const scrollBy = { + x: autoScroll.x * s, + y: autoScroll.y * s + }; + + if (scrollBy.x || scrollBy.y) { + const prevScroll = getScroll(container); + if (is.window(container)) { - left = pointer.clientX < autoScroll.margin; - top = pointer.clientY < autoScroll.margin; - right = pointer.clientX > container.innerWidth - autoScroll.margin; - bottom = pointer.clientY > container.innerHeight - autoScroll.margin; - } - else { - const rect = domUtils.getElementClientRect(container); - left = pointer.clientX < rect.left + autoScroll.margin; - top = pointer.clientY < rect.top + autoScroll.margin; - right = pointer.clientX > rect.right - autoScroll.margin; - bottom = pointer.clientY > rect.bottom - autoScroll.margin; + container.scrollBy(scrollBy.x, scrollBy.y); + } else if (container) { + container.scrollLeft += scrollBy.x; + container.scrollTop += scrollBy.y; } - autoScroll.x = (right ? 1 : left ? -1 : 0); - autoScroll.y = (bottom ? 1 : top ? -1 : 0); - if (!autoScroll.isScrolling) { - // set the autoScroll properties to those of the target - autoScroll.margin = options.margin; - autoScroll.speed = options.speed; - autoScroll.start(interaction); + + const curScroll = getScroll(container); + const delta = { + x: curScroll.x - prevScroll.x, + y: curScroll.y - prevScroll.y + }; + + if (delta.x || delta.y) { + interactable.fire({ + type: 'autoscroll', + target: element, + interactable, + delta, + interaction, + container + }); } - }, + } + + autoScroll.prevTime = now; + } + + if (autoScroll.isScrolling) { + raf.cancel(autoScroll.i); + autoScroll.i = raf.request(autoScroll.scroll); + } + }, + + check(interactable, actionName) { + const options = interactable.options; + return options[actionName].autoScroll && options[actionName].autoScroll.enabled; + }, + + onInteractionMove({ + interaction, + pointer + }) { + if (!(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))) { + return; + } + + if (interaction.simulation) { + autoScroll.x = autoScroll.y = 0; + return; + } + + let top; + let right; + let bottom; + let left; + const { + interactable, + element + } = interaction; + const options = interactable.options[interaction.prepared.name].autoScroll; + const container = getContainer(options.container, interactable, element); + + if (is.window(container)) { + left = pointer.clientX < autoScroll.margin; + top = pointer.clientY < autoScroll.margin; + right = pointer.clientX > container.innerWidth - autoScroll.margin; + bottom = pointer.clientY > container.innerHeight - autoScroll.margin; + } else { + const rect = domUtils.getElementClientRect(container); + left = pointer.clientX < rect.left + autoScroll.margin; + top = pointer.clientY < rect.top + autoScroll.margin; + right = pointer.clientX > rect.right - autoScroll.margin; + bottom = pointer.clientY > rect.bottom - autoScroll.margin; + } + + autoScroll.x = right ? 1 : left ? -1 : 0; + autoScroll.y = bottom ? 1 : top ? -1 : 0; + + if (!autoScroll.isScrolling) { + // set the autoScroll properties to those of the target + autoScroll.margin = options.margin; + autoScroll.speed = options.speed; + autoScroll.start(interaction); + } + } + }; export function getContainer(value, interactable, element) { - return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element); + return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element); } export function getScroll(container) { - if (is.window(container)) { - container = window.document.body; - } - return { x: container.scrollLeft, y: container.scrollTop }; + if (is.window(container)) { + container = window.document.body; + } + + return { + x: container.scrollLeft, + y: container.scrollTop + }; } export function getScrollSize(container) { - if (is.window(container)) { - container = window.document.body; - } - return { x: container.scrollWidth, y: container.scrollHeight }; + if (is.window(container)) { + container = window.document.body; + } + + return { + x: container.scrollWidth, + y: container.scrollHeight + }; } -export function getScrollSizeDelta({ interaction, element }, func) { - const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll; - if (!scrollOptions || !scrollOptions.enabled) { - func(); - return { x: 0, y: 0 }; - } - const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element); - const prevSize = getScroll(scrollContainer); +export function getScrollSizeDelta({ + interaction, + element +}, func) { + const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll; + + if (!scrollOptions || !scrollOptions.enabled) { func(); - const curSize = getScroll(scrollContainer); return { - x: curSize.x - prevSize.x, - y: curSize.y - prevSize.y, + x: 0, + y: 0 }; + } + + const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element); + const prevSize = getScroll(scrollContainer); + func(); + const curSize = getScroll(scrollContainer); + return { + x: curSize.x - prevSize.x, + y: curSize.y - prevSize.y + }; } export default { - id: 'auto-scroll', - install, + id: 'auto-scroll', + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.autoScroll = null; + }, + 'interactions:destroy': ({ + interaction + }) => { + interaction.autoScroll = null; + autoScroll.stop(); + + if (autoScroll.interaction) { + autoScroll.interaction = null; + } + }, + 'interactions:stop': autoScroll.stop, + 'interactions:action-move': arg => autoScroll.onInteractionMove(arg) + } }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBNkJwRCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sRUFDSixZQUFZLEVBQ1osUUFBUSxFQUNSLE9BQU8sR0FDUixHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO0lBQzdCLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBRWxDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNqRCxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtJQUMvQixDQUFDLENBQUMsQ0FBQTtJQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNyRCxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUM3QixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDakIsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQzFCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1NBQzlCO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFD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VUFBVSxHQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUE7WUFDcEUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFBO1NBQ3JFO2FBQ0k7WUFDSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUE7WUFFckQsSUFBSSxHQUFLLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBSyxVQUFVLENBQUMsTUFBTSxDQUFBO1lBQzFELEdBQUcsR0FBTSxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQTtZQUMxRCxLQUFLLEdBQUksT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUE7WUFDMUQsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFBO1NBQzNEO1FBRUQsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMxQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTNDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQzNCLHVEQUF1RDtZQUN2RCxVQUFVLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7WUFDbEMsVUFBVSxDQUFDLEtBQUssR0FBSSxPQUFPLENBQUMsS0FBSyxDQUFBO1lBRWpDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDOUI7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQUVELE1BQU0sVUFBVSxZQUFZLENBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPO0lBQ3hELE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDL0csQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUUsU0FBUztJQUNsQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFBRSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7S0FBRTtJQUU5RCxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtBQUM1RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBRSxTQUFTO0lBQ3RDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUFFLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtLQUFFO0lBRTlELE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFBO0FBQ2hFLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSTtJQUNoRSxNQUFNLGFBQWEsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUE7SUFFM0csSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7UUFDNUMsSUFBSSxFQUFFLENBQUE7UUFDTixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7S0FDdEI7SUFFRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQ2xDLGFBQWEsQ0FBQyxTQUFTLEVBQ3ZCLFdBQVcsQ0FBQyxZQUFZLEVBQ3hCLE9BQU8sQ0FDUixDQUFBO0lBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzNDLElBQUksRUFBRSxDQUFBO0lBQ04sTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBRTFDLE9BQU87UUFDTCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztLQUMxQixDQUFBO0FBQ0gsQ0FBQztBQUVELGVBQWU7SUFDYixFQUFFLEVBQUUsYUFBYTtJQUNqQixPQUFPO0NBQ1IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGRvbVV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2RvbVV0aWxzJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5pbXBvcnQgcmFmIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JhZidcbmltcG9ydCB7IGdldFN0cmluZ09wdGlvblJlc3VsdCB9IGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JlY3QnXG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy93aW5kb3cnXG5cbnR5cGUgU2NvcGUgPSBpbXBvcnQgKCdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJykuU2NvcGVcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnIHtcbiAgaW50ZXJmYWNlIFNjb3BlIHtcbiAgICBhdXRvU2Nyb2xsOiB0eXBlb2YgYXV0b1Njcm9sbFxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGlvbiB7XG4gICAgYXV0b1Njcm9sbD86IHR5cGVvZiBhdXRvU2Nyb2xsXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIFBlckFjdGlvbkRlZmF1bHRzIHtcbiAgICBhdXRvU2Nyb2xsPzogQXV0b1Njcm9sbE9wdGlvbnNcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TY3JvbGxPcHRpb25zIHtcbiAgY29udGFpbmVyPzogV2luZG93IHwgSFRNTEVsZW1lbnRcbiAgbWFyZ2luPzogbnVtYmVyXG4gIGRpc3RhbmNlPzogbnVtYmVyXG4gIGludGVydmFsPzogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIGRlZmF1bHRzLFxuICAgIGFjdGlvbnMsXG4gIH0gPSBzY29wZVxuXG4gIHNjb3BlLmF1dG9TY3JvbGwgPSBhdXRvU2Nyb2xsXG4gIGF1dG9TY3JvbGwubm93ID0gKCkgPT4gc2NvcGUubm93KClcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbmV3JywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGludGVyYWN0aW9uLmF1dG9TY3JvbGwgPSBudWxsXG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2Rlc3Ryb3knLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaW50ZXJhY3Rpb24uYXV0b1Njcm9sbCA9IG51bGxcbiAgICBhdXRvU2Nyb2xsLnN0b3AoKVxuICAgIGlmIChhdXRvU2Nyb2xsLmludGVyYWN0aW9uKSB7XG4gICAgICBhdXRvU2Nyb2xsLmludGVyYWN0aW9uID0gbnVsbFxuICAgIH1cbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignc3RvcCcsIGF1dG9TY3JvbGwuc3RvcClcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWN0aW9uLW1vdmUnLCAoYXJnOiBhbnkpID0+IGF1dG9TY3JvbGwub25JbnRlcmFjdGlvbk1vdmUoYXJnKSlcblxuICBhY3Rpb25zLmV2ZW50VHlwZXMucHVzaCgnYXV0b3Njcm9sbCcpXG4gIGRlZmF1bHRzLnBlckFjdGlvbi5hdXRvU2Nyb2xsID0gYXV0b1Njcm9sbC5kZWZhdWx0c1xufVxuXG5jb25zdCBhdXRvU2Nyb2xsID0ge1xuICBkZWZhdWx0czoge1xuICAgIGVuYWJsZWQgIDogZmFsc2UsXG4gICAgbWFyZ2luICAgOiA2MCxcblxuICAgIC8vIHRoZSBpdGVtIHRoYXQgaXMgc2Nyb2xsZWQgKFdpbmRvdyBvciBIVE1MRWxlbWVudClcbiAgICBjb250YWluZXI6IG51bGwgYXMgQXV0b1Njcm9sbE9wdGlvbnNbJ2NvbnRhaW5lciddLFxuXG4gICAgLy8gdGhlIHNjcm9sbCBzcGVlZCBpbiBwaXhlbHMgcGVyIHNlY29uZFxuICAgIHNwZWVkICAgIDogMzAwLFxuICB9IGFzIEF1dG9TY3JvbGxPcHRpb25zLFxuXG4gIG5vdzogRGF0ZS5ub3csXG5cbiAgaW50ZXJhY3Rpb246IG51bGwsXG4gIGk6IG51bGwsICAgIC8vIHRoZSBoYW5kbGUgcmV0dXJuZWQgYnkgd2luZG93LnNldEludGVydmFsXG4gIHg6IDAsXG4gIHk6IDAsIC8vIERpcmVjdGlvbiBlYWNoIHB1bHNlIGlzIHRvIHNjcm9sbCBpblxuXG4gIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgcHJldlRpbWU6IDAsXG4gIG1hcmdpbjogMCxcbiAgc3BlZWQ6IDAsXG5cbiAgc3RhcnQgKGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvbikge1xuICAgIGF1dG9TY3JvbGwuaXNTY3JvbGxpbmcgPSB0cnVlXG4gICAgcmFmLmNhbmNlbChhdXRvU2Nyb2xsLmkpXG5cbiAgICBpbnRlcmFjdGlvbi5hdXRvU2Nyb2xsID0gYXV0b1Njcm9sbFxuICAgIGF1dG9TY3JvbGwuaW50ZXJhY3Rpb24gPSBpbnRlcmFjdGlvblxuICAgIGF1dG9TY3JvbGwucHJldlRpbWUgPSBhdXRvU2Nyb2xsLm5vdygpXG4gICAgYXV0b1Njcm9sbC5pID0gcmFmLnJlcXVlc3QoYXV0b1Njcm9sbC5zY3JvbGwpXG4gIH0sXG5cbiAgc3RvcCAoKSB7XG4gICAgYXV0b1Njcm9sbC5pc1Njcm9sbGluZyA9IGZhbHNlXG4gICAgaWYgKGF1dG9TY3JvbGwuaW50ZXJhY3Rpb24pIHtcbiAgICAgIGF1dG9TY3JvbGwuaW50ZXJhY3Rpb24uYXV0b1Njcm9sbCA9IG51bGxcbiAgICB9XG4gICAgcmFmLmNhbmNlbChhdXRvU2Nyb2xsLmkpXG4gIH0sXG5cbiAgLy8gc2Nyb2xsIHRoZSB3aW5kb3cgYnkgdGhlIHZhbHVlcyBpbiBzY3JvbGwueC95XG4gIHNjcm9sbCAoKSB7XG4gICAgY29uc3QgeyBpbnRlcmFjdGlvbiB9ID0gYXV0b1Njcm9sbFxuICAgIGNvbnN0IHsgaW50ZXJhY3RhYmxlLCBlbGVtZW50IH0gPSBpbnRlcmFjdGlvblxuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGFibGUub3B0aW9uc1thdXRvU2Nyb2xsLmludGVyYWN0aW9uLnByZXBhcmVkLm5hbWVdLmF1dG9TY3JvbGxcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXIob3B0aW9ucy5jb250YWluZXIsIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgICBjb25zdCBub3cgPSBhdXRvU2Nyb2xsLm5vdygpXG4gICAgLy8gY2hhbmdlIGluIHRpbWUgaW4gc2Vjb25kc1xuICAgIGNvbnN0IGR0ID0gKG5vdyAtIGF1dG9TY3JvbGwucHJldlRpbWUpIC8gMTAwMFxuICAgIC8vIGRpc3BsYWNlbWVudFxuICAgIGNvbnN0IHMgPSBvcHRpb25zLnNwZWVkICogZHRcblxuICAgIGlmIChzID49IDEpIHtcbiAgICAgIGNvbnN0IHNjcm9sbEJ5ID0ge1xuICAgICAgICB4OiBhdXRvU2Nyb2xsLnggKiBzLFxuICAgICAgICB5OiBhdXRvU2Nyb2xsLnkgKiBzLFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Nyb2xsQnkueCB8fCBzY3JvbGxCeS55KSB7XG4gICAgICAgIGNvbnN0IHByZXZTY3JvbGwgPSBnZXRTY3JvbGwoY29udGFpbmVyKVxuXG4gICAgICAgIGlmIChpcy53aW5kb3coY29udGFpbmVyKSkge1xuICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxCeShzY3JvbGxCeS54LCBzY3JvbGxCeS55KVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0ICs9IHNjcm9sbEJ5LnhcbiAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wICArPSBzY3JvbGxCeS55XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJTY3JvbGwgPSBnZXRTY3JvbGwoY29udGFpbmVyKVxuICAgICAgICBjb25zdCBkZWx0YSA9IHtcbiAgICAgICAgICB4OiBjdXJTY3JvbGwueCAtIHByZXZTY3JvbGwueCxcbiAgICAgICAgICB5OiBjdXJTY3JvbGwueSAtIHByZXZTY3JvbGwueSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWx0YS54IHx8IGRlbHRhLnkpIHtcbiAgICAgICAgICBpbnRlcmFjdGFibGUuZmlyZSh7XG4gICAgICAgICAgICB0eXBlOiAnYXV0b3Njcm9sbCcsXG4gICAgICAgICAgICB0YXJnZXQ6IGVsZW1lbnQsXG4gICAgICAgICAgICBpbnRlcmFjdGFibGUsXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIGludGVyYWN0aW9uLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXV0b1Njcm9sbC5wcmV2VGltZSA9IG5vd1xuICAgIH1cblxuICAgIGlmIChhdXRvU2Nyb2xsLmlzU2Nyb2xsaW5nKSB7XG4gICAgICByYWYuY2FuY2VsKGF1dG9TY3JvbGwuaSlcbiAgICAgIGF1dG9TY3JvbGwuaSA9IHJhZi5yZXF1ZXN0KGF1dG9TY3JvbGwuc2Nyb2xsKVxuICAgIH1cbiAgfSxcbiAgY2hlY2sgKGludGVyYWN0YWJsZSwgYWN0aW9uTmFtZSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGFibGUub3B0aW9uc1xuXG4gICAgcmV0dXJuIG9wdGlvbnNbYWN0aW9uTmFtZV0uYXV0b1Njcm9sbCAmJiBvcHRpb25zW2FjdGlvbk5hbWVdLmF1dG9TY3JvbGwuZW5hYmxlZFxuICB9LFxuICBvbkludGVyYWN0aW9uTW92ZSAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciB9KSB7XG4gICAgaWYgKCEoaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSAmJlxuICAgICAgICAgIGF1dG9TY3JvbGwuY2hlY2soaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLCBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lKSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpbnRlcmFjdGlvbi5zaW11bGF0aW9uKSB7XG4gICAgICBhdXRvU2Nyb2xsLnggPSBhdXRvU2Nyb2xsLnkgPSAwXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgdG9wXG4gICAgbGV0IHJpZ2h0XG4gICAgbGV0IGJvdHRvbVxuICAgIGxldCBsZWZ0XG5cbiAgICBjb25zdCB7IGludGVyYWN0YWJsZSwgZWxlbWVudCB9ID0gaW50ZXJhY3Rpb25cbiAgICBjb25zdCBvcHRpb25zID0gaW50ZXJhY3RhYmxlLm9wdGlvbnNbaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZV0uYXV0b1Njcm9sbFxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcHRpb25zLmNvbnRhaW5lciwgaW50ZXJhY3RhYmxlLCBlbGVtZW50KVxuXG4gICAgaWYgKGlzLndpbmRvdyhjb250YWluZXIpKSB7XG4gICAgICBsZWZ0ICAgPSBwb2ludGVyLmNsaWVudFggPCBhdXRvU2Nyb2xsLm1hcmdpblxuICAgICAgdG9wICAgID0gcG9pbnRlci5jbGllbnRZIDwgYXV0b1Njcm9sbC5tYXJnaW5cbiAgICAgIHJpZ2h0ICA9IHBvaW50ZXIuY2xpZW50WCA+IGNvbnRhaW5lci5pbm5lcldpZHRoICAtIGF1dG9TY3JvbGwubWFyZ2luXG4gICAgICBib3R0b20gPSBwb2ludGVyLmNsaWVudFkgPiBjb250YWluZXIuaW5uZXJIZWlnaHQgLSBhdXRvU2Nyb2xsLm1hcmdpblxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBkb21VdGlscy5nZXRFbGVtZW50Q2xpZW50UmVjdChjb250YWluZXIpXG5cbiAgICAgIGxlZnQgICA9IHBvaW50ZXIuY2xpZW50WCA8IHJlY3QubGVmdCAgICsgYXV0b1Njcm9sbC5tYXJnaW5cbiAgICAgIHRvcCAgICA9IHBvaW50ZXIuY2xpZW50WSA8IHJlY3QudG9wICAgICsgYXV0b1Njcm9sbC5tYXJnaW5cbiAgICAgIHJpZ2h0ICA9IHBvaW50ZXIuY2xpZW50WCA+IHJlY3QucmlnaHQgIC0gYXV0b1Njcm9sbC5tYXJnaW5cbiAgICAgIGJvdHRvbSA9IHBvaW50ZXIuY2xpZW50WSA+IHJlY3QuYm90dG9tIC0gYXV0b1Njcm9sbC5tYXJnaW5cbiAgICB9XG5cbiAgICBhdXRvU2Nyb2xsLnggPSAocmlnaHQgPyAxIDogbGVmdCA/IC0xIDogMClcbiAgICBhdXRvU2Nyb2xsLnkgPSAoYm90dG9tID8gMSA6ICB0b3AgPyAtMSA6IDApXG5cbiAgICBpZiAoIWF1dG9TY3JvbGwuaXNTY3JvbGxpbmcpIHtcbiAgICAgIC8vIHNldCB0aGUgYXV0b1Njcm9sbCBwcm9wZXJ0aWVzIHRvIHRob3NlIG9mIHRoZSB0YXJnZXRcbiAgICAgIGF1dG9TY3JvbGwubWFyZ2luID0gb3B0aW9ucy5tYXJnaW5cbiAgICAgIGF1dG9TY3JvbGwuc3BlZWQgID0gb3B0aW9ucy5zcGVlZFxuXG4gICAgICBhdXRvU2Nyb2xsLnN0YXJ0KGludGVyYWN0aW9uKVxuICAgIH1cbiAgfSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRhaW5lciAodmFsdWUsIGludGVyYWN0YWJsZSwgZWxlbWVudCkge1xuICByZXR1cm4gKGlzLnN0cmluZyh2YWx1ZSkgPyBnZXRTdHJpbmdPcHRpb25SZXN1bHQodmFsdWUsIGludGVyYWN0YWJsZSwgZWxlbWVudCkgOiB2YWx1ZSkgfHwgZ2V0V2luZG93KGVsZW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGwgKGNvbnRhaW5lcikge1xuICBpZiAoaXMud2luZG93KGNvbnRhaW5lcikpIHsgY29udGFpbmVyID0gd2luZG93LmRvY3VtZW50LmJvZHkgfVxuXG4gIHJldHVybiB7IHg6IGNvbnRhaW5lci5zY3JvbGxMZWZ0LCB5OiBjb250YWluZXIuc2Nyb2xsVG9wIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbFNpemUgKGNvbnRhaW5lcikge1xuICBpZiAoaXMud2luZG93KGNvbnRhaW5lcikpIHsgY29udGFpbmVyID0gd2luZG93LmRvY3VtZW50LmJvZHkgfVxuXG4gIHJldHVybiB7IHg6IGNvbnRhaW5lci5zY3JvbGxXaWR0aCwgeTogY29udGFpbmVyLnNjcm9sbEhlaWdodCB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxTaXplRGVsdGEgKHsgaW50ZXJhY3Rpb24sIGVsZW1lbnQgfSwgZnVuYykge1xuICBjb25zdCBzY3JvbGxPcHRpb25zID0gaW50ZXJhY3Rpb24gJiYgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLm9wdGlvbnNbaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZV0uYXV0b1Njcm9sbFxuXG4gIGlmICghc2Nyb2xsT3B0aW9ucyB8fCAhc2Nyb2xsT3B0aW9ucy5lbmFibGVkKSB7XG4gICAgZnVuYygpXG4gICAgcmV0dXJuIHsgeDogMCwgeTogMCB9XG4gIH1cblxuICBjb25zdCBzY3JvbGxDb250YWluZXIgPSBnZXRDb250YWluZXIoXG4gICAgc2Nyb2xsT3B0aW9ucy5jb250YWluZXIsXG4gICAgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLFxuICAgIGVsZW1lbnRcbiAgKVxuXG4gIGNvbnN0IHByZXZTaXplID0gZ2V0U2Nyb2xsKHNjcm9sbENvbnRhaW5lcilcbiAgZnVuYygpXG4gIGNvbnN0IGN1clNpemUgPSBnZXRTY3JvbGwoc2Nyb2xsQ29udGFpbmVyKVxuXG4gIHJldHVybiB7XG4gICAgeDogY3VyU2l6ZS54IC0gcHJldlNpemUueCxcbiAgICB5OiBjdXJTaXplLnkgLSBwcmV2U2l6ZS55LFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaWQ6ICdhdXRvLXNjcm9sbCcsXG4gIGluc3RhbGwsXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/auto-scroll/index.js.map b/packages/auto-scroll/index.js.map new file mode 100644 index 000000000..51633f959 --- /dev/null +++ b/packages/auto-scroll/index.js.map @@ -0,0 +1,93 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "domUtils", + "is", + "raf", + "getStringOptionResult", + "getWindow", + "install", + "scope", + "defaults", + "actions", + "autoScroll", + "now", + "eventTypes", + "push", + "perAction", + "enabled", + "margin", + "container", + "speed", + "Date", + "interaction", + "i", + "x", + "y", + "isScrolling", + "prevTime", + "start", + "cancel", + "request", + "scroll", + "stop", + "interactable", + "element", + "options", + "prepared", + "name", + "getContainer", + "dt", + "s", + "scrollBy", + "prevScroll", + "getScroll", + "window", + "scrollLeft", + "scrollTop", + "curScroll", + "delta", + "fire", + "type", + "target", + "check", + "actionName", + "onInteractionMove", + "pointer", + "interacting", + "simulation", + "top", + "right", + "bottom", + "left", + "clientX", + "clientY", + "innerWidth", + "innerHeight", + "rect", + "getElementClientRect", + "value", + "string", + "document", + "body", + "getScrollSize", + "scrollWidth", + "scrollHeight", + "getScrollSizeDelta", + "func", + "scrollOptions", + "scrollContainer", + "prevSize", + "curSize", + "id", + "listeners", + "arg" + ], + "mappings": "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", + "sourcesContent": [ + "import * as domUtils from '../utils/domUtils'\nimport * as is from '../utils/is'\nimport raf from '../utils/raf'\nimport { getStringOptionResult } from '../utils/rect'\nimport { getWindow } from '../utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement\n margin?: number\n distance?: number\n interval?: number\n}\n\nfunction install (scope: Scope) {\n const {\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.eventTypes.push('autoscroll')\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed : 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n }\n else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.interactable, interaction.prepared.name))) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top\n let right\n let bottom\n let left\n\n const { interactable, element } = interaction\n const options = interactable.options[interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n }\n else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = (right ? 1 : left ? -1 : 0)\n autoScroll.y = (bottom ? 1 : top ? -1 : 0)\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.interactable,\n element,\n )\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nexport default {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n" + ] +} \ No newline at end of file diff --git a/packages/auto-start/InteractableMethods.d.ts b/packages/auto-start/InteractableMethods.d.ts index f8155edcc..d894cb326 100644 --- a/packages/auto-start/InteractableMethods.d.ts +++ b/packages/auto-start/InteractableMethods.d.ts @@ -1,6 +1,3 @@ -declare type Scope = import('@interactjs/core/scope').Scope; -declare type Interaction = import('@interactjs/core/Interaction').default; -declare type Interactable = import('@interactjs/core/Interactable').default; declare module '@interactjs/core/Interactable' { interface Interactable { getAction: typeof getAction; @@ -16,10 +13,10 @@ declare module '@interactjs/core/Interaction' { pointerIsDown: boolean; } } -declare function install(scope: Scope): void; -declare function getAction(this: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: Interact.Element): Interact.ActionProps; -declare function styleCursor(this: Interactable, newValue?: boolean): any; -declare function actionChecker(this: Interactable, checker: any): any; +declare function install(scope: Interact.Scope): void; +declare function getAction(this: Interact.Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interact.Interaction, element: Interact.Element): Interact.ActionProps; +declare function styleCursor(this: Interact.Interactable, newValue?: boolean): any; +declare function actionChecker(this: Interact.Interactable, checker: any): any; declare const _default: { id: string; install: typeof install; diff --git a/packages/auto-start/InteractableMethods.js b/packages/auto-start/InteractableMethods.js index 634881b5b..07c756e8c 100644 --- a/packages/auto-start/InteractableMethods.js +++ b/packages/auto-start/InteractableMethods.js @@ -1,165 +1,186 @@ -import { warnOnce } from '@interactjs/utils'; -import * as is from '@interactjs/utils/is'; +import { warnOnce } from "../utils/index.js"; +import * as is from "../utils/is.js"; // TODO: there seems to be a @babel/preset-typescript bug causing regular import +// syntax to remain in js output + function install(scope) { - const { + const { /** @lends Interactable */ - Interactable, // tslint:disable-line no-shadowed-variable - actions, } = scope; - Interactable.prototype.getAction = getAction; - /** - * ```js - * interact(element, { ignoreFrom: document.getElementById('no-action') }) - * // or - * interact(element).ignoreFrom('input, textarea, a') - * ``` - * @deprecated - * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any - * of it's parents match the given CSS selector or Element, no - * drag/resize/gesture is started. - * - * Don't use this method. Instead set the `ignoreFrom` option for each action - * or for `pointerEvents` - * - * @example - * interact(targett) - * .draggable({ - * ignoreFrom: 'input, textarea, a[href]'', - * }) - * .pointerEvents({ - * ignoreFrom: '[no-pointer]', - * }) - * - * @param {string | Element | null} [newValue] a CSS selector string, an - * Element or `null` to not ignore any elements - * @return {string | Element | object} The current ignoreFrom value or this - * Interactable - */ - Interactable.prototype.ignoreFrom = warnOnce(function (newValue) { - return this._backCompatOption('ignoreFrom', newValue); - }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).'); - /** - * @deprecated - * - * A drag/resize/gesture is started only If the target of the `mousedown`, - * `pointerdown` or `touchstart` event or any of it's parents match the given - * CSS selector or Element. - * - * Don't use this method. Instead set the `allowFrom` option for each action - * or for `pointerEvents` - * - * @example - * interact(targett) - * .resizable({ - * allowFrom: '.resize-handle', - * .pointerEvents({ - * allowFrom: '.handle',, - * }) - * - * @param {string | Element | null} [newValue] a CSS selector string, an - * Element or `null` to allow from any element - * @return {string | Element | object} The current allowFrom value or this - * Interactable - */ - Interactable.prototype.allowFrom = warnOnce(function (newValue) { - return this._backCompatOption('allowFrom', newValue); - }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).'); - /** - * ```js - * interact('.resize-drag') - * .resizable(true) - * .draggable(true) - * .actionChecker(function (pointer, event, action, interactable, element, interaction) { - * - * if (interact.matchesSelector(event.target, '.drag-handle')) { - * // force drag with handle target - * action.name = drag - * } - * else { - * // resize from the top and right edges - * action.name = 'resize' - * action.edges = { top: true, right: true } - * } - * - * return action - * }) - * ``` - * - * Returns or sets the function used to check action to be performed on - * pointerDown - * - * @param {function | null} [checker] A function which takes a pointer event, - * defaultAction string, interactable, element and interaction as parameters - * and returns an object with name property 'drag' 'resize' or 'gesture' and - * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right - * props. - * @return {Function | Interactable} The checker function or this Interactable - */ - Interactable.prototype.actionChecker = actionChecker; - /** - * Returns or sets whether the the cursor should be changed depending on the - * action that would be performed if the mouse were pressed and dragged. - * - * @param {boolean} [newValue] - * @return {boolean | Interactable} The current setting or this Interactable - */ - Interactable.prototype.styleCursor = styleCursor; - Interactable.prototype.defaultActionChecker = function (pointer, event, interaction, element) { - return defaultActionChecker(this, pointer, event, interaction, element, actions); - }; + Interactable, + // tslint:disable-line no-shadowed-variable + actions + } = scope; + Interactable.prototype.getAction = getAction; + /** + * ```js + * interact(element, { ignoreFrom: document.getElementById('no-action') }) + * // or + * interact(element).ignoreFrom('input, textarea, a') + * ``` + * @deprecated + * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any + * of it's parents match the given CSS selector or Element, no + * drag/resize/gesture is started. + * + * Don't use this method. Instead set the `ignoreFrom` option for each action + * or for `pointerEvents` + * + * @example + * interact(targett) + * .draggable({ + * ignoreFrom: 'input, textarea, a[href]'', + * }) + * .pointerEvents({ + * ignoreFrom: '[no-pointer]', + * }) + * + * @param {string | Element | null} [newValue] a CSS selector string, an + * Element or `null` to not ignore any elements + * @return {string | Element | object} The current ignoreFrom value or this + * Interactable + */ + + Interactable.prototype.ignoreFrom = warnOnce(function (newValue) { + return this._backCompatOption('ignoreFrom', newValue); + }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).'); + /** + * @deprecated + * + * A drag/resize/gesture is started only If the target of the `mousedown`, + * `pointerdown` or `touchstart` event or any of it's parents match the given + * CSS selector or Element. + * + * Don't use this method. Instead set the `allowFrom` option for each action + * or for `pointerEvents` + * + * @example + * interact(targett) + * .resizable({ + * allowFrom: '.resize-handle', + * .pointerEvents({ + * allowFrom: '.handle',, + * }) + * + * @param {string | Element | null} [newValue] a CSS selector string, an + * Element or `null` to allow from any element + * @return {string | Element | object} The current allowFrom value or this + * Interactable + */ + + Interactable.prototype.allowFrom = warnOnce(function (newValue) { + return this._backCompatOption('allowFrom', newValue); + }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).'); + /** + * ```js + * interact('.resize-drag') + * .resizable(true) + * .draggable(true) + * .actionChecker(function (pointer, event, action, interactable, element, interaction) { + * + * if (interact.matchesSelector(event.target, '.drag-handle')) { + * // force drag with handle target + * action.name = drag + * } + * else { + * // resize from the top and right edges + * action.name = 'resize' + * action.edges = { top: true, right: true } + * } + * + * return action + * }) + * ``` + * + * Returns or sets the function used to check action to be performed on + * pointerDown + * + * @param {function | null} [checker] A function which takes a pointer event, + * defaultAction string, interactable, element and interaction as parameters + * and returns an object with name property 'drag' 'resize' or 'gesture' and + * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right + * props. + * @return {Function | Interactable} The checker function or this Interactable + */ + + Interactable.prototype.actionChecker = actionChecker; + /** + * Returns or sets whether the the cursor should be changed depending on the + * action that would be performed if the mouse were pressed and dragged. + * + * @param {boolean} [newValue] + * @return {boolean | Interactable} The current setting or this Interactable + */ + + Interactable.prototype.styleCursor = styleCursor; + + Interactable.prototype.defaultActionChecker = function (pointer, event, interaction, element) { + return defaultActionChecker(this, pointer, event, interaction, element, actions); + }; } + function getAction(pointer, event, interaction, element) { - const action = this.defaultActionChecker(pointer, event, interaction, element); - if (this.options.actionChecker) { - return this.options.actionChecker(pointer, event, action, this, element, interaction); - } - return action; + const action = this.defaultActionChecker(pointer, event, interaction, element); + + if (this.options.actionChecker) { + return this.options.actionChecker(pointer, event, action, this, element, interaction); + } + + return action; } + function defaultActionChecker(interactable, pointer, event, interaction, element, actions) { - const rect = interactable.getRect(element); - const buttons = event.buttons || ({ - 0: 1, - 1: 4, - 3: 8, - 4: 16, - })[event.button]; - let action = null; - for (const actionName of actions.names) { - // check mouseButton setting if the pointer is down - if (interaction.pointerIsDown && - /mouse|pointer/.test(interaction.pointerType) && - (buttons & interactable.options[actionName].mouseButtons) === 0) { - continue; - } - action = actions[actionName].checker(pointer, event, interactable, element, interaction, rect); - if (action) { - return action; - } + const rect = interactable.getRect(element); + const buttons = event.buttons || { + 0: 1, + 1: 4, + 3: 8, + 4: 16 + }[event.button]; + let action = null; + + for (const actionName of actions.names) { + // check mouseButton setting if the pointer is down + if (interaction.pointerIsDown && /mouse|pointer/.test(interaction.pointerType) && (buttons & interactable.options[actionName].mouseButtons) === 0) { + continue; + } + + action = actions[actionName].checker(pointer, event, interactable, element, interaction, rect); + + if (action) { + return action; } + } } + function styleCursor(newValue) { - if (is.bool(newValue)) { - this.options.styleCursor = newValue; - return this; - } - if (newValue === null) { - delete this.options.styleCursor; - return this; - } - return this.options.styleCursor; + if (is.bool(newValue)) { + this.options.styleCursor = newValue; + return this; + } + + if (newValue === null) { + delete this.options.styleCursor; + return this; + } + + return this.options.styleCursor; } + function actionChecker(checker) { - if (is.func(checker)) { - this.options.actionChecker = checker; - return this; - } - if (checker === null) { - delete this.options.actionChecker; - return this; - } - return this.options.actionChecker; + if (is.func(checker)) { + this.options.actionChecker = checker; + return this; + } + + if (checker === null) { + delete this.options.actionChecker; + return this; + } + + return this.options.actionChecker; } + export default { - id: 'auto-start/interactableMethods', - install, + id: 'auto-start/interactableMethods', + install }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RhYmxlTWV0aG9kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkludGVyYWN0YWJsZU1ldGhvZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUEwQjFDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTTtJQUNKLDBCQUEwQjtJQUMxQixZQUFZLEVBQUUsMkNBQTJDO0lBQ3pELE9BQU8sR0FDUixHQUFHLEtBQUssQ0FBQTtJQUVULFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtJQUU1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMkJHO0lBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQThCLFFBQVE7UUFDakYsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsRUFBRSxtR0FBbUcsQ0FBQyxDQUFBO0lBRXZHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQThCLFFBQVE7UUFDaEYsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3RELENBQUMsRUFBRSxpR0FBaUcsQ0FBQyxDQUFBO0lBRXJHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E4Qkc7SUFDSCxZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7SUFFcEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO0lBRWhELFlBQVksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEdBQUcs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QUFDLGFBQWEsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsZUFBZTtJQUNiLEVBQUUsRUFBRSxnQ0FBZ0M7SUFDcEMsT0FBTztDQUNSLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3YXJuT25jZSB9IGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5cbi8vIFRPRE86IHRoZXJlIHNlZW1zIHRvIGJlIGEgQGJhYmVsL3ByZXNldC10eXBlc2NyaXB0IGJ1ZyBjYXVzaW5nIHJlZ3VsYXIgaW1wb3J0XG4vLyBzeW50YXggdG8gcmVtYWluIGluIGpzIG91dHB1dFxudHlwZSBTY29wZSA9IGltcG9ydCAoJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnKS5TY29wZVxudHlwZSBBY3Rpb25zID0gaW1wb3J0ICgnQGludGVyYWN0anMvY29yZS9zY29wZScpLkFjdGlvbnNcbnR5cGUgSW50ZXJhY3Rpb24gPSBpbXBvcnQgKCdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJykuZGVmYXVsdFxudHlwZSBJbnRlcmFjdGFibGUgPSBpbXBvcnQgKCdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScpLmRlZmF1bHRcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGFibGUge1xuICAgIGdldEFjdGlvbjogdHlwZW9mIGdldEFjdGlvblxuICAgIGRlZmF1bHRBY3Rpb25DaGVja2VyOiAocG9pbnRlcjogYW55LCBldmVudDogYW55LCBpbnRlcmFjdGlvbjogYW55LCBlbGVtZW50OiBhbnkpID0+IGFueVxuICAgIHN0eWxlQ3Vyc29yOiB0eXBlb2Ygc3R5bGVDdXJzb3JcbiAgICBhY3Rpb25DaGVja2VyOiB0eXBlb2YgYWN0aW9uQ2hlY2tlclxuICAgIGlnbm9yZUZyb206ICguLi5hcmdzOiBhbnkpID0+IGJvb2xlYW5cbiAgICBhbGxvd0Zyb206ICguLi5hcmdzOiBhbnkpID0+IGJvb2xlYW5cbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIHBvaW50ZXJJc0Rvd246IGJvb2xlYW5cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIC8qKiBAbGVuZHMgSW50ZXJhY3RhYmxlICovXG4gICAgSW50ZXJhY3RhYmxlLCAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgYWN0aW9ucyxcbiAgfSA9IHNjb3BlXG5cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5nZXRBY3Rpb24gPSBnZXRBY3Rpb25cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QoZWxlbWVudCwgeyBpZ25vcmVGcm9tOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm8tYWN0aW9uJykgfSlcbiAgICogLy8gb3JcbiAgICogaW50ZXJhY3QoZWxlbWVudCkuaWdub3JlRnJvbSgnaW5wdXQsIHRleHRhcmVhLCBhJylcbiAgICogYGBgXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIElmIHRoZSB0YXJnZXQgb2YgdGhlIGBtb3VzZWRvd25gLCBgcG9pbnRlcmRvd25gIG9yIGB0b3VjaHN0YXJ0YCBldmVudCBvciBhbnlcbiAgICogb2YgaXQncyBwYXJlbnRzIG1hdGNoIHRoZSBnaXZlbiBDU1Mgc2VsZWN0b3Igb3IgRWxlbWVudCwgbm9cbiAgICogZHJhZy9yZXNpemUvZ2VzdHVyZSBpcyBzdGFydGVkLlxuICAgKlxuICAgKiBEb24ndCB1c2UgdGhpcyBtZXRob2QuIEluc3RlYWQgc2V0IHRoZSBgaWdub3JlRnJvbWAgb3B0aW9uIGZvciBlYWNoIGFjdGlvblxuICAgKiBvciBmb3IgYHBvaW50ZXJFdmVudHNgXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGludGVyYWN0KHRhcmdldHQpXG4gICAqICAgLmRyYWdnYWJsZSh7XG4gICAqICAgICBpZ25vcmVGcm9tOiAnaW5wdXQsIHRleHRhcmVhLCBhW2hyZWZdJycsXG4gICAqICAgfSlcbiAgICogICAucG9pbnRlckV2ZW50cyh7XG4gICAqICAgICBpZ25vcmVGcm9tOiAnW25vLXBvaW50ZXJdJyxcbiAgICogICB9KVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVsZW1lbnQgfCBudWxsfSBbbmV3VmFsdWVdIGEgQ1NTIHNlbGVjdG9yIHN0cmluZywgYW5cbiAgICogRWxlbWVudCBvciBgbnVsbGAgdG8gbm90IGlnbm9yZSBhbnkgZWxlbWVudHNcbiAgICogQHJldHVybiB7c3RyaW5nIHwgRWxlbWVudCB8IG9iamVjdH0gVGhlIGN1cnJlbnQgaWdub3JlRnJvbSB2YWx1ZSBvciB0aGlzXG4gICAqIEludGVyYWN0YWJsZVxuICAgKi9cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5pZ25vcmVGcm9tID0gd2Fybk9uY2UoZnVuY3Rpb24gKHRoaXM6IEludGVyYWN0YWJsZSwgbmV3VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja0NvbXBhdE9wdGlvbignaWdub3JlRnJvbScsIG5ld1ZhbHVlKVxuICB9LCAnSW50ZXJhY3RhYmxlLmlnbm9yZUZyb20oKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgSW50ZXJhY3RibGUuZHJhZ2dhYmxlKHtpZ25vcmVGcm9tOiBuZXdWYWx1ZX0pLicpXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqXG4gICAqIEEgZHJhZy9yZXNpemUvZ2VzdHVyZSBpcyBzdGFydGVkIG9ubHkgSWYgdGhlIHRhcmdldCBvZiB0aGUgYG1vdXNlZG93bmAsXG4gICAqIGBwb2ludGVyZG93bmAgb3IgYHRvdWNoc3RhcnRgIGV2ZW50IG9yIGFueSBvZiBpdCdzIHBhcmVudHMgbWF0Y2ggdGhlIGdpdmVuXG4gICAqIENTUyBzZWxlY3RvciBvciBFbGVtZW50LlxuICAgKlxuICAgKiBEb24ndCB1c2UgdGhpcyBtZXRob2QuIEluc3RlYWQgc2V0IHRoZSBgYWxsb3dGcm9tYCBvcHRpb24gZm9yIGVhY2ggYWN0aW9uXG4gICAqIG9yIGZvciBgcG9pbnRlckV2ZW50c2BcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW50ZXJhY3QodGFyZ2V0dClcbiAgICogICAucmVzaXphYmxlKHtcbiAgICogICAgIGFsbG93RnJvbTogJy5yZXNpemUtaGFuZGxlJyxcbiAgICogICAucG9pbnRlckV2ZW50cyh7XG4gICAqICAgICBhbGxvd0Zyb206ICcuaGFuZGxlJywsXG4gICAqICAgfSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBFbGVtZW50IHwgbnVsbH0gW25ld1ZhbHVlXSBhIENTUyBzZWxlY3RvciBzdHJpbmcsIGFuXG4gICAqIEVsZW1lbnQgb3IgYG51bGxgIHRvIGFsbG93IGZyb20gYW55IGVsZW1lbnRcbiAgICogQHJldHVybiB7c3RyaW5nIHwgRWxlbWVudCB8IG9iamVjdH0gVGhlIGN1cnJlbnQgYWxsb3dGcm9tIHZhbHVlIG9yIHRoaXNcbiAgICogSW50ZXJhY3RhYmxlXG4gICAqL1xuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLmFsbG93RnJvbSA9IHdhcm5PbmNlKGZ1bmN0aW9uICh0aGlzOiBJbnRlcmFjdGFibGUsIG5ld1ZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tDb21wYXRPcHRpb24oJ2FsbG93RnJvbScsIG5ld1ZhbHVlKVxuICB9LCAnSW50ZXJhY3RhYmxlLmFsbG93RnJvbSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBJbnRlcmFjdGJsZS5kcmFnZ2FibGUoe2FsbG93RnJvbTogbmV3VmFsdWV9KS4nKVxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBpbnRlcmFjdCgnLnJlc2l6ZS1kcmFnJylcbiAgICogICAucmVzaXphYmxlKHRydWUpXG4gICAqICAgLmRyYWdnYWJsZSh0cnVlKVxuICAgKiAgIC5hY3Rpb25DaGVja2VyKGZ1bmN0aW9uIChwb2ludGVyLCBldmVudCwgYWN0aW9uLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGludGVyYWN0aW9uKSB7XG4gICAqXG4gICAqICAgaWYgKGludGVyYWN0Lm1hdGNoZXNTZWxlY3RvcihldmVudC50YXJnZXQsICcuZHJhZy1oYW5kbGUnKSkge1xuICAgKiAgICAgLy8gZm9yY2UgZHJhZyB3aXRoIGhhbmRsZSB0YXJnZXRcbiAgICogICAgIGFjdGlvbi5uYW1lID0gZHJhZ1xuICAgKiAgIH1cbiAgICogICBlbHNlIHtcbiAgICogICAgIC8vIHJlc2l6ZSBmcm9tIHRoZSB0b3AgYW5kIHJpZ2h0IGVkZ2VzXG4gICAqICAgICBhY3Rpb24ubmFtZSAgPSAncmVzaXplJ1xuICAgKiAgICAgYWN0aW9uLmVkZ2VzID0geyB0b3A6IHRydWUsIHJpZ2h0OiB0cnVlIH1cbiAgICogICB9XG4gICAqXG4gICAqICAgcmV0dXJuIGFjdGlvblxuICAgKiB9KVxuICAgKiBgYGBcbiAgICpcbiAgICogUmV0dXJucyBvciBzZXRzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGNoZWNrIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgb25cbiAgICogcG9pbnRlckRvd25cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbiB8IG51bGx9IFtjaGVja2VyXSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgcG9pbnRlciBldmVudCxcbiAgICogZGVmYXVsdEFjdGlvbiBzdHJpbmcsIGludGVyYWN0YWJsZSwgZWxlbWVudCBhbmQgaW50ZXJhY3Rpb24gYXMgcGFyYW1ldGVyc1xuICAgKiBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBuYW1lIHByb3BlcnR5ICdkcmFnJyAncmVzaXplJyBvciAnZ2VzdHVyZScgYW5kXG4gICAqIG9wdGlvbmFsbHkgYW4gYGVkZ2VzYCBvYmplY3Qgd2l0aCBib29sZWFuICd0b3AnLCAnbGVmdCcsICdib3R0b20nIGFuZCByaWdodFxuICAgKiBwcm9wcy5cbiAgICogQHJldHVybiB7RnVuY3Rpb24gfCBJbnRlcmFjdGFibGV9IFRoZSBjaGVja2VyIGZ1bmN0aW9uIG9yIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLmFjdGlvbkNoZWNrZXIgPSBhY3Rpb25DaGVja2VyXG5cbiAgLyoqXG4gICAqIFJldHVybnMgb3Igc2V0cyB3aGV0aGVyIHRoZSB0aGUgY3Vyc29yIHNob3VsZCBiZSBjaGFuZ2VkIGRlcGVuZGluZyBvbiB0aGVcbiAgICogYWN0aW9uIHRoYXQgd291bGQgYmUgcGVyZm9ybWVkIGlmIHRoZSBtb3VzZSB3ZXJlIHByZXNzZWQgYW5kIGRyYWdnZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25ld1ZhbHVlXVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgSW50ZXJhY3RhYmxlfSBUaGUgY3VycmVudCBzZXR0aW5nIG9yIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLnN0eWxlQ3Vyc29yID0gc3R5bGVDdXJzb3JcblxuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLmRlZmF1bHRBY3Rpb25DaGVja2VyID0gZnVuY3Rpb24gKHRoaXM6IEludGVyYWN0YWJsZSwgcG9pbnRlciwgZXZlbnQsIGludGVyYWN0aW9uLCBlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRlZmF1bHRBY3Rpb25DaGVja2VyKHRoaXMsIHBvaW50ZXIsIGV2ZW50LCBpbnRlcmFjdGlvbiwgZWxlbWVudCwgYWN0aW9ucylcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb24gKFxuICB0aGlzOiBJbnRlcmFjdGFibGUsXG4gIHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLFxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uLFxuICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50LFxuKTogSW50ZXJhY3QuQWN0aW9uUHJvcHMge1xuICBjb25zdCBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25DaGVja2VyKHBvaW50ZXIsIGV2ZW50LCBpbnRlcmFjdGlvbiwgZWxlbWVudClcblxuICBpZiAodGhpcy5vcHRpb25zLmFjdGlvbkNoZWNrZXIpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFjdGlvbkNoZWNrZXIocG9pbnRlciwgZXZlbnQsIGFjdGlvbiwgdGhpcywgZWxlbWVudCwgaW50ZXJhY3Rpb24pXG4gIH1cblxuICByZXR1cm4gYWN0aW9uXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRBY3Rpb25DaGVja2VyIChcbiAgaW50ZXJhY3RhYmxlOiBJbnRlcmFjdGFibGUsXG4gIHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLFxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSxcbiAgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uLFxuICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50LFxuICBhY3Rpb25zOiBBY3Rpb25zLFxuKSB7XG4gIGNvbnN0IHJlY3QgPSBpbnRlcmFjdGFibGUuZ2V0UmVjdChlbGVtZW50KVxuICBjb25zdCBidXR0b25zID0gKGV2ZW50IGFzIE1vdXNlRXZlbnQpLmJ1dHRvbnMgfHwgKHtcbiAgICAwOiAxLFxuICAgIDE6IDQsXG4gICAgMzogOCxcbiAgICA0OiAxNixcbiAgfSlbKGV2ZW50IGFzIE1vdXNlRXZlbnQpLmJ1dHRvbiBhcyAwIHwgMSB8IDMgfCA0XVxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIGZvciAoY29uc3QgYWN0aW9uTmFtZSBvZiBhY3Rpb25zLm5hbWVzKSB7XG4gICAgLy8gY2hlY2sgbW91c2VCdXR0b24gc2V0dGluZyBpZiB0aGUgcG9pbnRlciBpcyBkb3duXG4gICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24gJiZcbiAgICAgICAgL21vdXNlfHBvaW50ZXIvLnRlc3QoaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUpICYmXG4gICAgICAoYnV0dG9ucyAmIGludGVyYWN0YWJsZS5vcHRpb25zW2FjdGlvbk5hbWVdLm1vdXNlQnV0dG9ucykgPT09IDApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgYWN0aW9uID0gKGFjdGlvbnNbYWN0aW9uTmFtZSBhcyBrZXlvZiBBY3Rpb25zXSBhcyBhbnkpLmNoZWNrZXIocG9pbnRlciwgZXZlbnQsIGludGVyYWN0YWJsZSwgZWxlbWVudCwgaW50ZXJhY3Rpb24sIHJlY3QpXG5cbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICByZXR1cm4gYWN0aW9uXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ3Vyc29yICh0aGlzOiBJbnRlcmFjdGFibGUsIG5ld1ZhbHVlPzogYm9vbGVhbikge1xuICBpZiAoaXMuYm9vbChuZXdWYWx1ZSkpIHtcbiAgICB0aGlzLm9wdGlvbnMuc3R5bGVDdXJzb3IgPSBuZXdWYWx1ZVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGlmIChuZXdWYWx1ZSA9PT0gbnVsbCkge1xuICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuc3R5bGVDdXJzb3JcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRpb25zLnN0eWxlQ3Vyc29yXG59XG5cbmZ1bmN0aW9uIGFjdGlvbkNoZWNrZXIgKHRoaXM6IEludGVyYWN0YWJsZSwgY2hlY2tlcjogYW55KSB7XG4gIGlmIChpcy5mdW5jKGNoZWNrZXIpKSB7XG4gICAgdGhpcy5vcHRpb25zLmFjdGlvbkNoZWNrZXIgPSBjaGVja2VyXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgaWYgKGNoZWNrZXIgPT09IG51bGwpIHtcbiAgICBkZWxldGUgdGhpcy5vcHRpb25zLmFjdGlvbkNoZWNrZXJcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRpb25zLmFjdGlvbkNoZWNrZXJcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpZDogJ2F1dG8tc3RhcnQvaW50ZXJhY3RhYmxlTWV0aG9kcycsXG4gIGluc3RhbGwsXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=InteractableMethods.js.map \ No newline at end of file diff --git a/packages/auto-start/InteractableMethods.js.map b/packages/auto-start/InteractableMethods.js.map new file mode 100644 index 000000000..ccd89a91a --- /dev/null +++ b/packages/auto-start/InteractableMethods.js.map @@ -0,0 +1,48 @@ +{ + "version": 3, + "sources": [ + "InteractableMethods.ts" + ], + "names": [ + "warnOnce", + "is", + "install", + "scope", + "Interactable", + "actions", + "prototype", + "getAction", + "ignoreFrom", + "newValue", + "_backCompatOption", + "allowFrom", + "actionChecker", + "styleCursor", + "defaultActionChecker", + "pointer", + "event", + "interaction", + "element", + "action", + "options", + "interactable", + "rect", + "getRect", + "buttons", + "button", + "actionName", + "names", + "pointerIsDown", + "test", + "pointerType", + "mouseButtons", + "checker", + "bool", + "func", + "id" + ], + "mappings": "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", + "sourcesContent": [ + "import { warnOnce } from '../utils/index'\nimport * as is from '../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 Actions = import ('@interactjs/core/scope').Actions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Interact.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: Interact.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: Interact.Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */\n Interactable.prototype.actionChecker = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interact.Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (\n this: Interact.Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interact.Interaction,\n element: Interact.Element,\n): Interact.ActionProps {\n const action = this.defaultActionChecker(pointer, event, interaction, element)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n}\n\nfunction defaultActionChecker (\n interactable: Interact.Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interact.Interaction,\n element: Interact.Element,\n actions: Actions,\n) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interact.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: Interact.Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/auto-start/autoStart.spec.js b/packages/auto-start/autoStart.spec.js deleted file mode 100644 index f9f1ae77b..000000000 --- a/packages/auto-start/autoStart.spec.js +++ /dev/null @@ -1,36 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import drag from '@interactjs/actions/drag'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import autoStart from './base'; -test('autoStart', t => { - const rect = { top: 100, left: 200, bottom: 300, right: 400 }; - const { interaction, interactable, event, coords, target: element, } = helpers.testEnv({ - plugins: [autoStart, drag], - rect, - }); - interactable.draggable(true); - interaction.pointerType = coords.pointerType = 'mouse'; - coords.buttons = 1; - interaction.pointerDown(event, event, element); - t.deepEqual(interaction.prepared, { name: 'drag', axis: 'xy', edges: undefined }, 'prepares action'); - t.deepEqual(interaction.rect, rect, 'set interaction.rect'); - t.equal(element.style.cursor, 'move', 'sets drag cursor'); - let checkerArgs; - interactable.draggable({ - cursorChecker(...args) { - checkerArgs = args; - return 'custom-cursor'; - }, - }); - interaction.pointerDown(event, event, element); - t.deepEqual(checkerArgs, [{ name: 'drag', axis: 'xy', edges: undefined }, interactable, element, false], 'calls cursorChecker with expected args'); - interaction.pointerDown(event, event, element); - t.equal(element.style.cursor, 'custom-cursor', 'uses cursorChecker value'); - coords.page.x += 10; - coords.client.x += 10; - interaction.pointerMove(event, event, element); - t.ok(interaction._interacting, 'down -> move starts action'); - t.deepEqual(checkerArgs, [{ name: 'drag', axis: 'xy', edges: undefined }, interactable, element, true], 'calls cursorChecker with true for interacting arg'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b1N0YXJ0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhdXRvU3RhcnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLElBQUksTUFBTSwwQkFBMEIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sU0FBUyxNQUFNLFFBQVEsQ0FBQTtBQUU5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBQzdELE1BQU0sRUFDSixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUFFLE9BQU8sR0FDaEIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFDMUIsSUFBSTtLQUNMLENBQUMsQ0FBQTtJQUVGLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsV0FBVyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQTtJQUN0RCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQTtJQUVsQixXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFOUMsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxXQUFXLENBQUMsUUFBUSxFQUNwQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQzlDLGlCQUFpQixDQUNsQixDQUFBO0lBRUQsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxXQUFXLENBQUMsSUFBSSxFQUNoQixJQUFXLEVBQ1gsc0JBQXNCLENBQ3ZCLENBQUE7SUFFRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBRXpELElBQUksV0FBVyxDQUFBO0lBRWYsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUNyQixhQUFhLENBQUUsR0FBRyxJQUFJO1lBQ3BCLFdBQVcsR0FBRyxJQUFJLENBQUE7WUFFbEIsT0FBTyxlQUFlLENBQUE7UUFDeEIsQ0FBQztLQUNGLENBQUMsQ0FBQTtJQUVGLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUU5QyxDQUFDLENBQUMsU0FBUyxDQUNULFdBQVcsRUFDWCxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUM5RSx3Q0FBd0MsQ0FDekMsQ0FBQTtJQUVELFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM5QyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFBO0lBRTFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNuQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDckIsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzlDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO0lBRTVELENBQUMsQ0FBQyxTQUFTLENBQ1QsV0FBVyxFQUNYLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQzdFLG1EQUFtRCxDQUNwRCxDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBkcmFnIGZyb20gJ0BpbnRlcmFjdGpzL2FjdGlvbnMvZHJhZydcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9faGVscGVycydcbmltcG9ydCBhdXRvU3RhcnQgZnJvbSAnLi9iYXNlJ1xuXG50ZXN0KCdhdXRvU3RhcnQnLCB0ID0+IHtcbiAgY29uc3QgcmVjdCA9IHsgdG9wOiAxMDAsIGxlZnQ6IDIwMCwgYm90dG9tOiAzMDAsIHJpZ2h0OiA0MDAgfVxuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgaW50ZXJhY3RhYmxlLFxuICAgIGV2ZW50LFxuICAgIGNvb3JkcyxcbiAgICB0YXJnZXQ6IGVsZW1lbnQsXG4gIH0gPSBoZWxwZXJzLnRlc3RFbnYoe1xuICAgIHBsdWdpbnM6IFthdXRvU3RhcnQsIGRyYWddLFxuICAgIHJlY3QsXG4gIH0pXG5cbiAgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh0cnVlKVxuICBpbnRlcmFjdGlvbi5wb2ludGVyVHlwZSA9IGNvb3Jkcy5wb2ludGVyVHlwZSA9ICdtb3VzZSdcbiAgY29vcmRzLmJ1dHRvbnMgPSAxXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24oZXZlbnQsIGV2ZW50LCBlbGVtZW50KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnByZXBhcmVkLFxuICAgIHsgbmFtZTogJ2RyYWcnLCBheGlzOiAneHknLCBlZGdlczogdW5kZWZpbmVkIH0sXG4gICAgJ3ByZXBhcmVzIGFjdGlvbidcbiAgKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnJlY3QsXG4gICAgcmVjdCBhcyBhbnksXG4gICAgJ3NldCBpbnRlcmFjdGlvbi5yZWN0J1xuICApXG5cbiAgdC5lcXVhbChlbGVtZW50LnN0eWxlLmN1cnNvciwgJ21vdmUnLCAnc2V0cyBkcmFnIGN1cnNvcicpXG5cbiAgbGV0IGNoZWNrZXJBcmdzXG5cbiAgaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7XG4gICAgY3Vyc29yQ2hlY2tlciAoLi4uYXJncykge1xuICAgICAgY2hlY2tlckFyZ3MgPSBhcmdzXG5cbiAgICAgIHJldHVybiAnY3VzdG9tLWN1cnNvcidcbiAgICB9LFxuICB9KVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKGV2ZW50LCBldmVudCwgZWxlbWVudClcblxuICB0LmRlZXBFcXVhbChcbiAgICBjaGVja2VyQXJncyxcbiAgICBbeyBuYW1lOiAnZHJhZycsIGF4aXM6ICd4eScsIGVkZ2VzOiB1bmRlZmluZWQgfSwgaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBmYWxzZV0sXG4gICAgJ2NhbGxzIGN1cnNvckNoZWNrZXIgd2l0aCBleHBlY3RlZCBhcmdzJ1xuICApXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24oZXZlbnQsIGV2ZW50LCBlbGVtZW50KVxuICB0LmVxdWFsKGVsZW1lbnQuc3R5bGUuY3Vyc29yLCAnY3VzdG9tLWN1cnNvcicsICd1c2VzIGN1cnNvckNoZWNrZXIgdmFsdWUnKVxuXG4gIGNvb3Jkcy5wYWdlLnggKz0gMTBcbiAgY29vcmRzLmNsaWVudC54ICs9IDEwXG4gIGludGVyYWN0aW9uLnBvaW50ZXJNb3ZlKGV2ZW50LCBldmVudCwgZWxlbWVudClcbiAgdC5vayhpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcsICdkb3duIC0+IG1vdmUgc3RhcnRzIGFjdGlvbicpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgY2hlY2tlckFyZ3MsXG4gICAgW3sgbmFtZTogJ2RyYWcnLCBheGlzOiAneHknLCBlZGdlczogdW5kZWZpbmVkIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudCwgdHJ1ZV0sXG4gICAgJ2NhbGxzIGN1cnNvckNoZWNrZXIgd2l0aCB0cnVlIGZvciBpbnRlcmFjdGluZyBhcmcnXG4gIClcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/auto-start/base.d.ts b/packages/auto-start/base.d.ts index 81c98ccce..23fbf5c65 100644 --- a/packages/auto-start/base.d.ts +++ b/packages/auto-start/base.d.ts @@ -1,4 +1,3 @@ -import * as utils from '@interactjs/utils'; declare module '@interactjs/interact/interact' { interface InteractStatic { maxInteractions: (newValue: any) => any; @@ -24,11 +23,18 @@ declare module '@interactjs/core/defaultOptions' { mouseButtons?: 0 | 1 | 2 | 4 | 16; } } +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'autoStart:before-start': Interact.SignalArgs['interactions:move']; + 'autoStart:prepared': { + interaction: Interact.Interaction; + }; + } +} export interface AutoStart { maxInteractions: number; withinInteractionLimit: typeof withinInteractionLimit; cursorElement: Interact.Element; - signals: utils.Signals; } declare function withinInteractionLimit(interactable: Interact.Interactable, element: Interact.Element, action: any, scope: Interact.Scope): boolean; declare const _default: import("@interactjs/core/scope").Plugin; diff --git a/packages/auto-start/base.js b/packages/auto-start/base.js index c8aa1f77c..ba66f5dbd 100644 --- a/packages/auto-start/base.js +++ b/packages/auto-start/base.js @@ -1,225 +1,309 @@ -import * as utils from '@interactjs/utils'; -import InteractableMethods from './InteractableMethods'; +import * as utils from "../utils/index.js"; +import InteractableMethods from "./InteractableMethods.js"; + function install(scope) { - const { interact, interactions, defaults, } = scope; - scope.usePlugin(InteractableMethods); - // set cursor style on mousedown - interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => { - if (interaction.interacting()) { - return; - } - const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); - prepare(interaction, actionInfo, scope); - }); - // set cursor style on mousemove - interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => { - if (interaction.pointerType !== 'mouse' || - interaction.pointerIsDown || - interaction.interacting()) { - return; - } - const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); - prepare(interaction, actionInfo, scope); - }); - interactions.signals.on('move', arg => { - const { interaction } = arg; - if (!interaction.pointerIsDown || - interaction.interacting() || - !interaction.pointerWasMoved || - !interaction.prepared.name) { - return; - } - scope.autoStart.signals.fire('before-start', arg); - const { interactable } = interaction; - if (interaction.prepared.name && interactable) { - // check manualStart and interaction limit - if (interactable.options[interaction.prepared.name].manualStart || - !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { - interaction.stop(); - } - else { - interaction.start(interaction.prepared, interactable, interaction.element); - setInteractionCursor(interaction, scope); - } - } - }); - interactions.signals.on('stop', ({ interaction }) => { - const { interactable } = interaction; - if (interactable && interactable.options.styleCursor) { - setCursor(interaction.element, '', scope); - } - }); - defaults.base.actionChecker = null; - defaults.base.styleCursor = true; - utils.extend(defaults.perAction, { - manualStart: false, - max: Infinity, - maxPerElement: 1, - allowFrom: null, - ignoreFrom: null, - // only allow left button by default - // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value - mouseButtons: 1, - }); - /** - * Returns or sets the maximum number of concurrent interactions allowed. By - * default only 1 interaction is allowed at a time (for backwards - * compatibility). To allow multiple interactions on the same Interactables and - * elements, you need to enable it in the draggable, resizable and gesturable - * `'max'` and `'maxPerElement'` options. - * - * @alias module:interact.maxInteractions - * - * @param {number} [newValue] Any number. newValue <= 0 means no interactions. - */ - interact.maxInteractions = newValue => maxInteractions(newValue, scope); - scope.autoStart = { - // Allow this many interactions to happen simultaneously - maxInteractions: Infinity, - withinInteractionLimit, - cursorElement: null, - signals: new utils.Signals(), - }; + const { + interact, + defaults + } = scope; + scope.usePlugin(InteractableMethods); + defaults.base.actionChecker = null; + defaults.base.styleCursor = true; + utils.extend(defaults.perAction, { + manualStart: false, + max: Infinity, + maxPerElement: 1, + allowFrom: null, + ignoreFrom: null, + // only allow left button by default + // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value + mouseButtons: 1 + }); + /** + * Returns or sets the maximum number of concurrent interactions allowed. By + * default only 1 interaction is allowed at a time (for backwards + * compatibility). To allow multiple interactions on the same Interactables and + * elements, you need to enable it in the draggable, resizable and gesturable + * `'max'` and `'maxPerElement'` options. + * + * @alias module:interact.maxInteractions + * + * @param {number} [newValue] Any number. newValue <= 0 means no interactions. + */ + + interact.maxInteractions = newValue => maxInteractions(newValue, scope); + + scope.autoStart = { + // Allow this many interactions to happen simultaneously + maxInteractions: Infinity, + withinInteractionLimit, + cursorElement: null + }; +} + +function prepareOnDown({ + interaction, + pointer, + event, + eventTarget +}, scope) { + if (interaction.interacting()) { + return; + } + + const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); +} + +function prepareOnMove({ + interaction, + pointer, + event, + eventTarget +}, scope) { + if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) { + return; + } + + const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); +} + +function startOnMove(arg, scope) { + const { + interaction + } = arg; + + if (!interaction.pointerIsDown || interaction.interacting() || !interaction.pointerWasMoved || !interaction.prepared.name) { + return; + } + + scope.fire('autoStart:before-start', arg); + const { + interactable + } = interaction; + + if (interaction.prepared.name && interactable) { + // check manualStart and interaction limit + if (interactable.options[interaction.prepared.name].manualStart || !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { + interaction.stop(); + } else { + interaction.start(interaction.prepared, interactable, interaction.element); + setInteractionCursor(interaction, scope); + } + } } -// Check if the current interactable supports the action. + +function clearCursorOnStop({ + interaction +}, scope) { + const { + interactable + } = interaction; + + if (interactable && interactable.options.styleCursor) { + setCursor(interaction.element, '', scope); + } +} // Check if the current interactable supports the action. // If so, return the validated action. Otherwise, return null + + function validateAction(action, interactable, element, eventTarget, scope) { - if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) && - interactable.options[action.name].enabled && - withinInteractionLimit(interactable, element, action, scope)) { - return action; - } - return null; + if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) && interactable.options[action.name].enabled && withinInteractionLimit(interactable, element, action, scope)) { + return action; + } + + return null; } + function validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope) { - for (let i = 0, len = matches.length; i < len; i++) { - const match = matches[i]; - const matchElement = matchElements[i]; - const matchAction = match.getAction(pointer, event, interaction, matchElement); - if (!matchAction) { - continue; - } - const action = validateAction(matchAction, match, matchElement, eventTarget, scope); - if (action) { - return { - action, - interactable: match, - element: matchElement, - }; - } + for (let i = 0, len = matches.length; i < len; i++) { + const match = matches[i]; + const matchElement = matchElements[i]; + const matchAction = match.getAction(pointer, event, interaction, matchElement); + + if (!matchAction) { + continue; + } + + const action = validateAction(matchAction, match, matchElement, eventTarget, scope); + + if (action) { + return { + action, + interactable: match, + element: matchElement + }; } - return { action: null, interactable: null, element: null }; + } + + return { + action: null, + interactable: null, + element: null + }; } + function getActionInfo(interaction, pointer, event, eventTarget, scope) { - let matches = []; - let matchElements = []; - let element = eventTarget; - function pushMatches(interactable) { - matches.push(interactable); - matchElements.push(element); + let matches = []; + let matchElements = []; + let element = eventTarget; + + function pushMatches(interactable) { + matches.push(interactable); + matchElements.push(element); + } + + while (utils.is.element(element)) { + matches = []; + matchElements = []; + scope.interactables.forEachMatch(element, pushMatches); + const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope); + + if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) { + return actionInfo; } - while (utils.is.element(element)) { - matches = []; - matchElements = []; - scope.interactables.forEachMatch(element, pushMatches); - const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope); - if (actionInfo.action && - !actionInfo.interactable.options[actionInfo.action.name].manualStart) { - return actionInfo; - } - element = utils.dom.parentNode(element); - } - return { action: null, interactable: null, element: null }; + + element = utils.dom.parentNode(element); + } + + return { + action: null, + interactable: null, + element: null + }; } -function prepare(interaction, { action, interactable, element }, scope) { - action = action || { name: null }; - // clear previous target element cursor - if (interaction.interactable && interaction.interactable.options.styleCursor) { - setCursor(interaction.element, '', scope); - } - interaction.interactable = interactable; - interaction.element = element; - utils.copyAction(interaction.prepared, action); - interaction.rect = interactable && action.name - ? interactable.getRect(element) - : null; - setInteractionCursor(interaction, scope); - scope.autoStart.signals.fire('prepared', { interaction }); + +function prepare(interaction, { + action, + interactable, + element +}, scope) { + action = action || { + name: null + }; // clear previous target element cursor + + if (interaction.interactable && interaction.interactable.options.styleCursor) { + setCursor(interaction.element, '', scope); + } + + interaction.interactable = interactable; + interaction.element = element; + utils.copyAction(interaction.prepared, action); + interaction.rect = interactable && action.name ? interactable.getRect(element) : null; + setInteractionCursor(interaction, scope); + scope.fire('autoStart:prepared', { + interaction + }); } + function withinInteractionLimit(interactable, element, action, scope) { - const options = interactable.options; - const maxActions = options[action.name].max; - const maxPerElement = options[action.name].maxPerElement; - const autoStartMax = scope.autoStart.maxInteractions; - let activeInteractions = 0; - let interactableCount = 0; - let elementCount = 0; - // no actions if any of these values == 0 - if (!(maxActions && maxPerElement && autoStartMax)) { - return false; + const options = interactable.options; + const maxActions = options[action.name].max; + const maxPerElement = options[action.name].maxPerElement; + const autoStartMax = scope.autoStart.maxInteractions; + let activeInteractions = 0; + let interactableCount = 0; + let elementCount = 0; // no actions if any of these values == 0 + + if (!(maxActions && maxPerElement && autoStartMax)) { + return false; + } + + for (const interaction of scope.interactions.list) { + const otherAction = interaction.prepared.name; + + if (!interaction.interacting()) { + continue; + } + + activeInteractions++; + + if (activeInteractions >= autoStartMax) { + return false; + } + + if (interaction.interactable !== interactable) { + continue; } - for (const interaction of scope.interactions.list) { - const otherAction = interaction.prepared.name; - if (!interaction.interacting()) { - continue; - } - activeInteractions++; - if (activeInteractions >= autoStartMax) { - return false; - } - if (interaction.interactable !== interactable) { - continue; - } - interactableCount += otherAction === action.name ? 1 : 0; - if (interactableCount >= maxActions) { - return false; - } - if (interaction.element === element) { - elementCount++; - if (otherAction === action.name && elementCount >= maxPerElement) { - return false; - } - } + + interactableCount += otherAction === action.name ? 1 : 0; + + if (interactableCount >= maxActions) { + return false; + } + + if (interaction.element === element) { + elementCount++; + + if (otherAction === action.name && elementCount >= maxPerElement) { + return false; + } } - return autoStartMax > 0; + } + + return autoStartMax > 0; } + function maxInteractions(newValue, scope) { - if (utils.is.number(newValue)) { - scope.autoStart.maxInteractions = newValue; - return this; - } - return scope.autoStart.maxInteractions; + if (utils.is.number(newValue)) { + scope.autoStart.maxInteractions = newValue; + return this; + } + + return scope.autoStart.maxInteractions; } + function setCursor(element, cursor, scope) { - if (scope.autoStart.cursorElement) { - scope.autoStart.cursorElement.style.cursor = ''; - } - element.ownerDocument.documentElement.style.cursor = cursor; - element.style.cursor = cursor; - scope.autoStart.cursorElement = cursor ? element : null; + if (scope.autoStart.cursorElement) { + scope.autoStart.cursorElement.style.cursor = ''; + } + + element.ownerDocument.documentElement.style.cursor = cursor; + element.style.cursor = cursor; + scope.autoStart.cursorElement = cursor ? element : null; } + function setInteractionCursor(interaction, scope) { - const { interactable, element, prepared } = interaction; - if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) { - return; + const { + interactable, + element, + prepared + } = interaction; + + if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) { + return; + } + + let cursor = ''; + + if (prepared.name) { + const cursorChecker = interactable.options[prepared.name].cursorChecker; + + if (utils.is.func(cursorChecker)) { + cursor = cursorChecker(prepared, interactable, element, interaction._interacting); + } else { + cursor = scope.actions[prepared.name].getCursor(prepared); } - let cursor = ''; - if (prepared.name) { - const cursorChecker = interactable.options[prepared.name].cursorChecker; - if (utils.is.func(cursorChecker)) { - cursor = cursorChecker(prepared, interactable, element, interaction._interacting); - } - else { - cursor = scope.actions[prepared.name].getCursor(prepared); - } - } - setCursor(interaction.element, cursor || '', scope); + } + + setCursor(interaction.element, cursor || '', scope); } + export default { - id: 'auto-start/base', - install, - maxInteractions, - withinInteractionLimit, - validateAction, + id: 'auto-start/base', + install, + listeners: { + 'interactions:down': prepareOnDown, + 'interactions:move': (arg, scope) => { + prepareOnMove(arg, scope); + startOnMove(arg, scope); + }, + 'interactions:stop': clearCursorOnStop + }, + before: 'ations', + maxInteractions, + withinInteractionLimit, + validateAction }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLG1CQUFtQixNQUFNLHVCQUF1QixDQUFBO0FBMEN2RCxTQUFTLE9BQU8sQ0FBRSxLQUFxQjtJQUNyQyxNQUFNLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFDWixRQUFRLEdBQ1QsR0FBRyxLQUFLLENBQUE7SUFFVCxLQUFLLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFFcEMsZ0NBQWdDO0lBQ2hDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUMvRSxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUFFLE9BQU07U0FBRTtRQUV6QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2pGLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQyxDQUFBO0lBRUYsZ0NBQWdDO0lBQ2hDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUMvRSxJQUFJLFdBQVcsQ0FBQyxXQUFXLEtBQUssT0FBTztZQUNuQyxXQUFXLENBQUMsYUFBYTtZQUN6QixXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFekMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxF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QUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQTtRQUUvRixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFBO1NBQ2xGO2FBQ0k7WUFDSCxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQzFEO0tBQ0Y7SUFFRCxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3JELENBQUM7QUFFRCxlQUFlO0lBQ2IsRUFBRSxFQUFFLGlCQUFpQjtJQUNyQixPQUFPO0lBQ1AsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixjQUFjO0NBQ0ksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IEludGVyYWN0YWJsZU1ldGhvZHMgZnJvbSAnLi9JbnRlcmFjdGFibGVNZXRob2RzJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvaW50ZXJhY3QvaW50ZXJhY3QnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0U3RhdGljIHtcbiAgICBtYXhJbnRlcmFjdGlvbnM6IChuZXdWYWx1ZTogYW55KSA9PiBhbnlcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgU2NvcGUge1xuICAgIGF1dG9TdGFydDogQXV0b1N0YXJ0XG4gICAgbWF4SW50ZXJhY3Rpb25zOiAoLi4uYXJnczogYW55KSA9PiBhbnlcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQmFzZURlZmF1bHRzIHtcbiAgICBhY3Rpb25DaGVja2VyP1xuICAgIHN0eWxlQ3Vyc29yP1xuICB9XG5cbiAgaW50ZXJmYWNlIFBlckFjdGlvbkRlZmF1bHRzIHtcbiAgICBtYW51YWxTdGFydD86IGJvb2xlYW5cbiAgICBtYXg/OiBudW1iZXJcbiAgICBtYXhQZXJFbGVtZW50PzogbnVtYmVyXG4gICAgYWxsb3dGcm9tPzogc3RyaW5nIHwgSW50ZXJhY3QuRWxlbWVudFxuICAgIGlnbm9yZUZyb20/OiBzdHJpbmcgfCBJbnRlcmFjdC5FbGVtZW50XG5cbiAgICAvLyBvbmx5IGFsbG93IGxlZnQgYnV0dG9uIGJ5IGRlZmF1bHRcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01vdXNlRXZlbnQvYnV0dG9ucyNSZXR1cm5fdmFsdWVcbiAgICBtb3VzZUJ1dHRvbnM/OiAwIHwgMSB8IDIgfCA0IHwgMTZcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9TdGFydCB7XG4gIC8vIEFsbG93IHRoaXMgbWFueSBpbnRlcmFjdGlvbnMgdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gIG1heEludGVyYWN0aW9uczogbnVtYmVyXG4gIHdpdGhpbkludGVyYWN0aW9uTGltaXQ6IHR5cGVvZiB3aXRoaW5JbnRlcmFjdGlvbkxpbWl0XG4gIGN1cnNvckVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnRcbiAgc2lnbmFsczogdXRpbHMuU2lnbmFsc1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogSW50ZXJhY3QuU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0LFxuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgc2NvcGUudXNlUGx1Z2luKEludGVyYWN0YWJsZU1ldGhvZHMpXG5cbiAgLy8gc2V0IGN1cnNvciBzdHlsZSBvbiBtb3VzZWRvd25cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2Rvd24nLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0IH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkgeyByZXR1cm4gfVxuXG4gICAgY29uc3QgYWN0aW9uSW5mbyA9IGdldEFjdGlvbkluZm8oaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgc2NvcGUpXG4gICAgcHJlcGFyZShpbnRlcmFjdGlvbiwgYWN0aW9uSW5mbywgc2NvcGUpXG4gIH0pXG5cbiAgLy8gc2V0IGN1cnNvciBzdHlsZSBvbiBtb3VzZW1vdmVcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ21vdmUnLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0IH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUgIT09ICdtb3VzZScgfHxcbiAgICAgICAgaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biB8fFxuICAgICAgICBpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpKSB7IHJldHVybiB9XG5cbiAgICBjb25zdCBhY3Rpb25JbmZvID0gZ2V0QWN0aW9uSW5mbyhpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBzY29wZSlcbiAgICBwcmVwYXJlKGludGVyYWN0aW9uLCBhY3Rpb25JbmZvLCBzY29wZSlcbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbW92ZScsIGFyZyA9PiB7XG4gICAgY29uc3QgeyBpbnRlcmFjdGlvbiB9ID0gYXJnXG5cbiAgICBpZiAoIWludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24gfHxcbiAgICAgICAgaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSB8fFxuICAgICAgICAhaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkIHx8XG4gICAgICAgICFpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzY29wZS5hdXRvU3RhcnQuc2lnbmFscy5maXJlKCdiZWZvcmUtc3RhcnQnLCBhcmcpXG5cbiAgICBjb25zdCB7IGludGVyYWN0YWJsZSB9ID0gaW50ZXJhY3Rpb25cblxuICAgIGlmIChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICYmIGludGVyYWN0YWJsZSkge1xuICAgICAgLy8gY2hlY2sgbWFudWFsU3RhcnQgYW5kIGludGVyYWN0aW9uIGxpbWl0XG4gICAgICBpZiAoaW50ZXJhY3RhYmxlLm9wdGlvbnNbaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZV0ubWFudWFsU3RhcnQgfHxcbiAgICAgICAgICAhd2l0aGluSW50ZXJhY3Rpb25MaW1pdChpbnRlcmFjdGFibGUsIGludGVyYWN0aW9uLmVsZW1lbnQsIGludGVyYWN0aW9uLnByZXBhcmVkLCBzY29wZSkpIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uc3RvcCgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uc3RhcnQoaW50ZXJhY3Rpb24ucHJlcGFyZWQsIGludGVyYWN0YWJsZSwgaW50ZXJhY3Rpb24uZWxlbWVudClcbiAgICAgICAgc2V0SW50ZXJhY3Rpb25DdXJzb3IoaW50ZXJhY3Rpb24sIHNjb3BlKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignc3RvcCcsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBjb25zdCB7IGludGVyYWN0YWJsZSB9ID0gaW50ZXJhY3Rpb25cblxuICAgIGlmIChpbnRlcmFjdGFibGUgJiYgaW50ZXJhY3RhYmxlLm9wdGlvbnMuc3R5bGVDdXJzb3IpIHtcbiAgICAgIHNldEN1cnNvcihpbnRlcmFjdGlvbi5lbGVtZW50LCAnJywgc2NvcGUpXG4gICAgfVxuICB9KVxuXG4gIGRlZmF1bHRzLmJhc2UuYWN0aW9uQ2hlY2tlciA9IG51bGxcbiAgZGVmYXVsdHMuYmFzZS5zdHlsZUN1cnNvciA9IHRydWVcblxuICB1dGlscy5leHRlbmQoZGVmYXVsdHMucGVyQWN0aW9uLCB7XG4gICAgbWFudWFsU3RhcnQ6IGZhbHNlLFxuICAgIG1heDogSW5maW5pdHksXG4gICAgbWF4UGVyRWxlbWVudDogMSxcbiAgICBhbGxvd0Zyb206ICBudWxsLFxuICAgIGlnbm9yZUZyb206IG51bGwsXG5cbiAgICAvLyBvbmx5IGFsbG93IGxlZnQgYnV0dG9uIGJ5IGRlZmF1bHRcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01vdXNlRXZlbnQvYnV0dG9ucyNSZXR1cm5fdmFsdWVcbiAgICBtb3VzZUJ1dHRvbnM6IDEsXG4gIH0pXG5cbiAgLyoqXG4gICAqIFJldHVybnMgb3Igc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBpbnRlcmFjdGlvbnMgYWxsb3dlZC4gIEJ5XG4gICAqIGRlZmF1bHQgb25seSAxIGludGVyYWN0aW9uIGlzIGFsbG93ZWQgYXQgYSB0aW1lIChmb3IgYmFja3dhcmRzXG4gICAqIGNvbXBhdGliaWxpdHkpLiBUbyBhbGxvdyBtdWx0aXBsZSBpbnRlcmFjdGlvbnMgb24gdGhlIHNhbWUgSW50ZXJhY3RhYmxlcyBhbmRcbiAgICogZWxlbWVudHMsIHlvdSBuZWVkIHRvIGVuYWJsZSBpdCBpbiB0aGUgZHJhZ2dhYmxlLCByZXNpemFibGUgYW5kIGdlc3R1cmFibGVcbiAgICogYCdtYXgnYCBhbmQgYCdtYXhQZXJFbGVtZW50J2Agb3B0aW9ucy5cbiAgICpcbiAgICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5tYXhJbnRlcmFjdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtuZXdWYWx1ZV0gQW55IG51bWJlci4gbmV3VmFsdWUgPD0gMCBtZWFucyBubyBpbnRlcmFjdGlvbnMuXG4gICAqL1xuICBpbnRlcmFjdC5tYXhJbnRlcmFjdGlvbnMgPSBuZXdWYWx1ZSA9PiBtYXhJbnRlcmFjdGlvbnMobmV3VmFsdWUsIHNjb3BlKVxuXG4gIHNjb3BlLmF1dG9TdGFydCA9IHtcbiAgICAvLyBBbGxvdyB0aGlzIG1hbnkgaW50ZXJhY3Rpb25zIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseVxuICAgIG1heEludGVyYWN0aW9uczogSW5maW5pdHksXG4gICAgd2l0aGluSW50ZXJhY3Rpb25MaW1pdCxcbiAgICBjdXJzb3JFbGVtZW50OiBudWxsLFxuICAgIHNpZ25hbHM6IG5ldyB1dGlscy5TaWduYWxzKCksXG4gIH1cbn1cblxuLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgaW50ZXJhY3RhYmxlIHN1cHBvcnRzIHRoZSBhY3Rpb24uXG4vLyBJZiBzbywgcmV0dXJuIHRoZSB2YWxpZGF0ZWQgYWN0aW9uLiBPdGhlcndpc2UsIHJldHVybiBudWxsXG5mdW5jdGlvbiB2YWxpZGF0ZUFjdGlvbiAoXG4gIGFjdGlvbjogSW50ZXJhY3QuQWN0aW9uUHJvcHMsXG4gIGludGVyYWN0YWJsZTogSW50ZXJhY3QuSW50ZXJhY3RhYmxlLFxuICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50LFxuICBldmVudFRhcmdldDogSW50ZXJhY3QuRWxlbWVudCxcbiAgc2NvcGU6IEludGVyYWN0LlNjb3BlLFxuKSB7XG4gIGlmIChpbnRlcmFjdGFibGUudGVzdElnbm9yZUFsbG93KGludGVyYWN0YWJsZS5vcHRpb25zW2FjdGlvbi5uYW1lXSwgZWxlbWVudCwgZXZlbnRUYXJnZXQpICYmXG4gICAgICBpbnRlcmFjdGFibGUub3B0aW9uc1thY3Rpb24ubmFtZV0uZW5hYmxlZCAmJlxuICAgICAgd2l0aGluSW50ZXJhY3Rpb25MaW1pdChpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGFjdGlvbiwgc2NvcGUpKSB7XG4gICAgcmV0dXJuIGFjdGlvblxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVNYXRjaGVzIChcbiAgaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uLFxuICBwb2ludGVyLFxuICBldmVudCxcbiAgbWF0Y2hlczogSW50ZXJhY3QuSW50ZXJhY3RhYmxlW10sXG4gIG1hdGNoRWxlbWVudHM6IEludGVyYWN0LkVsZW1lbnRbXSxcbiAgZXZlbnRUYXJnZXQ6IEludGVyYWN0LkVsZW1lbnQsXG4gIHNjb3BlOiBJbnRlcmFjdC5TY29wZSxcbikge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gbWF0Y2hlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpXVxuICAgIGNvbnN0IG1hdGNoRWxlbWVudCA9IG1hdGNoRWxlbWVudHNbaV1cbiAgICBjb25zdCBtYXRjaEFjdGlvbiA9IG1hdGNoLmdldEFjdGlvbihwb2ludGVyLCBldmVudCwgaW50ZXJhY3Rpb24sIG1hdGNoRWxlbWVudClcblxuICAgIGlmICghbWF0Y2hBY3Rpb24pIHsgY29udGludWUgfVxuXG4gICAgY29uc3QgYWN0aW9uID0gdmFsaWRhdGVBY3Rpb24oXG4gICAgICBtYXRjaEFjdGlvbixcbiAgICAgIG1hdGNoLFxuICAgICAgbWF0Y2hFbGVtZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICBzY29wZSlcblxuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaW50ZXJhY3RhYmxlOiBtYXRjaCxcbiAgICAgICAgZWxlbWVudDogbWF0Y2hFbGVtZW50LFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFjdGlvbjogbnVsbCwgaW50ZXJhY3RhYmxlOiBudWxsLCBlbGVtZW50OiBudWxsIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uSW5mbyAoXG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvbixcbiAgcG9pbnRlcjogSW50ZXJhY3QuUG9pbnRlclR5cGUsXG4gIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlLFxuICBldmVudFRhcmdldDogSW50ZXJhY3QuRWxlbWVudCxcbiAgc2NvcGU6IEludGVyYWN0LlNjb3BlLFxuKSB7XG4gIGxldCBtYXRjaGVzID0gW11cbiAgbGV0IG1hdGNoRWxlbWVudHMgPSBbXVxuXG4gIGxldCBlbGVtZW50ID0gZXZlbnRUYXJnZXRcblxuICBmdW5jdGlvbiBwdXNoTWF0Y2hlcyAoaW50ZXJhY3RhYmxlKSB7XG4gICAgbWF0Y2hlcy5wdXNoKGludGVyYWN0YWJsZSlcbiAgICBtYXRjaEVsZW1lbnRzLnB1c2goZWxlbWVudClcbiAgfVxuXG4gIHdoaWxlICh1dGlscy5pcy5lbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgbWF0Y2hlcyA9IFtdXG4gICAgbWF0Y2hFbGVtZW50cyA9IFtdXG5cbiAgICBzY29wZS5pbnRlcmFjdGFibGVzLmZvckVhY2hNYXRjaChlbGVtZW50LCBwdXNoTWF0Y2hlcylcblxuICAgIGNvbnN0IGFjdGlvbkluZm8gPSB2YWxpZGF0ZU1hdGNoZXMoaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBtYXRjaGVzLCBtYXRjaEVsZW1lbnRzLCBldmVudFRhcmdldCwgc2NvcGUpXG5cbiAgICBpZiAoYWN0aW9uSW5mby5hY3Rpb24gJiZcbiAgICAgICFhY3Rpb25JbmZvLmludGVyYWN0YWJsZS5vcHRpb25zW2FjdGlvbkluZm8uYWN0aW9uLm5hbWVdLm1hbnVhbFN0YXJ0KSB7XG4gICAgICByZXR1cm4gYWN0aW9uSW5mb1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSB1dGlscy5kb20ucGFyZW50Tm9kZShlbGVtZW50KVxuICB9XG5cbiAgcmV0dXJuIHsgYWN0aW9uOiBudWxsLCBpbnRlcmFjdGFibGU6IG51bGwsIGVsZW1lbnQ6IG51bGwgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlIChcbiAgaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uLFxuICB7IGFjdGlvbiwgaW50ZXJhY3RhYmxlLCBlbGVtZW50IH06IHtcbiAgICBhY3Rpb246IEludGVyYWN0LkFjdGlvblByb3BzXG4gICAgaW50ZXJhY3RhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGVcbiAgICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50XG4gIH0sXG4gIHNjb3BlOiBJbnRlcmFjdC5TY29wZSxcbikge1xuICBhY3Rpb24gPSBhY3Rpb24gfHwgeyBuYW1lOiBudWxsIH1cblxuICAvLyBjbGVhciBwcmV2aW91cyB0YXJnZXQgZWxlbWVudCBjdXJzb3JcbiAgaWYgKGludGVyYWN0aW9uLmludGVyYWN0YWJsZSAmJiBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUub3B0aW9ucy5zdHlsZUN1cnNvcikge1xuICAgIHNldEN1cnNvcihpbnRlcmFjdGlvbi5lbGVtZW50LCAnJywgc2NvcGUpXG4gIH1cblxuICBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUgPSBpbnRlcmFjdGFibGVcbiAgaW50ZXJhY3Rpb24uZWxlbWVudCA9IGVsZW1lbnRcbiAgdXRpbHMuY29weUFjdGlvbihpbnRlcmFjdGlvbi5wcmVwYXJlZCwgYWN0aW9uKVxuXG4gIGludGVyYWN0aW9uLnJlY3QgPSBpbnRlcmFjdGFibGUgJiYgYWN0aW9uLm5hbWVcbiAgICA/IGludGVyYWN0YWJsZS5nZXRSZWN0KGVsZW1lbnQpXG4gICAgOiBudWxsXG5cbiAgc2V0SW50ZXJhY3Rpb25DdXJzb3IoaW50ZXJhY3Rpb24sIHNjb3BlKVxuXG4gIHNjb3BlLmF1dG9TdGFydC5zaWduYWxzLmZpcmUoJ3ByZXBhcmVkJywgeyBpbnRlcmFjdGlvbiB9KVxufVxuXG5mdW5jdGlvbiB3aXRoaW5JbnRlcmFjdGlvbkxpbWl0IChpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgZWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCwgYWN0aW9uLCBzY29wZTogSW50ZXJhY3QuU2NvcGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGludGVyYWN0YWJsZS5vcHRpb25zXG4gIGNvbnN0IG1heEFjdGlvbnMgPSBvcHRpb25zW2FjdGlvbi5uYW1lXS5tYXhcbiAgY29uc3QgbWF4UGVyRWxlbWVudCA9IG9wdGlvbnNbYWN0aW9uLm5hbWVdLm1heFBlckVsZW1lbnRcbiAgY29uc3QgYXV0b1N0YXJ0TWF4ID0gc2NvcGUuYXV0b1N0YXJ0Lm1heEludGVyYWN0aW9uc1xuICBsZXQgYWN0aXZlSW50ZXJhY3Rpb25zID0gMFxuICBsZXQgaW50ZXJhY3RhYmxlQ291bnQgPSAwXG4gIGxldCBlbGVtZW50Q291bnQgPSAwXG5cbiAgLy8gbm8gYWN0aW9ucyBpZiBhbnkgb2YgdGhlc2UgdmFsdWVzID09IDBcbiAgaWYgKCEobWF4QWN0aW9ucyAmJiBtYXhQZXJFbGVtZW50ICYmIGF1dG9TdGFydE1heCkpIHsgcmV0dXJuIGZhbHNlIH1cblxuICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgY29uc3Qgb3RoZXJBY3Rpb24gPSBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lXG5cbiAgICBpZiAoIWludGVyYWN0aW9uLmludGVyYWN0aW5nKCkpIHsgY29udGludWUgfVxuXG4gICAgYWN0aXZlSW50ZXJhY3Rpb25zKytcblxuICAgIGlmIChhY3RpdmVJbnRlcmFjdGlvbnMgPj0gYXV0b1N0YXJ0TWF4KSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlICE9PSBpbnRlcmFjdGFibGUpIHsgY29udGludWUgfVxuXG4gICAgaW50ZXJhY3RhYmxlQ291bnQgKz0gb3RoZXJBY3Rpb24gPT09IGFjdGlvbi5uYW1lID8gMSA6IDBcblxuICAgIGlmIChpbnRlcmFjdGFibGVDb3VudCA+PSBtYXhBY3Rpb25zKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJhY3Rpb24uZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgZWxlbWVudENvdW50KytcblxuICAgICAgaWYgKG90aGVyQWN0aW9uID09PSBhY3Rpb24ubmFtZSAmJiBlbGVtZW50Q291bnQgPj0gbWF4UGVyRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXV0b1N0YXJ0TWF4ID4gMFxufVxuXG5mdW5jdGlvbiBtYXhJbnRlcmFjdGlvbnMgKG5ld1ZhbHVlLCBzY29wZTogSW50ZXJhY3QuU2NvcGUpIHtcbiAgaWYgKHV0aWxzLmlzLm51bWJlcihuZXdWYWx1ZSkpIHtcbiAgICBzY29wZS5hdXRvU3RhcnQubWF4SW50ZXJhY3Rpb25zID0gbmV3VmFsdWVcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICByZXR1cm4gc2NvcGUuYXV0b1N0YXJ0Lm1heEludGVyYWN0aW9uc1xufVxuXG5mdW5jdGlvbiBzZXRDdXJzb3IgKGVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQsIGN1cnNvciwgc2NvcGU6IEludGVyYWN0LlNjb3BlKSB7XG4gIGlmIChzY29wZS5hdXRvU3RhcnQuY3Vyc29yRWxlbWVudCkge1xuICAgIHNjb3BlLmF1dG9TdGFydC5jdXJzb3JFbGVtZW50LnN0eWxlLmN1cnNvciA9ICcnXG4gIH1cblxuICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IGN1cnNvclxuICBlbGVtZW50LnN0eWxlLmN1cnNvciA9IGN1cnNvclxuICBzY29wZS5hdXRvU3RhcnQuY3Vyc29yRWxlbWVudCA9IGN1cnNvciA/IGVsZW1lbnQgOiBudWxsXG59XG5cbmZ1bmN0aW9uIHNldEludGVyYWN0aW9uQ3Vyc29yIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24sIHNjb3BlOiBJbnRlcmFjdC5TY29wZSkge1xuICBjb25zdCB7IGludGVyYWN0YWJsZSwgZWxlbWVudCwgcHJlcGFyZWQgfSA9IGludGVyYWN0aW9uXG5cbiAgaWYgKCEoaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUgPT09ICdtb3VzZScgJiYgaW50ZXJhY3RhYmxlICYmIGludGVyYWN0YWJsZS5vcHRpb25zLnN0eWxlQ3Vyc29yKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGN1cnNvciA9ICcnXG5cbiAgaWYgKHByZXBhcmVkLm5hbWUpIHtcbiAgICBjb25zdCBjdXJzb3JDaGVja2VyOiBJbnRlcmFjdC5DdXJzb3JDaGVja2VyID0gaW50ZXJhY3RhYmxlLm9wdGlvbnNbcHJlcGFyZWQubmFtZV0uY3Vyc29yQ2hlY2tlclxuXG4gICAgaWYgKHV0aWxzLmlzLmZ1bmMoY3Vyc29yQ2hlY2tlcikpIHtcbiAgICAgIGN1cnNvciA9IGN1cnNvckNoZWNrZXIocHJlcGFyZWQsIGludGVyYWN0YWJsZSwgZWxlbWVudCwgaW50ZXJhY3Rpb24uX2ludGVyYWN0aW5nKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGN1cnNvciA9IHNjb3BlLmFjdGlvbnNbcHJlcGFyZWQubmFtZV0uZ2V0Q3Vyc29yKHByZXBhcmVkKVxuICAgIH1cbiAgfVxuXG4gIHNldEN1cnNvcihpbnRlcmFjdGlvbi5lbGVtZW50LCBjdXJzb3IgfHwgJycsIHNjb3BlKVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlkOiAnYXV0by1zdGFydC9iYXNlJyxcbiAgaW5zdGFsbCxcbiAgbWF4SW50ZXJhY3Rpb25zLFxuICB3aXRoaW5JbnRlcmFjdGlvbkxpbWl0LFxuICB2YWxpZGF0ZUFjdGlvbixcbn0gYXMgSW50ZXJhY3QuUGx1Z2luXG4iXX0= \ No newline at end of file +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/packages/auto-start/base.js.map b/packages/auto-start/base.js.map new file mode 100644 index 000000000..04e8d3096 --- /dev/null +++ b/packages/auto-start/base.js.map @@ -0,0 +1,107 @@ +{ + "version": 3, + "sources": [ + "base.ts" + ], + "names": [ + "utils", + "InteractableMethods", + "install", + "scope", + "interact", + "defaults", + "usePlugin", + "base", + "actionChecker", + "styleCursor", + "extend", + "perAction", + "manualStart", + "max", + "Infinity", + "maxPerElement", + "allowFrom", + "ignoreFrom", + "mouseButtons", + "maxInteractions", + "newValue", + "autoStart", + "withinInteractionLimit", + "cursorElement", + "prepareOnDown", + "interaction", + "pointer", + "event", + "eventTarget", + "interacting", + "actionInfo", + "getActionInfo", + "prepare", + "prepareOnMove", + "pointerType", + "pointerIsDown", + "startOnMove", + "arg", + "pointerWasMoved", + "prepared", + "name", + "fire", + "interactable", + "options", + "element", + "stop", + "start", + "setInteractionCursor", + "clearCursorOnStop", + "setCursor", + "validateAction", + "action", + "testIgnoreAllow", + "enabled", + "validateMatches", + "matches", + "matchElements", + "i", + "len", + "length", + "match", + "matchElement", + "matchAction", + "getAction", + "pushMatches", + "push", + "is", + "interactables", + "forEachMatch", + "dom", + "parentNode", + "copyAction", + "rect", + "getRect", + "maxActions", + "autoStartMax", + "activeInteractions", + "interactableCount", + "elementCount", + "interactions", + "list", + "otherAction", + "number", + "cursor", + "style", + "ownerDocument", + "documentElement", + "cursorChecker", + "func", + "_interacting", + "actions", + "getCursor", + "id", + "listeners", + "before" + ], + "mappings": "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", + "sourcesContent": [ + "import * as utils from '../utils/index'\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'autoStart:before-start': Interact.SignalArgs['interactions:move']\n 'autoStart:prepared': { interaction: Interact.Interaction }\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Interact.Element\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n interact,\n defaults,\n } = scope\n\n scope.usePlugin(InteractableMethods)\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n }\n}\n\nfunction prepareOnDown ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope) {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Interact.Element, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove (arg: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\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.fire('autoStart:before-start', arg)\n\n const { interactable } = interaction\n\n if (interaction.prepared.name && interactable) {\n // check manualStart and interaction limit\n if (interactable.options[interaction.prepared.name].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n interaction.stop()\n }\n else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n}\n\nfunction clearCursorOnStop ({ interaction }: { interaction: Interact.Interaction }, scope: Interact.Scope) {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: Interact.ActionProps,\n interactable: Interact.Interactable,\n element: Interact.Element,\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interact.Interaction,\n pointer,\n event,\n matches: Interact.Interactable[],\n matchElements: Interact.Element[],\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) { continue }\n\n const action = validateAction(\n matchAction,\n match,\n matchElement,\n eventTarget,\n scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interact.Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n let matches = []\n let matchElements = []\n\n let element = eventTarget\n\n function pushMatches (interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (utils.is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)\n\n if (actionInfo.action &&\n !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = utils.dom.parentNode(element)\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interact.Interaction,\n { action, interactable, element }: {\n action: Interact.ActionProps\n interactable: Interact.Interactable\n element: Interact.Element\n },\n scope: Interact.Scope,\n) {\n action = action || { name: null }\n\n // clear previous target element cursor\n if (interaction.interactable && interaction.interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n\n interaction.interactable = interactable\n interaction.element = element\n utils.copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name\n ? interactable.getRect(element)\n : null\n\n setInteractionCursor(interaction, scope)\n\n scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit (interactable: Interact.Interactable, element: Interact.Element, action, scope: Interact.Scope) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) { continue }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue, scope: Interact.Scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Interact.Element, cursor, scope: Interact.Scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interact.Interaction, scope: Interact.Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker: Interact.CursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (utils.is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n }\n else {\n cursor = scope.actions[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nexport default {\n id: 'auto-start/base',\n install,\n listeners: {\n 'interactions:down': prepareOnDown,\n 'interactions:move': (arg, scope) => {\n prepareOnMove(arg, scope)\n startOnMove(arg, scope)\n },\n 'interactions:stop': clearCursorOnStop,\n },\n before: 'ations',\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n} as Interact.Plugin\n" + ] +} \ No newline at end of file diff --git a/packages/auto-start/dragAxis.d.ts b/packages/auto-start/dragAxis.d.ts index 78137f576..c1e110d33 100644 --- a/packages/auto-start/dragAxis.d.ts +++ b/packages/auto-start/dragAxis.d.ts @@ -1,7 +1,8 @@ -declare type Scope = import('@interactjs/core/scope').Scope; -declare function install(scope: Scope): void; +declare function beforeStart({ interaction, eventTarget, dx, dy }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope): void; declare const _default: { id: string; - install: typeof install; + listeners: { + 'autoStart:before-start': typeof beforeStart; + }; }; export default _default; diff --git a/packages/auto-start/dragAxis.js b/packages/auto-start/dragAxis.js index 21859597f..6a11b9977 100644 --- a/packages/auto-start/dragAxis.js +++ b/packages/auto-start/dragAxis.js @@ -1,66 +1,78 @@ -import { ActionName } from '@interactjs/core/scope'; -import { parentNode } from '@interactjs/utils/domUtils'; -import * as is from '@interactjs/utils/is'; -import autoStart from './base'; -function install(scope) { - scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => { - if (interaction.prepared.name !== 'drag') { - return; +import { ActionName } from "../core/scope.js"; +import { parentNode } from "../utils/domUtils.js"; +import * as is from "../utils/is.js"; +import autoStart from "./base.js"; + +function beforeStart({ + interaction, + eventTarget, + dx, + dy +}, scope) { + if (interaction.prepared.name !== 'drag') { + return; + } // check if a drag is in the correct axis + + + const absX = Math.abs(dx); + const absY = Math.abs(dy); + const targetOptions = interaction.interactable.options.drag; + const startAxis = targetOptions.startAxis; + const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'; + interaction.prepared.axis = targetOptions.lockAxis === 'start' ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy' + : targetOptions.lockAxis; // if the movement isn't in the startAxis of the interactable + + if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) { + // cancel the prepared action + interaction.prepared.name = null; // then try to get a drag from another ineractable + + let element = eventTarget; + + const getDraggable = function (interactable) { + if (interactable === interaction.interactable) { + return; + } + + const options = interaction.interactable.options.drag; + + if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) { + const action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element); + + if (action && action.name === ActionName.Drag && checkStartAxis(currentAxis, interactable) && autoStart.validateAction(action, interactable, element, eventTarget, scope)) { + return interactable; } - // check if a drag is in the correct axis - const absX = Math.abs(dx); - const absY = Math.abs(dy); - const targetOptions = interaction.interactable.options.drag; - const startAxis = targetOptions.startAxis; - const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy'); - interaction.prepared.axis = targetOptions.lockAxis === 'start' - ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy' - : targetOptions.lockAxis; - // if the movement isn't in the startAxis of the interactable - if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) { - // cancel the prepared action - interaction.prepared.name = null; - // then try to get a drag from another ineractable - let element = eventTarget; - const getDraggable = function (interactable) { - if (interactable === interaction.interactable) { - return; - } - const options = interaction.interactable.options.drag; - if (!options.manualStart && - interactable.testIgnoreAllow(options, element, eventTarget)) { - const action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element); - if (action && - action.name === ActionName.Drag && - checkStartAxis(currentAxis, interactable) && - autoStart.validateAction(action, interactable, element, eventTarget, scope)) { - return interactable; - } - } - }; - // check all interactables - while (is.element(element)) { - const interactable = scope.interactables.forEachMatch(element, getDraggable); - if (interactable) { - interaction.prepared.name = ActionName.Drag; - interaction.interactable = interactable; - interaction.element = element; - break; - } - element = parentNode(element); - } - } - }); - function checkStartAxis(startAxis, interactable) { - if (!interactable) { - return false; - } - const thisAxis = interactable.options[ActionName.Drag].startAxis; - return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis); + } + }; // check all interactables + + + while (is.element(element)) { + const interactable = scope.interactables.forEachMatch(element, getDraggable); + + if (interactable) { + interaction.prepared.name = ActionName.Drag; + interaction.interactable = interactable; + interaction.element = element; + break; + } + + element = parentNode(element); } + } +} + +function checkStartAxis(startAxis, interactable) { + if (!interactable) { + return false; + } + + const thisAxis = interactable.options[ActionName.Drag].startAxis; + return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis; } + export default { - id: 'auto-start/dragAxis', - install, + id: 'auto-start/dragAxis', + listeners: { + 'autoStart:before-start': beforeStart + } }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ0F4aXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkcmFnQXhpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxTQUFTLE1BQU0sUUFBUSxDQUFBO0FBSTlCLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNuRixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUFFLE9BQU07U0FBRTtRQUVwRCx5Q0FBeUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUMzRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFBO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWxFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEtBQUssT0FBTztZQUM1RCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBZSxDQUFDLHVEQUF1RDtZQUN0RixDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQTtRQUUxQiw2REFBNkQ7UUFDN0QsSUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUMzRSw2QkFBNkI7WUFDN0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBRWhDLGtEQUFrRDtZQUNsRCxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUE7WUFFekIsTUFBTSxZQUFZLEdBQUcsVUFBVSxZQUFZO2dCQUN6QyxJQUFJLFlBQVksS0FBSyxXQUFXLENBQUMsWUFBWSxFQUFFO29CQUFFLE9BQU07aUJBQUU7Z0JBRXpELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtnQkFFckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO29CQUNwQixZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUU7b0JBQy9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQ25DLFdBQVcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7b0JBRXZFLElBQUksTUFBTTt3QkFDTixNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJO3dCQUMvQixjQUFjLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQzt3QkFDekMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQy9FLE9BQU8sWUFBWSxDQUFBO3FCQUNwQjtpQkFDRjtZQUNILENBQUMsQ0FBQTtZQUVELDBCQUEwQjtZQUMxQixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQTtnQkFFNUUsSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUE7b0JBQzNDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO29CQUN2QyxXQUFXLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtvQkFDN0IsTUFBSztpQkFDTjtnQkFFRCxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLFNBQVMsY0FBYyxDQUFFLFNBQVMsRUFBRSxZQUFZO1FBQzlDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQTtTQUFFO1FBRW5DLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUVoRSxPQUFPLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0FBQ0gsQ0FBQztBQUVELGVBQWU7SUFDYixFQUFFLEVBQUUscUJBQXFCO0lBQ3pCLE9BQU87Q0FDUixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uTmFtZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvc2NvcGUnXG5pbXBvcnQgeyBwYXJlbnROb2RlIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tVXRpbHMnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcbmltcG9ydCBhdXRvU3RhcnQgZnJvbSAnLi9iYXNlJ1xuXG50eXBlIFNjb3BlID0gaW1wb3J0ICgnQGludGVyYWN0anMvY29yZS9zY29wZScpLlNjb3BlXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBzY29wZS5hdXRvU3RhcnQuc2lnbmFscy5vbignYmVmb3JlLXN0YXJ0JywgICh7IGludGVyYWN0aW9uLCBldmVudFRhcmdldCwgZHgsIGR5IH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSAhPT0gJ2RyYWcnKSB7IHJldHVybiB9XG5cbiAgICAvLyBjaGVjayBpZiBhIGRyYWcgaXMgaW4gdGhlIGNvcnJlY3QgYXhpc1xuICAgIGNvbnN0IGFic1ggPSBNYXRoLmFicyhkeClcbiAgICBjb25zdCBhYnNZID0gTWF0aC5hYnMoZHkpXG4gICAgY29uc3QgdGFyZ2V0T3B0aW9ucyA9IGludGVyYWN0aW9uLmludGVyYWN0YWJsZS5vcHRpb25zLmRyYWdcbiAgICBjb25zdCBzdGFydEF4aXMgPSB0YXJnZXRPcHRpb25zLnN0YXJ0QXhpc1xuICAgIGNvbnN0IGN1cnJlbnRBeGlzID0gKGFic1ggPiBhYnNZID8gJ3gnIDogYWJzWCA8IGFic1kgPyAneScgOiAneHknKVxuXG4gICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuYXhpcyA9IHRhcmdldE9wdGlvbnMubG9ja0F4aXMgPT09ICdzdGFydCdcbiAgICAgID8gY3VycmVudEF4aXNbMF0gIGFzICd4JyB8ICd5JyAvLyBhbHdheXMgbG9jayB0byBvbmUgYXhpcyBldmVuIGlmIGN1cnJlbnRBeGlzID09PSAneHknXG4gICAgICA6IHRhcmdldE9wdGlvbnMubG9ja0F4aXNcblxuICAgIC8vIGlmIHRoZSBtb3ZlbWVudCBpc24ndCBpbiB0aGUgc3RhcnRBeGlzIG9mIHRoZSBpbnRlcmFjdGFibGVcbiAgICBpZiAoY3VycmVudEF4aXMgIT09ICd4eScgJiYgc3RhcnRBeGlzICE9PSAneHknICYmIHN0YXJ0QXhpcyAhPT0gY3VycmVudEF4aXMpIHtcbiAgICAgIC8vIGNhbmNlbCB0aGUgcHJlcGFyZWQgYWN0aW9uXG4gICAgICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lID0gbnVsbFxuXG4gICAgICAvLyB0aGVuIHRyeSB0byBnZXQgYSBkcmFnIGZyb20gYW5vdGhlciBpbmVyYWN0YWJsZVxuICAgICAgbGV0IGVsZW1lbnQgPSBldmVudFRhcmdldFxuXG4gICAgICBjb25zdCBnZXREcmFnZ2FibGUgPSBmdW5jdGlvbiAoaW50ZXJhY3RhYmxlKSB7XG4gICAgICAgIGlmIChpbnRlcmFjdGFibGUgPT09IGludGVyYWN0aW9uLmludGVyYWN0YWJsZSkgeyByZXR1cm4gfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUub3B0aW9ucy5kcmFnXG5cbiAgICAgICAgaWYgKCFvcHRpb25zLm1hbnVhbFN0YXJ0ICYmXG4gICAgICAgICAgICBpbnRlcmFjdGFibGUudGVzdElnbm9yZUFsbG93KG9wdGlvbnMsIGVsZW1lbnQsIGV2ZW50VGFyZ2V0KSkge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGludGVyYWN0YWJsZS5nZXRBY3Rpb24oXG4gICAgICAgICAgICBpbnRlcmFjdGlvbi5kb3duUG9pbnRlciwgaW50ZXJhY3Rpb24uZG93bkV2ZW50LCBpbnRlcmFjdGlvbiwgZWxlbWVudClcblxuICAgICAgICAgIGlmIChhY3Rpb24gJiZcbiAgICAgICAgICAgICAgYWN0aW9uLm5hbWUgPT09IEFjdGlvbk5hbWUuRHJhZyAmJlxuICAgICAgICAgICAgICBjaGVja1N0YXJ0QXhpcyhjdXJyZW50QXhpcywgaW50ZXJhY3RhYmxlKSAmJlxuICAgICAgICAgICAgICBhdXRvU3RhcnQudmFsaWRhdGVBY3Rpb24oYWN0aW9uLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQsIGV2ZW50VGFyZ2V0LCBzY29wZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGFibGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgYWxsIGludGVyYWN0YWJsZXNcbiAgICAgIHdoaWxlIChpcy5lbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMuZm9yRWFjaE1hdGNoKGVsZW1lbnQsIGdldERyYWdnYWJsZSlcblxuICAgICAgICBpZiAoaW50ZXJhY3RhYmxlKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSA9IEFjdGlvbk5hbWUuRHJhZ1xuICAgICAgICAgIGludGVyYWN0aW9uLmludGVyYWN0YWJsZSA9IGludGVyYWN0YWJsZVxuICAgICAgICAgIGludGVyYWN0aW9uLmVsZW1lbnQgPSBlbGVtZW50XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQgPSBwYXJlbnROb2RlKGVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGZ1bmN0aW9uIGNoZWNrU3RhcnRBeGlzIChzdGFydEF4aXMsIGludGVyYWN0YWJsZSkge1xuICAgIGlmICghaW50ZXJhY3RhYmxlKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgICBjb25zdCB0aGlzQXhpcyA9IGludGVyYWN0YWJsZS5vcHRpb25zW0FjdGlvbk5hbWUuRHJhZ10uc3RhcnRBeGlzXG5cbiAgICByZXR1cm4gKHN0YXJ0QXhpcyA9PT0gJ3h5JyB8fCB0aGlzQXhpcyA9PT0gJ3h5JyB8fCB0aGlzQXhpcyA9PT0gc3RhcnRBeGlzKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaWQ6ICdhdXRvLXN0YXJ0L2RyYWdBeGlzJyxcbiAgaW5zdGFsbCxcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=dragAxis.js.map \ No newline at end of file diff --git a/packages/auto-start/dragAxis.js.map b/packages/auto-start/dragAxis.js.map new file mode 100644 index 000000000..ae0c52797 --- /dev/null +++ b/packages/auto-start/dragAxis.js.map @@ -0,0 +1,52 @@ +{ + "version": 3, + "sources": [ + "dragAxis.ts" + ], + "names": [ + "ActionName", + "parentNode", + "is", + "autoStart", + "beforeStart", + "interaction", + "eventTarget", + "dx", + "dy", + "scope", + "prepared", + "name", + "absX", + "Math", + "abs", + "absY", + "targetOptions", + "interactable", + "options", + "drag", + "startAxis", + "currentAxis", + "axis", + "lockAxis", + "element", + "getDraggable", + "manualStart", + "testIgnoreAllow", + "action", + "getAction", + "downPointer", + "downEvent", + "Drag", + "checkStartAxis", + "validateAction", + "interactables", + "forEachMatch", + "thisAxis", + "id", + "listeners" + ], + "mappings": "AAAA,SAASA,UAAT;AACA,SAASC,UAAT;AACA,OAAO,KAAKC,EAAZ;AACA,OAAOC,SAAP;;AAEA,SAASC,WAAT,CAAsB;AAAEC,EAAAA,WAAF;AAAeC,EAAAA,WAAf;AAA4BC,EAAAA,EAA5B;AAAgCC,EAAAA;AAAhC,CAAtB,EAAsGC,KAAtG,EAA6H;AAC3H,MAAIJ,WAAW,CAACK,QAAZ,CAAqBC,IAArB,KAA8B,MAAlC,EAA0C;AAAE;AAAQ,GADuE,CAG3H;;;AACA,QAAMC,IAAI,GAAGC,IAAI,CAACC,GAAL,CAASP,EAAT,CAAb;AACA,QAAMQ,IAAI,GAAGF,IAAI,CAACC,GAAL,CAASN,EAAT,CAAb;AACA,QAAMQ,aAAa,GAAGX,WAAW,CAACY,YAAZ,CAAyBC,OAAzB,CAAiCC,IAAvD;AACA,QAAMC,SAAS,GAAGJ,aAAa,CAACI,SAAhC;AACA,QAAMC,WAAW,GAAIT,IAAI,GAAGG,IAAP,GAAc,GAAd,GAAoBH,IAAI,GAAGG,IAAP,GAAc,GAAd,GAAoB,IAA7D;AAEAV,EAAAA,WAAW,CAACK,QAAZ,CAAqBY,IAArB,GAA4BN,aAAa,CAACO,QAAd,KAA2B,OAA3B,GACxBF,WAAW,CAAC,CAAD,CADa,CACK;AADL,IAExBL,aAAa,CAACO,QAFlB,CAV2H,CAc3H;;AACA,MAAIF,WAAW,KAAK,IAAhB,IAAwBD,SAAS,KAAK,IAAtC,IAA8CA,SAAS,KAAKC,WAAhE,EAA6E;AAC3E;AACAhB,IAAAA,WAAW,CAACK,QAAZ,CAAqBC,IAArB,GAA4B,IAA5B,CAF2E,CAI3E;;AACA,QAAIa,OAAO,GAAGlB,WAAd;;AAEA,UAAMmB,YAAY,GAAG,UAAUR,YAAV,EAAwB;AAC3C,UAAIA,YAAY,KAAKZ,WAAW,CAACY,YAAjC,EAA+C;AAAE;AAAQ;;AAEzD,YAAMC,OAAO,GAAGb,WAAW,CAACY,YAAZ,CAAyBC,OAAzB,CAAiCC,IAAjD;;AAEA,UAAI,CAACD,OAAO,CAACQ,WAAT,IACAT,YAAY,CAACU,eAAb,CAA6BT,OAA7B,EAAsCM,OAAtC,EAA+ClB,WAA/C,CADJ,EACiE;AAC/D,cAAMsB,MAAM,GAAGX,YAAY,CAACY,SAAb,CACbxB,WAAW,CAACyB,WADC,EACYzB,WAAW,CAAC0B,SADxB,EACmC1B,WADnC,EACgDmB,OADhD,CAAf;;AAGA,YAAII,MAAM,IACNA,MAAM,CAACjB,IAAP,KAAgBX,UAAU,CAACgC,IAD3B,IAEAC,cAAc,CAACZ,WAAD,EAAcJ,YAAd,CAFd,IAGAd,SAAS,CAAC+B,cAAV,CAAyBN,MAAzB,EAAiCX,YAAjC,EAA+CO,OAA/C,EAAwDlB,WAAxD,EAAqEG,KAArE,CAHJ,EAGiF;AAC/E,iBAAOQ,YAAP;AACD;AACF;AACF,KAjBD,CAP2E,CA0B3E;;;AACA,WAAOf,EAAE,CAACsB,OAAH,CAAWA,OAAX,CAAP,EAA4B;AAC1B,YAAMP,YAAY,GAAGR,KAAK,CAAC0B,aAAN,CAAoBC,YAApB,CAAiCZ,OAAjC,EAA0CC,YAA1C,CAArB;;AAEA,UAAIR,YAAJ,EAAkB;AAChBZ,QAAAA,WAAW,CAACK,QAAZ,CAAqBC,IAArB,GAA4BX,UAAU,CAACgC,IAAvC;AACA3B,QAAAA,WAAW,CAACY,YAAZ,GAA2BA,YAA3B;AACAZ,QAAAA,WAAW,CAACmB,OAAZ,GAAsBA,OAAtB;AACA;AACD;;AAEDA,MAAAA,OAAO,GAAGvB,UAAU,CAACuB,OAAD,CAApB;AACD;AACF;AACF;;AAED,SAASS,cAAT,CAAyBb,SAAzB,EAAoCH,YAApC,EAAkD;AAChD,MAAI,CAACA,YAAL,EAAmB;AAAE,WAAO,KAAP;AAAc;;AAEnC,QAAMoB,QAAQ,GAAGpB,YAAY,CAACC,OAAb,CAAqBlB,UAAU,CAACgC,IAAhC,EAAsCZ,SAAvD;AAEA,SAAQA,SAAS,KAAK,IAAd,IAAsBiB,QAAQ,KAAK,IAAnC,IAA2CA,QAAQ,KAAKjB,SAAhE;AACD;;AAED,eAAe;AACbkB,EAAAA,EAAE,EAAE,qBADS;AAEbC,EAAAA,SAAS,EAAE;AAAE,8BAA0BnC;AAA5B;AAFE,CAAf", + "sourcesContent": [ + "import { ActionName } from '../core/scope'\nimport { parentNode } from '../utils/domUtils'\nimport * as is from '../utils/is'\nimport autoStart from './base'\n\nfunction beforeStart ({ interaction, eventTarget, dx, dy }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy')\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.interactable) { return }\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === ActionName.Drag &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element)\n }\n }\n}\n\nfunction checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false }\n\n const thisAxis = interactable.options[ActionName.Drag].startAxis\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis)\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n" + ] +} \ No newline at end of file diff --git a/packages/auto-start/hold.d.ts b/packages/auto-start/hold.d.ts index 769406419..e26f11644 100644 --- a/packages/auto-start/hold.d.ts +++ b/packages/auto-start/hold.d.ts @@ -14,6 +14,21 @@ declare function getHoldDuration(interaction: any): any; declare const _default: { id: string; install: typeof install; + listeners: { + 'interactions:new': ({ interaction }: { + interaction: any; + }) => void; + 'autoStart:prepared': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:move': ({ interaction, duplicate }: { + interaction: any; + duplicate: any; + }) => void; + 'autoStart:before-start': ({ interaction }: { + interaction: any; + }) => void; + }; getHoldDuration: typeof getHoldDuration; }; export default _default; diff --git a/packages/auto-start/hold.js b/packages/auto-start/hold.js index 500684906..fad84d2c3 100644 --- a/packages/auto-start/hold.js +++ b/packages/auto-start/hold.js @@ -1,44 +1,64 @@ -import basePlugin from './base'; +import basePlugin from "./base.js"; + function install(scope) { - const { autoStart, interactions, defaults, } = scope; - scope.usePlugin(basePlugin); - defaults.perAction.hold = 0; - defaults.perAction.delay = 0; - interactions.signals.on('new', interaction => { - interaction.autoStartHoldTimer = null; - }); - autoStart.signals.on('prepared', ({ interaction }) => { - const hold = getHoldDuration(interaction); - if (hold > 0) { - interaction.autoStartHoldTimer = setTimeout(() => { - interaction.start(interaction.prepared, interaction.interactable, interaction.element); - }, hold); - } - }); - interactions.signals.on('move', ({ interaction, duplicate }) => { - if (interaction.pointerWasMoved && !duplicate) { - clearTimeout(interaction.autoStartHoldTimer); - } - }); - // prevent regular down->move autoStart - autoStart.signals.on('before-start', ({ interaction }) => { - const hold = getHoldDuration(interaction); - if (hold > 0) { - interaction.prepared.name = null; - } - }); + const { + defaults + } = scope; + scope.usePlugin(basePlugin); + defaults.perAction.hold = 0; + defaults.perAction.delay = 0; } + function getHoldDuration(interaction) { - const actionName = interaction.prepared && interaction.prepared.name; - if (!actionName) { - return null; - } - const options = interaction.interactable.options; - return options[actionName].hold || options[actionName].delay; + const actionName = interaction.prepared && interaction.prepared.name; + + if (!actionName) { + return null; + } + + const options = interaction.interactable.options; + return options[actionName].hold || options[actionName].delay; } + export default { - id: 'auto-start/hold', - install, - getHoldDuration, + id: 'auto-start/hold', + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.autoStartHoldTimer = null; + }, + 'autoStart:prepared': ({ + interaction + }) => { + const hold = getHoldDuration(interaction); + + if (hold > 0) { + interaction.autoStartHoldTimer = setTimeout(() => { + interaction.start(interaction.prepared, interaction.interactable, interaction.element); + }, hold); + } + }, + 'interactions:move': ({ + interaction, + duplicate + }) => { + if (interaction.pointerWasMoved && !duplicate) { + clearTimeout(interaction.autoStartHoldTimer); + } + }, + // prevent regular down->move autoStart + 'autoStart:before-start': ({ + interaction + }) => { + const hold = getHoldDuration(interaction); + + if (hold > 0) { + interaction.prepared.name = null; + } + } + }, + getHoldDuration }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxVQUFVLE1BQU0sUUFBUSxDQUFBO0FBZS9CLFNBQVMsT0FBTyxDQUFFLEtBQXFCO0lBQ3JDLE1BQU0sRUFDSixTQUFTLEVBQ1QsWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFM0IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUU1QixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDM0MsV0FBVyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtJQUN2QyxDQUFDLENBQUMsQ0FBQTtJQUVGLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNuRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFekMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ1osV0FBVyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9DLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN4RixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDVDtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtRQUM3RCxJQUFJLFdBQVcsQ0FBQyxlQUFlLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0MsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1NBQzdDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRix1Q0FBdUM7SUFDdkMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV6QyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDWixXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7U0FDakM7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBRSxXQUFXO0lBQ25DLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7SUFFcEUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFBO0tBQUU7SUFFaEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUE7SUFFaEQsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDOUQsQ0FBQztBQUVELGVBQWU7SUFDYixFQUFFLEVBQUUsaUJBQWlCO0lBQ3JCLE9BQU87SUFDUCxlQUFlO0NBQ2hCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVBsdWdpbiBmcm9tICcuL2Jhc2UnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBQZXJBY3Rpb25EZWZhdWx0cyB7XG4gICAgaG9sZD86IG51bWJlclxuICAgIGRlbGF5PzogbnVtYmVyXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICBhdXRvU3RhcnRIb2xkVGltZXI/OiBhbnlcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogSW50ZXJhY3QuU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGF1dG9TdGFydCxcbiAgICBpbnRlcmFjdGlvbnMsXG4gICAgZGVmYXVsdHMsXG4gIH0gPSBzY29wZVxuXG4gIHNjb3BlLnVzZVBsdWdpbihiYXNlUGx1Z2luKVxuXG4gIGRlZmF1bHRzLnBlckFjdGlvbi5ob2xkID0gMFxuICBkZWZhdWx0cy5wZXJBY3Rpb24uZGVsYXkgPSAwXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ25ldycsIGludGVyYWN0aW9uID0+IHtcbiAgICBpbnRlcmFjdGlvbi5hdXRvU3RhcnRIb2xkVGltZXIgPSBudWxsXG4gIH0pXG5cbiAgYXV0b1N0YXJ0LnNpZ25hbHMub24oJ3ByZXBhcmVkJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGNvbnN0IGhvbGQgPSBnZXRIb2xkRHVyYXRpb24oaW50ZXJhY3Rpb24pXG5cbiAgICBpZiAoaG9sZCA+IDApIHtcbiAgICAgIGludGVyYWN0aW9uLmF1dG9TdGFydEhvbGRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpbnRlcmFjdGlvbi5zdGFydChpbnRlcmFjdGlvbi5wcmVwYXJlZCwgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLCBpbnRlcmFjdGlvbi5lbGVtZW50KVxuICAgICAgfSwgaG9sZClcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ21vdmUnLCAoeyBpbnRlcmFjdGlvbiwgZHVwbGljYXRlIH0pID0+IHtcbiAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkICYmICFkdXBsaWNhdGUpIHtcbiAgICAgIGNsZWFyVGltZW91dChpbnRlcmFjdGlvbi5hdXRvU3RhcnRIb2xkVGltZXIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHByZXZlbnQgcmVndWxhciBkb3duLT5tb3ZlIGF1dG9TdGFydFxuICBhdXRvU3RhcnQuc2lnbmFscy5vbignYmVmb3JlLXN0YXJ0JywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGNvbnN0IGhvbGQgPSBnZXRIb2xkRHVyYXRpb24oaW50ZXJhY3Rpb24pXG5cbiAgICBpZiAoaG9sZCA+IDApIHtcbiAgICAgIGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgPSBudWxsXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRIb2xkRHVyYXRpb24gKGludGVyYWN0aW9uKSB7XG4gIGNvbnN0IGFjdGlvbk5hbWUgPSBpbnRlcmFjdGlvbi5wcmVwYXJlZCAmJiBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lXG5cbiAgaWYgKCFhY3Rpb25OYW1lKSB7IHJldHVybiBudWxsIH1cblxuICBjb25zdCBvcHRpb25zID0gaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLm9wdGlvbnNcblxuICByZXR1cm4gb3B0aW9uc1thY3Rpb25OYW1lXS5ob2xkIHx8IG9wdGlvbnNbYWN0aW9uTmFtZV0uZGVsYXlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpZDogJ2F1dG8tc3RhcnQvaG9sZCcsXG4gIGluc3RhbGwsXG4gIGdldEhvbGREdXJhdGlvbixcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=hold.js.map \ No newline at end of file diff --git a/packages/auto-start/hold.js.map b/packages/auto-start/hold.js.map new file mode 100644 index 000000000..3c823fa3b --- /dev/null +++ b/packages/auto-start/hold.js.map @@ -0,0 +1,36 @@ +{ + "version": 3, + "sources": [ + "hold.ts" + ], + "names": [ + "basePlugin", + "install", + "scope", + "defaults", + "usePlugin", + "perAction", + "hold", + "delay", + "getHoldDuration", + "interaction", + "actionName", + "prepared", + "name", + "options", + "interactable", + "id", + "listeners", + "autoStartHoldTimer", + "setTimeout", + "start", + "element", + "duplicate", + "pointerWasMoved", + "clearTimeout" + ], + "mappings": "AAAA,OAAOA,UAAP;;AAeA,SAASC,OAAT,CAAkBC,KAAlB,EAAyC;AACvC,QAAM;AACJC,IAAAA;AADI,MAEFD,KAFJ;AAIAA,EAAAA,KAAK,CAACE,SAAN,CAAgBJ,UAAhB;AAEAG,EAAAA,QAAQ,CAACE,SAAT,CAAmBC,IAAnB,GAA0B,CAA1B;AACAH,EAAAA,QAAQ,CAACE,SAAT,CAAmBE,KAAnB,GAA2B,CAA3B;AACD;;AAED,SAASC,eAAT,CAA0BC,WAA1B,EAAuC;AACrC,QAAMC,UAAU,GAAGD,WAAW,CAACE,QAAZ,IAAwBF,WAAW,CAACE,QAAZ,CAAqBC,IAAhE;;AAEA,MAAI,CAACF,UAAL,EAAiB;AAAE,WAAO,IAAP;AAAa;;AAEhC,QAAMG,OAAO,GAAGJ,WAAW,CAACK,YAAZ,CAAyBD,OAAzC;AAEA,SAAOA,OAAO,CAACH,UAAD,CAAP,CAAoBJ,IAApB,IAA4BO,OAAO,CAACH,UAAD,CAAP,CAAoBH,KAAvD;AACD;;AAED,eAAe;AACbQ,EAAAA,EAAE,EAAE,iBADS;AAEbd,EAAAA,OAFa;AAGbe,EAAAA,SAAS,EAAE;AACT,wBAAoB,CAAC;AAAEP,MAAAA;AAAF,KAAD,KAAqB;AACvCA,MAAAA,WAAW,CAACQ,kBAAZ,GAAiC,IAAjC;AACD,KAHQ;AAKT,0BAAsB,CAAC;AAAER,MAAAA;AAAF,KAAD,KAAqB;AACzC,YAAMH,IAAI,GAAGE,eAAe,CAACC,WAAD,CAA5B;;AAEA,UAAIH,IAAI,GAAG,CAAX,EAAc;AACZG,QAAAA,WAAW,CAACQ,kBAAZ,GAAiCC,UAAU,CAAC,MAAM;AAChDT,UAAAA,WAAW,CAACU,KAAZ,CAAkBV,WAAW,CAACE,QAA9B,EAAwCF,WAAW,CAACK,YAApD,EAAkEL,WAAW,CAACW,OAA9E;AACD,SAF0C,EAExCd,IAFwC,CAA3C;AAGD;AACF,KAbQ;AAeT,yBAAqB,CAAC;AAAEG,MAAAA,WAAF;AAAeY,MAAAA;AAAf,KAAD,KAAgC;AACnD,UAAIZ,WAAW,CAACa,eAAZ,IAA+B,CAACD,SAApC,EAA+C;AAC7CE,QAAAA,YAAY,CAACd,WAAW,CAACQ,kBAAb,CAAZ;AACD;AACF,KAnBQ;AAqBT;AACA,8BAA0B,CAAC;AAAER,MAAAA;AAAF,KAAD,KAAqB;AAC7C,YAAMH,IAAI,GAAGE,eAAe,CAACC,WAAD,CAA5B;;AAEA,UAAIH,IAAI,GAAG,CAAX,EAAc;AACZG,QAAAA,WAAW,CAACE,QAAZ,CAAqBC,IAArB,GAA4B,IAA5B;AACD;AACF;AA5BQ,GAHE;AAiCbJ,EAAAA;AAjCa,CAAf", + "sourcesContent": [ + "import basePlugin from './base'\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n defaults,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nexport default {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/auto-start/hold.spec.js b/packages/auto-start/hold.spec.js deleted file mode 100644 index 31178b31b..000000000 --- a/packages/auto-start/hold.spec.js +++ /dev/null @@ -1,33 +0,0 @@ -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; - scope.usePlugin(autoStart); - scope.usePlugin(autoStartHold); - 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 = { - interactable: { options: { [actionName]: { hold: holdDuration } } }, - prepared: { name: actionName }, - }; - t.equal(autoStartHold.getHoldDuration(interaction), holdDuration, 'gets holdDuration'); - const delayDuration = 500; - interaction.interactable.options[actionName].delay = delayDuration; - delete interaction.interactable.options[actionName].hold; - t.equal(autoStartHold.getHoldDuration(interaction), delayDuration, 'gets holdDuration from "delay" value'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9sZC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxJQUFJLE1BQU0sUUFBUSxDQUFBO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFFbkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDOUIsU0FBUyxFQUFFO1lBQ1QsUUFBUSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxFQUFFO2FBQ2Q7WUFDRCxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7U0FDdkI7S0FDRixDQUFDLENBQUE7SUFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUE7SUFDMUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRTlCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFBO0lBQy9FLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFBO0lBRWpGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQTtJQUN6QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUE7SUFDaEMsTUFBTSxXQUFXLEdBQVE7UUFDdkIsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO1FBQ25FLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7S0FDL0IsQ0FBQTtJQUVELENBQUMsQ0FBQyxLQUFLLENBQ0wsYUFBYSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFDMUMsWUFBWSxFQUNaLG1CQUFtQixDQUFDLENBQUE7SUFFdEIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFBO0lBRXpCLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUE7SUFDbEUsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFFeEQsQ0FBQyxDQUFDLEtBQUssQ0FDTCxhQUFhLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUMxQyxhQUFhLEVBQ2Isc0NBQXNDLENBQUMsQ0FBQTtJQUV6QyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCBob2xkIGZyb20gJy4vaG9sZCdcbmltcG9ydCB7IGF1dG9TdGFydCB9IGZyb20gJy4vaW5kZXgnXG5cbnRlc3QoJ2F1dG9TdGFydC9ob2xkJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoe1xuICAgIGF1dG9TdGFydDoge1xuICAgICAgZGVmYXVsdHM6IHtcbiAgICAgICAgcGVyQWN0aW9uOiB7fSxcbiAgICAgIH0sXG4gICAgICBzaWduYWxzOiBuZXcgU2lnbmFscygpLFxuICAgIH0sXG4gIH0pXG4gIGNvbnN0IGF1dG9TdGFydEhvbGQgPSBob2xkXG4gIHNjb3BlLnVzZVBsdWdpbihhdXRvU3RhcnQpXG4gIHNjb3BlLnVzZVBsdWdpbihhdXRvU3RhcnRIb2xkKVxuXG4gIHQuZXF1YWwoc2NvcGUuZGVmYXVsdHMucGVyQWN0aW9uLmhvbGQsIDAsICdzZXRzIHNjb3BlLmRlZmF1bHRzLnBlckFjdGlvbi5ob2xkJylcbiAgdC5lcXVhbChzY29wZS5kZWZhdWx0cy5wZXJBY3Rpb24uZGVsYXksIDAsICdiYWNrd2FyZHMgY29tcGF0aWJsZSBcImRlbGF5XCIgYWxpYXMuJylcblxuICBjb25zdCBob2xkRHVyYXRpb24gPSAxMDAwXG4gIGNvbnN0IGFjdGlvbk5hbWUgPSAnVEVTVF9BQ1RJT04nXG4gIGNvbnN0IGludGVyYWN0aW9uOiBhbnkgPSB7XG4gICAgaW50ZXJhY3RhYmxlOiB7IG9wdGlvbnM6IHsgW2FjdGlvbk5hbWVdOiB7IGhvbGQ6IGhvbGREdXJhdGlvbiB9IH0gfSxcbiAgICBwcmVwYXJlZDogeyBuYW1lOiBhY3Rpb25OYW1lIH0sXG4gIH1cblxuICB0LmVxdWFsKFxuICAgIGF1dG9TdGFydEhvbGQuZ2V0SG9sZER1cmF0aW9uKGludGVyYWN0aW9uKSxcbiAgICBob2xkRHVyYXRpb24sXG4gICAgJ2dldHMgaG9sZER1cmF0aW9uJylcblxuICBjb25zdCBkZWxheUR1cmF0aW9uID0gNTAwXG5cbiAgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLm9wdGlvbnNbYWN0aW9uTmFtZV0uZGVsYXkgPSBkZWxheUR1cmF0aW9uXG4gIGRlbGV0ZSBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUub3B0aW9uc1thY3Rpb25OYW1lXS5ob2xkXG5cbiAgdC5lcXVhbChcbiAgICBhdXRvU3RhcnRIb2xkLmdldEhvbGREdXJhdGlvbihpbnRlcmFjdGlvbiksXG4gICAgZGVsYXlEdXJhdGlvbixcbiAgICAnZ2V0cyBob2xkRHVyYXRpb24gZnJvbSBcImRlbGF5XCIgdmFsdWUnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/auto-start/index.js b/packages/auto-start/index.js index ea365c7b9..65c6f7cef 100644 --- a/packages/auto-start/index.js +++ b/packages/auto-start/index.js @@ -1,11 +1,13 @@ -import autoStart from './base'; -import dragAxis from './dragAxis'; -import hold from './hold'; +import autoStart from "./base.js"; +import dragAxis from "./dragAxis.js"; +import hold from "./hold.js"; + function install(scope) { - scope.usePlugin(autoStart); - scope.usePlugin(hold); - scope.usePlugin(dragAxis); + scope.usePlugin(autoStart); + scope.usePlugin(hold); + scope.usePlugin(dragAxis); } + const id = 'auto-start'; -export { id, install, autoStart, hold, dragAxis, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxRQUFRLENBQUE7QUFDOUIsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFBO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLFFBQVEsQ0FBQTtBQUV6QixTQUFTLE9BQU8sQ0FBRSxLQUFLO0lBQ3JCLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDMUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzNCLENBQUM7QUFFRCxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUE7QUFFdkIsT0FBTyxFQUNMLEVBQUUsRUFDRixPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEdBQ1QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhdXRvU3RhcnQgZnJvbSAnLi9iYXNlJ1xuaW1wb3J0IGRyYWdBeGlzIGZyb20gJy4vZHJhZ0F4aXMnXG5pbXBvcnQgaG9sZCBmcm9tICcuL2hvbGQnXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlKSB7XG4gIHNjb3BlLnVzZVBsdWdpbihhdXRvU3RhcnQpXG4gIHNjb3BlLnVzZVBsdWdpbihob2xkKVxuICBzY29wZS51c2VQbHVnaW4oZHJhZ0F4aXMpXG59XG5cbmNvbnN0IGlkID0gJ2F1dG8tc3RhcnQnXG5cbmV4cG9ydCB7XG4gIGlkLFxuICBpbnN0YWxsLFxuICBhdXRvU3RhcnQsXG4gIGhvbGQsXG4gIGRyYWdBeGlzLFxufVxuIl19 \ No newline at end of file +export { id, install, autoStart, hold, dragAxis }; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/auto-start/index.js.map b/packages/auto-start/index.js.map new file mode 100644 index 000000000..e0319d189 --- /dev/null +++ b/packages/auto-start/index.js.map @@ -0,0 +1,19 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "autoStart", + "dragAxis", + "hold", + "install", + "scope", + "usePlugin", + "id" + ], + "mappings": "AAAA,OAAOA,SAAP;AACA,OAAOC,QAAP;AACA,OAAOC,IAAP;;AAEA,SAASC,OAAT,CAAkBC,KAAlB,EAAyB;AACvBA,EAAAA,KAAK,CAACC,SAAN,CAAgBL,SAAhB;AACAI,EAAAA,KAAK,CAACC,SAAN,CAAgBH,IAAhB;AACAE,EAAAA,KAAK,CAACC,SAAN,CAAgBJ,QAAhB;AACD;;AAED,MAAMK,EAAE,GAAG,YAAX;AAEA,SACEA,EADF,EAEEH,OAFF,EAGEH,SAHF,EAIEE,IAJF,EAKED,QALF", + "sourcesContent": [ + "import autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nfunction install (scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n}\n\nconst id = 'auto-start'\n\nexport {\n id,\n install,\n autoStart,\n hold,\n dragAxis,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/core/BaseEvent.d.ts b/packages/core/BaseEvent.d.ts index c80558344..3d2919b4e 100644 --- a/packages/core/BaseEvent.d.ts +++ b/packages/core/BaseEvent.d.ts @@ -16,7 +16,7 @@ export declare class BaseEvent { timeStamp: any; immediatePropagationStopped: boolean; propagationStopped: boolean; - readonly interaction: Pick, "start" | "end" | "stop" | "interactable" | "element" | "prepared" | "pointerIsDown" | "pointerWasMoved" | "_proxy" | "move" | "interacting">; + get interaction(): Pick, "end" | "stop" | "start" | "move" | "interactable" | "element" | "prepared" | "pointerIsDown" | "pointerWasMoved" | "_proxy" | "interacting">; constructor(interaction: any); preventDefault(): void; /** diff --git a/packages/core/BaseEvent.js b/packages/core/BaseEvent.js index 74af5dee5..fe9dc94b7 100644 --- a/packages/core/BaseEvent.js +++ b/packages/core/BaseEvent.js @@ -1,32 +1,57 @@ -export var EventPhase; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +export let EventPhase; + (function (EventPhase) { - EventPhase["Start"] = "start"; - EventPhase["Move"] = "move"; - EventPhase["End"] = "end"; - EventPhase["_NONE"] = ""; + EventPhase["Start"] = "start"; + EventPhase["Move"] = "move"; + EventPhase["End"] = "end"; + EventPhase["_NONE"] = ""; })(EventPhase || (EventPhase = {})); + export class BaseEvent { - constructor(interaction) { - this.immediatePropagationStopped = false; - this.propagationStopped = false; - this._interaction = interaction; - } - get interaction() { - return this._interaction._proxy; - } - preventDefault() { } - /** - * Don't call any other listeners (even on the current target) - */ - stopPropagation() { - this.propagationStopped = true; - } - /** - * Don't call listeners on the remaining targets - */ - stopImmediatePropagation() { - this.immediatePropagationStopped = this.propagationStopped = true; - } + get interaction() { + return this._interaction._proxy; + } + + constructor(interaction) { + _defineProperty(this, "type", void 0); + + _defineProperty(this, "target", void 0); + + _defineProperty(this, "currentTarget", void 0); + + _defineProperty(this, "interactable", void 0); + + _defineProperty(this, "_interaction", void 0); + + _defineProperty(this, "timeStamp", void 0); + + _defineProperty(this, "immediatePropagationStopped", false); + + _defineProperty(this, "propagationStopped", false); + + this._interaction = interaction; + } + + preventDefault() {} + /** + * Don't call any other listeners (even on the current target) + */ + + + stopPropagation() { + this.propagationStopped = true; + } + /** + * Don't call listeners on the remaining targets + */ + + + stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } + } export default BaseEvent; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQmFzZUV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYix5QkFBVyxDQUFBO0lBQ1gsd0JBQVUsQ0FBQTtBQUNaLENBQUMsRUFMVyxVQUFVLEtBQVYsVUFBVSxRQUtyQjtBQUVELE1BQU0sT0FBTyxTQUFTO0lBY3BCLFlBQWEsV0FBVztRQVB4QixnQ0FBMkIsR0FBRyxLQUFLLENBQUE7UUFDbkMsdUJBQWtCLEdBQUcsS0FBSyxDQUFBO1FBT3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFBO0lBQ2pDLENBQUM7SUFORCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFBO0lBQ2pDLENBQUM7SUFNRCxjQUFjLEtBQUssQ0FBQztJQUVwQjs7T0FFRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILHdCQUF3QjtRQUN0QixJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtJQUNuRSxDQUFDO0NBQ0Y7QUFFRCxlQUFlLFNBQVMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJbnRlcmFjdGFibGUgZnJvbSAnLi9JbnRlcmFjdGFibGUnXG5pbXBvcnQgSW50ZXJhY3Rpb24gZnJvbSAnLi9JbnRlcmFjdGlvbidcbmltcG9ydCB7IEFjdGlvbk5hbWUgfSBmcm9tICcuL3Njb3BlJ1xuXG5leHBvcnQgZW51bSBFdmVudFBoYXNlIHtcbiAgU3RhcnQgPSAnc3RhcnQnLFxuICBNb3ZlID0gJ21vdmUnLFxuICBFbmQgPSAnZW5kJyxcbiAgX05PTkUgPSAnJyxcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VFdmVudDxUIGV4dGVuZHMgQWN0aW9uTmFtZSA9IGFueT4ge1xuICB0eXBlOiBzdHJpbmdcbiAgdGFyZ2V0OiBFdmVudFRhcmdldFxuICBjdXJyZW50VGFyZ2V0OiBFdmVudFRhcmdldFxuICBpbnRlcmFjdGFibGU6IEludGVyYWN0YWJsZVxuICBfaW50ZXJhY3Rpb246IEludGVyYWN0aW9uPFQ+XG4gIHRpbWVTdGFtcDogYW55XG4gIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlXG4gIHByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlXG5cbiAgZ2V0IGludGVyYWN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpb24uX3Byb3h5XG4gIH1cblxuICBjb25zdHJ1Y3RvciAoaW50ZXJhY3Rpb24pIHtcbiAgICB0aGlzLl9pbnRlcmFjdGlvbiA9IGludGVyYWN0aW9uXG4gIH1cblxuICBwcmV2ZW50RGVmYXVsdCAoKSB7fVxuXG4gIC8qKlxuICAgKiBEb24ndCBjYWxsIGFueSBvdGhlciBsaXN0ZW5lcnMgKGV2ZW4gb24gdGhlIGN1cnJlbnQgdGFyZ2V0KVxuICAgKi9cbiAgc3RvcFByb3BhZ2F0aW9uICgpIHtcbiAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBEb24ndCBjYWxsIGxpc3RlbmVycyBvbiB0aGUgcmVtYWluaW5nIHRhcmdldHNcbiAgICovXG4gIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAoKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYXNlRXZlbnRcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=BaseEvent.js.map \ No newline at end of file diff --git a/packages/core/BaseEvent.js.map b/packages/core/BaseEvent.js.map new file mode 100644 index 000000000..3933a992e --- /dev/null +++ b/packages/core/BaseEvent.js.map @@ -0,0 +1,23 @@ +{ + "version": 3, + "sources": [ + "BaseEvent.ts" + ], + "names": [ + "EventPhase", + "BaseEvent", + "interaction", + "_interaction", + "_proxy", + "constructor", + "preventDefault", + "stopPropagation", + "propagationStopped", + "stopImmediatePropagation", + "immediatePropagationStopped" + ], + "mappings": ";;AAIA,WAAYA,UAAZ;;WAAYA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;GAAAA,U,KAAAA,U;;AAOZ,OAAO,MAAMC,SAAN,CAA4C;AAUjD,MAAIC,WAAJ,GAAmB;AACjB,WAAO,KAAKC,YAAL,CAAkBC,MAAzB;AACD;;AAEDC,EAAAA,WAAW,CAAEH,WAAF,EAAe;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,yDAPI,KAOJ;;AAAA,gDANL,KAMK;;AACxB,SAAKC,YAAL,GAAoBD,WAApB;AACD;;AAEDI,EAAAA,cAAc,GAAI,CAAE;AAEpB;;;;;AAGAC,EAAAA,eAAe,GAAI;AACjB,SAAKC,kBAAL,GAA0B,IAA1B;AACD;AAED;;;;;AAGAC,EAAAA,wBAAwB,GAAI;AAC1B,SAAKC,2BAAL,GAAmC,KAAKF,kBAAL,GAA0B,IAA7D;AACD;;AAhCgD;AAmCnD,eAAeP,SAAf", + "sourcesContent": [ + "import Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class BaseEvent {\n type: string\n target: EventTarget\n currentTarget: EventTarget\n interactable: Interactable\n _interaction: Interaction\n timeStamp: any\n immediatePropagationStopped = false\n propagationStopped = false\n\n get interaction () {\n return this._interaction._proxy\n }\n\n constructor (interaction) {\n this._interaction = interaction\n }\n\n preventDefault () {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default BaseEvent\n" + ] +} \ No newline at end of file diff --git a/packages/core/Eventable.d.ts b/packages/core/Eventable.d.ts index ca01667ce..4bfe446e4 100644 --- a/packages/core/Eventable.d.ts +++ b/packages/core/Eventable.d.ts @@ -1,4 +1,4 @@ -import { NormalizedListeners } from '@interactjs/utils/normalizeListeners'; +import { NormalizedListeners } from '../utils/normalizeListeners'; declare class Eventable { options: any; types: NormalizedListeners; diff --git a/packages/core/Eventable.js b/packages/core/Eventable.js index ffe7e29e1..cfd1e040f 100644 --- a/packages/core/Eventable.js +++ b/packages/core/Eventable.js @@ -1,58 +1,82 @@ -import * as arr from '@interactjs/utils/arr'; -import extend from '@interactjs/utils/extend'; -import normalize from '@interactjs/utils/normalizeListeners'; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import * as arr from "../utils/arr.js"; +import extend from "../utils/extend.js"; +import normalize from "../utils/normalizeListeners.js"; + function fireUntilImmediateStopped(event, listeners) { - for (const listener of listeners) { - if (event.immediatePropagationStopped) { - break; - } - listener(event); + for (const listener of listeners) { + if (event.immediatePropagationStopped) { + break; } + + listener(event); + } } + class Eventable { - constructor(options) { - this.types = {}; - this.propagationStopped = false; - this.immediatePropagationStopped = false; - this.options = extend({}, options || {}); - } - fire(event) { - let listeners; - const global = this.global; - // Interactable#on() listeners - // tslint:disable no-conditional-assignment - if ((listeners = this.types[event.type])) { - fireUntilImmediateStopped(event, listeners); - } - // interact.on() listeners - if (!event.propagationStopped && global && (listeners = global[event.type])) { - fireUntilImmediateStopped(event, listeners); - } + constructor(options) { + _defineProperty(this, "options", void 0); + + _defineProperty(this, "types", {}); + + _defineProperty(this, "propagationStopped", false); + + _defineProperty(this, "immediatePropagationStopped", false); + + _defineProperty(this, "global", void 0); + + this.options = extend({}, options || {}); + } + + fire(event) { + let listeners; + const global = this.global; // Interactable#on() listeners + // tslint:disable no-conditional-assignment + + if (listeners = this.types[event.type]) { + fireUntilImmediateStopped(event, listeners); + } // interact.on() listeners + + + if (!event.propagationStopped && global && (listeners = global[event.type])) { + fireUntilImmediateStopped(event, listeners); } - on(type, listener) { - const listeners = normalize(type, listener); - for (type in listeners) { - this.types[type] = arr.merge(this.types[type] || [], listeners[type]); - } + } + + on(type, listener) { + const listeners = normalize(type, listener); + + for (type in listeners) { + this.types[type] = arr.merge(this.types[type] || [], listeners[type]); } - off(type, listener) { - const listeners = normalize(type, listener); - for (type in listeners) { - const eventList = this.types[type]; - if (!eventList || !eventList.length) { - continue; - } - for (const subListener of listeners[type]) { - const index = eventList.indexOf(subListener); - if (index !== -1) { - eventList.splice(index, 1); - } - } + } + + off(type, listener) { + const listeners = normalize(type, listener); + + for (type in listeners) { + const eventList = this.types[type]; + + if (!eventList || !eventList.length) { + continue; + } + + for (const subListener of listeners[type]) { + const index = eventList.indexOf(subListener); + + if (index !== -1) { + eventList.splice(index, 1); } + } } - getRect(_element) { - return null; - } + } + + getRect(_element) { + return null; + } + } + export default Eventable; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRXZlbnRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxTQUFrQyxNQUFNLHNDQUFzQyxDQUFBO0FBSXJGLFNBQVMseUJBQXlCLENBRy9CLEtBQTBCLEVBQUUsU0FBOEI7SUFDM0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7UUFDaEMsSUFBSSxLQUFLLENBQUMsMkJBQTJCLEVBQUU7WUFBRSxNQUFLO1NBQUU7UUFFaEQsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQ2hCO0FBQ0gsQ0FBQztBQUVELE1BQU0sU0FBUztJQU9iLFlBQWEsT0FBa0M7UUFML0MsVUFBSyxHQUF3QixFQUFFLENBQUE7UUFDL0IsdUJBQWtCLEdBQUcsS0FBSyxDQUFBO1FBQzFCLGdDQUEyQixHQUFHLEtBQUssQ0FBQTtRQUlqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRCxJQUFJLENBQUUsS0FBVTtRQUNkLElBQUksU0FBUyxDQUFBO1FBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUUxQiw4QkFBOEI7UUFDOUIsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUN4Qyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7U0FDNUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFHO1lBQzVFLHlCQUF5QixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtTQUM1QztJQUNILENBQUM7SUFFRCxFQUFFLENBQUUsSUFBWSxFQUFFLFFBQStCO1FBQy9DLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFM0MsS0FBSyxJQUFJLElBQUksU0FBUyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtTQUN0RTtJQUNILENBQUM7SUFFRCxHQUFHLENBQUUsSUFBWSxFQUFFLFFBQStCO1FBQ2hELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFM0MsS0FBSyxJQUFJLElBQUksU0FBUyxFQUFFO1lBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFbEMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQUUsU0FBUTthQUFFO1lBRWpELEtBQUssTUFBTSxXQUFXLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUU1QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDaEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7aUJBQzNCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUUsUUFBMEI7UUFDakMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBQ0Y7QUFFRCxlQUFlLFNBQVMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFyciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9hcnInXG5pbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCBub3JtYWxpemUsIHsgTm9ybWFsaXplZExpc3RlbmVycyB9IGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL25vcm1hbGl6ZUxpc3RlbmVycydcbmltcG9ydCB7IEV2ZW50UGhhc2UsIEludGVyYWN0RXZlbnQgfSBmcm9tICcuL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgeyBBY3Rpb25OYW1lIH0gZnJvbSAnLi9zY29wZSdcblxuZnVuY3Rpb24gZmlyZVVudGlsSW1tZWRpYXRlU3RvcHBlZDxcbiAgVCBleHRlbmRzIEFjdGlvbk5hbWUsXG4gIFAgZXh0ZW5kcyBFdmVudFBoYXNlLFxuPiAoZXZlbnQ6IEludGVyYWN0RXZlbnQ8VCwgUD4sIGxpc3RlbmVyczogSW50ZXJhY3QuTGlzdGVuZXJbXSkge1xuICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgIGlmIChldmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpIHsgYnJlYWsgfVxuXG4gICAgbGlzdGVuZXIoZXZlbnQpXG4gIH1cbn1cblxuY2xhc3MgRXZlbnRhYmxlIHtcbiAgb3B0aW9uczogYW55XG4gIHR5cGVzOiBOb3JtYWxpemVkTGlzdGVuZXJzID0ge31cbiAgcHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2VcbiAgaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gZmFsc2VcbiAgZ2xvYmFsOiBhbnlcblxuICBjb25zdHJ1Y3RvciAob3B0aW9ucz86IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyB8fCB7fSlcbiAgfVxuXG4gIGZpcmUgKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgbGlzdGVuZXJzXG4gICAgY29uc3QgZ2xvYmFsID0gdGhpcy5nbG9iYWxcblxuICAgIC8vIEludGVyYWN0YWJsZSNvbigpIGxpc3RlbmVyc1xuICAgIC8vIHRzbGludDpkaXNhYmxlIG5vLWNvbmRpdGlvbmFsLWFzc2lnbm1lbnRcbiAgICBpZiAoKGxpc3RlbmVycyA9IHRoaXMudHlwZXNbZXZlbnQudHlwZV0pKSB7XG4gICAgICBmaXJlVW50aWxJbW1lZGlhdGVTdG9wcGVkKGV2ZW50LCBsaXN0ZW5lcnMpXG4gICAgfVxuXG4gICAgLy8gaW50ZXJhY3Qub24oKSBsaXN0ZW5lcnNcbiAgICBpZiAoIWV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCAmJiBnbG9iYWwgJiYgKGxpc3RlbmVycyA9IGdsb2JhbFtldmVudC50eXBlXSkpICB7XG4gICAgICBmaXJlVW50aWxJbW1lZGlhdGVTdG9wcGVkKGV2ZW50LCBsaXN0ZW5lcnMpXG4gICAgfVxuICB9XG5cbiAgb24gKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IEludGVyYWN0Lkxpc3RlbmVyc0FyZykge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IG5vcm1hbGl6ZSh0eXBlLCBsaXN0ZW5lcilcblxuICAgIGZvciAodHlwZSBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMudHlwZXNbdHlwZV0gPSBhcnIubWVyZ2UodGhpcy50eXBlc1t0eXBlXSB8fCBbXSwgbGlzdGVuZXJzW3R5cGVdKVxuICAgIH1cbiAgfVxuXG4gIG9mZiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogSW50ZXJhY3QuTGlzdGVuZXJzQXJnKSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gbm9ybWFsaXplKHR5cGUsIGxpc3RlbmVyKVxuXG4gICAgZm9yICh0eXBlIGluIGxpc3RlbmVycykge1xuICAgICAgY29uc3QgZXZlbnRMaXN0ID0gdGhpcy50eXBlc1t0eXBlXVxuXG4gICAgICBpZiAoIWV2ZW50TGlzdCB8fCAhZXZlbnRMaXN0Lmxlbmd0aCkgeyBjb250aW51ZSB9XG5cbiAgICAgIGZvciAoY29uc3Qgc3ViTGlzdGVuZXIgb2YgbGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZXZlbnRMaXN0LmluZGV4T2Yoc3ViTGlzdGVuZXIpXG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGV2ZW50TGlzdC5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRSZWN0IChfZWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRhYmxlXG4iXX0= \ No newline at end of file +//# sourceMappingURL=Eventable.js.map \ No newline at end of file diff --git a/packages/core/Eventable.js.map b/packages/core/Eventable.js.map new file mode 100644 index 000000000..32e2782ac --- /dev/null +++ b/packages/core/Eventable.js.map @@ -0,0 +1,39 @@ +{ + "version": 3, + "sources": [ + "Eventable.ts" + ], + "names": [ + "arr", + "extend", + "normalize", + "fireUntilImmediateStopped", + "event", + "listeners", + "listener", + "immediatePropagationStopped", + "Eventable", + "constructor", + "options", + "fire", + "global", + "types", + "type", + "propagationStopped", + "on", + "merge", + "off", + "eventList", + "length", + "subListener", + "index", + "indexOf", + "splice", + "getRect", + "_element" + ], + "mappings": ";;AAAA,OAAO,KAAKA,GAAZ;AACA,OAAOC,MAAP;AACA,OAAOC,SAAP;;AAIA,SAASC,yBAAT,CAGGC,KAHH,EAG+BC,SAH/B,EAG+D;AAC7D,OAAK,MAAMC,QAAX,IAAuBD,SAAvB,EAAkC;AAChC,QAAID,KAAK,CAACG,2BAAV,EAAuC;AAAE;AAAO;;AAEhDD,IAAAA,QAAQ,CAACF,KAAD,CAAR;AACD;AACF;;AAED,MAAMI,SAAN,CAAgB;AAOdC,EAAAA,WAAW,CAAEC,OAAF,EAAsC;AAAA;;AAAA,mCALpB,EAKoB;;AAAA,gDAJ5B,KAI4B;;AAAA,yDAHnB,KAGmB;;AAAA;;AAC/C,SAAKA,OAAL,GAAeT,MAAM,CAAC,EAAD,EAAKS,OAAO,IAAI,EAAhB,CAArB;AACD;;AAEDC,EAAAA,IAAI,CAAEP,KAAF,EAAc;AAChB,QAAIC,SAAJ;AACA,UAAMO,MAAM,GAAG,KAAKA,MAApB,CAFgB,CAIhB;AACA;;AACA,QAAKP,SAAS,GAAG,KAAKQ,KAAL,CAAWT,KAAK,CAACU,IAAjB,CAAjB,EAA0C;AACxCX,MAAAA,yBAAyB,CAACC,KAAD,EAAQC,SAAR,CAAzB;AACD,KARe,CAUhB;;;AACA,QAAI,CAACD,KAAK,CAACW,kBAAP,IAA6BH,MAA7B,KAAwCP,SAAS,GAAGO,MAAM,CAACR,KAAK,CAACU,IAAP,CAA1D,CAAJ,EAA8E;AAC5EX,MAAAA,yBAAyB,CAACC,KAAD,EAAQC,SAAR,CAAzB;AACD;AACF;;AAEDW,EAAAA,EAAE,CAAEF,IAAF,EAAgBR,QAAhB,EAAiD;AACjD,UAAMD,SAAS,GAAGH,SAAS,CAACY,IAAD,EAAOR,QAAP,CAA3B;;AAEA,SAAKQ,IAAL,IAAaT,SAAb,EAAwB;AACtB,WAAKQ,KAAL,CAAWC,IAAX,IAAmBd,GAAG,CAACiB,KAAJ,CAAU,KAAKJ,KAAL,CAAWC,IAAX,KAAoB,EAA9B,EAAkCT,SAAS,CAACS,IAAD,CAA3C,CAAnB;AACD;AACF;;AAEDI,EAAAA,GAAG,CAAEJ,IAAF,EAAgBR,QAAhB,EAAiD;AAClD,UAAMD,SAAS,GAAGH,SAAS,CAACY,IAAD,EAAOR,QAAP,CAA3B;;AAEA,SAAKQ,IAAL,IAAaT,SAAb,EAAwB;AACtB,YAAMc,SAAS,GAAG,KAAKN,KAAL,CAAWC,IAAX,CAAlB;;AAEA,UAAI,CAACK,SAAD,IAAc,CAACA,SAAS,CAACC,MAA7B,EAAqC;AAAE;AAAU;;AAEjD,WAAK,MAAMC,WAAX,IAA0BhB,SAAS,CAACS,IAAD,CAAnC,EAA2C;AACzC,cAAMQ,KAAK,GAAGH,SAAS,CAACI,OAAV,CAAkBF,WAAlB,CAAd;;AAEA,YAAIC,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChBH,UAAAA,SAAS,CAACK,MAAV,CAAiBF,KAAjB,EAAwB,CAAxB;AACD;AACF;AACF;AACF;;AAEDG,EAAAA,OAAO,CAAEC,QAAF,EAA8B;AACnC,WAAO,IAAP;AACD;;AAvDa;;AA0DhB,eAAelB,SAAf", + "sourcesContent": [ + "import * as arr from '../utils/arr'\nimport extend from '../utils/extend'\nimport normalize, { NormalizedListeners } from '../utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\n T extends ActionName,\n P extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect (_element: Interact.Element) {\n return null\n }\n}\n\nexport default Eventable\n" + ] +} \ No newline at end of file diff --git a/packages/core/Eventable.spec.js b/packages/core/Eventable.spec.js deleted file mode 100644 index 7f62f6880..000000000 --- a/packages/core/Eventable.spec.js +++ /dev/null @@ -1,25 +0,0 @@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRhYmxlLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJFdmVudGFibGUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLFNBQVMsTUFBTSxhQUFhLENBQUE7QUFFbkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFBO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQTtJQUVuQixNQUFNLFNBQVMsR0FBRztRQUNoQixJQUFJO1FBQ0osMkJBQTJCLEVBQUUsS0FBSztLQUNuQyxDQUFBO0lBQ0QsSUFBSSxVQUFVLENBQUE7SUFDZCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLFVBQVUsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLENBQUE7SUFFaEQsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUV6QixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLENBQUMsQ0FBQTtJQUUxRCxVQUFVLEdBQUcsU0FBUyxDQUFBO0lBQ3RCLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLCtCQUErQixDQUFDLENBQUE7SUFFL0QsU0FBUyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQTtJQUM1QyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXpCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSx5REFBeUQsQ0FBQyxDQUFBO0lBRXpGLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgRXZlbnRhYmxlIGZyb20gJy4vRXZlbnRhYmxlJ1xuXG50ZXN0KCdFdmVudGFibGUnLCB0ID0+IHtcbiAgY29uc3QgZXZlbnRhYmxlID0gbmV3IEV2ZW50YWJsZSgpXG4gIGNvbnN0IHR5cGUgPSAnVEVTVCdcblxuICBjb25zdCB0ZXN0RXZlbnQgPSB7XG4gICAgdHlwZSxcbiAgICBpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IGZhbHNlLFxuICB9XG4gIGxldCBmaXJlZEV2ZW50XG4gIGNvbnN0IGxpc3RlbmVyID0gZXZlbnQgPT4geyBmaXJlZEV2ZW50ID0gZXZlbnQgfVxuXG4gIGV2ZW50YWJsZS5vbih0eXBlLCBsaXN0ZW5lcilcbiAgZXZlbnRhYmxlLmZpcmUodGVzdEV2ZW50KVxuXG4gIHQuZXF1YWwoZmlyZWRFdmVudCwgdGVzdEV2ZW50LCAnb25cXCdkIGxpc3RlbmVyIGlzIGNhbGxlZCcpXG5cbiAgZmlyZWRFdmVudCA9IHVuZGVmaW5lZFxuICBldmVudGFibGUub2ZmKHR5cGUsIGxpc3RlbmVyKVxuICBldmVudGFibGUuZmlyZSh0ZXN0RXZlbnQpXG5cbiAgdC5lcXVhbChmaXJlZEV2ZW50LCB1bmRlZmluZWQsICdvZmZcXCdkIGxpc3RlbmVyIGlzIG5vdCBjYWxsZWQnKVxuXG4gIHRlc3RFdmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlXG4gIGV2ZW50YWJsZS5vbih0eXBlLCBsaXN0ZW5lcilcbiAgZXZlbnRhYmxlLmZpcmUodGVzdEV2ZW50KVxuXG4gIHQuZXF1YWwoZmlyZWRFdmVudCwgdW5kZWZpbmVkLCAnbGlzdGVuZXIgaXMgbm90IGNhbGxlZCB3aXRoIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCcpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/core/InteractEvent.d.ts b/packages/core/InteractEvent.d.ts index 4925a5e34..e4c896041 100644 --- a/packages/core/InteractEvent.d.ts +++ b/packages/core/InteractEvent.d.ts @@ -40,14 +40,22 @@ export declare class InteractEvent 150) { - return null; - } - let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI; - const overlap = 22.5; - if (angle < 0) { - angle += 360; - } - const left = 135 - overlap <= angle && angle < 225 + overlap; - const up = 225 - overlap <= angle && angle < 315 + overlap; - const right = !left && (315 - overlap <= angle || angle < 45 + overlap); - const down = !up && 45 - overlap <= angle && angle < 135 + overlap; - return { - up, - down, - left, - right, - angle, - speed: interaction.prevEvent.speed, - velocity: { - x: interaction.prevEvent.velocityX, - y: interaction.prevEvent.velocityY, - }, - }; + + this.ctrlKey = event.ctrlKey; + this.altKey = event.altKey; + this.shiftKey = event.shiftKey; + this.metaKey = event.metaKey; + this.button = event.button; + this.buttons = event.buttons; + this.target = element; + this.currentTarget = element; + this.relatedTarget = related || null; + this.preEnd = preEnd; + this.type = type || actionName + (phase || ''); + this.interactable = target; + this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0; + this.x0 = interaction.coords.start.page.x - origin.x; + this.y0 = interaction.coords.start.page.y - origin.y; + this.clientX0 = interaction.coords.start.client.x - origin.x; + this.clientY0 = interaction.coords.start.client.y - origin.y; + + if (starting || ending) { + this.delta = { + x: 0, + y: 0 + }; + } else { + this.delta = { + x: this[deltaSource].x - prevEvent[deltaSource].x, + y: this[deltaSource].y - prevEvent[deltaSource].y + }; } - preventDefault() { } - /** - * Don't call listeners on the remaining targets - */ - stopImmediatePropagation() { - this.immediatePropagationStopped = this.propagationStopped = true; + + this.dt = interaction.coords.delta.timeStamp; + this.duration = this.timeStamp - this.t0; // velocity and speed in pixels per second + + this.velocity = extend({}, interaction.coords.velocity[deltaSource]); + this.speed = hypot(this.velocity.x, this.velocity.y); + this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null; + } + + get pageX() { + return this.page.x; + } + + set pageX(value) { + this.page.x = value; + } + + get pageY() { + return this.page.y; + } + + set pageY(value) { + this.page.y = value; + } + + get clientX() { + return this.client.x; + } + + set clientX(value) { + this.client.x = value; + } + + get clientY() { + return this.client.y; + } + + set clientY(value) { + this.client.y = value; + } + + get dx() { + return this.delta.x; + } + + set dx(value) { + this.delta.x = value; + } + + get dy() { + return this.delta.y; + } + + set dy(value) { + this.delta.y = value; + } + + get velocityX() { + return this.velocity.x; + } + + set velocityX(value) { + this.velocity.x = value; + } + + get velocityY() { + return this.velocity.y; + } + + set velocityY(value) { + this.velocity.y = value; + } + + getSwipe() { + const interaction = this._interaction; + + if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) { + return null; } - /** - * Don't call any other listeners (even on the current target) - */ - stopPropagation() { - this.propagationStopped = true; + + let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI; + const overlap = 22.5; + + if (angle < 0) { + angle += 360; } + + const left = 135 - overlap <= angle && angle < 225 + overlap; + const up = 225 - overlap <= angle && angle < 315 + overlap; + const right = !left && (315 - overlap <= angle || angle < 45 + overlap); + const down = !up && 45 - overlap <= angle && angle < 135 + overlap; + return { + up, + down, + left, + right, + angle, + speed: interaction.prevEvent.speed, + velocity: { + x: interaction.prevEvent.velocityX, + y: interaction.prevEvent.velocityY + } + }; + } + + preventDefault() {} + /** + * Don't call listeners on the remaining targets + */ + + + stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } + /** + * Don't call any other listeners (even on the current target) + */ + + + stopPropagation() { + this.propagationStopped = true; + } + } export default InteractEvent; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RFdmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkludGVyYWN0RXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUE7QUFDdkQsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUE7QUFDM0MsT0FBTyxTQUFTLE1BQU0sYUFBYSxDQUFBO0FBQ25DLE9BQU8sUUFBUSxNQUFNLGtCQUFrQixDQUFBO0FBSXZDLE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYix5QkFBVyxDQUFBO0lBQ1gsd0JBQVUsQ0FBQTtBQUNaLENBQUMsRUFMVyxVQUFVLEtBQVYsVUFBVSxRQUtyQjtBQUVELE1BQU0sT0FBTyxhQUdYLFNBQVEsU0FBWTtJQWtDcEIsTUFBTTtJQUNOLFlBQ0UsV0FBd0IsRUFDeEIsS0FBZ0MsRUFDaEMsVUFBYSxFQUNiLEtBQVEsRUFDUixPQUF5QixFQUN6QixPQUEwQixFQUMxQixNQUFnQixFQUNoQixJQUFhO1FBRWIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRWxCLE9BQU8sR0FBRyxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQTtRQUV4QyxNQUFNLE1BQU0sR0FBUSxXQUFXLENBQUMsWUFBWSxDQUFBO1FBQzVDLE1BQU0sV0FBVyxHQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBUyxDQUFDLFdBQWdDLENBQUE7UUFDdEcsTUFBTSxNQUFNLEdBQVEsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDNUQsTUFBTSxRQUFRLEdBQU0sS0FBSyxLQUFLLE9BQU8sQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FBUSxLQUFLLEtBQUssS0FB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SSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDNUUsQ0FBQztJQUVELElBQUksS0FBSyxLQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ25DLElBQUksS0FBSyxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQ3pDLElBQUksS0FBSyxLQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ25DLElBQUksS0FBSyxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRXpDLElBQUksT0FBTyxLQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksT0FBTyxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQzdDLElBQUksT0FBTyxLQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksT0FBTyxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRTdDLElBQUksRUFBRSxLQUFNLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ2pDLElBQUksRUFBRSxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksRUFBRSxLQUFNLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ2pDLElBQUksRUFBRSxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRXZDLElBQUksU0FBUyxLQUFNLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQzNDLElBQUksU0FBUyxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQ2pELElBQUksU0FBUyxLQUFNLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQzNDLElBQUksU0FBUyxDQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRWpELFFBQVE7UUFDTixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1FBRXJDLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsR0FBRztZQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtZQUMxRCxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO1FBQ3hHLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQTtRQUVwQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixLQUFLLElBQUksR0FBRyxDQUFBO1NBQ2I7UUFFRCxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQTtRQUM1RCxNQUFNLEVBQUUsR0FBSyxHQUFHLEdBQUcsT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQTtRQUU1RCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssR0FBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUE7UUFDeEUsTUFBTSxJQUFJLEdBQUksQ0FBQyxFQUFFLElBQVEsRUFBRSxHQUFHLE9BQU8sSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUE7UUFFdkUsT0FBTztZQUNMLEVBQUU7WUFDRixJQUFJO1lBQ0osSUFBSTtZQUNKLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSztZQUNsQyxRQUFRLEVBQUU7Z0JBQ1IsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUztnQkFDbEMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUzthQUNuQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsY0FBYyxLQUFLLENBQUM7SUFFcEI7O09BRUc7SUFDSCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7SUFDaEMsQ0FBQztDQUNGO0FBRUQsZUFBZSxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCBnZXRPcmlnaW5YWSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9nZXRPcmlnaW5YWSdcbmltcG9ydCBoeXBvdCBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9oeXBvdCdcbmltcG9ydCBCYXNlRXZlbnQgZnJvbSAnLi9CYXNlRXZlbnQnXG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0T3B0aW9ucydcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICcuL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgQWN0aW9uTmFtZSB9IGZyb20gJy4vc2NvcGUnXG5cbmV4cG9ydCBlbnVtIEV2ZW50UGhhc2Uge1xuICBTdGFydCA9ICdzdGFydCcsXG4gIE1vdmUgPSAnbW92ZScsXG4gIEVuZCA9ICdlbmQnLFxuICBfTk9ORSA9ICcnLFxufVxuXG5leHBvcnQgY2xhc3MgSW50ZXJhY3RFdmVudDxcbiAgVCBleHRlbmRzIEFjdGlvbk5hbWUgPSBhbnksXG4gIFAgZXh0ZW5kcyBFdmVudFBoYXNlID0gRXZlbnRQaGFzZS5fTk9ORSxcbj4gZXh0ZW5kcyBCYXNlRXZlbnQ8VD4ge1xuICB0YXJnZXQ6IEludGVyYWN0LkVsZW1lbnRcbiAgY3VycmVudFRhcmdldDogSW50ZXJhY3QuRWxlbWVudFxuICByZWxhdGVkVGFyZ2V0OiBJbnRlcmFjdC5FbGVtZW50XG4gIHNjcmVlblg/OiBudW1iZXJcbiAgc2NyZWVuWT86IG51bWJlclxuICBidXR0b246IG51bWJlclxuICBidXR0b25zOiBudW1iZXJcbiAgY3RybEtleTogYm9vbGVhblxuICBzaGlmdEtleTogYm9vbGVhblxuICBhbHRLZXk6IGJvb2xlYW5cbiAgbWV0YUtleTogYm9vbGVhblxuICBwYWdlOiBJbnRlcmFjdC5Qb2ludFxuICBjbGllbnQ6IEludGVyYWN0LlBvaW50XG4gIGRlbHRhOiBJbnRlcmFjdC5Qb2ludFxuICByZWN0OiBJbnRlcmFjdC5GdWxsUmVjdFxuICB4MDogbnVtYmVyXG4gIHkwOiBudW1iZXJcbiAgdDA6IG51bWJlclxuICBkdDogbnVtYmVyXG4gIGR1cmF0aW9uOiBudW1iZXJcbiAgY2xpZW50WDA6IG51bWJlclxuICBjbGllbnRZMDogbnVtYmVyXG4gIHZlbG9jaXR5OiBJbnRlcmFjdC5Qb2ludFxuICBzcGVlZDogbnVtYmVyXG4gIHN3aXBlOiBSZXR1cm5UeXBlPEludGVyYWN0RXZlbnQ8VD5bJ2dldFN3aXBlJ10+XG4gIHRpbWVTdGFtcDogYW55XG4gIC8vIGRyYWdcbiAgZHJhZ0VudGVyPzogSW50ZXJhY3QuRWxlbWVudFxuICBkcmFnTGVhdmU/OiBJbnRlcmFjdC5FbGVtZW50XG4gIC8vIHJlc2l6ZVxuICBheGVzPzogJ3gnIHwgJ3knIHwgJ3h5J1xuICBwcmVFbmQ/OiBib29sZWFuXG5cbiAgLyoqICovXG4gIGNvbnN0cnVjdG9yIChcbiAgICBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24sXG4gICAgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsXG4gICAgYWN0aW9uTmFtZTogVCxcbiAgICBwaGFzZTogUCxcbiAgICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50LFxuICAgIHJlbGF0ZWQ/OiBJbnRlcmFjdC5FbGVtZW50LFxuICAgIHByZUVuZD86IGJvb2xlYW4sXG4gICAgdHlwZT86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoaW50ZXJhY3Rpb24pXG5cbiAgICBlbGVtZW50ID0gZWxlbWVudCB8fCBpbnRlcmFjdGlvbi5lbGVtZW50XG5cbiAgICBjb25zdCB0YXJnZXQgICAgICA9IGludGVyYWN0aW9uLmludGVyYWN0YWJsZVxuICAgIGNvbnN0IGRlbHRhU291cmNlID0gKCgodGFyZ2V0ICYmIHRhcmdldC5vcHRpb25zKSB8fCBkZWZhdWx0cykgYXMgYW55KS5kZWx0YVNvdXJjZSBhcyAncGFnZScgfCAnY2xpZW50J1xuICAgIGNvbnN0IG9yaWdpbiAgICAgID0gZ2V0T3JpZ2luWFkodGFyZ2V0LCBlbGVtZW50LCBhY3Rpb25OYW1lKVxuICAgIGNvbnN0IHN0YXJ0aW5nICAgID0gcGhhc2UgPT09ICdzdGFydCdcbiAgICBjb25zdCBlbmRpbmcgICAgICA9IHBoYXNlID09PSAnZW5kJ1xuICAgIGNvbnN0IHByZXZFdmVudCAgID0gc3RhcnRpbmcgPyB0aGlzIDogaW50ZXJhY3Rpb24ucHJldkV2ZW50XG4gICAgY29uc3QgY29vcmRzICAgICAgPSBzdGFydGluZ1xuICAgICAgPyBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnRcbiAgICAgIDogZW5kaW5nXG4gICAgICAgID8geyBwYWdlOiBwcmV2RXZlbnQucGFnZSwgY2xpZW50OiBwcmV2RXZlbnQuY2xpZW50LCB0aW1lU3RhbXA6IGludGVyYWN0aW9uLmNvb3Jkcy5jdXIudGltZVN0YW1wIH1cbiAgICAgICAgOiBpbnRlcmFjdGlvbi5jb29yZHMuY3VyXG5cbiAgICB0aGlzLnBhZ2UgICAgICA9IGV4dGVuZCh7fSwgY29vcmRzLnBhZ2UpXG4gICAgdGhpcy5jbGllbnQgICAgPSBleHRlbmQoe30sIGNvb3Jkcy5jbGllbnQpXG4gICAgdGhpcy5yZWN0ICAgICAgPSBleHRlbmQoe30sIGludGVyYWN0aW9uLnJlY3QpXG4gICAgdGhpcy50aW1lU3RhbXAgPSBjb29yZHMudGltZVN0YW1wXG5cbiAgICBpZiAoIWVuZGluZykge1xuICAgICAgdGhpcy5wYWdlLnggLT0gb3JpZ2luLnhcbiAgICAgIHRoaXMucGFnZS55IC09IG9yaWdpbi55XG5cbiAgICAgIHRoaXMuY2xpZW50LnggLT0gb3JpZ2luLnhcbiAgICAgIHRoaXMuY2xpZW50LnkgLT0gb3JpZ2luLnlcbiAgICB9XG5cbiAgICB0aGlzLmN0cmxLZXkgICAgICAgPSBldmVudC5jdHJsS2V5XG4gICAgdGhpcy5hbHRLZXkgICAgICAgID0gZXZlbnQuYWx0S2V5XG4gICAgdGhpcy5zaGlmdEtleSAgICAgID0gZXZlbnQuc2hpZnRLZXlcbiAgICB0aGlzLm1ldGFLZXkgICAgICAgPSBldmVudC5tZXRhS2V5XG4gICAgdGhpcy5idXR0b24gICAgICAgID0gKGV2ZW50IGFzIE1vdXNlRXZlbnQpLmJ1dHRvblxuICAgIHRoaXMuYnV0dG9ucyAgICAgICA9IChldmVudCBhcyBNb3VzZUV2ZW50KS5idXR0b25zXG4gICAgdGhpcy50YXJnZXQgICAgICAgID0gZWxlbWVudFxuICAgIHRoaXMuY3VycmVudFRhcmdldCA9IGVsZW1lbnRcbiAgICB0aGlzLnJlbGF0ZWRUYXJnZXQgPSByZWxhdGVkIHx8IG51bGxcbiAgICB0aGlzLnByZUVuZCAgICAgICAgPSBwcmVFbmRcbiAgICB0aGlzLnR5cGUgICAgICAgICAgPSB0eXBlIHx8IChhY3Rpb25OYW1lICsgKHBoYXNlIHx8ICcnKSlcbiAgICB0aGlzLmludGVyYWN0YWJsZSAgPSB0YXJnZXRcblxuICAgIHRoaXMudDAgPSBzdGFydGluZ1xuICAgICAgPyBpbnRlcmFjdGlvbi5wb2ludGVyc1tpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGggLSAxXS5kb3duVGltZVxuICAgICAgOiBwcmV2RXZlbnQudDBcblxuICAgIHRoaXMueDAgICAgICAgPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZS54IC0gb3JpZ2luLnhcbiAgICB0aGlzLnkwICAgICAgID0gaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LnBhZ2UueSAtIG9yaWdpbi55XG4gICAgdGhpcy5jbGllbnRYMCA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5jbGllbnQueCAtIG9yaWdpbi54XG4gICAgdGhpcy5jbGllbnRZMCA9IGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydC5jbGllbnQueSAtIG9yaWdpbi55XG5cbiAgICBpZiAoc3RhcnRpbmcgfHwgZW5kaW5nKSB7XG4gICAgICB0aGlzLmRlbHRhID0geyB4OiAwLCB5OiAwIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRlbHRhID0ge1xuICAgICAgICB4OiB0aGlzW2RlbHRhU291cmNlXS54IC0gcHJldkV2ZW50W2RlbHRhU291cmNlXS54LFxuICAgICAgICB5OiB0aGlzW2RlbHRhU291cmNlXS55IC0gcHJldkV2ZW50W2RlbHRhU291cmNlXS55LFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZHQgICAgICAgID0gaW50ZXJhY3Rpb24uY29vcmRzLmRlbHRhLnRpbWVTdGFtcFxuICAgIHRoaXMuZHVyYXRpb24gID0gdGhpcy50aW1lU3RhbXAgLSB0aGlzLnQwXG5cbiAgICAvLyB2ZWxvY2l0eSBhbmQgc3BlZWQgaW4gcGl4ZWxzIHBlciBzZWNvbmRcbiAgICB0aGlzLnZlbG9jaXR5ID0gZXh0ZW5kKHt9LCBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHlbZGVsdGFTb3VyY2VdKVxuICAgIHRoaXMuc3BlZWQgPSBoeXBvdCh0aGlzLnZlbG9jaXR5LngsIHRoaXMudmVsb2NpdHkueSlcblxuICAgIHRoaXMuc3dpcGUgPSAoZW5kaW5nIHx8IHBoYXNlID09PSAnaW5lcnRpYXN0YXJ0JykgPyB0aGlzLmdldFN3aXBlKCkgOiBudWxsXG4gIH1cblxuICBnZXQgcGFnZVggKCkgeyByZXR1cm4gdGhpcy5wYWdlLnggfVxuICBzZXQgcGFnZVggKHZhbHVlKSB7IHRoaXMucGFnZS54ID0gdmFsdWUgfVxuICBnZXQgcGFnZVkgKCkgeyByZXR1cm4gdGhpcy5wYWdlLnkgfVxuICBzZXQgcGFnZVkgKHZhbHVlKSB7IHRoaXMucGFnZS55ID0gdmFsdWUgfVxuXG4gIGdldCBjbGllbnRYICgpIHsgcmV0dXJuIHRoaXMuY2xpZW50LnggfVxuICBzZXQgY2xpZW50WCAodmFsdWUpIHsgdGhpcy5jbGllbnQueCA9IHZhbHVlIH1cbiAgZ2V0IGNsaWVudFkgKCkgeyByZXR1cm4gdGhpcy5jbGllbnQueSB9XG4gIHNldCBjbGllbnRZICh2YWx1ZSkgeyB0aGlzLmNsaWVudC55ID0gdmFsdWUgfVxuXG4gIGdldCBkeCAoKSB7IHJldHVybiB0aGlzLmRlbHRhLnggfVxuICBzZXQgZHggKHZhbHVlKSB7IHRoaXMuZGVsdGEueCA9IHZhbHVlIH1cbiAgZ2V0IGR5ICgpIHsgcmV0dXJuIHRoaXMuZGVsdGEueSB9XG4gIHNldCBkeSAodmFsdWUpIHsgdGhpcy5kZWx0YS55ID0gdmFsdWUgfVxuXG4gIGdldCB2ZWxvY2l0eVggKCkgeyByZXR1cm4gdGhpcy52ZWxvY2l0eS54IH1cbiAgc2V0IHZlbG9jaXR5WCAodmFsdWUpIHsgdGhpcy52ZWxvY2l0eS54ID0gdmFsdWUgfVxuICBnZXQgdmVsb2NpdHlZICgpIHsgcmV0dXJuIHRoaXMudmVsb2NpdHkueSB9XG4gIHNldCB2ZWxvY2l0eVkgKHZhbHVlKSB7IHRoaXMudmVsb2NpdHkueSA9IHZhbHVlIH1cblxuICBnZXRTd2lwZSAoKSB7XG4gICAgY29uc3QgaW50ZXJhY3Rpb24gPSB0aGlzLl9pbnRlcmFjdGlvblxuXG4gICAgaWYgKGludGVyYWN0aW9uLnByZXZFdmVudC5zcGVlZCA8IDYwMCB8fFxuICAgICAgICB0aGlzLnRpbWVTdGFtcCAtIGludGVyYWN0aW9uLnByZXZFdmVudC50aW1lU3RhbXAgPiAxNTApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgbGV0IGFuZ2xlID0gMTgwICogTWF0aC5hdGFuMihpbnRlcmFjdGlvbi5wcmV2RXZlbnQudmVsb2NpdHlZLCBpbnRlcmFjdGlvbi5wcmV2RXZlbnQudmVsb2NpdHlYKSAvIE1hdGguUElcbiAgICBjb25zdCBvdmVybGFwID0gMjIuNVxuXG4gICAgaWYgKGFuZ2xlIDwgMCkge1xuICAgICAgYW5nbGUgKz0gMzYwXG4gICAgfVxuXG4gICAgY29uc3QgbGVmdCA9IDEzNSAtIG92ZXJsYXAgPD0gYW5nbGUgJiYgYW5nbGUgPCAyMjUgKyBvdmVybGFwXG4gICAgY29uc3QgdXAgICA9IDIyNSAtIG92ZXJsYXAgPD0gYW5nbGUgJiYgYW5nbGUgPCAzMTUgKyBvdmVybGFwXG5cbiAgICBjb25zdCByaWdodCA9ICFsZWZ0ICYmICgzMTUgLSBvdmVybGFwIDw9IGFuZ2xlIHx8IGFuZ2xlIDwgIDQ1ICsgb3ZlcmxhcClcbiAgICBjb25zdCBkb3duICA9ICF1cCAgICYmICAgNDUgLSBvdmVybGFwIDw9IGFuZ2xlICYmIGFuZ2xlIDwgMTM1ICsgb3ZlcmxhcFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVwLFxuICAgICAgZG93bixcbiAgICAgIGxlZnQsXG4gICAgICByaWdodCxcbiAgICAgIGFuZ2xlLFxuICAgICAgc3BlZWQ6IGludGVyYWN0aW9uLnByZXZFdmVudC5zcGVlZCxcbiAgICAgIHZlbG9jaXR5OiB7XG4gICAgICAgIHg6IGludGVyYWN0aW9uLnByZXZFdmVudC52ZWxvY2l0eVgsXG4gICAgICAgIHk6IGludGVyYWN0aW9uLnByZXZFdmVudC52ZWxvY2l0eVksXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIHByZXZlbnREZWZhdWx0ICgpIHt9XG5cbiAgLyoqXG4gICAqIERvbid0IGNhbGwgbGlzdGVuZXJzIG9uIHRoZSByZW1haW5pbmcgdGFyZ2V0c1xuICAgKi9cbiAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uICgpIHtcbiAgICB0aGlzLmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIERvbid0IGNhbGwgYW55IG90aGVyIGxpc3RlbmVycyAoZXZlbiBvbiB0aGUgY3VycmVudCB0YXJnZXQpXG4gICAqL1xuICBzdG9wUHJvcGFnYXRpb24gKCkge1xuICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyYWN0RXZlbnRcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=InteractEvent.js.map \ No newline at end of file diff --git a/packages/core/InteractEvent.js.map b/packages/core/InteractEvent.js.map new file mode 100644 index 000000000..99a90c3ab --- /dev/null +++ b/packages/core/InteractEvent.js.map @@ -0,0 +1,92 @@ +{ + "version": 3, + "sources": [ + "InteractEvent.ts" + ], + "names": [ + "extend", + "getOriginXY", + "hypot", + "BaseEvent", + "defaults", + "EventPhase", + "InteractEvent", + "constructor", + "interaction", + "event", + "actionName", + "phase", + "element", + "related", + "preEnd", + "type", + "target", + "interactable", + "deltaSource", + "options", + "origin", + "starting", + "ending", + "prevEvent", + "coords", + "start", + "page", + "client", + "timeStamp", + "cur", + "rect", + "x", + "y", + "ctrlKey", + "altKey", + "shiftKey", + "metaKey", + "button", + "buttons", + "currentTarget", + "relatedTarget", + "t0", + "pointers", + "length", + "downTime", + "x0", + "y0", + "clientX0", + "clientY0", + "delta", + "dt", + "duration", + "velocity", + "speed", + "swipe", + "getSwipe", + "pageX", + "value", + "pageY", + "clientX", + "clientY", + "dx", + "dy", + "velocityX", + "velocityY", + "_interaction", + "angle", + "Math", + "atan2", + "PI", + "overlap", + "left", + "up", + "right", + "down", + "preventDefault", + "stopImmediatePropagation", + "immediatePropagationStopped", + "propagationStopped", + "stopPropagation" + ], + "mappings": "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", + "sourcesContent": [ + "import extend from '../utils/extend'\nimport getOriginXY from '../utils/getOriginXY'\nimport hypot from '../utils/hypot'\nimport BaseEvent from './BaseEvent'\nimport defaults from './defaultOptions'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> extends BaseEvent {\n target: Interact.Element\n currentTarget: Interact.Element\n relatedTarget: Interact.Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n rect: Interact.FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Interact.Element\n dragLeave?: Interact.Element\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Interact.Element,\n related?: Interact.Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.interactable = target\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = (ending || phase === 'inertiastart') ? this.getSwipe() : null\n }\n\n get pageX () { return this.page.x }\n set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n" + ] +} \ No newline at end of file diff --git a/packages/core/Interactable.d.ts b/packages/core/Interactable.d.ts index 0eb431460..2a43bf048 100644 --- a/packages/core/Interactable.d.ts +++ b/packages/core/Interactable.d.ts @@ -4,7 +4,7 @@ import { Actions } from './scope'; declare type IgnoreValue = string | Interact.Element | boolean; /** */ export declare class Interactable implements Partial { - protected readonly _defaults: Defaults; + protected get _defaults(): Defaults; readonly options: Required; readonly _actions: Actions; readonly target: Interact.Target; @@ -68,21 +68,21 @@ export declare class Interactable implements Partial { * interacting; Use 'page' if you want autoScroll to work * @return {string | object} The current deltaSource or this Interactable */ - deltaSource(newValue: any): "client" | "page" | this; + deltaSource(newValue: any): "page" | "client" | this; /** * Gets the selector context Node of the Interactable. The default is * `window.document`. * * @return {Node} The context Node of this Interactable */ - context(): HTMLElement | SVGElement | Document; + context(): Document | HTMLElement | SVGElement; inContext(element: any): boolean; testIgnoreAllow(this: Interactable, options: { ignoreFrom: IgnoreValue; allowFrom: IgnoreValue; - }, targetNode: Node, eventTarget: Interact.Element): any; - testAllow(this: Interactable, allowFrom: IgnoreValue, targetNode: Node, element: Interact.Element): any; - testIgnore(this: Interactable, ignoreFrom: IgnoreValue, targetNode: Node, element: Interact.Element): any; + }, targetNode: Node, eventTarget: Interact.EventTarget): any; + testAllow(this: Interactable, allowFrom: IgnoreValue, targetNode: Node, element: Interact.EventTarget): any; + testIgnore(this: Interactable, ignoreFrom: IgnoreValue, targetNode: Node, element: Interact.EventTarget): any; /** * Calls listeners for the given InteractEvent type bound globally * and directly to this Interactable diff --git a/packages/core/Interactable.js b/packages/core/Interactable.js index bf1a75f09..3ceb96769 100644 --- a/packages/core/Interactable.js +++ b/packages/core/Interactable.js @@ -1,327 +1,392 @@ -import * as arr from '@interactjs/utils/arr'; -import browser from '@interactjs/utils/browser'; -import clone from '@interactjs/utils/clone'; -import { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'; -import events from '@interactjs/utils/events'; -import extend from '@interactjs/utils/extend'; -import * as is from '@interactjs/utils/is'; -import normalizeListeners from '@interactjs/utils/normalizeListeners'; -import { getWindow } from '@interactjs/utils/window'; -import Eventable from './Eventable'; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import * as arr from "../utils/arr.js"; +import browser from "../utils/browser.js"; +import clone from "../utils/clone.js"; +import { getElementRect, matchesUpTo, nodeContains, trySelector } from "../utils/domUtils.js"; +import events from "../utils/events.js"; +import extend from "../utils/extend.js"; +import * as is from "../utils/is.js"; +import normalizeListeners from "../utils/normalizeListeners.js"; +import { getWindow } from "../utils/window.js"; +import Eventable from "./Eventable.js"; + /** */ export class Interactable { - /** */ - constructor(target, options, defaultContext) { - this.events = new Eventable(); - this._actions = options.actions; - this.target = target; - this._context = options.context || defaultContext; - this._win = getWindow(trySelector(target) ? this._context : target); - this._doc = this._win.document; - this.set(options); + get _defaults() { + return { + base: {}, + perAction: {}, + actions: {} + }; + } + + /** */ + constructor(target, options, defaultContext) { + _defineProperty(this, "options", void 0); + + _defineProperty(this, "_actions", void 0); + + _defineProperty(this, "target", void 0); + + _defineProperty(this, "events", new Eventable()); + + _defineProperty(this, "_context", void 0); + + _defineProperty(this, "_win", void 0); + + _defineProperty(this, "_doc", void 0); + + this._actions = options.actions; + this.target = target; + this._context = options.context || defaultContext; + this._win = getWindow(trySelector(target) ? this._context : target); + this._doc = this._win.document; + this.set(options); + } + + setOnEvents(actionName, phases) { + if (is.func(phases.onstart)) { + this.on(`${actionName}start`, phases.onstart); } - get _defaults() { - return { - base: {}, - perAction: {}, - actions: {}, - }; + + if (is.func(phases.onmove)) { + this.on(`${actionName}move`, phases.onmove); } - setOnEvents(actionName, phases) { - 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); - } - if (is.func(phases.oninertiastart)) { - this.on(`${actionName}inertiastart`, phases.oninertiastart); - } - return this; + + if (is.func(phases.onend)) { + this.on(`${actionName}end`, phases.onend); } - updatePerActionListeners(actionName, prev, cur) { - if (is.array(prev) || is.object(prev)) { - this.off(actionName, prev); - } - if (is.array(cur) || is.object(cur)) { - this.on(actionName, cur); - } + + if (is.func(phases.oninertiastart)) { + this.on(`${actionName}inertiastart`, phases.oninertiastart); } - setPerAction(actionName, options) { - const defaults = this._defaults; - // for all the default per-action options - for (const optionName in options) { - const actionOptions = this.options[actionName]; - const optionValue = options[optionName]; - const isArray = is.array(optionValue); - // remove old event listeners and add new ones - if (optionName === 'listeners') { - this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue); - } - // if the option value is an array - if (isArray) { - actionOptions[optionName] = arr.from(optionValue); - } - // if the option value is an object - else if (!isArray && is.plainObject(optionValue)) { - // copy the object - actionOptions[optionName] = extend(actionOptions[optionName] || {}, clone(optionValue)); - // set anabled field to true if it exists in the defaults - if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) { - actionOptions[optionName].enabled = optionValue.enabled !== false; - } - } - // if the option value is a boolean and the default is an object - else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) { - actionOptions[optionName].enabled = optionValue; - } - // if it's anything else, do a plain assignment - else { - actionOptions[optionName] = optionValue; + + return this; + } + + updatePerActionListeners(actionName, prev, cur) { + if (is.array(prev) || is.object(prev)) { + this.off(actionName, prev); + } + + if (is.array(cur) || is.object(cur)) { + this.on(actionName, cur); + } + } + + setPerAction(actionName, options) { + const defaults = this._defaults; // for all the default per-action options + + for (const optionName in options) { + const actionOptions = this.options[actionName]; + const optionValue = options[optionName]; + const isArray = is.array(optionValue); // remove old event listeners and add new ones + + if (optionName === 'listeners') { + this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue); + } // if the option value is an array + + + if (isArray) { + actionOptions[optionName] = arr.from(optionValue); + } // if the option value is an object + else if (!isArray && is.plainObject(optionValue)) { + // copy the object + actionOptions[optionName] = extend(actionOptions[optionName] || {}, clone(optionValue)); // set anabled field to true if it exists in the defaults + + if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) { + actionOptions[optionName].enabled = optionValue.enabled !== false; + } + } // if the option value is a boolean and the default is an object + else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) { + actionOptions[optionName].enabled = optionValue; + } // if it's anything else, do a plain assignment + else { + actionOptions[optionName] = optionValue; } - } } - /** - * The default function to get an Interactables bounding rect. Can be - * overridden using {@link Interactable.rectChecker}. - * - * @param {Element} [element] The element to measure. - * @return {object} The object's bounding rectangle. - */ - getRect(element) { - element = element || (is.element(this.target) - ? this.target - : null); - if (is.string(this.target)) { - element = element || this._context.querySelector(this.target); - } - return getElementRect(element); + } + /** + * The default function to get an Interactables bounding rect. Can be + * overridden using {@link Interactable.rectChecker}. + * + * @param {Element} [element] The element to measure. + * @return {object} The object's bounding rectangle. + */ + + + getRect(element) { + element = element || (is.element(this.target) ? this.target : null); + + if (is.string(this.target)) { + element = element || this._context.querySelector(this.target); } - /** - * Returns or sets the function used to calculate the interactable's - * element's rectangle - * - * @param {function} [checker] A function which returns this Interactable's - * bounding rectangle. See {@link Interactable.getRect} - * @return {function | object} The checker function or this Interactable - */ - rectChecker(checker) { - if (is.func(checker)) { - this.getRect = checker; - return this; - } - if (checker === null) { - delete this.getRect; - return this; - } - return this.getRect; + + return getElementRect(element); + } + /** + * Returns or sets the function used to calculate the interactable's + * element's rectangle + * + * @param {function} [checker] A function which returns this Interactable's + * bounding rectangle. See {@link Interactable.getRect} + * @return {function | object} The checker function or this Interactable + */ + + + rectChecker(checker) { + if (is.func(checker)) { + this.getRect = checker; + return this; } - _backCompatOption(optionName, newValue) { - if (trySelector(newValue) || is.object(newValue)) { - this.options[optionName] = newValue; - for (const action of this._actions.names) { - this.options[action][optionName] = newValue; - } - return this; - } - return this.options[optionName]; + + if (checker === null) { + delete this.getRect; + return this; } - /** - * Gets or sets the origin of the Interactable's element. The x and y - * of the origin will be subtracted from action event coordinates. - * - * @param {Element | object | string} [origin] An HTML or SVG Element whose - * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self' - * or any CSS selector - * - * @return {object} The current origin or this Interactable - */ - origin(newValue) { - return this._backCompatOption('origin', newValue); + + return this.getRect; + } + + _backCompatOption(optionName, newValue) { + if (trySelector(newValue) || is.object(newValue)) { + this.options[optionName] = newValue; + + for (const action of this._actions.names) { + this.options[action][optionName] = newValue; + } + + return this; } - /** - * Returns or sets the mouse coordinate types used to calculate the - * movement of the pointer. - * - * @param {string} [newValue] Use 'client' if you will be scrolling while - * interacting; Use 'page' if you want autoScroll to work - * @return {string | object} The current deltaSource or this Interactable - */ - deltaSource(newValue) { - if (newValue === 'page' || newValue === 'client') { - this.options.deltaSource = newValue; - return this; - } - return this.options.deltaSource; + + return this.options[optionName]; + } + /** + * Gets or sets the origin of the Interactable's element. The x and y + * of the origin will be subtracted from action event coordinates. + * + * @param {Element | object | string} [origin] An HTML or SVG Element whose + * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self' + * or any CSS selector + * + * @return {object} The current origin or this Interactable + */ + + + origin(newValue) { + return this._backCompatOption('origin', newValue); + } + /** + * Returns or sets the mouse coordinate types used to calculate the + * movement of the pointer. + * + * @param {string} [newValue] Use 'client' if you will be scrolling while + * interacting; Use 'page' if you want autoScroll to work + * @return {string | object} The current deltaSource or this Interactable + */ + + + deltaSource(newValue) { + if (newValue === 'page' || newValue === 'client') { + this.options.deltaSource = newValue; + return this; } - /** - * Gets the selector context Node of the Interactable. The default is - * `window.document`. - * - * @return {Node} The context Node of this Interactable - */ - context() { - return this._context; + + return this.options.deltaSource; + } + /** + * Gets the selector context Node of the Interactable. The default is + * `window.document`. + * + * @return {Node} The context Node of this Interactable + */ + + + context() { + return this._context; + } + + inContext(element) { + return this._context === element.ownerDocument || nodeContains(this._context, element); + } + + testIgnoreAllow(options, targetNode, eventTarget) { + return !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) && this.testAllow(options.allowFrom, targetNode, eventTarget); + } + + testAllow(allowFrom, targetNode, element) { + if (!allowFrom) { + return true; } - inContext(element) { - return (this._context === element.ownerDocument || - nodeContains(this._context, element)); + + if (!is.element(element)) { + return false; } - testIgnoreAllow(options, targetNode, eventTarget) { - return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) && - this.testAllow(options.allowFrom, targetNode, eventTarget)); + + if (is.string(allowFrom)) { + return matchesUpTo(element, allowFrom, targetNode); + } else if (is.element(allowFrom)) { + return nodeContains(allowFrom, element); } - testAllow(allowFrom, targetNode, element) { - if (!allowFrom) { - return true; - } - if (!is.element(element)) { - return false; - } - if (is.string(allowFrom)) { - return matchesUpTo(element, allowFrom, targetNode); - } - else if (is.element(allowFrom)) { - return nodeContains(allowFrom, element); - } - return false; + + return false; + } + + testIgnore(ignoreFrom, targetNode, element) { + if (!ignoreFrom || !is.element(element)) { + return false; } - testIgnore(ignoreFrom, targetNode, element) { - if (!ignoreFrom || !is.element(element)) { - return false; - } - if (is.string(ignoreFrom)) { - return matchesUpTo(element, ignoreFrom, targetNode); - } - else if (is.element(ignoreFrom)) { - return nodeContains(ignoreFrom, element); - } - return false; + + if (is.string(ignoreFrom)) { + return matchesUpTo(element, ignoreFrom, targetNode); + } else if (is.element(ignoreFrom)) { + return nodeContains(ignoreFrom, element); } - /** - * Calls listeners for the given InteractEvent type bound globally - * and directly to this Interactable - * - * @param {InteractEvent} iEvent The InteractEvent object to be fired on this - * Interactable - * @return {Interactable} this Interactable - */ - fire(iEvent) { - this.events.fire(iEvent); - return this; + + return false; + } + /** + * Calls listeners for the given InteractEvent type bound globally + * and directly to this Interactable + * + * @param {InteractEvent} iEvent The InteractEvent object to be fired on this + * Interactable + * @return {Interactable} this Interactable + */ + + + fire(iEvent) { + this.events.fire(iEvent); + return this; + } + + _onOff(method, typeArg, listenerArg, options) { + if (is.object(typeArg) && !is.array(typeArg)) { + options = listenerArg; + listenerArg = null; } - _onOff(method, typeArg, listenerArg, options) { - if (is.object(typeArg) && !is.array(typeArg)) { - options = listenerArg; - listenerArg = null; - } - const addRemove = method === 'on' ? 'add' : 'remove'; - const listeners = normalizeListeners(typeArg, listenerArg); - for (let type in listeners) { - if (type === 'wheel') { - type = browser.wheelEvent; + + const addRemove = method === 'on' ? 'add' : 'remove'; + const listeners = normalizeListeners(typeArg, listenerArg); + + for (let type in listeners) { + if (type === 'wheel') { + type = browser.wheelEvent; + } + + for (const listener of listeners[type]) { + // if it is an action event type + if (arr.contains(this._actions.eventTypes, type)) { + this.events[method](type, listener); + } // delegated event + else if (is.string(this.target)) { + events[`${addRemove}Delegate`](this.target, this._context, type, listener, options); + } // remove listener from this Interactable's element + else { + events[addRemove](this.target, type, listener, options); } - for (const listener of listeners[type]) { - // if it is an action event type - if (arr.contains(this._actions.eventTypes, type)) { - this.events[method](type, listener); - } - // delegated event - else if (is.string(this.target)) { - events[`${addRemove}Delegate`](this.target, this._context, type, listener, options); - } - // remove listener from this Interactable's element - else { - events[addRemove](this.target, type, listener, options); - } - } - } - return this; + } } - /** - * Binds a listener for an InteractEvent, pointerEvent or DOM event. - * - * @param {string | array | object} types The types of events to listen - * for - * @param {function | array | object} [listener] The event listener function(s) - * @param {object | boolean} [options] options object or useCapture flag for - * addEventListener - * @return {Interactable} This Interactable - */ - on(types, listener, options) { - return this._onOff('on', types, listener, options); + + return this; + } + /** + * Binds a listener for an InteractEvent, pointerEvent or DOM event. + * + * @param {string | array | object} types The types of events to listen + * for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * addEventListener + * @return {Interactable} This Interactable + */ + + + on(types, listener, options) { + return this._onOff('on', types, listener, options); + } + /** + * Removes an InteractEvent, pointerEvent or DOM event listener. + * + * @param {string | array | object} types The types of events that were + * listened for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * removeEventListener + * @return {Interactable} This Interactable + */ + + + off(types, listener, options) { + return this._onOff('off', types, listener, options); + } + /** + * Reset the options of this Interactable + * + * @param {object} options The new settings to apply + * @return {object} This Interactable + */ + + + set(options) { + const defaults = this._defaults; + + if (!is.object(options)) { + options = {}; } - /** - * Removes an InteractEvent, pointerEvent or DOM event listener. - * - * @param {string | array | object} types The types of events that were - * listened for - * @param {function | array | object} [listener] The event listener function(s) - * @param {object | boolean} [options] options object or useCapture flag for - * removeEventListener - * @return {Interactable} This Interactable - */ - off(types, listener, options) { - return this._onOff('off', types, listener, options); + + this.options = clone(defaults.base); + + for (const actionName in this._actions.methodDict) { + const methodName = this._actions.methodDict[actionName]; + this.options[actionName] = {}; + this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName])); + this[methodName](options[actionName]); } - /** - * Reset the options of this Interactable - * - * @param {object} options The new settings to apply - * @return {object} This Interactable - */ - set(options) { - const defaults = this._defaults; - if (!is.object(options)) { - options = {}; - } - this.options = clone(defaults.base); - for (const actionName in this._actions.methodDict) { - const methodName = this._actions.methodDict[actionName]; - this.options[actionName] = {}; - this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName])); - this[methodName](options[actionName]); - } - for (const setting in options) { - if (is.func(this[setting])) { - this[setting](options[setting]); - } - } - return this; + + for (const setting in options) { + if (is.func(this[setting])) { + this[setting](options[setting]); + } } - /** - * Remove this interactable from the list of interactables and remove it's - * action capabilities and event listeners - * - * @return {interact} - */ - unset() { - events.remove(this.target, 'all'); - if (is.string(this.target)) { - // remove delegated events - for (const type in events.delegatedEvents) { - const delegated = events.delegatedEvents[type]; - if (delegated.selectors[0] === this.target && - delegated.contexts[0] === this._context) { - delegated.selectors.splice(0, 1); - delegated.contexts.splice(0, 1); - delegated.listeners.splice(0, 1); - // remove the arrays if they are empty - if (!delegated.selectors.length) { - delegated[type] = null; - } - } - events.remove(this._context, type, events.delegateListener); - events.remove(this._context, type, events.delegateUseCapture, true); - } - } - else { - events.remove(this.target, 'all'); + + return this; + } + /** + * Remove this interactable from the list of interactables and remove it's + * action capabilities and event listeners + * + * @return {interact} + */ + + + unset() { + events.remove(this.target, 'all'); + + if (is.string(this.target)) { + // remove delegated events + for (const type in events.delegatedEvents) { + const delegated = events.delegatedEvents[type]; + + if (delegated.selectors[0] === this.target && delegated.contexts[0] === this._context) { + delegated.selectors.splice(0, 1); + delegated.contexts.splice(0, 1); + delegated.listeners.splice(0, 1); // remove the arrays if they are empty + + if (!delegated.selectors.length) { + delegated[type] = null; + } } + + events.remove(this._context, type, events.delegateListener); + events.remove(this._context, type, events.delegateUseCapture, true); + } + } else { + events.remove(this.target, 'all'); } + } + } export default Interactable; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSW50ZXJhY3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ25HLE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFBO0FBQzdDLE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxrQkFBa0IsTUFBTSxzQ0FBc0MsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFcEQsT0FBTyxTQUFTLE1BQU0sYUFBYSxDQUFBO0FBS25DLE1BQU07QUFDTixNQUFNLE9BQU8sWUFBWTtJQWlCdkIsTUFBTTtJQUNOLFlBQWEsTUFBdUIsRUFBRSxPQUFZLEVBQUUsY0FBMkM7UUFOdEYsV0FBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUE7UUFPL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUssTUFBTSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUE7UUFDakQsSUFBSSxDQUFDLElBQUksR0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2RSxJQUFJLENBQUMsSUFBSSxHQUFPLElBQUksQ0FB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TSxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFOUMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNO29CQUN0QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQzNDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtvQkFDaEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO29CQUMvQixTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBRWhDLHNDQUFzQztvQkFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO3dCQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFBO3FCQUN2QjtpQkFDRjtnQkFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dCQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTthQUNwRTtTQUNGO2FBQ0k7WUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFjLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDMUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLFlBQVksQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFyciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9hcnInXG5pbXBvcnQgYnJvd3NlciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9icm93c2VyJ1xuaW1wb3J0IGNsb25lIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2Nsb25lJ1xuaW1wb3J0IHsgZ2V0RWxlbWVudFJlY3QsIG1hdGNoZXNVcFRvLCBub2RlQ29udGFpbnMsIHRyeVNlbGVjdG9yIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tVXRpbHMnXG5pbXBvcnQgZXZlbnRzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V2ZW50cydcbmltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5pbXBvcnQgbm9ybWFsaXplTGlzdGVuZXJzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL25vcm1hbGl6ZUxpc3RlbmVycydcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3dpbmRvdydcbmltcG9ydCB7IEFjdGlvbkRlZmF1bHRzLCBEZWZhdWx0cywgT3B0aW9ucyB9IGZyb20gJy4vZGVmYXVsdE9wdGlvbnMnXG5pbXBvcnQgRXZlbnRhYmxlIGZyb20gJy4vRXZlbnRhYmxlJ1xuaW1wb3J0IHsgQWN0aW9ucyB9IGZyb20gJy4vc2NvcGUnXG5cbnR5cGUgSWdub3JlVmFsdWUgPSBzdHJpbmcgfCBJbnRlcmFjdC5FbGVtZW50IHwgYm9vbGVhblxuXG4vKiogKi9cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGFibGUgaW1wbGVtZW50cyBQYXJ0aWFsPEV2ZW50YWJsZT4ge1xuICBwcm90ZWN0ZWQgZ2V0IF9kZWZhdWx0cyAoKTogRGVmYXVsdHMge1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlOiB7fSxcbiAgICAgIHBlckFjdGlvbjoge30sXG4gICAgICBhY3Rpb25zOiB7fSBhcyBBY3Rpb25EZWZhdWx0cyxcbiAgICB9XG4gIH1cblxuICByZWFkb25seSBvcHRpb25zITogUmVxdWlyZWQ8T3B0aW9ucz5cbiAgcmVhZG9ubHkgX2FjdGlvbnM6IEFjdGlvbnNcbiAgcmVhZG9ubHkgdGFyZ2V0OiBJbnRlcmFjdC5UYXJnZXRcbiAgcmVhZG9ubHkgZXZlbnRzID0gbmV3IEV2ZW50YWJsZSgpXG4gIHJlYWRvbmx5IF9jb250ZXh0OiBEb2N1bWVudCB8IEludGVyYWN0LkVsZW1lbnRcbiAgcmVhZG9ubHkgX3dpbjogV2luZG93XG4gIHJlYWRvbmx5IF9kb2M6IERvY3VtZW50XG5cbiAgLyoqICovXG4gIGNvbnN0cnVjdG9yICh0YXJnZXQ6IEludGVyYWN0LlRhcmdldCwgb3B0aW9uczogYW55LCBkZWZhdWx0Q29udGV4dDogRG9jdW1lbnQgfCBJbnRlcmFjdC5FbGVtZW50KSB7XG4gICAgdGhpcy5fYWN0aW9ucyA9IG9wdGlvbnMuYWN0aW9uc1xuICAgIHRoaXMudGFyZ2V0ICAgPSB0YXJnZXRcbiAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0IHx8IGRlZmF1bHRDb250ZXh0XG4gICAgdGhpcy5fd2luICAgICA9IGdldFdpbmRvdyh0cnlTZWxlY3Rvcih0YXJnZXQpID8gdGhpcy5fY29udGV4dCA6IHRhcmdldClcbiAgICB0aGlzLl9kb2MgICAgID0gdGhpcy5fd2luLmRvY3VtZW50XG5cbiAgICB0aGlzLnNldChvcHRpb25zKVxuICB9XG5cbiAgc2V0T25FdmVudHMgKGFjdGlvbk5hbWU6IHN0cmluZywgcGhhc2VzOiBOb25OdWxsYWJsZTxhbnk+KSB7XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9uc3RhcnQpKSB7IHRoaXMub24oYCR7YWN0aW9uTmFtZX1zdGFydGAsIHBoYXNlcy5vbnN0YXJ0KSB9XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9ubW92ZSkpIHsgdGhpcy5vbihgJHthY3Rpb25OYW1lfW1vdmVgLCBwaGFzZXMub25tb3ZlKSB9XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9uZW5kKSkgeyB0aGlzLm9uKGAke2FjdGlvbk5hbWV9ZW5kYCwgcGhhc2VzLm9uZW5kKSB9XG4gICAgaWYgKGlzLmZ1bmMocGhhc2VzLm9uaW5lcnRpYXN0YXJ0KSkgeyB0aGlzLm9uKGAke2FjdGlvbk5hbWV9aW5lcnRpYXN0YXJ0YCwgcGhhc2VzLm9uaW5lcnRpYXN0YXJ0KSB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgdXBkYXRlUGVyQWN0aW9uTGlzdGVuZXJzIChhY3Rpb25OYW1lLCBwcmV2LCBjdXIpIHtcbiAgICBpZiAoaXMuYXJyYXkocHJldikgfHwgaXMub2JqZWN0KHByZXYpKSB7XG4gICAgICB0aGlzLm9mZihhY3Rpb25OYW1lLCBwcmV2KVxuICAgIH1cblxuICAgIGlmIChpcy5hcnJheShjdXIpIHx8IGlzLm9iamVjdChjdXIpKSB7XG4gICAgICB0aGlzLm9uKGFjdGlvbk5hbWUsIGN1cilcbiAgICB9XG4gIH1cblxuICBzZXRQZXJBY3Rpb24gKGFjdGlvbk5hbWUsIG9wdGlvbnM6IEludGVyYWN0Lk9yQm9vbGVhbjxPcHRpb25zPikge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5fZGVmYXVsdHNcblxuICAgIC8vIGZvciBhbGwgdGhlIGRlZmF1bHQgcGVyLWFjdGlvbiBvcHRpb25zXG4gICAgZm9yIChjb25zdCBvcHRpb25OYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk9wdGlvbnMgPSB0aGlzLm9wdGlvbnNbYWN0aW9uTmFtZV1cbiAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gb3B0aW9uc1tvcHRpb25OYW1lXVxuICAgICAgY29uc3QgaXNBcnJheSA9IGlzLmFycmF5KG9wdGlvblZhbHVlKVxuXG4gICAgICAvLyByZW1vdmUgb2xkIGV2ZW50IGxpc3RlbmVycyBhbmQgYWRkIG5ldyBvbmVzXG4gICAgICBpZiAob3B0aW9uTmFtZSA9PT0gJ2xpc3RlbmVycycpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQZXJBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTmFtZSwgYWN0aW9uT3B0aW9ucy5saXN0ZW5lcnMsIG9wdGlvblZhbHVlKVxuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgb3B0aW9uIHZhbHVlIGlzIGFuIGFycmF5XG4gICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICBhY3Rpb25PcHRpb25zW29wdGlvbk5hbWVdID0gYXJyLmZyb20ob3B0aW9uVmFsdWUpXG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgb3B0aW9uIHZhbHVlIGlzIGFuIG9iamVjdFxuICAgICAgZWxzZSBpZiAoIWlzQXJyYXkgJiYgaXMucGxhaW5PYmplY3Qob3B0aW9uVmFsdWUpKSB7XG4gICAgICAgIC8vIGNvcHkgdGhlIG9iamVjdFxuICAgICAgICBhY3Rpb25PcHRpb25zW29wdGlvbk5hbWVdID0gZXh0ZW5kKFxuICAgICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0gfHwge30sXG4gICAgICAgICAgY2xvbmUob3B0aW9uVmFsdWUpKVxuXG4gICAgICAgIC8vIHNldCBhbmFibGVkIGZpZWxkIHRvIHRydWUgaWYgaXQgZXhpc3RzIGluIHRoZSBkZWZhdWx0c1xuICAgICAgICBpZiAoaXMub2JqZWN0KGRlZmF1bHRzLnBlckFjdGlvbltvcHRpb25OYW1lXSkgJiYgJ2VuYWJsZWQnIGluIGRlZmF1bHRzLnBlckFjdGlvbltvcHRpb25OYW1lXSkge1xuICAgICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0uZW5hYmxlZCA9IG9wdGlvblZhbHVlLmVuYWJsZWQgIT09IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBvcHRpb24gdmFsdWUgaXMgYSBib29sZWFuIGFuZCB0aGUgZGVmYXVsdCBpcyBhbiBvYmplY3RcbiAgICAgIGVsc2UgaWYgKGlzLmJvb2wob3B0aW9uVmFsdWUpICYmIGlzLm9iamVjdChkZWZhdWx0cy5wZXJBY3Rpb25bb3B0aW9uTmFtZV0pKSB7XG4gICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0uZW5hYmxlZCA9IG9wdGlvblZhbHVlXG4gICAgICB9XG4gICAgICAvLyBpZiBpdCdzIGFueXRoaW5nIGVsc2UsIGRvIGEgcGxhaW4gYXNzaWdubWVudFxuICAgICAgZWxzZSB7XG4gICAgICAgIGFjdGlvbk9wdGlvbnNbb3B0aW9uTmFtZV0gPSBvcHRpb25WYWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBnZXQgYW4gSW50ZXJhY3RhYmxlcyBib3VuZGluZyByZWN0LiBDYW4gYmVcbiAgICogb3ZlcnJpZGRlbiB1c2luZyB7QGxpbmsgSW50ZXJhY3RhYmxlLnJlY3RDaGVja2VyfS5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBbZWxlbWVudF0gVGhlIGVsZW1lbnQgdG8gbWVhc3VyZS5cbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgb2JqZWN0J3MgYm91bmRpbmcgcmVjdGFuZ2xlLlxuICAgKi9cbiAgZ2V0UmVjdCAoZWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCkge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IChpcy5lbGVtZW50KHRoaXMudGFyZ2V0KVxuICAgICAgPyB0aGlzLnRhcmdldFxuICAgICAgOiBudWxsKVxuXG4gICAgaWYgKGlzLnN0cmluZyh0aGlzLnRhcmdldCkpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IHRoaXMuX2NvbnRleHQucXVlcnlTZWxlY3Rvcih0aGlzLnRhcmdldClcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0RWxlbWVudFJlY3QoZWxlbWVudClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG9yIHNldHMgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbnRlcmFjdGFibGUnc1xuICAgKiBlbGVtZW50J3MgcmVjdGFuZ2xlXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjaGVja2VyXSBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhpcyBJbnRlcmFjdGFibGUnc1xuICAgKiBib3VuZGluZyByZWN0YW5nbGUuIFNlZSB7QGxpbmsgSW50ZXJhY3RhYmxlLmdldFJlY3R9XG4gICAqIEByZXR1cm4ge2Z1bmN0aW9uIHwgb2JqZWN0fSBUaGUgY2hlY2tlciBmdW5jdGlvbiBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgcmVjdENoZWNrZXIgKGNoZWNrZXI6IChlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50KSA9PiBhbnkpIHtcbiAgICBpZiAoaXMuZnVuYyhjaGVja2VyKSkge1xuICAgICAgdGhpcy5nZXRSZWN0ID0gY2hlY2tlclxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmIChjaGVja2VyID09PSBudWxsKSB7XG4gICAgICBkZWxldGUgdGhpcy5nZXRSZWN0XG5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjdFxuICB9XG5cbiAgX2JhY2tDb21wYXRPcHRpb24gKG9wdGlvbk5hbWUsIG5ld1ZhbHVlKSB7XG4gICAgaWYgKHRyeVNlbGVjdG9yKG5ld1ZhbHVlKSB8fCBpcy5vYmplY3QobmV3VmFsdWUpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWx1ZVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLl9hY3Rpb25zLm5hbWVzKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc1thY3Rpb25dW29wdGlvbk5hbWVdID0gbmV3VmFsdWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zW29wdGlvbk5hbWVdXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBvcmlnaW4gb2YgdGhlIEludGVyYWN0YWJsZSdzIGVsZW1lbnQuICBUaGUgeCBhbmQgeVxuICAgKiBvZiB0aGUgb3JpZ2luIHdpbGwgYmUgc3VidHJhY3RlZCBmcm9tIGFjdGlvbiBldmVudCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50IHwgb2JqZWN0IHwgc3RyaW5nfSBbb3JpZ2luXSBBbiBIVE1MIG9yIFNWRyBFbGVtZW50IHdob3NlXG4gICAqIHJlY3Qgd2lsbCBiZSB1c2VkLCBhbiBvYmplY3QgZWcuIHsgeDogMCwgeTogMCB9IG9yIHN0cmluZyAncGFyZW50JywgJ3NlbGYnXG4gICAqIG9yIGFueSBDU1Mgc2VsZWN0b3JcbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgY3VycmVudCBvcmlnaW4gb3IgdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIG9yaWdpbiAobmV3VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja0NvbXBhdE9wdGlvbignb3JpZ2luJywgbmV3VmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBvciBzZXRzIHRoZSBtb3VzZSBjb29yZGluYXRlIHR5cGVzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZVxuICAgKiBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuZXdWYWx1ZV0gVXNlICdjbGllbnQnIGlmIHlvdSB3aWxsIGJlIHNjcm9sbGluZyB3aGlsZVxuICAgKiBpbnRlcmFjdGluZzsgVXNlICdwYWdlJyBpZiB5b3Ugd2FudCBhdXRvU2Nyb2xsIHRvIHdvcmtcbiAgICogQHJldHVybiB7c3RyaW5nIHwgb2JqZWN0fSBUaGUgY3VycmVudCBkZWx0YVNvdXJjZSBvciB0aGlzIEludGVyYWN0YWJsZVxuICAgKi9cbiAgZGVsdGFTb3VyY2UgKG5ld1ZhbHVlKSB7XG4gICAgaWYgKG5ld1ZhbHVlID09PSAncGFnZScgfHwgbmV3VmFsdWUgPT09ICdjbGllbnQnKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVsdGFTb3VyY2UgPSBuZXdWYWx1ZVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGVsdGFTb3VyY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWxlY3RvciBjb250ZXh0IE5vZGUgb2YgdGhlIEludGVyYWN0YWJsZS4gVGhlIGRlZmF1bHQgaXNcbiAgICogYHdpbmRvdy5kb2N1bWVudGAuXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IFRoZSBjb250ZXh0IE5vZGUgb2YgdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIGNvbnRleHQgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0XG4gIH1cblxuICBpbkNvbnRleHQgKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gKHRoaXMuX2NvbnRleHQgPT09IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fFxuICAgICAgICAgICAgbm9kZUNvbnRhaW5zKHRoaXMuX2NvbnRleHQsIGVsZW1lbnQpKVxuICB9XG5cbiAgdGVzdElnbm9yZUFsbG93IChcbiAgICB0aGlzOiBJbnRlcmFjdGFibGUsXG4gICAgb3B0aW9uczogeyBpZ25vcmVGcm9tOiBJZ25vcmVWYWx1ZSwgYWxsb3dGcm9tOiBJZ25vcmVWYWx1ZSB9LFxuICAgIHRhcmdldE5vZGU6IE5vZGUsXG4gICAgZXZlbnRUYXJnZXQ6IEludGVyYWN0LkVsZW1lbnQsXG4gICkge1xuICAgIHJldHVybiAoIXRoaXMudGVzdElnbm9yZShvcHRpb25zLmlnbm9yZUZyb20sIHRhcmdldE5vZGUsIGV2ZW50VGFyZ2V0KSAmJlxuICAgICAgICAgICAgdGhpcy50ZXN0QWxsb3cob3B0aW9ucy5hbGxvd0Zyb20sIHRhcmdldE5vZGUsIGV2ZW50VGFyZ2V0KSlcbiAgfVxuXG4gIHRlc3RBbGxvdyAoXG4gICAgdGhpczogSW50ZXJhY3RhYmxlLFxuICAgIGFsbG93RnJvbTogSWdub3JlVmFsdWUsXG4gICAgdGFyZ2V0Tm9kZTogTm9kZSxcbiAgICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50LFxuICApIHtcbiAgICBpZiAoIWFsbG93RnJvbSkgeyByZXR1cm4gdHJ1ZSB9XG5cbiAgICBpZiAoIWlzLmVsZW1lbnQoZWxlbWVudCkpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmIChpcy5zdHJpbmcoYWxsb3dGcm9tKSkge1xuICAgICAgcmV0dXJuIG1hdGNoZXNVcFRvKGVsZW1lbnQsIGFsbG93RnJvbSwgdGFyZ2V0Tm9kZSlcbiAgICB9XG4gICAgZWxzZSBpZiAoaXMuZWxlbWVudChhbGxvd0Zyb20pKSB7XG4gICAgICByZXR1cm4gbm9kZUNvbnRhaW5zKGFsbG93RnJvbSwgZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRlc3RJZ25vcmUgKFxuICAgIHRoaXM6IEludGVyYWN0YWJsZSxcbiAgICBpZ25vcmVGcm9tOiBJZ25vcmVWYWx1ZSxcbiAgICB0YXJnZXROb2RlOiBOb2RlLFxuICAgIGVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQsXG4gICkge1xuICAgIGlmICghaWdub3JlRnJvbSB8fCAhaXMuZWxlbWVudChlbGVtZW50KSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgaWYgKGlzLnN0cmluZyhpZ25vcmVGcm9tKSkge1xuICAgICAgcmV0dXJuIG1hdGNoZXNVcFRvKGVsZW1lbnQsIGlnbm9yZUZyb20sIHRhcmdldE5vZGUpXG4gICAgfVxuICAgIGVsc2UgaWYgKGlzLmVsZW1lbnQoaWdub3JlRnJvbSkpIHtcbiAgICAgIHJldHVybiBub2RlQ29udGFpbnMoaWdub3JlRnJvbSwgZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBsaXN0ZW5lcnMgZm9yIHRoZSBnaXZlbiBJbnRlcmFjdEV2ZW50IHR5cGUgYm91bmQgZ2xvYmFsbHlcbiAgICogYW5kIGRpcmVjdGx5IHRvIHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZXJhY3RFdmVudH0gaUV2ZW50IFRoZSBJbnRlcmFjdEV2ZW50IG9iamVjdCB0byBiZSBmaXJlZCBvbiB0aGlzXG4gICAqIEludGVyYWN0YWJsZVxuICAgKiBAcmV0dXJuIHtJbnRlcmFjdGFibGV9IHRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBmaXJlIChpRXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50cy5maXJlKGlFdmVudClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfb25PZmYgKG1ldGhvZDogJ29uJyB8ICdvZmYnLCB0eXBlQXJnOiBJbnRlcmFjdC5FdmVudFR5cGVzLCBsaXN0ZW5lckFyZz86IEludGVyYWN0Lkxpc3RlbmVyc0FyZyB8IG51bGwsIG9wdGlvbnM/OiBhbnkpIHtcbiAgICBpZiAoaXMub2JqZWN0KHR5cGVBcmcpICYmICFpcy5hcnJheSh0eXBlQXJnKSkge1xuICAgICAgb3B0aW9ucyA9IGxpc3RlbmVyQXJnXG4gICAgICBsaXN0ZW5lckFyZyA9IG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBhZGRSZW1vdmUgPSBtZXRob2QgPT09ICdvbicgPyAnYWRkJyA6ICdyZW1vdmUnXG4gICAgY29uc3QgbGlzdGVuZXJzID0gbm9ybWFsaXplTGlzdGVuZXJzKHR5cGVBcmcsIGxpc3RlbmVyQXJnKVxuXG4gICAgZm9yIChsZXQgdHlwZSBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgIGlmICh0eXBlID09PSAnd2hlZWwnKSB7IHR5cGUgPSBicm93c2VyLndoZWVsRXZlbnQgfVxuXG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgICAvLyBpZiBpdCBpcyBhbiBhY3Rpb24gZXZlbnQgdHlwZVxuICAgICAgICBpZiAoYXJyLmNvbnRhaW5zKHRoaXMuX2FjdGlvbnMuZXZlbnRUeXBlcywgdHlwZSkpIHtcbiAgICAgICAgICB0aGlzLmV2ZW50c1ttZXRob2RdKHR5cGUsIGxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICAgIC8vIGRlbGVnYXRlZCBldmVudFxuICAgICAgICBlbHNlIGlmIChpcy5zdHJpbmcodGhpcy50YXJnZXQpKSB7XG4gICAgICAgICAgZXZlbnRzW2Ake2FkZFJlbW92ZX1EZWxlZ2F0ZWBdKHRoaXMudGFyZ2V0LCB0aGlzLl9jb250ZXh0LCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgbGlzdGVuZXIgZnJvbSB0aGlzIEludGVyYWN0YWJsZSdzIGVsZW1lbnRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgKGV2ZW50c1thZGRSZW1vdmVdIGFzIHR5cGVvZiBldmVudHMucmVtb3ZlKSh0aGlzLnRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgbGlzdGVuZXIgZm9yIGFuIEludGVyYWN0RXZlbnQsIHBvaW50ZXJFdmVudCBvciBET00gZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXkgfCBvYmplY3R9IHR5cGVzIFRoZSB0eXBlcyBvZiBldmVudHMgdG8gbGlzdGVuXG4gICAqIGZvclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uIHwgYXJyYXkgfCBvYmplY3R9IFtsaXN0ZW5lcl0gVGhlIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uKHMpXG4gICAqIEBwYXJhbSB7b2JqZWN0IHwgYm9vbGVhbn0gW29wdGlvbnNdIG9wdGlvbnMgb2JqZWN0IG9yIHVzZUNhcHR1cmUgZmxhZyBmb3JcbiAgICogYWRkRXZlbnRMaXN0ZW5lclxuICAgKiBAcmV0dXJuIHtJbnRlcmFjdGFibGV9IFRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBvbiAodHlwZXM6IEludGVyYWN0LkV2ZW50VHlwZXMsIGxpc3RlbmVyPzogSW50ZXJhY3QuTGlzdGVuZXJzQXJnLCBvcHRpb25zPzogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX29uT2ZmKCdvbicsIHR5cGVzLCBsaXN0ZW5lciwgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIEludGVyYWN0RXZlbnQsIHBvaW50ZXJFdmVudCBvciBET00gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXkgfCBvYmplY3R9IHR5cGVzIFRoZSB0eXBlcyBvZiBldmVudHMgdGhhdCB3ZXJlXG4gICAqIGxpc3RlbmVkIGZvclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uIHwgYXJyYXkgfCBvYmplY3R9IFtsaXN0ZW5lcl0gVGhlIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uKHMpXG4gICAqIEBwYXJhbSB7b2JqZWN0IHwgYm9vbGVhbn0gW29wdGlvbnNdIG9wdGlvbnMgb2JqZWN0IG9yIHVzZUNhcHR1cmUgZmxhZyBmb3JcbiAgICogcmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgKiBAcmV0dXJuIHtJbnRlcmFjdGFibGV9IFRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBvZmYgKHR5cGVzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IEludGVyYWN0LkV2ZW50VHlwZXMsIGxpc3RlbmVyPzogSW50ZXJhY3QuTGlzdGVuZXJzQXJnLCBvcHRpb25zPzogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX29uT2ZmKCdvZmYnLCB0eXBlcywgbGlzdGVuZXIsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIG9wdGlvbnMgb2YgdGhpcyBJbnRlcmFjdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgVGhlIG5ldyBzZXR0aW5ncyB0byBhcHBseVxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoaXMgSW50ZXJhY3RhYmxlXG4gICAqL1xuICBzZXQgKG9wdGlvbnM6IEludGVyYWN0Lk9wdGlvbnNBcmcpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHRoaXMuX2RlZmF1bHRzXG5cbiAgICBpZiAoIWlzLm9iamVjdChvcHRpb25zKSkge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgfVxuXG4gICAgKHRoaXMub3B0aW9ucyBhcyBSZXF1aXJlZDxPcHRpb25zPikgPSBjbG9uZShkZWZhdWx0cy5iYXNlKSBhcyBSZXF1aXJlZDxPcHRpb25zPlxuXG4gICAgZm9yIChjb25zdCBhY3Rpb25OYW1lIGluIHRoaXMuX2FjdGlvbnMubWV0aG9kRGljdCkge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IHRoaXMuX2FjdGlvbnMubWV0aG9kRGljdFthY3Rpb25OYW1lXVxuXG4gICAgICB0aGlzLm9wdGlvbnNbYWN0aW9uTmFtZV0gPSB7fVxuICAgICAgdGhpcy5zZXRQZXJBY3Rpb24oYWN0aW9uTmFtZSwgZXh0ZW5kKGV4dGVuZCh7fSwgZGVmYXVsdHMucGVyQWN0aW9uKSwgZGVmYXVsdHMuYWN0aW9uc1thY3Rpb25OYW1lXSkpXG5cbiAgICAgIHRoaXNbbWV0aG9kTmFtZV0ob3B0aW9uc1thY3Rpb25OYW1lXSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKGlzLmZ1bmModGhpc1tzZXR0aW5nXSkpIHtcbiAgICAgICAgdGhpc1tzZXR0aW5nXShvcHRpb25zW3NldHRpbmddKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoaXMgaW50ZXJhY3RhYmxlIGZyb20gdGhlIGxpc3Qgb2YgaW50ZXJhY3RhYmxlcyBhbmQgcmVtb3ZlIGl0J3NcbiAgICogYWN0aW9uIGNhcGFiaWxpdGllcyBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gICAqXG4gICAqIEByZXR1cm4ge2ludGVyYWN0fVxuICAgKi9cbiAgdW5zZXQgKCkge1xuICAgIGV2ZW50cy5yZW1vdmUodGhpcy50YXJnZXQgYXMgTm9kZSwgJ2FsbCcpXG5cbiAgICBpZiAoaXMuc3RyaW5nKHRoaXMudGFyZ2V0KSkge1xuICAgICAgLy8gcmVtb3ZlIGRlbGVnYXRlZCBldmVudHNcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMuZGVsZWdhdGVkRXZlbnRzKSB7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlZCA9IGV2ZW50cy5kZWxlZ2F0ZWRFdmVudHNbdHlwZV1cblxuICAgICAgICBpZiAoZGVsZWdhdGVkLnNlbGVjdG9yc1swXSA9PT0gdGhpcy50YXJnZXQgJiZcbiAgICAgICAgICAgIGRlbGVnYXRlZC5jb250ZXh0c1swXSA9PT0gdGhpcy5fY29udGV4dCkge1xuICAgICAgICAgIGRlbGVnYXRlZC5zZWxlY3RvcnMuc3BsaWNlKDAsIDEpXG4gICAgICAgICAgZGVsZWdhdGVkLmNvbnRleHRzLnNwbGljZSgwLCAxKVxuICAgICAgICAgIGRlbGVnYXRlZC5saXN0ZW5lcnMuc3BsaWNlKDAsIDEpXG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGFycmF5cyBpZiB0aGV5IGFyZSBlbXB0eVxuICAgICAgICAgIGlmICghZGVsZWdhdGVkLnNlbGVjdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRlbGVnYXRlZFt0eXBlXSA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBldmVudHMucmVtb3ZlKHRoaXMuX2NvbnRleHQsIHR5cGUsIGV2ZW50cy5kZWxlZ2F0ZUxpc3RlbmVyKVxuICAgICAgICBldmVudHMucmVtb3ZlKHRoaXMuX2NvbnRleHQsIHR5cGUsIGV2ZW50cy5kZWxlZ2F0ZVVzZUNhcHR1cmUsIHRydWUpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnRzLnJlbW92ZSh0aGlzLnRhcmdldCBhcyBOb2RlLCAnYWxsJylcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJhY3RhYmxlXG4iXX0= \ No newline at end of file +//# sourceMappingURL=Interactable.js.map \ No newline at end of file diff --git a/packages/core/Interactable.js.map b/packages/core/Interactable.js.map new file mode 100644 index 000000000..8898db046 --- /dev/null +++ b/packages/core/Interactable.js.map @@ -0,0 +1,114 @@ +{ + "version": 3, + "sources": [ + "Interactable.ts" + ], + "names": [ + "arr", + "browser", + "clone", + "getElementRect", + "matchesUpTo", + "nodeContains", + "trySelector", + "events", + "extend", + "is", + "normalizeListeners", + "getWindow", + "Eventable", + "Interactable", + "_defaults", + "base", + "perAction", + "actions", + "constructor", + "target", + "options", + "defaultContext", + "_actions", + "_context", + "context", + "_win", + "_doc", + "document", + "set", + "setOnEvents", + "actionName", + "phases", + "func", + "onstart", + "on", + "onmove", + "onend", + "oninertiastart", + "updatePerActionListeners", + "prev", + "cur", + "array", + "object", + "off", + "setPerAction", + "defaults", + "optionName", + "actionOptions", + "optionValue", + "isArray", + "listeners", + "from", + "plainObject", + "enabled", + "bool", + "getRect", + "element", + "string", + "querySelector", + "rectChecker", + "checker", + "_backCompatOption", + "newValue", + "action", + "names", + "origin", + "deltaSource", + "inContext", + "ownerDocument", + "testIgnoreAllow", + "targetNode", + "eventTarget", + "testIgnore", + "ignoreFrom", + "testAllow", + "allowFrom", + "fire", + "iEvent", + "_onOff", + "method", + "typeArg", + "listenerArg", + "addRemove", + "type", + "wheelEvent", + "listener", + "contains", + "eventTypes", + "types", + "methodDict", + "methodName", + "setting", + "unset", + "remove", + "delegatedEvents", + "delegated", + "selectors", + "contexts", + "splice", + "length", + "delegateListener", + "delegateUseCapture" + ], + "mappings": "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", + "sourcesContent": [ + "import * as arr from '../utils/arr'\nimport browser from '../utils/browser'\nimport clone from '../utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '../utils/domUtils'\nimport events from '../utils/events'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\nimport normalizeListeners from '../utils/normalizeListeners'\nimport { getWindow } from '../utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\ntype IgnoreValue = string | Interact.Element | boolean\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Interact.Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Interact.Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev) || is.object(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Interact.Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Interact.Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue },\n targetNode: Node,\n eventTarget: Interact.EventTarget,\n ) {\n return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget))\n }\n\n testAllow (\n this: Interactable,\n allowFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.EventTarget,\n ) {\n if (!allowFrom) { return true }\n\n if (!is.element(element)) { return false }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n }\n else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (\n this: Interactable,\n ignoreFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.EventTarget,\n ) {\n if (!ignoreFrom || !is.element(element)) { return false }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n }\n else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interactable'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" + ] +} \ No newline at end of file diff --git a/packages/core/Interactable.spec.js b/packages/core/Interactable.spec.js deleted file mode 100644 index ee4d1aa3e..000000000 --- a/packages/core/Interactable.spec.js +++ /dev/null @@ -1,109 +0,0 @@ -import d from '@interactjs/_dev/test/domator'; -import test from '@interactjs/_dev/test/test'; -import * as helpers from './tests/_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 unset correctly', t => { - const scope = helpers.mockScope(); - const div = d('div'); - const interactable = scope.interactables.new(div); - const mappingInfo = div[scope.id][0]; - scope.interactables.signals.fire('unset', { interactable }); - t.strictEqual(mappingInfo.context, null, 'unset mappingInfo context'); - t.strictEqual(mappingInfo.interactable, null, 'unset mappingInfo interactable'); - t.strictEqual(div[scope.id].length, 0, 'unset target are removed'); - 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RhYmxlLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJJbnRlcmFjdGFibGUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLENBQUMsTUFBTSwrQkFBK0IsQ0FBQTtBQUM3QyxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFBO0FBRTNDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFTLENBQUE7SUFDeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUUxQixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQTtJQUU5QyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxPQUFPO1FBQ3RELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BDLENBQUMsQ0FBQTtJQUVELFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHO1FBQ3RCLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUMzQixTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7S0FDMUIsQ0FBQTtJQUVELE1BQU0sU0FBUyxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFBO0lBRXpDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTtJ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Q0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtJQUVsRCxLQUFLLEdBQUcsRUFBRSxDQUFBO0lBQ1YsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDaEMsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3hDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFdEIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvZG9tYXRvcidcbmltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL3Rlc3RzL19oZWxwZXJzJ1xuXG50ZXN0KCdJbnRlcmFjdGFibGUgY29waWVzIGFuZCBleHRlbmRzIGRlZmF1bHRzJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKSBhcyBhbnlcbiAgY29uc3QgeyBkZWZhdWx0cyB9ID0gc2NvcGVcblxuICBzY29wZS5hY3Rpb25zLm1ldGhvZERpY3QgPSB7IHRlc3Q6ICd0ZXN0aXplJyB9XG5cbiAgc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS50ZXN0aXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB0aGlzLnNldFBlckFjdGlvbigndGVzdCcsIG9wdGlvbnMpXG4gIH1cblxuICBkZWZhdWx0cy5hY3Rpb25zLnRlc3QgPSB7XG4gICAgZnJvbURlZmF1bHQ6IHsgYTogMSwgYjogMiB9LFxuICAgIHNwZWNpZmllZDogeyBjOiAxLCBkOiAyIH0sXG4gIH1cblxuICBjb25zdCBzcGVjaWZpZWQgPSB7IHNwZWNpZmllZDogJ3BhcmVudCcgfVxuXG4gIGNvbnN0IGRpdiA9IGQoJ2RpdicpXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KGRpdiwgeyB0ZXN0OiBzcGVjaWZpZWQgfSlcblxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGFibGUub3B0aW9ucy50ZXN0LnNwZWNpZmllZCwgc3BlY2lmaWVkLnNwZWNpZmllZCxcbiAgICAnc3BlY2lmaWVkIG9wdGlvbnMgYXJlIHByb3Blcmx5IHNldCcpXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QuZnJvbURlZmF1bHQsIGRlZmF1bHRzLmFjdGlvbnMudGVzdC5mcm9tRGVmYXVsdCxcbiAgICAnZGVmYXVsdCBvcHRpb25zIGFyZSBwcm9wZXJseSBzZXQnKVxuICB0Lm5vdEVxdWFsKGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QuZnJvbURlZmF1bHQsIGRlZmF1bHRzLmFjdGlvbnMudGVzdC5mcm9tRGVmYXVsdCxcbiAgICAnZGVmYXVsdHMgYXJlIG5vdCBhbGlhc2VkJylcblxuICBkZWZhdWx0cy5hY3Rpb25zLnRlc3QuZnJvbURlZmF1bHQuYyA9IDNcbiAgdC5ub3RPaygnYycgaW4gaW50ZXJhY3RhYmxlLm9wdGlvbnMudGVzdC5mcm9tRGVmYXVsdCxcbiAgICAnbW9kaWZ5aW5nIGRlZmF1bHRzIGRvZXMgbm90IGFmZmVjdCBjb25zdHJ1Y3RlZCBpbnRlcmFjdGFibGVzJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGFibGUgdW5zZXQgY29ycmVjdGx5JywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKSBhcyBhbnlcblxuICBjb25zdCBkaXYgPSBkKCdkaXYnKVxuICBjb25zdCBpbnRlcmFjdGFibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLm5ldyhkaXYpXG5cbiAgY29uc3QgbWFwcGluZ0luZm8gPSBkaXZbc2NvcGUuaWRdWzBdXG5cbiAgc2NvcGUuaW50ZXJhY3RhYmxlcy5zaWduYWxzLmZpcmUoJ3Vuc2V0JywgeyBpbnRlcmFjdGFibGUgfSlcblxuICB0LnN0cmljdEVxdWFsKG1hcHBpbmdJbmZvLmNvbnRleHQsIG51bGwsXG4gICAgJ3Vuc2V0IG1hcHBpbmdJbmZvIGNvbnRleHQnKVxuXG4gIHQuc3RyaWN0RXF1YWwobWFwcGluZ0luZm8uaW50ZXJhY3RhYmxlLCBudWxsLFxuICAgICd1bnNldCBtYXBwaW5nSW5mbyBpbnRlcmFjdGFibGUnKVxuXG4gIHQuc3RyaWN0RXF1YWwoZGl2W3Njb3BlLmlkXS5sZW5ndGgsIDAsXG4gICAgJ3Vuc2V0IHRhcmdldCBhcmUgcmVtb3ZlZCcpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnSW50ZXJhY3RhYmxlIGNvcGllcyBhbmQgZXh0ZW5kcyBwZXIgYWN0aW9uIGRlZmF1bHRzJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlID0gaGVscGVycy5tb2NrU2NvcGUoKVxuICBjb25zdCB7IGRlZmF1bHRzIH0gPSBzY29wZVxuXG4gIHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdCA9IHsgdGVzdDogJ3Rlc3RpemUnIH1cblxuICBzY29wZS5JbnRlcmFjdGFibGUucHJvdG90eXBlLnRlc3RpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHRoaXMuc2V0UGVyQWN0aW9uKCd0ZXN0Jywgb3B0aW9ucylcbiAgfVxuXG4gIGRlZmF1bHRzLnBlckFjdGlvbi50ZXN0TW9kaWZpZXIgPSB7XG4gICAgZnJvbURlZmF1bHQ6IHsgYTogMSwgYjogMiB9LFxuICAgIHNwZWNpZmllZDogbnVsbCxcbiAgfVxuICBkZWZhdWx0cy5hY3Rpb25zLnRlc3QgPSB7IHRlc3RNb2RpZmllcjogZGVmYXVsdHMucGVyQWN0aW9uLnRlc3RNb2RpZmllciB9XG5cbiAgY29uc3QgZGl2ID0gZCgnZGl2JylcbiAgY29uc3QgaW50ZXJhY3RhYmxlID0gc2NvcGUuaW50ZXJhY3RhYmxlcy5uZXcoZGl2LCB7fSlcbiAgaW50ZXJhY3RhYmxlLnRlc3RpemUoeyB0ZXN0TW9kaWZpZXI6IHsgc3BlY2lmaWVkOiAncGFyZW50JyB9IH0pXG5cbiAgdC5kZWVwRXF1YWwoaW50ZXJhY3RhYmxlLm9wdGlvbnMudGVzdCwge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIG9yaWdpbjogeyB4OiAwLCB5OiAwIH0sXG5cbiAgICB0ZXN0TW9kaWZpZXI6IHtcbiAgICAgIGZyb21EZWZhdWx0OiB7IGE6IDEsIGI6IDIgfSxcbiAgICAgIHNwZWNpZmllZDogJ3BhcmVudCcsXG4gICAgfSxcbiAgfSwgJ3NwZWNpZmllZCBvcHRpb25zIGFyZSBwcm9wZXJseSBzZXQnKVxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGFibGUub3B0aW9ucy50ZXN0LnRlc3RNb2RpZmllci5mcm9tRGVmYXVsdCxcbiAgICBkZWZhdWx0cy5wZXJBY3Rpb24udGVzdE1vZGlmaWVyLmZyb21EZWZhdWx0LFxuICAgICdkZWZhdWx0IG9wdGlvbnMgYXJlIHByb3Blcmx5IHNldCcpXG4gIHQubm90RXF1YWwoXG4gICAgaW50ZXJhY3RhYmxlLm9wdGlvbnMudGVzdC50ZXN0TW9kaWZpZXIuZnJvbURlZmF1bHQsXG4gICAgZGVmYXVsdHMucGVyQWN0aW9uLnRlc3RNb2RpZmllci5mcm9tRGVmYXVsdCxcbiAgICAnZGVmYXVsdHMgYXJlIG5vdCBhbGlhc2VkJylcblxuICBkZWZhdWx0cy5wZXJBY3Rpb24udGVzdE1vZGlmaWVyLmZyb21EZWZhdWx0LmMgPSAzXG4gIHQubm90T2soJ2MnIGluIGludGVyYWN0YWJsZS5vcHRpb25zLnRlc3QudGVzdE1vZGlmaWVyLmZyb21EZWZhdWx0LFxuICAgICdtb2RpZnlpbmcgZGVmYXVsdHMgZG9lcyBub3QgYWZmZWN0IGNvbnN0cnVjdGVkIGludGVyYWN0YWJsZXMnKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0ludGVyYWN0YWJsZS51cGRhdGVQZXJBY3Rpb25MaXN0ZW5lcnMnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgbGV0IGZpcmVkID0gW11cbiAgZnVuY3Rpb24gYWRkVG9GaXJlZCAoZXZlbnQpIHsgZmlyZWQucHVzaChldmVudCkgfVxuXG4gIHNjb3BlLmFjdGlvbnMuZXZlbnRUeXBlcy5wdXNoKCd0ZXN0c3RhcnQnLCAndGVzdG1vdmUnLCAndGVzdGVuZCcpXG4gIHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdCA9IHsgdGVzdDogJ3Rlc3RpemUnIH1cbiAgc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS50ZXN0aXplID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB0aGlzLnNldFBlckFjdGlvbigndGVzdCcsIG9wdGlvbnMpXG4gIH1cblxuICBzY29wZS5kZWZhdWx0cy5hY3Rpb25zLnRlc3QgPSB7fVxuXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KCd0YXJnZXQnKVxuXG4gIGludGVyYWN0YWJsZS5zZXRQZXJBY3Rpb24oJ3Rlc3QnLCB7XG4gICAgbGlzdGVuZXJzOiBbe1xuICAgICAgc3RhcnQ6IGFkZFRvRmlyZWQsXG4gICAgICBtb3ZlOiBhZGRUb0ZpcmVkLFxuICAgICAgZW5kOiBhZGRUb0ZpcmVkLFxuICAgIH1dLFxuICB9KVxuXG4gIGludGVyYWN0YWJsZS5maXJlKHsgdHlwZTogJ3Rlc3RzdGFydCcgfSlcbiAgdC5kZWVwRXF1YWwoZmlyZWQubWFwKGUgPT4gZS50eXBlKSwgWyd0ZXN0c3RhcnQnXSlcblxuICBpbnRlcmFjdGFibGUuZmlyZSh7IHR5cGU6ICd0ZXN0bW92ZScgfSlcbiAgdC5kZWVwRXF1YWwoZmlyZWQubWFwKGUgPT4gZS50eXBlKSwgWyd0ZXN0c3RhcnQnLCAndGVzdG1vdmUnXSlcblxuICBpbnRlcmFjdGFibGUuZmlyZSh7IHR5cGU6ICd0ZXN0bm90YWRkZWQnIH0pXG4gIHQuZGVlcEVxdWFsKGZpcmVkLm1hcChlID0+IGUudHlwZSksIFsndGVzdHN0YXJ0JywgJ3Rlc3Rtb3ZlJ10pXG5cbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdGVuZCcgfSlcbiAgdC5kZWVwRXF1YWwoZmlyZWQubWFwKGUgPT4gZS50eXBlKSwgWyd0ZXN0c3RhcnQnLCAndGVzdG1vdmUnLCAndGVzdGVuZCddKVxuXG4gIGZpcmVkID0gW11cbiAgaW50ZXJhY3RhYmxlLnNldFBlckFjdGlvbigndGVzdCcsIHtcbiAgICBsaXN0ZW5lcnM6IFt7IHN0YXJ0OiBhZGRUb0ZpcmVkIH1dLFxuICB9KVxuXG4gIGludGVyYWN0YWJsZS5maXJlKHsgdHlwZTogJ3Rlc3RzdGFydCcgfSlcbiAgaW50ZXJhY3RhYmxlLmZpcmUoeyB0eXBlOiAndGVzdG1vdmUnIH0pXG4gIGludGVyYWN0YWJsZS5maXJlKHsgdHlwZTogJ3Rlc3RlbmQnIH0pXG4gIHQuZGVlcEVxdWFsKGZpcmVkLm1hcChlID0+IGUudHlwZSksIFsndGVzdHN0YXJ0J10pXG5cbiAgZmlyZWQgPSBbXVxuICBpbnRlcmFjdGFibGUuc2V0UGVyQWN0aW9uKCd0ZXN0Jywge1xuICAgIGxpc3RlbmVyczogbnVsbCxcbiAgfSlcblxuICBpbnRlcmFjdGFibGUuZmlyZSh7IHR5cGU6ICd0ZXN0c3RhcnQnIH0pXG4gIGludGVyYWN0YWJsZS5maXJlKHsgdHlwZTogJ3Rlc3Rtb3ZlJyB9KVxuICBpbnRlcmFjdGFibGUuZmlyZSh7IHR5cGU6ICd0ZXN0ZW5kJyB9KVxuICB0LmRlZXBFcXVhbChmaXJlZCwgW10pXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/core/InteractableSet.d.ts b/packages/core/InteractableSet.d.ts index 22c4659cb..70c906a54 100644 --- a/packages/core/InteractableSet.d.ts +++ b/packages/core/InteractableSet.d.ts @@ -1,7 +1,15 @@ -import Signals from '@interactjs/utils/Signals'; +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactable:new': { + interactable: Interact.Interactable; + target: Interact.Target; + options: Interact.OptionsArg; + win: Window; + }; + } +} export default class InteractableSet { protected scope: Interact.Scope; - signals: Signals; list: Interact.Interactable[]; selectorMap: { [selector: string]: Array<{ diff --git a/packages/core/InteractableSet.js b/packages/core/InteractableSet.js index 8088698c6..2babfe75b 100644 --- a/packages/core/InteractableSet.js +++ b/packages/core/InteractableSet.js @@ -1,89 +1,107 @@ -import * as arr from '@interactjs/utils/arr'; -import * as domUtils from '@interactjs/utils/domUtils'; -import extend from '@interactjs/utils/extend'; -import * as is from '@interactjs/utils/is'; -import Signals from '@interactjs/utils/Signals'; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import * as arr from "../utils/arr.js"; +import * as domUtils from "../utils/domUtils.js"; +import extend from "../utils/extend.js"; +import * as is from "../utils/is.js"; export default class InteractableSet { - constructor(scope) { - this.scope = scope; - this.signals = new Signals(); - // all set interactables - this.list = []; - this.selectorMap = {}; - this.signals.on('unset', ({ interactable }) => { - const { target, _context: context } = interactable; - const targetMappings = is.string(target) - ? this.selectorMap[target] - : target[this.scope.id]; - const targetIndex = targetMappings.findIndex(m => m.context === context); - if (targetMappings[targetIndex]) { - // Destroying mappingInfo's context and interactable - targetMappings[targetIndex].context = null; - targetMappings[targetIndex].interactable = null; - } - targetMappings.splice(targetIndex, 1); - }); - } - new(target, options) { - options = extend(options || {}, { - actions: this.scope.actions, - }); - const interactable = new this.scope.Interactable(target, options, this.scope.document); - const mappingInfo = { context: interactable._context, interactable }; - this.scope.addDocument(interactable._doc); - this.list.push(interactable); - if (is.string(target)) { - if (!this.selectorMap[target]) { - this.selectorMap[target] = []; - } - this.selectorMap[target].push(mappingInfo); + // all set interactables + constructor(scope) { + this.scope = scope; + + _defineProperty(this, "list", []); + + _defineProperty(this, "selectorMap", {}); + + scope.addListeners({ + 'interactable:unset': ({ + interactable + }) => { + const { + target, + _context: context + } = interactable; + const targetMappings = is.string(target) ? this.selectorMap[target] : target[this.scope.id]; + const targetIndex = targetMappings.findIndex(m => m.context === context); + + if (targetMappings[targetIndex]) { + // Destroying mappingInfo's context and interactable + targetMappings[targetIndex].context = null; + targetMappings[targetIndex].interactable = null; } - else { - if (!interactable.target[this.scope.id]) { - Object.defineProperty(target, this.scope.id, { - value: [], - configurable: true, - }); - } - target[this.scope.id].push(mappingInfo); - } - this.signals.fire('new', { - target, - options, - interactable, - win: this.scope._win, + + targetMappings.splice(targetIndex, 1); + } + }); + } + + new(target, options) { + options = extend(options || {}, { + actions: this.scope.actions + }); + const interactable = new this.scope.Interactable(target, options, this.scope.document); + const mappingInfo = { + context: interactable._context, + interactable + }; + this.scope.addDocument(interactable._doc); + this.list.push(interactable); + + if (is.string(target)) { + if (!this.selectorMap[target]) { + this.selectorMap[target] = []; + } + + this.selectorMap[target].push(mappingInfo); + } else { + if (!interactable.target[this.scope.id]) { + Object.defineProperty(target, this.scope.id, { + value: [], + configurable: true }); - return interactable; + } + + target[this.scope.id].push(mappingInfo); } - get(target, options) { - const context = (options && options.context) || this.scope.document; - const isSelector = is.string(target); - const targetMappings = isSelector - ? this.selectorMap[target] - : target[this.scope.id]; - if (!targetMappings) { - return null; - } - const found = arr.find(targetMappings, m => m.context === context && - (isSelector || m.interactable.inContext(target))); - return found && found.interactable; + + this.scope.fire('interactable:new', { + target, + options, + interactable, + win: this.scope._win + }); + return interactable; + } + + get(target, options) { + const context = options && options.context || this.scope.document; + const isSelector = is.string(target); + const targetMappings = isSelector ? this.selectorMap[target] : target[this.scope.id]; + + if (!targetMappings) { + return null; } - forEachMatch(node, callback) { - for (const interactable of this.list) { - let ret; - if ((is.string(interactable.target) - // target is a selector and the element matches - ? (is.element(node) && domUtils.matchesSelector(node, interactable.target)) - // target is the element - : node === interactable.target) && - // the element is in context - (interactable.inContext(node))) { - ret = callback(interactable); - } - if (ret !== undefined) { - return ret; - } - } + + const found = arr.find(targetMappings, m => m.context === context && (isSelector || m.interactable.inContext(target))); + return found && found.interactable; + } + + forEachMatch(node, callback) { + for (const interactable of this.list) { + let ret; + + if ((is.string(interactable.target) // target is a selector and the element matches + ? is.element(node) && domUtils.matchesSelector(node, interactable.target) : // target is the element + node === interactable.target) && // the element is in context + interactable.inContext(node)) { + ret = callback(interactable); + } + + if (ret !== undefined) { + return ret; + } } + } + } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RhYmxlU2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSW50ZXJhY3RhYmxlU2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxLQUFLLFFBQVEsTUFBTSw0QkFBNEIsQ0FBQTtBQUN0RCxPQUFPLE1BQU0sTUFBTSwwQkFBMEIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzFDLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBRS9DLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZUFBZTtJQVVsQyxZQUF1QixLQUFxQjtRQUFyQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQVQ1QyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtRQUV2Qix3QkFBd0I7UUFDeEIsU0FBSSxHQUE0QixFQUFFLENBQUE7UUFFbEMsZ0JBQVcsR0FFUCxFQUFFLENBQUE7UUFHSixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsWUFBWSxDQUFBO1lBQ2xELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUV6QixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQTtZQUN4RSxJQUFJLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRTtn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QVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXJELE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUE7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBSyxJQUFVLEVBQUUsUUFBb0Q7UUFDL0UsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3BDLElBQUksR0FBRyxDQUFBO1lBRVAsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsK0NBQStDO2dCQUM3QyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0Usd0JBQXdCO2dCQUN4QixDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLDRCQUE0QjtnQkFDNUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hDLEdBQUcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDN0I7WUFFRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JCLE9BQU8sR0FBRyxDQUFBO2FBQ1g7U0FDRjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFyciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9hcnInXG5pbXBvcnQgKiBhcyBkb21VdGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21VdGlscydcbmltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5pbXBvcnQgU2lnbmFscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9TaWduYWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnRlcmFjdGFibGVTZXQge1xuICBzaWduYWxzID0gbmV3IFNpZ25hbHMoKVxuXG4gIC8vIGFsbCBzZXQgaW50ZXJhY3RhYmxlc1xuICBsaXN0OiBJbnRlcmFjdC5JbnRlcmFjdGFibGVbXSA9IFtdXG5cbiAgc2VsZWN0b3JNYXA6IHtcbiAgICBbc2VsZWN0b3I6IHN0cmluZ106IEFycmF5PHsgY29udGV4dDogRG9jdW1lbnQgfCBJbnRlcmFjdC5FbGVtZW50LCBpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSB9PlxuICB9ID0ge31cblxuICBjb25zdHJ1Y3RvciAocHJvdGVjdGVkIHNjb3BlOiBJbnRlcmFjdC5TY29wZSkge1xuICAgIHRoaXMuc2lnbmFscy5vbigndW5zZXQnLCAoeyBpbnRlcmFjdGFibGUgfSkgPT4ge1xuICAgICAgY29uc3QgeyB0YXJnZXQsIF9jb250ZXh0OiBjb250ZXh0IH0gPSBpbnRlcmFjdGFibGVcbiAgICAgIGNvbnN0IHRhcmdldE1hcHBpbmdzID0gaXMuc3RyaW5nKHRhcmdldClcbiAgICAgICAgPyB0aGlzLnNlbGVjdG9yTWFwW3RhcmdldF1cbiAgICAgICAgOiB0YXJnZXRbdGhpcy5zY29wZS5pZF1cblxuICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0YXJnZXRNYXBwaW5ncy5maW5kSW5kZXgobSA9PiBtLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgICBpZiAodGFyZ2V0TWFwcGluZ3NbdGFyZ2V0SW5kZXhdKSB7XG4gICAgICAgIC8vIERlc3Ryb3lpbmcgbWFwcGluZ0luZm8ncyBjb250ZXh0IGFuZCBpbnRlcmFjdGFibGVcbiAgICAgICAgdGFyZ2V0TWFwcGluZ3NbdGFyZ2V0SW5kZXhdLmNvbnRleHQgPSBudWxsXG4gICAgICAgIHRhcmdldE1hcHBpbmdzW3RhcmdldEluZGV4XS5pbnRlcmFjdGFibGUgPSBudWxsXG4gICAgICB9XG4gICAgICB0YXJnZXRNYXBwaW5ncy5zcGxpY2UodGFyZ2V0SW5kZXgsIDEpXG4gICAgfSlcbiAgfVxuXG4gIG5ldyAodGFyZ2V0OiBJbnRlcmFjdC5UYXJnZXQsIG9wdGlvbnM/OiBhbnkpOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUge1xuICAgIG9wdGlvbnMgPSBleHRlbmQob3B0aW9ucyB8fCB7fSwge1xuICAgICAgYWN0aW9uczogdGhpcy5zY29wZS5hY3Rpb25zLFxuICAgIH0pXG4gICAgY29uc3QgaW50ZXJhY3RhYmxlID0gbmV3IHRoaXMuc2NvcGUuSW50ZXJhY3RhYmxlKHRhcmdldCwgb3B0aW9ucywgdGhpcy5zY29wZS5kb2N1bWVudClcbiAgICBjb25zdCBtYXBwaW5nSW5mbyA9IHsgY29udGV4dDogaW50ZXJhY3RhYmxlLl9jb250ZXh0LCBpbnRlcmFjdGFibGUgfVxuXG4gICAgdGhpcy5zY29wZS5hZGREb2N1bWVudChpbnRlcmFjdGFibGUuX2RvYylcbiAgICB0aGlzLmxpc3QucHVzaChpbnRlcmFjdGFibGUpXG5cbiAgICBpZiAoaXMuc3RyaW5nKHRhcmdldCkpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3Rvck1hcFt0YXJnZXRdKSB7IHRoaXMuc2VsZWN0b3JNYXBbdGFyZ2V0XSA9IFtdIH1cbiAgICAgIHRoaXMuc2VsZWN0b3JNYXBbdGFyZ2V0XS5wdXNoKG1hcHBpbmdJbmZvKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWludGVyYWN0YWJsZS50YXJnZXRbdGhpcy5zY29wZS5pZF0pIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdGhpcy5zY29wZS5pZCwge1xuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRhcmdldFt0aGlzLnNjb3BlLmlkXS5wdXNoKG1hcHBpbmdJbmZvKVxuICAgIH1cblxuICAgIHRoaXMuc2lnbmFscy5maXJlKCduZXcnLCB7XG4gICAgICB0YXJnZXQsXG4gICAgICBvcHRpb25zLFxuICAgICAgaW50ZXJhY3RhYmxlLFxuICAgICAgd2luOiB0aGlzLnNjb3BlLl93aW4sXG4gICAgfSlcblxuICAgIHJldHVybiBpbnRlcmFjdGFibGVcbiAgfVxuXG4gIGdldCAodGFyZ2V0OiBJbnRlcmFjdC5UYXJnZXQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0KSB8fCB0aGlzLnNjb3BlLmRvY3VtZW50XG4gICAgY29uc3QgaXNTZWxlY3RvciA9IGlzLnN0cmluZyh0YXJnZXQpXG4gICAgY29uc3QgdGFyZ2V0TWFwcGluZ3MgPSBpc1NlbGVjdG9yXG4gICAgICA/IHRoaXMuc2VsZWN0b3JNYXBbdGFyZ2V0IGFzIHN0cmluZ11cbiAgICAgIDogdGFyZ2V0W3RoaXMuc2NvcGUuaWRdXG5cbiAgICBpZiAoIXRhcmdldE1hcHBpbmdzKSB7IHJldHVybiBudWxsIH1cblxuICAgIGNvbnN0IGZvdW5kID0gYXJyLmZpbmQoXG4gICAgICB0YXJnZXRNYXBwaW5ncyxcbiAgICAgIG0gPT4gbS5jb250ZXh0ID09PSBjb250ZXh0ICYmXG4gICAgICAgIChpc1NlbGVjdG9yIHx8IG0uaW50ZXJhY3RhYmxlLmluQ29udGV4dCh0YXJnZXQpKSlcblxuICAgIHJldHVybiBmb3VuZCAmJiBmb3VuZC5pbnRlcmFjdGFibGVcbiAgfVxuXG4gIGZvckVhY2hNYXRjaDxUPiAobm9kZTogTm9kZSwgY2FsbGJhY2s6IChpbnRlcmFjdGFibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSkgPT4gVCk6IFQgfCB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGludGVyYWN0YWJsZSBvZiB0aGlzLmxpc3QpIHtcbiAgICAgIGxldCByZXRcblxuICAgICAgaWYgKChpcy5zdHJpbmcoaW50ZXJhY3RhYmxlLnRhcmdldClcbiAgICAgIC8vIHRhcmdldCBpcyBhIHNlbGVjdG9yIGFuZCB0aGUgZWxlbWVudCBtYXRjaGVzXG4gICAgICAgID8gKGlzLmVsZW1lbnQobm9kZSkgJiYgZG9tVXRpbHMubWF0Y2hlc1NlbGVjdG9yKG5vZGUsIGludGVyYWN0YWJsZS50YXJnZXQpKVxuICAgICAgICAvLyB0YXJnZXQgaXMgdGhlIGVsZW1lbnRcbiAgICAgICAgOiBub2RlID09PSBpbnRlcmFjdGFibGUudGFyZ2V0KSAmJlxuICAgICAgICAvLyB0aGUgZWxlbWVudCBpcyBpbiBjb250ZXh0XG4gICAgICAgIChpbnRlcmFjdGFibGUuaW5Db250ZXh0KG5vZGUpKSkge1xuICAgICAgICByZXQgPSBjYWxsYmFjayhpbnRlcmFjdGFibGUpXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=InteractableSet.js.map \ No newline at end of file diff --git a/packages/core/InteractableSet.js.map b/packages/core/InteractableSet.js.map new file mode 100644 index 000000000..b6bb37a4d --- /dev/null +++ b/packages/core/InteractableSet.js.map @@ -0,0 +1,61 @@ +{ + "version": 3, + "sources": [ + "InteractableSet.ts" + ], + "names": [ + "arr", + "domUtils", + "extend", + "is", + "InteractableSet", + "constructor", + "scope", + "addListeners", + "interactable", + "target", + "_context", + "context", + "targetMappings", + "string", + "selectorMap", + "id", + "targetIndex", + "findIndex", + "m", + "splice", + "new", + "options", + "actions", + "Interactable", + "document", + "mappingInfo", + "addDocument", + "_doc", + "list", + "push", + "Object", + "defineProperty", + "value", + "configurable", + "fire", + "win", + "_win", + "get", + "isSelector", + "found", + "find", + "inContext", + "forEachMatch", + "node", + "callback", + "ret", + "element", + "matchesSelector", + "undefined" + ], + "mappings": ";;AAAA,OAAO,KAAKA,GAAZ;AACA,OAAO,KAAKC,QAAZ;AACA,OAAOC,MAAP;AACA,OAAO,KAAKC,EAAZ;AAaA,eAAe,MAAMC,eAAN,CAAsB;AACnC;AAOAC,EAAAA,WAAW,CAAYC,KAAZ,EAAmC;AAAA,SAAvBA,KAAuB,GAAvBA,KAAuB;;AAAA,kCANd,EAMc;;AAAA,yCAF1C,EAE0C;;AAC5CA,IAAAA,KAAK,CAACC,YAAN,CAAmB;AACjB,4BAAsB,CAAC;AAAEC,QAAAA;AAAF,OAAD,KAAsB;AAC1C,cAAM;AAAEC,UAAAA,MAAF;AAAUC,UAAAA,QAAQ,EAAEC;AAApB,YAAgCH,YAAtC;AACA,cAAMI,cAAc,GAAGT,EAAE,CAACU,MAAH,CAAUJ,MAAV,IACnB,KAAKK,WAAL,CAAiBL,MAAjB,CADmB,GAEnBA,MAAM,CAAC,KAAKH,KAAL,CAAWS,EAAZ,CAFV;AAIA,cAAMC,WAAW,GAAGJ,cAAc,CAACK,SAAf,CAAyBC,CAAC,IAAIA,CAAC,CAACP,OAAF,KAAcA,OAA5C,CAApB;;AACA,YAAIC,cAAc,CAACI,WAAD,CAAlB,EAAiC;AACjC;AACEJ,UAAAA,cAAc,CAACI,WAAD,CAAd,CAA4BL,OAA5B,GAAsC,IAAtC;AACAC,UAAAA,cAAc,CAACI,WAAD,CAAd,CAA4BR,YAA5B,GAA2C,IAA3C;AACD;;AACDI,QAAAA,cAAc,CAACO,MAAf,CAAsBH,WAAtB,EAAmC,CAAnC;AACD;AAdgB,KAAnB;AAgBD;;AAEDI,EAAAA,GAAG,CAAEX,MAAF,EAA2BY,OAA3B,EAAiE;AAClEA,IAAAA,OAAO,GAAGnB,MAAM,CAACmB,OAAO,IAAI,EAAZ,EAAgB;AAC9BC,MAAAA,OAAO,EAAE,KAAKhB,KAAL,CAAWgB;AADU,KAAhB,CAAhB;AAGA,UAAMd,YAAY,GAAG,IAAI,KAAKF,KAAL,CAAWiB,YAAf,CAA4Bd,MAA5B,EAAoCY,OAApC,EAA6C,KAAKf,KAAL,CAAWkB,QAAxD,CAArB;AACA,UAAMC,WAAW,GAAG;AAAEd,MAAAA,OAAO,EAAEH,YAAY,CAACE,QAAxB;AAAkCF,MAAAA;AAAlC,KAApB;AAEA,SAAKF,KAAL,CAAWoB,WAAX,CAAuBlB,YAAY,CAACmB,IAApC;AACA,SAAKC,IAAL,CAAUC,IAAV,CAAerB,YAAf;;AAEA,QAAIL,EAAE,CAACU,MAAH,CAAUJ,MAAV,CAAJ,EAAuB;AACrB,UAAI,CAAC,KAAKK,WAAL,CAAiBL,MAAjB,CAAL,EAA+B;AAAE,aAAKK,WAAL,CAAiBL,MAAjB,IAA2B,EAA3B;AAA+B;;AAChE,WAAKK,WAAL,CAAiBL,MAAjB,EAAyBoB,IAAzB,CAA8BJ,WAA9B;AACD,KAHD,MAGO;AACL,UAAI,CAACjB,YAAY,CAACC,MAAb,CAAoB,KAAKH,KAAL,CAAWS,EAA/B,CAAL,EAAyC;AACvCe,QAAAA,MAAM,CAACC,cAAP,CAAsBtB,MAAtB,EAA8B,KAAKH,KAAL,CAAWS,EAAzC,EAA6C;AAC3CiB,UAAAA,KAAK,EAAE,EADoC;AAE3CC,UAAAA,YAAY,EAAE;AAF6B,SAA7C;AAID;;AAEDxB,MAAAA,MAAM,CAAC,KAAKH,KAAL,CAAWS,EAAZ,CAAN,CAAsBc,IAAtB,CAA2BJ,WAA3B;AACD;;AAED,SAAKnB,KAAL,CAAW4B,IAAX,CAAgB,kBAAhB,EAAoC;AAClCzB,MAAAA,MADkC;AAElCY,MAAAA,OAFkC;AAGlCb,MAAAA,YAHkC;AAIlC2B,MAAAA,GAAG,EAAE,KAAK7B,KAAL,CAAW8B;AAJkB,KAApC;AAOA,WAAO5B,YAAP;AACD;;AAED6B,EAAAA,GAAG,CAAE5B,MAAF,EAA2BY,OAA3B,EAAoC;AACrC,UAAMV,OAAO,GAAIU,OAAO,IAAIA,OAAO,CAACV,OAApB,IAAgC,KAAKL,KAAL,CAAWkB,QAA3D;AACA,UAAMc,UAAU,GAAGnC,EAAE,CAACU,MAAH,CAAUJ,MAAV,CAAnB;AACA,UAAMG,cAAc,GAAG0B,UAAU,GAC7B,KAAKxB,WAAL,CAAiBL,MAAjB,CAD6B,GAE7BA,MAAM,CAAC,KAAKH,KAAL,CAAWS,EAAZ,CAFV;;AAIA,QAAI,CAACH,cAAL,EAAqB;AAAE,aAAO,IAAP;AAAa;;AAEpC,UAAM2B,KAAK,GAAGvC,GAAG,CAACwC,IAAJ,CACZ5B,cADY,EAEZM,CAAC,IAAIA,CAAC,CAACP,OAAF,KAAcA,OAAd,KACF2B,UAAU,IAAIpB,CAAC,CAACV,YAAF,CAAeiC,SAAf,CAAyBhC,MAAzB,CADZ,CAFO,CAAd;AAKA,WAAO8B,KAAK,IAAIA,KAAK,CAAC/B,YAAtB;AACD;;AAEDkC,EAAAA,YAAY,CAAKC,IAAL,EAAiBC,QAAjB,EAAiF;AAC3F,SAAK,MAAMpC,YAAX,IAA2B,KAAKoB,IAAhC,EAAsC;AACpC,UAAIiB,GAAJ;;AAEA,UAAI,CAAC1C,EAAE,CAACU,MAAH,CAAUL,YAAY,CAACC,MAAvB,EACL;AADK,QAEAN,EAAE,CAAC2C,OAAH,CAAWH,IAAX,KAAoB1C,QAAQ,CAAC8C,eAAT,CAAyBJ,IAAzB,EAA+BnC,YAAY,CAACC,MAA5C,CAFpB,GAGH;AACEkC,MAAAA,IAAI,KAAKnC,YAAY,CAACC,MAJtB,KAKF;AACCD,MAAAA,YAAY,CAACiC,SAAb,CAAuBE,IAAvB,CANH,EAMkC;AAChCE,QAAAA,GAAG,GAAGD,QAAQ,CAACpC,YAAD,CAAd;AACD;;AAED,UAAIqC,GAAG,KAAKG,SAAZ,EAAuB;AACrB,eAAOH,GAAP;AACD;AACF;AACF;;AAhGkC", + "sourcesContent": [ + "import * as arr from '../utils/arr'\nimport * as domUtils from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interact.Interactable\n target: Interact.Target\n options: Interact.OptionsArg\n win: Window\n }\n }\n}\n\nexport default class InteractableSet {\n // all set interactables\n list: Interact.Interactable[] = []\n\n selectorMap: {\n [selector: string]: Array<{ context: Document | Interact.Element, interactable: Interact.Interactable }>\n } = {}\n\n constructor (protected scope: Interact.Scope) {\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings = is.string(target)\n ? this.selectorMap[target]\n : target[this.scope.id]\n\n const targetIndex = targetMappings.findIndex(m => m.context === context)\n if (targetMappings[targetIndex]) {\n // Destroying mappingInfo's context and interactable\n targetMappings[targetIndex].context = null\n targetMappings[targetIndex].interactable = null\n }\n targetMappings.splice(targetIndex, 1)\n },\n })\n }\n\n new (target: Interact.Target, options?: any): Interact.Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n const mappingInfo = { context: interactable._context, interactable }\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) { this.selectorMap[target] = [] }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!interactable.target[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n target[this.scope.id].push(mappingInfo)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Interact.Target, options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings = isSelector\n ? this.selectorMap[target as string]\n : target[this.scope.id]\n\n if (!targetMappings) { return null }\n\n const found = arr.find(\n targetMappings,\n m => m.context === context &&\n (isSelector || m.interactable.inContext(target)))\n\n return found && found.interactable\n }\n\n forEachMatch (node: Node, callback: (interactable: Interact.Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret\n\n if ((is.string(interactable.target)\n // target is a selector and the element matches\n ? (is.element(node) && domUtils.matchesSelector(node, interactable.target))\n // target is the element\n : node === interactable.target) &&\n // the element is in context\n (interactable.inContext(node))) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n" + ] +} \ No newline at end of file diff --git a/packages/core/Interaction.d.ts b/packages/core/Interaction.d.ts index 8f870f4c7..d88e742aa 100644 --- a/packages/core/Interaction.d.ts +++ b/packages/core/Interaction.d.ts @@ -1,4 +1,4 @@ -import * as utils from '@interactjs/utils'; +import * as utils from '../utils/index'; import Interactable from './Interactable'; import InteractEvent, { EventPhase } from './InteractEvent'; import PointerInfo from './PointerInfo'; @@ -25,6 +25,65 @@ export declare enum _ProxyMethods { stop = "", interacting = "" } +export declare type PointerArgProps = { + pointer: Interact.PointerType; + event: Interact.PointerEventType; + eventTarget: Interact.EventTarget; + pointerIndex: number; + interaction: Interaction; +} & T; +export interface DoPhaseArg { + event: Interact.PointerEventType; + phase: EventPhase; + interaction: Interaction; + iEvent: InteractEvent; + preEnd?: boolean; + type?: string; +} +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactions:new': { + interaction: Interaction; + }; + 'interactions:down': PointerArgProps<{ + type: 'down'; + }>; + 'interactions:move': PointerArgProps<{ + type: 'move'; + dx: number; + dy: number; + duplicate: boolean; + }>; + 'interactions:up': PointerArgProps<{ + type: 'up'; + curEventTarget: EventTarget; + }>; + 'interactions:cancel': SignalArgs['interactions:up'] & { + type: 'cancel'; + curEventTarget: EventTarget; + }; + 'interactions:update-pointer': PointerArgProps<{ + pointerInfo: PointerInfo; + down: boolean; + }>; + 'interactions:remove-pointer': PointerArgProps<{ + pointerInfo: PointerInfo; + }>; + 'interactions:blur': any; + 'interactions:before-action-start': Omit; + 'interactions:action-start': DoPhaseArg; + 'interactions:after-action-start': DoPhaseArg; + 'interactions:before-action-move': Omit; + 'interactions:action-move': DoPhaseArg; + 'interactions:after-action-move': DoPhaseArg; + 'interactions:before-action-end': Omit; + 'interactions:action-end': DoPhaseArg; + 'interactions:after-action-end': DoPhaseArg; + 'interactions:stop': { + interaction: Interaction; + }; + } +} export declare type _InteractionProxy = Pick; export declare class Interaction { interactable: Interactable; @@ -33,7 +92,7 @@ export declare class Interaction { edges: { [P in keyof Interact.Rect]?: boolean; }; - _signals: utils.Signals; + _scopeFire: Interact.Scope['fire']; prepared: ActionProps; pointerType: string; pointers: PointerInfo[]; @@ -52,7 +111,7 @@ export declare class Interaction { _stopped: boolean; _proxy: _InteractionProxy; simulation: any; - readonly pointerMoveTolerance: number; + get pointerMoveTolerance(): number; /** * @alias Interaction.prototype.move */ @@ -115,11 +174,11 @@ export declare class Interaction { }; }; /** */ - constructor({ pointerType, signals }: { + constructor({ pointerType, scopeFire }: { pointerType?: string; - signals: utils.Signals; + scopeFire: Interact.Scope['fire']; }); - pointerDown(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node): void; + pointerDown(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget): void; /** * ```js * interact(target) @@ -152,7 +211,7 @@ export declare class Interaction { * @return {object} interact */ start(action: StartAction, interactable: Interactable, element: Interact.Element): boolean; - pointerMove(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node): void; + pointerMove(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget): void; /** * ```js * interact(target) @@ -172,7 +231,7 @@ export declare class Interaction { * settings. */ move(signalArg?: any): void; - pointerUp(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, curEventTarget: EventTarget): void; + pointerUp(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, curEventTarget: Interact.EventTarget): void; documentBlur(event: any): void; /** * ```js @@ -197,13 +256,15 @@ export declare class Interaction { stop(): void; getPointerIndex(pointer: any): number; getPointerInfo(pointer: any): PointerInfo; - updatePointer(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, down?: boolean): number; + updatePointer(pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, down?: boolean): number; removePointer(pointer: Interact.PointerType, event: Interact.PointerEventType): void; _updateLatestPointer(pointer: any, event: any, eventTarget: any): void; destroy(): 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: Partial): boolean; + _doPhase(signalArg: Omit & { + iEvent?: InteractEvent; + }): boolean; _now(): number; } export default Interaction; diff --git a/packages/core/Interaction.js b/packages/core/Interaction.js index eb76290fd..709be87d7 100644 --- a/packages/core/Interaction.js +++ b/packages/core/Interaction.js @@ -1,413 +1,541 @@ -import * as utils from '@interactjs/utils'; -import InteractEvent, { EventPhase } from './InteractEvent'; -import PointerInfo from './PointerInfo'; -import { ActionName } from './scope'; -export var _ProxyValues; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import * as utils from "../utils/index.js"; +import InteractEvent, { EventPhase } from "./InteractEvent.js"; +import PointerInfo from "./PointerInfo.js"; +import { ActionName } from "./scope.js"; +export let _ProxyValues; + (function (_ProxyValues) { - _ProxyValues["interactable"] = ""; - _ProxyValues["element"] = ""; - _ProxyValues["prepared"] = ""; - _ProxyValues["pointerIsDown"] = ""; - _ProxyValues["pointerWasMoved"] = ""; - _ProxyValues["_proxy"] = ""; + _ProxyValues["interactable"] = ""; + _ProxyValues["element"] = ""; + _ProxyValues["prepared"] = ""; + _ProxyValues["pointerIsDown"] = ""; + _ProxyValues["pointerWasMoved"] = ""; + _ProxyValues["_proxy"] = ""; })(_ProxyValues || (_ProxyValues = {})); -export var _ProxyMethods; + +export let _ProxyMethods; + (function (_ProxyMethods) { - _ProxyMethods["start"] = ""; - _ProxyMethods["move"] = ""; - _ProxyMethods["end"] = ""; - _ProxyMethods["stop"] = ""; - _ProxyMethods["interacting"] = ""; + _ProxyMethods["start"] = ""; + _ProxyMethods["move"] = ""; + _ProxyMethods["end"] = ""; + _ProxyMethods["stop"] = ""; + _ProxyMethods["interacting"] = ""; })(_ProxyMethods || (_ProxyMethods = {})); + export class Interaction { - /** */ - constructor({ pointerType, signals }) { - // current interactable being interacted with - this.interactable = null; - // the target element of the interactable - this.element = null; - // action that's ready to be fired on next move event - this.prepared = { - name: null, - axis: null, - edges: null, - }; - // keep track of added pointers - this.pointers = []; - // pointerdown/mousedown/touchstart event - this.downEvent = null; - this.downPointer = {}; - this._latestPointer = { - pointer: null, - event: null, - eventTarget: null, - }; - // previous action event - this.prevEvent = null; - this.pointerIsDown = false; - this.pointerWasMoved = false; - this._interacting = false; - this._ending = false; - this._stopped = true; - this._proxy = null; - this.simulation = null; - /** - * @alias Interaction.prototype.move - */ - this.doMove = utils.warnOnce(function (signalArg) { - this.move(signalArg); - }, 'The interaction.doMove() method has been renamed to interaction.move()'); - this.coords = { - // Starting InteractEvent pointer coordinates - start: utils.pointer.newCoords(), - // Previous native pointer move event coordinates - prev: utils.pointer.newCoords(), - // current native pointer move event coordinates - cur: utils.pointer.newCoords(), - // Change in coordinates and time of the pointer - delta: utils.pointer.newCoords(), - // pointer velocity - velocity: utils.pointer.newCoords(), - }; - this._signals = signals; - this.pointerType = pointerType; - const that = this; - this._proxy = {}; - for (const key in _ProxyValues) { - Object.defineProperty(this._proxy, key, { - get() { return that[key]; }, - }); - } - for (const key in _ProxyMethods) { - Object.defineProperty(this._proxy, key, { - value: (...args) => that[key](...args), - }); + // current interactable being interacted with + // the target element of the interactable + // action that's ready to be fired on next move event + // keep track of added pointers + // pointerdown/mousedown/touchstart event + // previous action event + get pointerMoveTolerance() { + return 1; + } + /** + * @alias Interaction.prototype.move + */ + + + /** */ + constructor({ + pointerType, + scopeFire + }) { + _defineProperty(this, "interactable", null); + + _defineProperty(this, "element", null); + + _defineProperty(this, "rect", void 0); + + _defineProperty(this, "edges", void 0); + + _defineProperty(this, "_scopeFire", void 0); + + _defineProperty(this, "prepared", { + name: null, + axis: null, + edges: null + }); + + _defineProperty(this, "pointerType", void 0); + + _defineProperty(this, "pointers", []); + + _defineProperty(this, "downEvent", null); + + _defineProperty(this, "downPointer", {}); + + _defineProperty(this, "_latestPointer", { + pointer: null, + event: null, + eventTarget: null + }); + + _defineProperty(this, "prevEvent", null); + + _defineProperty(this, "pointerIsDown", false); + + _defineProperty(this, "pointerWasMoved", false); + + _defineProperty(this, "_interacting", false); + + _defineProperty(this, "_ending", false); + + _defineProperty(this, "_stopped", true); + + _defineProperty(this, "_proxy", null); + + _defineProperty(this, "simulation", null); + + _defineProperty(this, "doMove", utils.warnOnce(function (signalArg) { + this.move(signalArg); + }, 'The interaction.doMove() method has been renamed to interaction.move()')); + + _defineProperty(this, "coords", { + // Starting InteractEvent pointer coordinates + start: utils.pointer.newCoords(), + // Previous native pointer move event coordinates + prev: utils.pointer.newCoords(), + // current native pointer move event coordinates + cur: utils.pointer.newCoords(), + // Change in coordinates and time of the pointer + delta: utils.pointer.newCoords(), + // pointer velocity + velocity: utils.pointer.newCoords() + }); + + this._scopeFire = scopeFire; + this.pointerType = pointerType; + const that = this; + this._proxy = {}; + + for (const key in _ProxyValues) { + Object.defineProperty(this._proxy, key, { + get() { + return that[key]; } - this._signals.fire('new', { interaction: this }); - } - get pointerMoveTolerance() { - return 1; + + }); } - pointerDown(pointer, event, eventTarget) { - const pointerIndex = this.updatePointer(pointer, event, eventTarget, true); - this._signals.fire('down', { - pointer, - event, - eventTarget, - pointerIndex, - interaction: this, - }); + + for (const key in _ProxyMethods) { + Object.defineProperty(this._proxy, key, { + value: (...args) => that[key](...args) + }); } - /** - * ```js - * interact(target) - * .draggable({ - * // disable the default drag start by down->move - * manualStart: true - * }) - * // start dragging after the user holds the pointer down - * .on('hold', function (event) { - * var interaction = event.interaction - * - * if (!interaction.interacting()) { - * interaction.start({ name: 'drag' }, - * event.interactable, - * event.currentTarget) - * } - * }) - * ``` - * - * Start an action with the given Interactable and Element as tartgets. The - * action must be enabled for the target Interactable and an appropriate - * number of pointers must be held down - 1 for drag/resize, 2 for gesture. - * - * Use it with `interactable.able({ manualStart: false })` to always - * [start actions manually](https://github.com/taye/interact.js/issues/114) - * - * @param {object} action The action to be performed - drag, resize, etc. - * @param {Interactable} target The Interactable to target - * @param {Element} element The DOM Element to target - * @return {object} interact - */ - start(action, interactable, element) { - if (this.interacting() || - !this.pointerIsDown || - this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) || - !interactable.options[action.name].enabled) { - return false; - } - utils.copyAction(this.prepared, action); - this.interactable = interactable; - this.element = element; - this.rect = interactable.getRect(element); - this.edges = this.prepared.edges; - this._stopped = false; - this._interacting = this._doPhase({ - interaction: this, - event: this.downEvent, - phase: EventPhase.Start, - }) && !this._stopped; - return this._interacting; + + this._scopeFire('interactions:new', { + interaction: this + }); + } + + pointerDown(pointer, event, eventTarget) { + const pointerIndex = this.updatePointer(pointer, event, eventTarget, true); + + this._scopeFire('interactions:down', { + pointer, + event, + eventTarget, + pointerIndex, + type: 'down', + interaction: this + }); + } + /** + * ```js + * interact(target) + * .draggable({ + * // disable the default drag start by down->move + * manualStart: true + * }) + * // start dragging after the user holds the pointer down + * .on('hold', function (event) { + * var interaction = event.interaction + * + * if (!interaction.interacting()) { + * interaction.start({ name: 'drag' }, + * event.interactable, + * event.currentTarget) + * } + * }) + * ``` + * + * Start an action with the given Interactable and Element as tartgets. The + * action must be enabled for the target Interactable and an appropriate + * number of pointers must be held down - 1 for drag/resize, 2 for gesture. + * + * Use it with `interactable.able({ manualStart: false })` to always + * [start actions manually](https://github.com/taye/interact.js/issues/114) + * + * @param {object} action The action to be performed - drag, resize, etc. + * @param {Interactable} target The Interactable to target + * @param {Element} element The DOM Element to target + * @return {object} interact + */ + + + start(action, interactable, element) { + if (this.interacting() || !this.pointerIsDown || this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) || !interactable.options[action.name].enabled) { + return false; } - pointerMove(pointer, event, eventTarget) { - if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) { - this.updatePointer(pointer, event, eventTarget, false); - utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now()); - } - const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x && - this.coords.cur.page.y === this.coords.prev.page.y && - this.coords.cur.client.x === this.coords.prev.client.x && - this.coords.cur.client.y === this.coords.prev.client.y); - let dx; - let dy; - // register movement greater than pointerMoveTolerance - if (this.pointerIsDown && !this.pointerWasMoved) { - dx = this.coords.cur.client.x - this.coords.start.client.x; - dy = this.coords.cur.client.y - this.coords.start.client.y; - this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance; - } - const signalArg = { - pointer, - pointerIndex: this.getPointerIndex(pointer), - event, - eventTarget, - dx, - dy, - duplicate: duplicateMove, - interaction: this, - }; - if (!duplicateMove) { - // set pointer coordinate, time changes and velocity - utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur); - utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta); - } - this._signals.fire('move', signalArg); - if (!duplicateMove) { - // if interacting, fire an 'action-move' signal etc - if (this.interacting()) { - this.move(signalArg); - } - if (this.pointerWasMoved) { - utils.pointer.copyCoords(this.coords.prev, this.coords.cur); - } - } + + utils.copyAction(this.prepared, action); + this.interactable = interactable; + this.element = element; + this.rect = interactable.getRect(element); + this.edges = this.prepared.edges; + this._stopped = false; + this._interacting = this._doPhase({ + interaction: this, + event: this.downEvent, + phase: EventPhase.Start + }) && !this._stopped; + return this._interacting; + } + + pointerMove(pointer, event, eventTarget) { + if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) { + this.updatePointer(pointer, event, eventTarget, false); + utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now()); } - /** - * ```js - * interact(target) - * .draggable(true) - * .on('dragmove', function (event) { - * if (someCondition) { - * // change the snap settings - * event.interactable.draggable({ snap: { targets: [] }}) - * // fire another move event with re-calculated snap - * event.interaction.move() - * } - * }) - * ``` - * - * Force a move of the current action at the same coordinates. Useful if - * snap/restrict has been changed and you want a movement with the new - * settings. - */ - move(signalArg) { - signalArg = utils.extend({ - pointer: this._latestPointer.pointer, - event: this._latestPointer.event, - eventTarget: this._latestPointer.eventTarget, - interaction: this, - }, signalArg || {}); - signalArg.phase = EventPhase.Move; - this._doPhase(signalArg); + + const duplicateMove = this.coords.cur.page.x === this.coords.prev.page.x && this.coords.cur.page.y === this.coords.prev.page.y && this.coords.cur.client.x === this.coords.prev.client.x && this.coords.cur.client.y === this.coords.prev.client.y; + let dx; + let dy; // register movement greater than pointerMoveTolerance + + if (this.pointerIsDown && !this.pointerWasMoved) { + dx = this.coords.cur.client.x - this.coords.start.client.x; + dy = this.coords.cur.client.y - this.coords.start.client.y; + this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance; } - // End interact move events and stop auto-scroll unless simulation is running - pointerUp(pointer, event, eventTarget, curEventTarget) { - let pointerIndex = this.getPointerIndex(pointer); - if (pointerIndex === -1) { - pointerIndex = this.updatePointer(pointer, event, eventTarget, false); - } - this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', { - pointer, - pointerIndex, - event, - eventTarget, - curEventTarget, - interaction: this, - }); - if (!this.simulation) { - this.end(event); - } - this.pointerIsDown = false; - this.removePointer(pointer, event); + + const signalArg = { + pointer, + pointerIndex: this.getPointerIndex(pointer), + event, + type: 'move', + eventTarget, + dx, + dy, + duplicate: duplicateMove, + interaction: this + }; + + if (!duplicateMove) { + // set pointer coordinate, time changes and velocity + utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur); + utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta); } - documentBlur(event) { - this.end(event); - this._signals.fire('blur', { event, interaction: this }); + + this._scopeFire('interactions:move', signalArg); + + if (!duplicateMove) { + // if interacting, fire an 'action-move' signal etc + if (this.interacting()) { + signalArg.type = null; + this.move(signalArg); + } + + if (this.pointerWasMoved) { + utils.pointer.copyCoords(this.coords.prev, this.coords.cur); + } } - /** - * ```js - * interact(target) - * .draggable(true) - * .on('move', function (event) { - * if (event.pageX > 1000) { - * // end the current action - * event.interaction.end() - * // stop all further listeners from being called - * event.stopImmediatePropagation() - * } - * }) - * ``` - * - * @param {PointerEvent} [event] - */ - end(event) { - this._ending = true; - event = event || this._latestPointer.event; - let endPhaseResult; - if (this.interacting()) { - endPhaseResult = this._doPhase({ - event, - interaction: this, - phase: EventPhase.End, - }); - } - this._ending = false; - if (endPhaseResult === true) { - this.stop(); - } + } + /** + * ```js + * interact(target) + * .draggable(true) + * .on('dragmove', function (event) { + * if (someCondition) { + * // change the snap settings + * event.interactable.draggable({ snap: { targets: [] }}) + * // fire another move event with re-calculated snap + * event.interaction.move() + * } + * }) + * ``` + * + * Force a move of the current action at the same coordinates. Useful if + * snap/restrict has been changed and you want a movement with the new + * settings. + */ + + + move(signalArg) { + signalArg = utils.extend({ + pointer: this._latestPointer.pointer, + event: this._latestPointer.event, + eventTarget: this._latestPointer.eventTarget, + interaction: this + }, signalArg || {}); + signalArg.phase = EventPhase.Move; + + this._doPhase(signalArg); + } // End interact move events and stop auto-scroll unless simulation is running + + + pointerUp(pointer, event, eventTarget, curEventTarget) { + let pointerIndex = this.getPointerIndex(pointer); + + if (pointerIndex === -1) { + pointerIndex = this.updatePointer(pointer, event, eventTarget, false); } - currentAction() { - return this._interacting ? this.prepared.name : null; + + const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'; + + this._scopeFire(`interactions:${type}`, { + pointer, + pointerIndex, + event, + eventTarget, + type: type, + curEventTarget, + interaction: this + }); + + if (!this.simulation) { + this.end(event); } - interacting() { - return this._interacting; + + this.pointerIsDown = false; + this.removePointer(pointer, event); + } + + documentBlur(event) { + this.end(event); + + this._scopeFire('interactions:blur', { + event, + type: 'blur', + interaction: this + }); + } + /** + * ```js + * interact(target) + * .draggable(true) + * .on('move', function (event) { + * if (event.pageX > 1000) { + * // end the current action + * event.interaction.end() + * // stop all further listeners from being called + * event.stopImmediatePropagation() + * } + * }) + * ``` + * + * @param {PointerEvent} [event] + */ + + + end(event) { + this._ending = true; + event = event || this._latestPointer.event; + let endPhaseResult; + + if (this.interacting()) { + endPhaseResult = this._doPhase({ + event, + interaction: this, + phase: EventPhase.End + }); } - /** */ - stop() { - this._signals.fire('stop', { interaction: this }); - this.interactable = this.element = null; - this._interacting = false; - this._stopped = true; - this.prepared.name = this.prevEvent = null; + + this._ending = false; + + if (endPhaseResult === true) { + this.stop(); } - getPointerIndex(pointer) { - const pointerId = utils.pointer.getPointerId(pointer); - // mouse and pen interactions may have only one pointer - return (this.pointerType === 'mouse' || this.pointerType === 'pen') - ? this.pointers.length - 1 - : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId); + } + + currentAction() { + return this._interacting ? this.prepared.name : null; + } + + interacting() { + return this._interacting; + } + /** */ + + + stop() { + this._scopeFire('interactions:stop', { + interaction: this + }); + + this.interactable = this.element = null; + this._interacting = false; + this._stopped = true; + this.prepared.name = this.prevEvent = null; + } + + getPointerIndex(pointer) { + const pointerId = utils.pointer.getPointerId(pointer); // mouse and pen interactions may have only one pointer + + return this.pointerType === 'mouse' || this.pointerType === 'pen' ? this.pointers.length - 1 : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId); + } + + getPointerInfo(pointer) { + return this.pointers[this.getPointerIndex(pointer)]; + } + + updatePointer(pointer, event, eventTarget, down) { + const id = utils.pointer.getPointerId(pointer); + let pointerIndex = this.getPointerIndex(pointer); + let pointerInfo = this.pointers[pointerIndex]; + down = down === false ? false : down || /(down|start)$/i.test(event.type); + + if (!pointerInfo) { + pointerInfo = new PointerInfo(id, pointer, event, null, null); + pointerIndex = this.pointers.length; + this.pointers.push(pointerInfo); + } else { + pointerInfo.pointer = pointer; } - getPointerInfo(pointer) { - return this.pointers[this.getPointerIndex(pointer)]; - } - updatePointer(pointer, event, eventTarget, down) { - const id = utils.pointer.getPointerId(pointer); - let pointerIndex = this.getPointerIndex(pointer); - let pointerInfo = this.pointers[pointerIndex]; - down = down === false - ? false - : down || /(down|start)$/i.test(event.type); - if (!pointerInfo) { - pointerInfo = new PointerInfo(id, pointer, event, null, null); - pointerIndex = this.pointers.length; - this.pointers.push(pointerInfo); - } - else { - pointerInfo.pointer = pointer; - } - if (down) { - this.pointerIsDown = true; - if (!this.interacting()) { - utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now()); - utils.pointer.copyCoords(this.coords.cur, this.coords.start); - utils.pointer.copyCoords(this.coords.prev, this.coords.start); - utils.pointer.pointerExtend(this.downPointer, pointer); - this.downEvent = event; - pointerInfo.downTime = this.coords.cur.timeStamp; - pointerInfo.downTarget = eventTarget; - this.pointerWasMoved = false; - } - } - this._updateLatestPointer(pointer, event, eventTarget); - this._signals.fire('update-pointer', { - pointer, - event, - eventTarget, - down, - pointerInfo, - pointerIndex, - interaction: this, - }); - return pointerIndex; - } - removePointer(pointer, event) { - const pointerIndex = this.getPointerIndex(pointer); - if (pointerIndex === -1) { - return; - } - const pointerInfo = this.pointers[pointerIndex]; - this._signals.fire('remove-pointer', { - pointer, - event, - pointerIndex, - pointerInfo, - interaction: this, - }); - this.pointers.splice(pointerIndex, 1); - } - _updateLatestPointer(pointer, event, eventTarget) { - this._latestPointer.pointer = pointer; - this._latestPointer.event = event; - this._latestPointer.eventTarget = eventTarget; + + if (down) { + this.pointerIsDown = true; + + if (!this.interacting()) { + utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now()); + utils.pointer.copyCoords(this.coords.cur, this.coords.start); + utils.pointer.copyCoords(this.coords.prev, this.coords.start); + utils.pointer.pointerExtend(this.downPointer, pointer); + this.downEvent = event; + pointerInfo.downTime = this.coords.cur.timeStamp; + pointerInfo.downTarget = eventTarget; + this.pointerWasMoved = false; + } } - destroy() { - this._latestPointer.pointer = null; - this._latestPointer.event = null; - this._latestPointer.eventTarget = null; + + this._updateLatestPointer(pointer, event, eventTarget); + + this._scopeFire('interactions:update-pointer', { + pointer, + event, + eventTarget, + down, + pointerInfo, + pointerIndex, + interaction: this + }); + + return pointerIndex; + } + + removePointer(pointer, event) { + const pointerIndex = this.getPointerIndex(pointer); + + if (pointerIndex === -1) { + return; } - _createPreparedEvent(event, phase, preEnd, type) { - const actionName = this.prepared.name; - return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type); + + const pointerInfo = this.pointers[pointerIndex]; + + this._scopeFire('interactions:remove-pointer', { + pointer, + event, + eventTarget: null, + pointerIndex, + pointerInfo, + interaction: this + }); + + this.pointers.splice(pointerIndex, 1); + } + + _updateLatestPointer(pointer, event, eventTarget) { + this._latestPointer.pointer = pointer; + this._latestPointer.event = event; + this._latestPointer.eventTarget = eventTarget; + } + + destroy() { + this._latestPointer.pointer = null; + this._latestPointer.event = null; + this._latestPointer.eventTarget = null; + } + + _createPreparedEvent(event, phase, preEnd, type) { + const actionName = this.prepared.name; + return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type); + } + + _fireEvent(iEvent) { + this.interactable.fire(iEvent); + + if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) { + this.prevEvent = iEvent; } - _fireEvent(iEvent) { - this.interactable.fire(iEvent); - if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) { - this.prevEvent = iEvent; - } + } + + _doPhase(signalArg) { + const { + event, + phase, + preEnd, + type + } = signalArg; + + const beforeResult = this._scopeFire(`interactions:before-action-${phase}`, signalArg); + + if (beforeResult === false) { + return false; } - _doPhase(signalArg) { - const { event, phase, preEnd, type } = signalArg; - const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg); - if (beforeResult === false) { - return false; - } - const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type); - const { rect } = this; - if (rect) { - // update the rect modifications - const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }; - if (edges.top) { - rect.top += iEvent.delta.y; - } - if (edges.bottom) { - rect.bottom += iEvent.delta.y; - } - if (edges.left) { - rect.left += iEvent.delta.x; - } - if (edges.right) { - rect.right += iEvent.delta.x; - } - rect.width = rect.right - rect.left; - rect.height = rect.bottom - rect.top; - } - this._signals.fire(`action-${phase}`, signalArg); - this._fireEvent(iEvent); - this._signals.fire(`after-action-${phase}`, signalArg); - return true; + + const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type); + + const { + rect + } = this; + + if (rect) { + // update the rect modifications + const edges = this.edges || this.prepared.edges || { + left: true, + right: true, + top: true, + bottom: true + }; + + if (edges.top) { + rect.top += iEvent.delta.y; + } + + if (edges.bottom) { + rect.bottom += iEvent.delta.y; + } + + if (edges.left) { + rect.left += iEvent.delta.x; + } + + if (edges.right) { + rect.right += iEvent.delta.x; + } + + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; } - _now() { return Date.now(); } + + this._scopeFire(`interactions:action-${phase}`, signalArg); + + this._fireEvent(iEvent); + + this._scopeFire(`interactions:after-action-${phase}`, signalArg); + + return true; + } + + _now() { + return Date.now(); + } + } export default Interaction; export { PointerInfo }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJJbnRlcmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBRTFDLE9BQU8sYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDM0QsT0FBTyxXQUFXLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFXcEMsTUFBTSxDQUFOLElBQVksWUFPWDtBQVBELFdBQVksWUFBWTtJQUN0QixpQ0FBaUIsQ0FBQTtJQUNqQiw0QkFBWSxDQUFBO0lBQ1osNkJBQWEsQ0FBQTtJQUNiLGtDQUFrQixDQUFBO0lBQ2xCLG9DQUFvQixDQUFBO0lBQ3BCLDJCQUFXLENBQUE7QUFDYixDQUFDLEVBUFcsWUFBWSxLQUFaLFlBQVksUUFPdkI7QUFFRCxNQUFNLENBQU4sSUFBWSxhQU1YO0FBTkQsV0FBWSxhQUFhO0lBQ3ZCLDJCQUFVLENBQUE7SUFDViwwQkFBUyxDQUFBO0lBQ1QseUJBQVEsQ0FBQTtJQUNSLDBCQUFTLENBQUE7SUFDVCxpQ0FBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBTlcsYUFBYSxLQUFiLGFBQWEsUUFNeEI7QUFPRCxNQUFNLE9BQU8sV0FBVztJQThFdEIsTUFBTTtJQUNOLFlBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFvRDtRQTlFdkYsNkNBQTZDO1FBQzdDLGlCQUFZLEdBQWlCLElBQUksQ0FBQTtRQUVqQyx5Q0FBeUM7UUFDekMsWUFBTyxHQUFxQixJQUFJLENBQUE7UUFRaEMscURBQXFEO1FBQ3JELGFBQVEsR0FBbUI7WUFDekIsSUFBSSxFQUFHLElBQUk7WUFDWCxJQUFJLEVBQUcsSUFBSTtZQUNYLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQTtRQUlELCtCQUErQjtRQUMvQixhQUFRLEdBQWtCLEVBQUUsQ0FBQTtRQUU1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SyxFQUFHO2dCQUFFLElBQUksQ0FBQyxLQUFLLElBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7YUFBRTtZQUVuRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQTtTQUNyQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFdEQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsSUFBSSxLQUFNLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBLENBQUMsQ0FBQztDQUM5QjtBQUVELGVBQWUsV0FBVyxDQUFBO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IEludGVyYWN0YWJsZSBmcm9tICcuL0ludGVyYWN0YWJsZSdcbmltcG9ydCBJbnRlcmFjdEV2ZW50LCB7IEV2ZW50UGhhc2UgfSBmcm9tICcuL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgUG9pbnRlckluZm8gZnJvbSAnLi9Qb2ludGVySW5mbydcbmltcG9ydCB7IEFjdGlvbk5hbWUgfSBmcm9tICcuL3Njb3BlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblByb3BzPFQgZXh0ZW5kcyBBY3Rpb25OYW1lID0gYW55PiB7XG4gIG5hbWU6IFRcbiAgYXhpcz86ICd4JyB8ICd5JyB8ICd4eSdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydEFjdGlvbiBleHRlbmRzIEFjdGlvblByb3BzIHtcbiAgbmFtZTogQWN0aW9uTmFtZSB8IHN0cmluZ1xufVxuXG5leHBvcnQgZW51bSBfUHJveHlWYWx1ZXMge1xuICBpbnRlcmFjdGFibGUgPSAnJyxcbiAgZWxlbWVudCA9ICcnLFxuICBwcmVwYXJlZCA9ICcnLFxuICBwb2ludGVySXNEb3duID0gJycsXG4gIHBvaW50ZXJXYXNNb3ZlZCA9ICcnLFxuICBfcHJveHkgPSAnJ1xufVxuXG5leHBvcnQgZW51bSBfUHJveHlNZXRob2RzIHtcbiAgc3RhcnQgPSAnJyxcbiAgbW92ZSA9ICcnLFxuICBlbmQgPSAnJyxcbiAgc3RvcCA9ICcnLFxuICBpbnRlcmFjdGluZyA9ICcnXG59XG5cbmV4cG9ydCB0eXBlIF9JbnRlcmFjdGlvblByb3h5ID0gUGljazxcbkludGVyYWN0aW9uLFxua2V5b2YgdHlwZW9mIF9Qcm94eVZhbHVlcyB8IGtleW9mIHR5cGVvZiBfUHJveHlNZXRob2RzXG4+XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvbjxUIGV4dGVuZHMgQWN0aW9uTmFtZSA9IGFueT4ge1xuICAvLyBjdXJyZW50IGludGVyYWN0YWJsZSBiZWluZyBpbnRlcmFjdGVkIHdpdGhcbiAgaW50ZXJhY3RhYmxlOiBJbnRlcmFjdGFibGUgPSBudWxsXG5cbiAgLy8gdGhlIHRhcmdldCBlbGVtZW50IG9mIHRoZSBpbnRlcmFjdGFibGVcbiAgZWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCA9IG51bGxcbiAgcmVjdDogSW50ZXJhY3QuUmVjdCAmIEludGVyYWN0LlNpemVcbiAgZWRnZXM6IHtcbiAgICBbUCBpbiBrZXlvZiBJbnRlcmFjdC5SZWN0XT86IGJvb2xlYW5cbiAgfVxuXG4gIF9zaWduYWxzOiB1dGlscy5TaWduYWxzXG5cbiAgLy8gYWN0aW9uIHRoYXQncyByZWFkeSB0byBiZSBmaXJlZCBvbiBuZXh0IG1vdmUgZXZlbnRcbiAgcHJlcGFyZWQ6IEFjdGlvblByb3BzPFQ+ID0ge1xuICAgIG5hbWUgOiBudWxsLFxuICAgIGF4aXMgOiBudWxsLFxuICAgIGVkZ2VzOiBudWxsLFxuICB9XG5cbiAgcG9pbnRlclR5cGU6IHN0cmluZ1xuXG4gIC8vIGtlZXAgdHJhY2sgb2YgYWRkZWQgcG9pbnRlcnNcbiAgcG9pbnRlcnM6IFBvaW50ZXJJbmZvW10gPSBbXVxuXG4gIC8vIHBvaW50ZXJkb3duL21vdXNlZG93bi90b3VjaHN0YXJ0IGV2ZW50XG4gIGRvd25FdmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSA9IG51bGxcblxuICBkb3duUG9pbnRlcjogSW50ZXJhY3QuUG9pbnRlclR5cGUgPSB7fSBhcyBJbnRlcmFjdC5Qb2ludGVyVHlwZVxuXG4gIF9sYXRlc3RQb2ludGVyOiB7XG4gICAgcG9pbnRlcjogSW50ZXJhY3QuRXZlbnRUYXJnZXRcbiAgICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICAgIGV2ZW50VGFyZ2V0OiBOb2RlXG4gIH0gPSB7XG4gICAgcG9pbnRlcjogbnVsbCxcbiAgICBldmVudDogbnVsbCxcbiAgICBldmVudFRhcmdldDogbnVsbCxcbiAgfVxuXG4gIC8vIHByZXZpb3VzIGFjdGlvbiBldmVudFxuICBwcmV2RXZlbnQ6IEludGVyYWN0RXZlbnQ8VD4gPSBudWxsXG5cbiAgcG9pbnRlcklzRG93biA9IGZhbHNlXG4gIHBvaW50ZXJXYXNNb3ZlZCA9IGZhbHNlXG4gIF9pbnRlcmFjdGluZyA9IGZhbHNlXG4gIF9lbmRpbmcgPSBmYWxzZVxuICBfc3RvcHBlZCA9IHRydWVcbiAgX3Byb3h5OiBfSW50ZXJhY3Rpb25Qcm94eSA9IG51bGxcblxuICBzaW11bGF0aW9uID0gbnVsbFxuXG4gIGdldCBwb2ludGVyTW92ZVRvbGVyYW5jZSAoKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWxpYXMgSW50ZXJhY3Rpb24ucHJvdG90eXBlLm1vdmVcbiAgICovXG4gIGRvTW92ZSA9IHV0aWxzLndhcm5PbmNlKFxuICAgIGZ1bmN0aW9uICh0aGlzOiBJbnRlcmFjdGlvbiwgc2lnbmFsQXJnOiBhbnkpIHtcbiAgICAgIHRoaXMubW92ZShzaWduYWxBcmcpXG4gICAgfSxcbiAgICAnVGhlIGludGVyYWN0aW9uLmRvTW92ZSgpIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGludGVyYWN0aW9uLm1vdmUoKScpXG5cbiAgY29vcmRzID0ge1xuICAgIC8vIFN0YXJ0aW5nIEludGVyYWN0RXZlbnQgcG9pbnRlciBjb29yZGluYXRlc1xuICAgIHN0YXJ0OiB1dGlscy5wb2ludGVyLm5ld0Nvb3JkcygpLFxuICAgIC8vIFByZXZpb3VzIG5hdGl2ZSBwb2ludGVyIG1vdmUgZXZlbnQgY29vcmRpbmF0ZXNcbiAgICBwcmV2OiB1dGlscy5wb2ludGVyLm5ld0Nvb3JkcygpLFxuICAgIC8vIGN1cnJlbnQgbmF0aXZlIHBvaW50ZXIgbW92ZSBldmVudCBjb29yZGluYXRlc1xuICAgIGN1cjogdXRpbHMucG9pbnRlci5uZXdDb29yZHMoKSxcbiAgICAvLyBDaGFuZ2UgaW4gY29vcmRpbmF0ZXMgYW5kIHRpbWUgb2YgdGhlIHBvaW50ZXJcbiAgICBkZWx0YTogdXRpbHMucG9pbnRlci5uZXdDb29yZHMoKSxcbiAgICAvLyBwb2ludGVyIHZlbG9jaXR5XG4gICAgdmVsb2NpdHk6IHV0aWxzLnBvaW50ZXIubmV3Q29vcmRzKCksXG4gIH1cblxuICAvKiogKi9cbiAgY29uc3RydWN0b3IgKHsgcG9pbnRlclR5cGUsIHNpZ25hbHMgfTogeyBwb2ludGVyVHlwZT86IHN0cmluZywgc2lnbmFsczogdXRpbHMuU2lnbmFscyB9KSB7XG4gICAgdGhpcy5fc2lnbmFscyA9IHNpZ25hbHNcbiAgICB0aGlzLnBvaW50ZXJUeXBlID0gcG9pbnRlclR5cGVcblxuICAgIGNvbnN0IHRoYXQgPSB0aGlzXG5cbiAgICB0aGlzLl9wcm94eSA9IHt9IGFzIF9JbnRlcmFjdGlvblByb3h5XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBfUHJveHlWYWx1ZXMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLl9wcm94eSwga2V5LCB7XG4gICAgICAgIGdldCAoKSB7IHJldHVybiB0aGF0W2tleV0gfSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gX1Byb3h5TWV0aG9kcykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuX3Byb3h5LCBrZXksIHtcbiAgICAgICAgdmFsdWU6ICguLi5hcmdzKSA9PiB0aGF0W2tleV0oLi4uYXJncyksXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgnbmV3JywgeyBpbnRlcmFjdGlvbjogdGhpcyB9KVxuICB9XG5cbiAgcG9pbnRlckRvd24gKHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLCBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSwgZXZlbnRUYXJnZXQ6IE5vZGUpIHtcbiAgICBjb25zdCBwb2ludGVySW5kZXggPSB0aGlzLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCB0cnVlKVxuXG4gICAgdGhpcy5fc2lnbmFscy5maXJlKCdkb3duJywge1xuICAgICAgcG9pbnRlcixcbiAgICAgIGV2ZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICBwb2ludGVySW5kZXgsXG4gICAgICBpbnRlcmFjdGlvbjogdGhpcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGBgYGpzXG4gICAqIGludGVyYWN0KHRhcmdldClcbiAgICogICAuZHJhZ2dhYmxlKHtcbiAgICogICAgIC8vIGRpc2FibGUgdGhlIGRlZmF1bHQgZHJhZyBzdGFydCBieSBkb3duLT5tb3ZlXG4gICAqICAgICBtYW51YWxTdGFydDogdHJ1ZVxuICAgKiAgIH0pXG4gICAqICAgLy8gc3RhcnQgZHJhZ2dpbmcgYWZ0ZXIgdGhlIHVzZXIgaG9sZHMgdGhlIHBvaW50ZXIgZG93blxuICAgKiAgIC5vbignaG9sZCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgKiAgICAgdmFyIGludGVyYWN0aW9uID0gZXZlbnQuaW50ZXJhY3Rpb25cbiAgICpcbiAgICogICAgIGlmICghaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkge1xuICAgKiAgICAgICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdkcmFnJyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5pbnRlcmFjdGFibGUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQpXG4gICAqICAgICB9XG4gICAqIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBTdGFydCBhbiBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSW50ZXJhY3RhYmxlIGFuZCBFbGVtZW50IGFzIHRhcnRnZXRzLiBUaGVcbiAgICogYWN0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRhcmdldCBJbnRlcmFjdGFibGUgYW5kIGFuIGFwcHJvcHJpYXRlXG4gICAqIG51bWJlciBvZiBwb2ludGVycyBtdXN0IGJlIGhlbGQgZG93biAtIDEgZm9yIGRyYWcvcmVzaXplLCAyIGZvciBnZXN0dXJlLlxuICAgKlxuICAgKiBVc2UgaXQgd2l0aCBgaW50ZXJhY3RhYmxlLjxhY3Rpb24+YWJsZSh7IG1hbnVhbFN0YXJ0OiBmYWxzZSB9KWAgdG8gYWx3YXlzXG4gICAqIFtzdGFydCBhY3Rpb25zIG1hbnVhbGx5XShodHRwczovL2dpdGh1Yi5jb20vdGF5ZS9pbnRlcmFjdC5qcy9pc3N1ZXMvMTE0KVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWN0aW9uICAgVGhlIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgLSBkcmFnLCByZXNpemUsIGV0Yy5cbiAgICogQHBhcmFtIHtJbnRlcmFjdGFibGV9IHRhcmdldCAgVGhlIEludGVyYWN0YWJsZSB0byB0YXJnZXRcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBET00gRWxlbWVudCB0byB0YXJnZXRcbiAgICogQHJldHVybiB7b2JqZWN0fSBpbnRlcmFjdFxuICAgKi9cbiAgc3RhcnQgKGFjdGlvbjogU3RhcnRBY3Rpb24sIGludGVyYWN0YWJsZTogSW50ZXJhY3RhYmxlLCBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaW50ZXJhY3RpbmcoKSB8fFxuICAgICAgICAhdGhpcy5wb2ludGVySXNEb3duIHx8XG4gICAgICAgIHRoaXMucG9pbnRlcnMubGVuZ3RoIDwgKGFjdGlvbi5uYW1lID09PSBBY3Rpb25OYW1lLkdlc3R1cmUgPyAyIDogMSkgfHxcbiAgICAgICAgIWludGVyYWN0YWJsZS5vcHRpb25zW2FjdGlvbi5uYW1lXS5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB1dGlscy5jb3B5QWN0aW9uKHRoaXMucHJlcGFyZWQsIGFjdGlvbilcblxuICAgIHRoaXMuaW50ZXJhY3RhYmxlID0gaW50ZXJhY3RhYmxlXG4gICAgdGhpcy5lbGVtZW50ICAgICAgPSBlbGVtZW50XG4gICAgdGhpcy5yZWN0ICAgICAgICAgPSBpbnRlcmFjdGFibGUuZ2V0UmVjdChlbGVtZW50KVxuICAgIHRoaXMuZWRnZXMgICAgICAgID0gdGhpcy5wcmVwYXJlZC5lZGdlc1xuICAgIHRoaXMuX3N0b3BwZWQgICAgID0gZmFsc2VcbiAgICB0aGlzLl9pbnRlcmFjdGluZyA9IHRoaXMuX2RvUGhhc2Uoe1xuICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgICBldmVudDogdGhpcy5kb3duRXZlbnQsXG4gICAgICBwaGFzZTogRXZlbnRQaGFzZS5TdGFydCxcbiAgICB9KSAmJiAhdGhpcy5fc3RvcHBlZFxuXG4gICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW5nXG4gIH1cblxuICBwb2ludGVyTW92ZSAocG9pbnRlcjogSW50ZXJhY3QuUG9pbnRlclR5cGUsIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlLCBldmVudFRhcmdldDogTm9kZSkge1xuICAgIGlmICghdGhpcy5zaW11bGF0aW9uICYmICEodGhpcy5tb2RpZmllcnMgJiYgdGhpcy5tb2RpZmllcnMuZW5kUHJldmVudGVkKSkge1xuICAgICAgdGhpcy51cGRhdGVQb2ludGVyKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgZmFsc2UpXG4gICAgICB1dGlscy5wb2ludGVyLnNldENvb3Jkcyh0aGlzLmNvb3Jkcy5jdXIsIHRoaXMucG9pbnRlcnMubWFwKHAgPT4gcC5wb2ludGVyKSwgdGhpcy5fbm93KCkpXG4gICAgfVxuXG4gICAgY29uc3QgZHVwbGljYXRlTW92ZSA9ICh0aGlzLmNvb3Jkcy5jdXIucGFnZS54ID09PSB0aGlzLmNvb3Jkcy5wcmV2LnBhZ2UueCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb29yZHMuY3VyLnBhZ2UueSA9PT0gdGhpcy5jb29yZHMucHJldi5wYWdlLnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzLmN1ci5jbGllbnQueCA9PT0gdGhpcy5jb29yZHMucHJldi5jbGllbnQueCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb29yZHMuY3VyLmNsaWVudC55ID09PSB0aGlzLmNvb3Jkcy5wcmV2LmNsaWVudC55KVxuXG4gICAgbGV0IGR4XG4gICAgbGV0IGR5XG5cbiAgICAvLyByZWdpc3RlciBtb3ZlbWVudCBncmVhdGVyIHRoYW4gcG9pbnRlck1vdmVUb2xlcmFuY2VcbiAgICBpZiAodGhpcy5wb2ludGVySXNEb3duICYmICF0aGlzLnBvaW50ZXJXYXNNb3ZlZCkge1xuICAgICAgZHggPSB0aGlzLmNvb3Jkcy5jdXIuY2xpZW50LnggLSB0aGlzLmNvb3Jkcy5zdGFydC5jbGllbnQueFxuICAgICAgZHkgPSB0aGlzLmNvb3Jkcy5jdXIuY2xpZW50LnkgLSB0aGlzLmNvb3Jkcy5zdGFydC5jbGllbnQueVxuXG4gICAgICB0aGlzLnBvaW50ZXJXYXNNb3ZlZCA9IHV0aWxzLmh5cG90KGR4LCBkeSkgPiB0aGlzLnBvaW50ZXJNb3ZlVG9sZXJhbmNlXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmFsQXJnID0ge1xuICAgICAgcG9pbnRlcixcbiAgICAgIHBvaW50ZXJJbmRleDogdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlciksXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgZHgsXG4gICAgICBkeSxcbiAgICAgIGR1cGxpY2F0ZTogZHVwbGljYXRlTW92ZSxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgIH1cblxuICAgIGlmICghZHVwbGljYXRlTW92ZSkge1xuICAgICAgLy8gc2V0IHBvaW50ZXIgY29vcmRpbmF0ZSwgdGltZSBjaGFuZ2VzIGFuZCB2ZWxvY2l0eVxuICAgICAgdXRpbHMucG9pbnRlci5zZXRDb29yZERlbHRhcyh0aGlzLmNvb3Jkcy5kZWx0YSwgdGhpcy5jb29yZHMucHJldiwgdGhpcy5jb29yZHMuY3VyKVxuICAgICAgdXRpbHMucG9pbnRlci5zZXRDb29yZFZlbG9jaXR5KHRoaXMuY29vcmRzLnZlbG9jaXR5LCB0aGlzLmNvb3Jkcy5kZWx0YSlcbiAgICB9XG5cbiAgICB0aGlzLl9zaWduYWxzLmZpcmUoJ21vdmUnLCBzaWduYWxBcmcpXG5cbiAgICBpZiAoIWR1cGxpY2F0ZU1vdmUpIHtcbiAgICAgIC8vIGlmIGludGVyYWN0aW5nLCBmaXJlIGFuICdhY3Rpb24tbW92ZScgc2lnbmFsIGV0Y1xuICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpbmcoKSkge1xuICAgICAgICB0aGlzLm1vdmUoc2lnbmFsQXJnKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wb2ludGVyV2FzTW92ZWQpIHtcbiAgICAgICAgdXRpbHMucG9pbnRlci5jb3B5Q29vcmRzKHRoaXMuY29vcmRzLnByZXYsIHRoaXMuY29vcmRzLmN1cilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QodGFyZ2V0KVxuICAgKiAgIC5kcmFnZ2FibGUodHJ1ZSlcbiAgICogICAub24oJ2RyYWdtb3ZlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAqICAgICBpZiAoc29tZUNvbmRpdGlvbikge1xuICAgKiAgICAgICAvLyBjaGFuZ2UgdGhlIHNuYXAgc2V0dGluZ3NcbiAgICogICAgICAgZXZlbnQuaW50ZXJhY3RhYmxlLmRyYWdnYWJsZSh7IHNuYXA6IHsgdGFyZ2V0czogW10gfX0pXG4gICAqICAgICAgIC8vIGZpcmUgYW5vdGhlciBtb3ZlIGV2ZW50IHdpdGggcmUtY2FsY3VsYXRlZCBzbmFwXG4gICAqICAgICAgIGV2ZW50LmludGVyYWN0aW9uLm1vdmUoKVxuICAgKiAgICAgfVxuICAgKiAgIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBGb3JjZSBhIG1vdmUgb2YgdGhlIGN1cnJlbnQgYWN0aW9uIGF0IHRoZSBzYW1lIGNvb3JkaW5hdGVzLiBVc2VmdWwgaWZcbiAgICogc25hcC9yZXN0cmljdCBoYXMgYmVlbiBjaGFuZ2VkIGFuZCB5b3Ugd2FudCBhIG1vdmVtZW50IHdpdGggdGhlIG5ld1xuICAgKiBzZXR0aW5ncy5cbiAgICovXG4gIG1vdmUgKHNpZ25hbEFyZz8pIHtcbiAgICBzaWduYWxBcmcgPSB1dGlscy5leHRlbmQoe1xuICAgICAgcG9pbnRlcjogdGhpcy5fbGF0ZXN0UG9pbnRlci5wb2ludGVyLFxuICAgICAgZXZlbnQ6IHRoaXMuX2xhdGVzdFBvaW50ZXIuZXZlbnQsXG4gICAgICBldmVudFRhcmdldDogdGhpcy5fbGF0ZXN0UG9pbnRlci5ldmVudFRhcmdldCxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgIH0sIHNpZ25hbEFyZyB8fCB7fSlcblxuICAgIHNpZ25hbEFyZy5waGFzZSA9IEV2ZW50UGhhc2UuTW92ZVxuXG4gICAgdGhpcy5fZG9QaGFzZShzaWduYWxBcmcpXG4gIH1cblxuICAvLyBFbmQgaW50ZXJhY3QgbW92ZSBldmVudHMgYW5kIHN0b3AgYXV0by1zY3JvbGwgdW5sZXNzIHNpbXVsYXRpb24gaXMgcnVubmluZ1xuICBwb2ludGVyVXAgKHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlLCBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSwgZXZlbnRUYXJnZXQ6IE5vZGUsIGN1ckV2ZW50VGFyZ2V0OiBFdmVudFRhcmdldCkge1xuICAgIGxldCBwb2ludGVySW5kZXggPSB0aGlzLmdldFBvaW50ZXJJbmRleChwb2ludGVyKVxuXG4gICAgaWYgKHBvaW50ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgIHBvaW50ZXJJbmRleCA9IHRoaXMudXBkYXRlUG9pbnRlcihwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGZhbHNlKVxuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgvY2FuY2VsJC9pLnRlc3QoZXZlbnQudHlwZSkgPyAnY2FuY2VsJyA6ICd1cCcsIHtcbiAgICAgIHBvaW50ZXIsXG4gICAgICBwb2ludGVySW5kZXgsXG4gICAgICBldmVudCxcbiAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgY3VyRXZlbnRUYXJnZXQsXG4gICAgICBpbnRlcmFjdGlvbjogdGhpcyxcbiAgICB9KVxuXG4gICAgaWYgKCF0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgIHRoaXMuZW5kKGV2ZW50KVxuICAgIH1cblxuICAgIHRoaXMucG9pbnRlcklzRG93biA9IGZhbHNlXG4gICAgdGhpcy5yZW1vdmVQb2ludGVyKHBvaW50ZXIsIGV2ZW50KVxuICB9XG5cbiAgZG9jdW1lbnRCbHVyIChldmVudCkge1xuICAgIHRoaXMuZW5kKGV2ZW50KVxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgnYmx1cicsIHsgZXZlbnQsIGludGVyYWN0aW9uOiB0aGlzIH0pXG4gIH1cblxuICAvKipcbiAgICogYGBganNcbiAgICogaW50ZXJhY3QodGFyZ2V0KVxuICAgKiAgIC5kcmFnZ2FibGUodHJ1ZSlcbiAgICogICAub24oJ21vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICogICAgIGlmIChldmVudC5wYWdlWCA+IDEwMDApIHtcbiAgICogICAgICAgLy8gZW5kIHRoZSBjdXJyZW50IGFjdGlvblxuICAgKiAgICAgICBldmVudC5pbnRlcmFjdGlvbi5lbmQoKVxuICAgKiAgICAgICAvLyBzdG9wIGFsbCBmdXJ0aGVyIGxpc3RlbmVycyBmcm9tIGJlaW5nIGNhbGxlZFxuICAgKiAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgKiAgICAgfVxuICAgKiAgIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge1BvaW50ZXJFdmVudH0gW2V2ZW50XVxuICAgKi9cbiAgZW5kIChldmVudD86IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUpIHtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlXG4gICAgZXZlbnQgPSBldmVudCB8fCB0aGlzLl9sYXRlc3RQb2ludGVyLmV2ZW50XG4gICAgbGV0IGVuZFBoYXNlUmVzdWx0XG5cbiAgICBpZiAodGhpcy5pbnRlcmFjdGluZygpKSB7XG4gICAgICBlbmRQaGFzZVJlc3VsdCA9IHRoaXMuX2RvUGhhc2Uoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgaW50ZXJhY3Rpb246IHRoaXMsXG4gICAgICAgIHBoYXNlOiBFdmVudFBoYXNlLkVuZCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fZW5kaW5nID0gZmFsc2VcblxuICAgIGlmIChlbmRQaGFzZVJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zdG9wKClcbiAgICB9XG4gIH1cblxuICBjdXJyZW50QWN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3RpbmcgPyB0aGlzLnByZXBhcmVkLm5hbWUgOiBudWxsXG4gIH1cblxuICBpbnRlcmFjdGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW5nXG4gIH1cblxuICAvKiogKi9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5fc2lnbmFscy5maXJlKCdzdG9wJywgeyBpbnRlcmFjdGlvbjogdGhpcyB9KVxuXG4gICAgdGhpcy5pbnRlcmFjdGFibGUgPSB0aGlzLmVsZW1lbnQgPSBudWxsXG5cbiAgICB0aGlzLl9pbnRlcmFjdGluZyA9IGZhbHNlXG4gICAgdGhpcy5fc3RvcHBlZCA9IHRydWVcbiAgICB0aGlzLnByZXBhcmVkLm5hbWUgPSB0aGlzLnByZXZFdmVudCA9IG51bGxcbiAgfVxuXG4gIGdldFBvaW50ZXJJbmRleCAocG9pbnRlcikge1xuICAgIGNvbnN0IHBvaW50ZXJJZCA9IHV0aWxzLnBvaW50ZXIuZ2V0UG9pbnRlcklkKHBvaW50ZXIpXG5cbiAgICAvLyBtb3VzZSBhbmQgcGVuIGludGVyYWN0aW9ucyBtYXkgaGF2ZSBvbmx5IG9uZSBwb2ludGVyXG4gICAgcmV0dXJuICh0aGlzLnBvaW50ZXJUeXBlID09PSAnbW91c2UnIHx8IHRoaXMucG9pbnRlclR5cGUgPT09ICdwZW4nKVxuICAgICAgPyB0aGlzLnBvaW50ZXJzLmxlbmd0aCAtIDFcbiAgICAgIDogdXRpbHMuYXJyLmZpbmRJbmRleCh0aGlzLnBvaW50ZXJzLCBjdXJQb2ludGVyID0+IGN1clBvaW50ZXIuaWQgPT09IHBvaW50ZXJJZClcbiAgfVxuXG4gIGdldFBvaW50ZXJJbmZvIChwb2ludGVyKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnRlcnNbdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlcildXG4gIH1cblxuICB1cGRhdGVQb2ludGVyIChwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZSwgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsIGV2ZW50VGFyZ2V0OiBOb2RlLCBkb3duPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGlkID0gdXRpbHMucG9pbnRlci5nZXRQb2ludGVySWQocG9pbnRlcilcbiAgICBsZXQgcG9pbnRlckluZGV4ID0gdGhpcy5nZXRQb2ludGVySW5kZXgocG9pbnRlcilcbiAgICBsZXQgcG9pbnRlckluZm8gPSB0aGlzLnBvaW50ZXJzW3BvaW50ZXJJbmRleF1cblxuICAgIGRvd24gPSBkb3duID09PSBmYWxzZVxuICAgICAgPyBmYWxzZVxuICAgICAgOiBkb3duIHx8IC8oZG93bnxzdGFydCkkL2kudGVzdChldmVudC50eXBlKVxuXG4gICAgaWYgKCFwb2ludGVySW5mbykge1xuICAgICAgcG9pbnRlckluZm8gPSBuZXcgUG9pbnRlckluZm8oXG4gICAgICAgIGlkLFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBldmVudCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcblxuICAgICAgcG9pbnRlckluZGV4ID0gdGhpcy5wb2ludGVycy5sZW5ndGhcbiAgICAgIHRoaXMucG9pbnRlcnMucHVzaChwb2ludGVySW5mbylcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBwb2ludGVySW5mby5wb2ludGVyID0gcG9pbnRlclxuICAgIH1cblxuICAgIGlmIChkb3duKSB7XG4gICAgICB0aGlzLnBvaW50ZXJJc0Rvd24gPSB0cnVlXG5cbiAgICAgIGlmICghdGhpcy5pbnRlcmFjdGluZygpKSB7XG4gICAgICAgIHV0aWxzLnBvaW50ZXIuc2V0Q29vcmRzKHRoaXMuY29vcmRzLnN0YXJ0LCB0aGlzLnBvaW50ZXJzLm1hcChwID0+IHAucG9pbnRlciksIHRoaXMuX25vdygpKVxuXG4gICAgICAgIHV0aWxzLnBvaW50ZXIuY29weUNvb3Jkcyh0aGlzLmNvb3Jkcy5jdXIsIHRoaXMuY29vcmRzLnN0YXJ0KVxuICAgICAgICB1dGlscy5wb2ludGVyLmNvcHlDb29yZHModGhpcy5jb29yZHMucHJldiwgdGhpcy5jb29yZHMuc3RhcnQpXG4gICAgICAgIHV0aWxzLnBvaW50ZXIucG9pbnRlckV4dGVuZCh0aGlzLmRvd25Qb2ludGVyLCBwb2ludGVyKVxuXG4gICAgICAgIHRoaXMuZG93bkV2ZW50ID0gZXZlbnRcbiAgICAgICAgcG9pbnRlckluZm8uZG93blRpbWUgPSB0aGlzLmNvb3Jkcy5jdXIudGltZVN0YW1wXG4gICAgICAgIHBvaW50ZXJJbmZvLmRvd25UYXJnZXQgPSBldmVudFRhcmdldFxuXG4gICAgICAgIHRoaXMucG9pbnRlcldhc01vdmVkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVMYXRlc3RQb2ludGVyKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldClcblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZSgndXBkYXRlLXBvaW50ZXInLCB7XG4gICAgICBwb2ludGVyLFxuICAgICAgZXZlbnQsXG4gICAgICBldmVudFRhcmdldCxcbiAgICAgIGRvd24sXG4gICAgICBwb2ludGVySW5mbyxcbiAgICAgIHBvaW50ZXJJbmRleCxcbiAgICAgIGludGVyYWN0aW9uOiB0aGlzLFxuICAgIH0pXG5cbiAgICByZXR1cm4gcG9pbnRlckluZGV4XG4gIH1cblxuICByZW1vdmVQb2ludGVyIChwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZSwgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUpIHtcbiAgICBjb25zdCBwb2ludGVySW5kZXggPSB0aGlzLmdldFBvaW50ZXJJbmRleChwb2ludGVyKVxuXG4gICAgaWYgKHBvaW50ZXJJbmRleCA9PT0gLTEpIHsgcmV0dXJuIH1cblxuICAgIGNvbnN0IHBvaW50ZXJJbmZvID0gdGhpcy5wb2ludGVyc1twb2ludGVySW5kZXhdXG5cbiAgICB0aGlzLl9zaWduYWxzLmZpcmUoJ3JlbW92ZS1wb2ludGVyJywge1xuICAgICAgcG9pbnRlcixcbiAgICAgIGV2ZW50LFxuICAgICAgcG9pbnRlckluZGV4LFxuICAgICAgcG9pbnRlckluZm8sXG4gICAgICBpbnRlcmFjdGlvbjogdGhpcyxcbiAgICB9KVxuXG4gICAgdGhpcy5wb2ludGVycy5zcGxpY2UocG9pbnRlckluZGV4LCAxKVxuICB9XG5cbiAgX3VwZGF0ZUxhdGVzdFBvaW50ZXIgKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCkge1xuICAgIHRoaXMuX2xhdGVzdFBvaW50ZXIucG9pbnRlciA9IHBvaW50ZXJcbiAgICB0aGlzLl9sYXRlc3RQb2ludGVyLmV2ZW50ID0gZXZlbnRcbiAgICB0aGlzLl9sYXRlc3RQb2ludGVyLmV2ZW50VGFyZ2V0ID0gZXZlbnRUYXJnZXRcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRoaXMuX2xhdGVzdFBvaW50ZXIucG9pbnRlciA9IG51bGxcbiAgICB0aGlzLl9sYXRlc3RQb2ludGVyLmV2ZW50ID0gbnVsbFxuICAgIHRoaXMuX2xhdGVzdFBvaW50ZXIuZXZlbnRUYXJnZXQgPSBudWxsXG4gIH1cblxuICBfY3JlYXRlUHJlcGFyZWRFdmVudCAoZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsIHBoYXNlOiBFdmVudFBoYXNlLCBwcmVFbmQ6IGJvb2xlYW4sIHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbk5hbWUgPSB0aGlzLnByZXBhcmVkLm5hbWVcblxuICAgIHJldHVybiBuZXcgSW50ZXJhY3RFdmVudCh0aGlzLCBldmVudCwgYWN0aW9uTmFtZSwgcGhhc2UsIHRoaXMuZWxlbWVudCwgbnVsbCwgcHJlRW5kLCB0eXBlKVxuICB9XG5cbiAgX2ZpcmVFdmVudCAoaUV2ZW50KSB7XG4gICAgdGhpcy5pbnRlcmFjdGFibGUuZmlyZShpRXZlbnQpXG5cbiAgICBpZiAoIXRoaXMucHJldkV2ZW50IHx8IGlFdmVudC50aW1lU3RhbXAgPj0gdGhpcy5wcmV2RXZlbnQudGltZVN0YW1wKSB7XG4gICAgICB0aGlzLnByZXZFdmVudCA9IGlFdmVudFxuICAgIH1cbiAgfVxuXG4gIF9kb1BoYXNlIChzaWduYWxBcmc6IFBhcnRpYWw8SW50ZXJhY3QuU2lnbmFsQXJnPikge1xuICAgIGNvbnN0IHsgZXZlbnQsIHBoYXNlLCBwcmVFbmQsIHR5cGUgfSA9IHNpZ25hbEFyZ1xuICAgIGNvbnN0IGJlZm9yZVJlc3VsdCA9IHRoaXMuX3NpZ25hbHMuZmlyZShgYmVmb3JlLWFjdGlvbi0ke3BoYXNlfWAsIHNpZ25hbEFyZylcblxuICAgIGlmIChiZWZvcmVSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBpRXZlbnQgPSBzaWduYWxBcmcuaUV2ZW50ID0gdGhpcy5fY3JlYXRlUHJlcGFyZWRFdmVudChldmVudCwgcGhhc2UsIHByZUVuZCwgdHlwZSlcbiAgICBjb25zdCB7IHJlY3QgfSA9IHRoaXNcblxuICAgIGlmIChyZWN0KSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIHJlY3QgbW9kaWZpY2F0aW9uc1xuICAgICAgY29uc3QgZWRnZXMgPSB0aGlzLmVkZ2VzIHx8IHRoaXMucHJlcGFyZWQuZWRnZXMgfHwgeyBsZWZ0OiB0cnVlLCByaWdodDogdHJ1ZSwgdG9wOiB0cnVlLCBib3R0b206IHRydWUgfVxuXG4gICAgICBpZiAoZWRnZXMudG9wKSAgICB7IHJlY3QudG9wICAgICs9IGlFdmVudC5kZWx0YS55IH1cbiAgICAgIGlmIChlZGdlcy5ib3R0b20pIHsgcmVjdC5ib3R0b20gKz0gaUV2ZW50LmRlbHRhLnkgfVxuICAgICAgaWYgKGVkZ2VzLmxlZnQpICAgeyByZWN0LmxlZnQgICArPSBpRXZlbnQuZGVsdGEueCB9XG4gICAgICBpZiAoZWRnZXMucmlnaHQpICB7IHJlY3QucmlnaHQgICs9IGlFdmVudC5kZWx0YS54IH1cblxuICAgICAgcmVjdC53aWR0aCA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnRcbiAgICAgIHJlY3QuaGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcFxuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZShgYWN0aW9uLSR7cGhhc2V9YCwgc2lnbmFsQXJnKVxuXG4gICAgdGhpcy5fZmlyZUV2ZW50KGlFdmVudClcblxuICAgIHRoaXMuX3NpZ25hbHMuZmlyZShgYWZ0ZXItYWN0aW9uLSR7cGhhc2V9YCwgc2lnbmFsQXJnKVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIF9ub3cgKCkgeyByZXR1cm4gRGF0ZS5ub3coKSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyYWN0aW9uXG5leHBvcnQgeyBQb2ludGVySW5mbyB9XG4iXX0= \ No newline at end of file +//# sourceMappingURL=Interaction.js.map \ No newline at end of file diff --git a/packages/core/Interaction.js.map b/packages/core/Interaction.js.map new file mode 100644 index 000000000..787f3658a --- /dev/null +++ b/packages/core/Interaction.js.map @@ -0,0 +1,144 @@ +{ + "version": 3, + "sources": [ + "Interaction.ts" + ], + "names": [ + "utils", + "InteractEvent", + "EventPhase", + "PointerInfo", + "ActionName", + "_ProxyValues", + "_ProxyMethods", + "Interaction", + "pointerMoveTolerance", + "constructor", + "pointerType", + "scopeFire", + "name", + "axis", + "edges", + "pointer", + "event", + "eventTarget", + "warnOnce", + "signalArg", + "move", + "start", + "newCoords", + "prev", + "cur", + "delta", + "velocity", + "_scopeFire", + "that", + "_proxy", + "key", + "Object", + "defineProperty", + "get", + "value", + "args", + "interaction", + "pointerDown", + "pointerIndex", + "updatePointer", + "type", + "action", + "interactable", + "element", + "interacting", + "pointerIsDown", + "pointers", + "length", + "Gesture", + "options", + "enabled", + "copyAction", + "prepared", + "rect", + "getRect", + "_stopped", + "_interacting", + "_doPhase", + "downEvent", + "phase", + "Start", + "pointerMove", + "simulation", + "modifiers", + "endPrevented", + "setCoords", + "coords", + "map", + "p", + "_now", + "duplicateMove", + "page", + "x", + "y", + "client", + "dx", + "dy", + "pointerWasMoved", + "hypot", + "getPointerIndex", + "duplicate", + "setCoordDeltas", + "setCoordVelocity", + "copyCoords", + "extend", + "_latestPointer", + "Move", + "pointerUp", + "curEventTarget", + "test", + "end", + "removePointer", + "documentBlur", + "_ending", + "endPhaseResult", + "End", + "stop", + "currentAction", + "prevEvent", + "pointerId", + "getPointerId", + "arr", + "findIndex", + "curPointer", + "id", + "getPointerInfo", + "down", + "pointerInfo", + "push", + "pointerExtend", + "downPointer", + "downTime", + "timeStamp", + "downTarget", + "_updateLatestPointer", + "splice", + "destroy", + "_createPreparedEvent", + "preEnd", + "actionName", + "_fireEvent", + "iEvent", + "fire", + "beforeResult", + "left", + "right", + "top", + "bottom", + "width", + "height", + "Date", + "now" + ], + "mappings": ";;AAAA,OAAO,KAAKA,KAAZ;AAEA,OAAOC,aAAP,IAAwBC,UAAxB;AACA,OAAOC,WAAP;AACA,SAASC,UAAT;AAWA,WAAYC,YAAZ;;WAAYA,Y;AAAAA,EAAAA,Y;AAAAA,EAAAA,Y;AAAAA,EAAAA,Y;AAAAA,EAAAA,Y;AAAAA,EAAAA,Y;AAAAA,EAAAA,Y;GAAAA,Y,KAAAA,Y;;AASZ,WAAYC,aAAZ;;WAAYA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;GAAAA,a,KAAAA,a;;AAuEZ,OAAO,MAAMC,WAAN,CAA8C;AACnD;AAGA;AASA;AASA;AAGA;AAeA;AAYA,MAAIC,oBAAJ,GAA4B;AAC1B,WAAO,CAAP;AACD;AAED;;;;;AAsBA;AACAC,EAAAA,WAAW,CAAE;AAAEC,IAAAA,WAAF;AAAeC,IAAAA;AAAf,GAAF,EAGR;AAAA,0CAhF0B,IAgF1B;;AAAA,qCA7EyB,IA6EzB;;AAAA;;AAAA;;AAAA;;AAAA,sCApEwB;AACzBC,MAAAA,IAAI,EAAG,IADkB;AAEzBC,MAAAA,IAAI,EAAG,IAFkB;AAGzBC,MAAAA,KAAK,EAAE;AAHkB,KAoExB;;AAAA;;AAAA,sCA3DuB,EA2DvB;;AAAA,uCAxDoC,IAwDpC;;AAAA,yCAtDiC,EAsDjC;;AAAA,4CAhDC;AACFC,MAAAA,OAAO,EAAE,IADP;AAEFC,MAAAA,KAAK,EAAE,IAFL;AAGFC,MAAAA,WAAW,EAAE;AAHX,KAgDD;;AAAA,uCAzC2B,IAyC3B;;AAAA,2CAvCa,KAuCb;;AAAA,6CAtCe,KAsCf;;AAAA,0CArCY,KAqCZ;;AAAA,qCApCO,KAoCP;;AAAA,sCAnCQ,IAmCR;;AAAA,oCAlCyB,IAkCzB;;AAAA,wCAhCU,IAgCV;;AAAA,oCAvBMjB,KAAK,CAACkB,QAAN,CACP,UAA6BC,SAA7B,EAA6C;AAC3C,WAAKC,IAAL,CAAUD,SAAV;AACD,KAHM,EAIP,wEAJO,CAuBN;;AAAA,oCAjBM;AACP;AACAE,MAAAA,KAAK,EAAErB,KAAK,CAACe,OAAN,CAAcO,SAAd,EAFA;AAGP;AACAC,MAAAA,IAAI,EAAEvB,KAAK,CAACe,OAAN,CAAcO,SAAd,EAJC;AAKP;AACAE,MAAAA,GAAG,EAAExB,KAAK,CAACe,OAAN,CAAcO,SAAd,EANE;AAOP;AACAG,MAAAA,KAAK,EAAEzB,KAAK,CAACe,OAAN,CAAcO,SAAd,EARA;AASP;AACAI,MAAAA,QAAQ,EAAE1B,KAAK,CAACe,OAAN,CAAcO,SAAd;AAVH,KAiBN;;AACD,SAAKK,UAAL,GAAkBhB,SAAlB;AACA,SAAKD,WAAL,GAAmBA,WAAnB;AAEA,UAAMkB,IAAI,GAAG,IAAb;AAEA,SAAKC,MAAL,GAAc,EAAd;;AAEA,SAAK,MAAMC,GAAX,IAAkBzB,YAAlB,EAAgC;AAC9B0B,MAAAA,MAAM,CAACC,cAAP,CAAsB,KAAKH,MAA3B,EAAmCC,GAAnC,EAAwC;AACtCG,QAAAA,GAAG,GAAI;AAAE,iBAAOL,IAAI,CAACE,GAAD,CAAX;AAAkB;;AADW,OAAxC;AAGD;;AAED,SAAK,MAAMA,GAAX,IAAkBxB,aAAlB,EAAiC;AAC/ByB,MAAAA,MAAM,CAACC,cAAP,CAAsB,KAAKH,MAA3B,EAAmCC,GAAnC,EAAwC;AACtCI,QAAAA,KAAK,EAAE,CAAC,GAAGC,IAAJ,KAAaP,IAAI,CAACE,GAAD,CAAJ,CAAU,GAAGK,IAAb;AADkB,OAAxC;AAGD;;AAED,SAAKR,UAAL,CAAgB,kBAAhB,EAAoC;AAAES,MAAAA,WAAW,EAAE;AAAf,KAApC;AACD;;AAEDC,EAAAA,WAAW,CAAEtB,OAAF,EAAiCC,KAAjC,EAAmEC,WAAnE,EAAsG;AAC/G,UAAMqB,YAAY,GAAG,KAAKC,aAAL,CAAmBxB,OAAnB,EAA4BC,KAA5B,EAAmCC,WAAnC,EAAgD,IAAhD,CAArB;;AAEA,SAAKU,UAAL,CAAgB,mBAAhB,EAAqC;AACnCZ,MAAAA,OADmC;AAEnCC,MAAAA,KAFmC;AAGnCC,MAAAA,WAHmC;AAInCqB,MAAAA,YAJmC;AAKnCE,MAAAA,IAAI,EAAE,MAL6B;AAMnCJ,MAAAA,WAAW,EAAE;AANsB,KAArC;AAQD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BAf,EAAAA,KAAK,CAAEoB,MAAF,EAAuBC,YAAvB,EAAmDC,OAAnD,EAA8E;AACjF,QAAI,KAAKC,WAAL,MACA,CAAC,KAAKC,aADN,IAEA,KAAKC,QAAL,CAAcC,MAAd,IAAwBN,MAAM,CAAC7B,IAAP,KAAgBR,UAAU,CAAC4C,OAA3B,GAAqC,CAArC,GAAyC,CAAjE,CAFA,IAGA,CAACN,YAAY,CAACO,OAAb,CAAqBR,MAAM,CAAC7B,IAA5B,EAAkCsC,OAHvC,EAGgD;AAC9C,aAAO,KAAP;AACD;;AAEDlD,IAAAA,KAAK,CAACmD,UAAN,CAAiB,KAAKC,QAAtB,EAAgCX,MAAhC;AAEA,SAAKC,YAAL,GAAoBA,YAApB;AACA,SAAKC,OAAL,GAAoBA,OAApB;AACA,SAAKU,IAAL,GAAoBX,YAAY,CAACY,OAAb,CAAqBX,OAArB,CAApB;AACA,SAAK7B,KAAL,GAAoB,KAAKsC,QAAL,CAActC,KAAlC;AACA,SAAKyC,QAAL,GAAoB,KAApB;AACA,SAAKC,YAAL,GAAoB,KAAKC,QAAL,CAAc;AAChCrB,MAAAA,WAAW,EAAE,IADmB;AAEhCpB,MAAAA,KAAK,EAAE,KAAK0C,SAFoB;AAGhCC,MAAAA,KAAK,EAAEzD,UAAU,CAAC0D;AAHc,KAAd,KAId,CAAC,KAAKL,QAJZ;AAMA,WAAO,KAAKC,YAAZ;AACD;;AAEDK,EAAAA,WAAW,CAAE9C,OAAF,EAAiCC,KAAjC,EAAmEC,WAAnE,EAAsG;AAC/G,QAAI,CAAC,KAAK6C,UAAN,IAAoB,EAAE,KAAKC,SAAL,IAAkB,KAAKA,SAAL,CAAeC,YAAnC,CAAxB,EAA0E;AACxE,WAAKzB,aAAL,CAAmBxB,OAAnB,EAA4BC,KAA5B,EAAmCC,WAAnC,EAAgD,KAAhD;AACAjB,MAAAA,KAAK,CAACe,OAAN,CAAckD,SAAd,CAAwB,KAAKC,MAAL,CAAY1C,GAApC,EAAyC,KAAKsB,QAAL,CAAcqB,GAAd,CAAkBC,CAAC,IAAIA,CAAC,CAACrD,OAAzB,CAAzC,EAA4E,KAAKsD,IAAL,EAA5E;AACD;;AAED,UAAMC,aAAa,GAAI,KAAKJ,MAAL,CAAY1C,GAAZ,CAAgB+C,IAAhB,CAAqBC,CAArB,KAA2B,KAAKN,MAAL,CAAY3C,IAAZ,CAAiBgD,IAAjB,CAAsBC,CAAjD,IACA,KAAKN,MAAL,CAAY1C,GAAZ,CAAgB+C,IAAhB,CAAqBE,CAArB,KAA2B,KAAKP,MAAL,CAAY3C,IAAZ,CAAiBgD,IAAjB,CAAsBE,CADjD,IAEA,KAAKP,MAAL,CAAY1C,GAAZ,CAAgBkD,MAAhB,CAAuBF,CAAvB,KAA6B,KAAKN,MAAL,CAAY3C,IAAZ,CAAiBmD,MAAjB,CAAwBF,CAFrD,IAGA,KAAKN,MAAL,CAAY1C,GAAZ,CAAgBkD,MAAhB,CAAuBD,CAAvB,KAA6B,KAAKP,MAAL,CAAY3C,IAAZ,CAAiBmD,MAAjB,CAAwBD,CAH5E;AAKA,QAAIE,EAAJ;AACA,QAAIC,EAAJ,CAZ+G,CAc/G;;AACA,QAAI,KAAK/B,aAAL,IAAsB,CAAC,KAAKgC,eAAhC,EAAiD;AAC/CF,MAAAA,EAAE,GAAG,KAAKT,MAAL,CAAY1C,GAAZ,CAAgBkD,MAAhB,CAAuBF,CAAvB,GAA2B,KAAKN,MAAL,CAAY7C,KAAZ,CAAkBqD,MAAlB,CAAyBF,CAAzD;AACAI,MAAAA,EAAE,GAAG,KAAKV,MAAL,CAAY1C,GAAZ,CAAgBkD,MAAhB,CAAuBD,CAAvB,GAA2B,KAAKP,MAAL,CAAY7C,KAAZ,CAAkBqD,MAAlB,CAAyBD,CAAzD;AAEA,WAAKI,eAAL,GAAuB7E,KAAK,CAAC8E,KAAN,CAAYH,EAAZ,EAAgBC,EAAhB,IAAsB,KAAKpE,oBAAlD;AACD;;AAED,UAAMW,SAAS,GAAG;AAChBJ,MAAAA,OADgB;AAEhBuB,MAAAA,YAAY,EAAE,KAAKyC,eAAL,CAAqBhE,OAArB,CAFE;AAGhBC,MAAAA,KAHgB;AAIhBwB,MAAAA,IAAI,EAAE,MAJU;AAKhBvB,MAAAA,WALgB;AAMhB0D,MAAAA,EANgB;AAOhBC,MAAAA,EAPgB;AAQhBI,MAAAA,SAAS,EAAEV,aARK;AAShBlC,MAAAA,WAAW,EAAE;AATG,KAAlB;;AAYA,QAAI,CAACkC,aAAL,EAAoB;AAClB;AACAtE,MAAAA,KAAK,CAACe,OAAN,CAAckE,cAAd,CAA6B,KAAKf,MAAL,CAAYzC,KAAzC,EAAgD,KAAKyC,MAAL,CAAY3C,IAA5D,EAAkE,KAAK2C,MAAL,CAAY1C,GAA9E;AACAxB,MAAAA,KAAK,CAACe,OAAN,CAAcmE,gBAAd,CAA+B,KAAKhB,MAAL,CAAYxC,QAA3C,EAAqD,KAAKwC,MAAL,CAAYzC,KAAjE;AACD;;AAED,SAAKE,UAAL,CAAgB,mBAAhB,EAAqCR,SAArC;;AAEA,QAAI,CAACmD,aAAL,EAAoB;AAClB;AACA,UAAI,KAAK1B,WAAL,EAAJ,EAAwB;AACtBzB,QAAAA,SAAS,CAACqB,IAAV,GAAiB,IAAjB;AACA,aAAKpB,IAAL,CAAUD,SAAV;AACD;;AAED,UAAI,KAAK0D,eAAT,EAA0B;AACxB7E,QAAAA,KAAK,CAACe,OAAN,CAAcoE,UAAd,CAAyB,KAAKjB,MAAL,CAAY3C,IAArC,EAA2C,KAAK2C,MAAL,CAAY1C,GAAvD;AACD;AACF;AACF;AAED;;;;;;;;;;;;;;;;;;;;AAkBAJ,EAAAA,IAAI,CAAED,SAAF,EAAc;AAChBA,IAAAA,SAAS,GAAGnB,KAAK,CAACoF,MAAN,CAAa;AACvBrE,MAAAA,OAAO,EAAE,KAAKsE,cAAL,CAAoBtE,OADN;AAEvBC,MAAAA,KAAK,EAAE,KAAKqE,cAAL,CAAoBrE,KAFJ;AAGvBC,MAAAA,WAAW,EAAE,KAAKoE,cAAL,CAAoBpE,WAHV;AAIvBmB,MAAAA,WAAW,EAAE;AAJU,KAAb,EAKTjB,SAAS,IAAI,EALJ,CAAZ;AAOAA,IAAAA,SAAS,CAACwC,KAAV,GAAkBzD,UAAU,CAACoF,IAA7B;;AAEA,SAAK7B,QAAL,CAActC,SAAd;AACD,GAjQkD,CAmQnD;;;AACAoE,EAAAA,SAAS,CAAExE,OAAF,EAAiCC,KAAjC,EAAmEC,WAAnE,EAAsGuE,cAAtG,EAA4I;AACnJ,QAAIlD,YAAY,GAAG,KAAKyC,eAAL,CAAqBhE,OAArB,CAAnB;;AAEA,QAAIuB,YAAY,KAAK,CAAC,CAAtB,EAAyB;AACvBA,MAAAA,YAAY,GAAG,KAAKC,aAAL,CAAmBxB,OAAnB,EAA4BC,KAA5B,EAAmCC,WAAnC,EAAgD,KAAhD,CAAf;AACD;;AAED,UAAMuB,IAAI,GAAG,WAAWiD,IAAX,CAAgBzE,KAAK,CAACwB,IAAtB,IAA8B,QAA9B,GAAyC,IAAtD;;AAEA,SAAKb,UAAL,CAAiB,gBAAea,IAAK,EAArC,EAAqF;AACnFzB,MAAAA,OADmF;AAEnFuB,MAAAA,YAFmF;AAGnFtB,MAAAA,KAHmF;AAInFC,MAAAA,WAJmF;AAKnFuB,MAAAA,IAAI,EAAEA,IAL6E;AAMnFgD,MAAAA,cANmF;AAOnFpD,MAAAA,WAAW,EAAE;AAPsE,KAArF;;AAUA,QAAI,CAAC,KAAK0B,UAAV,EAAsB;AACpB,WAAK4B,GAAL,CAAS1E,KAAT;AACD;;AAED,SAAK6B,aAAL,GAAqB,KAArB;AACA,SAAK8C,aAAL,CAAmB5E,OAAnB,EAA4BC,KAA5B;AACD;;AAED4E,EAAAA,YAAY,CAAE5E,KAAF,EAAS;AACnB,SAAK0E,GAAL,CAAS1E,KAAT;;AACA,SAAKW,UAAL,CAAgB,mBAAhB,EAAqC;AAAEX,MAAAA,KAAF;AAASwB,MAAAA,IAAI,EAAE,MAAf;AAAuBJ,MAAAA,WAAW,EAAE;AAApC,KAArC;AACD;AAED;;;;;;;;;;;;;;;;;;AAgBAsD,EAAAA,GAAG,CAAE1E,KAAF,EAAqC;AACtC,SAAK6E,OAAL,GAAe,IAAf;AACA7E,IAAAA,KAAK,GAAGA,KAAK,IAAI,KAAKqE,cAAL,CAAoBrE,KAArC;AACA,QAAI8E,cAAJ;;AAEA,QAAI,KAAKlD,WAAL,EAAJ,EAAwB;AACtBkD,MAAAA,cAAc,GAAG,KAAKrC,QAAL,CAAc;AAC7BzC,QAAAA,KAD6B;AAE7BoB,QAAAA,WAAW,EAAE,IAFgB;AAG7BuB,QAAAA,KAAK,EAAEzD,UAAU,CAAC6F;AAHW,OAAd,CAAjB;AAKD;;AAED,SAAKF,OAAL,GAAe,KAAf;;AAEA,QAAIC,cAAc,KAAK,IAAvB,EAA6B;AAC3B,WAAKE,IAAL;AACD;AACF;;AAEDC,EAAAA,aAAa,GAAI;AACf,WAAO,KAAKzC,YAAL,GAAoB,KAAKJ,QAAL,CAAcxC,IAAlC,GAAyC,IAAhD;AACD;;AAEDgC,EAAAA,WAAW,GAAI;AACb,WAAO,KAAKY,YAAZ;AACD;AAED;;;AACAwC,EAAAA,IAAI,GAAI;AACN,SAAKrE,UAAL,CAAgB,mBAAhB,EAAqC;AAAES,MAAAA,WAAW,EAAE;AAAf,KAArC;;AAEA,SAAKM,YAAL,GAAoB,KAAKC,OAAL,GAAe,IAAnC;AAEA,SAAKa,YAAL,GAAoB,KAApB;AACA,SAAKD,QAAL,GAAgB,IAAhB;AACA,SAAKH,QAAL,CAAcxC,IAAd,GAAqB,KAAKsF,SAAL,GAAiB,IAAtC;AACD;;AAEDnB,EAAAA,eAAe,CAAEhE,OAAF,EAAW;AACxB,UAAMoF,SAAS,GAAGnG,KAAK,CAACe,OAAN,CAAcqF,YAAd,CAA2BrF,OAA3B,CAAlB,CADwB,CAGxB;;AACA,WAAQ,KAAKL,WAAL,KAAqB,OAArB,IAAgC,KAAKA,WAAL,KAAqB,KAAtD,GACH,KAAKoC,QAAL,CAAcC,MAAd,GAAuB,CADpB,GAEH/C,KAAK,CAACqG,GAAN,CAAUC,SAAV,CAAoB,KAAKxD,QAAzB,EAAmCyD,UAAU,IAAIA,UAAU,CAACC,EAAX,KAAkBL,SAAnE,CAFJ;AAGD;;AAEDM,EAAAA,cAAc,CAAE1F,OAAF,EAAW;AACvB,WAAO,KAAK+B,QAAL,CAAc,KAAKiC,eAAL,CAAqBhE,OAArB,CAAd,CAAP;AACD;;AAEDwB,EAAAA,aAAa,CAAExB,OAAF,EAAiCC,KAAjC,EAAmEC,WAAnE,EAAsGyF,IAAtG,EAAsH;AACjI,UAAMF,EAAE,GAAGxG,KAAK,CAACe,OAAN,CAAcqF,YAAd,CAA2BrF,OAA3B,CAAX;AACA,QAAIuB,YAAY,GAAG,KAAKyC,eAAL,CAAqBhE,OAArB,CAAnB;AACA,QAAI4F,WAAW,GAAG,KAAK7D,QAAL,CAAcR,YAAd,CAAlB;AAEAoE,IAAAA,IAAI,GAAGA,IAAI,KAAK,KAAT,GACH,KADG,GAEHA,IAAI,IAAI,iBAAiBjB,IAAjB,CAAsBzE,KAAK,CAACwB,IAA5B,CAFZ;;AAIA,QAAI,CAACmE,WAAL,EAAkB;AAChBA,MAAAA,WAAW,GAAG,IAAIxG,WAAJ,CACZqG,EADY,EAEZzF,OAFY,EAGZC,KAHY,EAIZ,IAJY,EAKZ,IALY,CAAd;AAQAsB,MAAAA,YAAY,GAAG,KAAKQ,QAAL,CAAcC,MAA7B;AACA,WAAKD,QAAL,CAAc8D,IAAd,CAAmBD,WAAnB;AACD,KAXD,MAYK;AACHA,MAAAA,WAAW,CAAC5F,OAAZ,GAAsBA,OAAtB;AACD;;AAED,QAAI2F,IAAJ,EAAU;AACR,WAAK7D,aAAL,GAAqB,IAArB;;AAEA,UAAI,CAAC,KAAKD,WAAL,EAAL,EAAyB;AACvB5C,QAAAA,KAAK,CAACe,OAAN,CAAckD,SAAd,CAAwB,KAAKC,MAAL,CAAY7C,KAApC,EAA2C,KAAKyB,QAAL,CAAcqB,GAAd,CAAkBC,CAAC,IAAIA,CAAC,CAACrD,OAAzB,CAA3C,EAA8E,KAAKsD,IAAL,EAA9E;AAEArE,QAAAA,KAAK,CAACe,OAAN,CAAcoE,UAAd,CAAyB,KAAKjB,MAAL,CAAY1C,GAArC,EAA0C,KAAK0C,MAAL,CAAY7C,KAAtD;AACArB,QAAAA,KAAK,CAACe,OAAN,CAAcoE,UAAd,CAAyB,KAAKjB,MAAL,CAAY3C,IAArC,EAA2C,KAAK2C,MAAL,CAAY7C,KAAvD;AACArB,QAAAA,KAAK,CAACe,OAAN,CAAc8F,aAAd,CAA4B,KAAKC,WAAjC,EAA8C/F,OAA9C;AAEA,aAAK2C,SAAL,GAAiB1C,KAAjB;AACA2F,QAAAA,WAAW,CAACI,QAAZ,GAAuB,KAAK7C,MAAL,CAAY1C,GAAZ,CAAgBwF,SAAvC;AACAL,QAAAA,WAAW,CAACM,UAAZ,GAAyBhG,WAAzB;AAEA,aAAK4D,eAAL,GAAuB,KAAvB;AACD;AACF;;AAED,SAAKqC,oBAAL,CAA0BnG,OAA1B,EAAmCC,KAAnC,EAA0CC,WAA1C;;AAEA,SAAKU,UAAL,CAAgB,6BAAhB,EAA+C;AAC7CZ,MAAAA,OAD6C;AAE7CC,MAAAA,KAF6C;AAG7CC,MAAAA,WAH6C;AAI7CyF,MAAAA,IAJ6C;AAK7CC,MAAAA,WAL6C;AAM7CrE,MAAAA,YAN6C;AAO7CF,MAAAA,WAAW,EAAE;AAPgC,KAA/C;;AAUA,WAAOE,YAAP;AACD;;AAEDqD,EAAAA,aAAa,CAAE5E,OAAF,EAAiCC,KAAjC,EAAmE;AAC9E,UAAMsB,YAAY,GAAG,KAAKyC,eAAL,CAAqBhE,OAArB,CAArB;;AAEA,QAAIuB,YAAY,KAAK,CAAC,CAAtB,EAAyB;AAAE;AAAQ;;AAEnC,UAAMqE,WAAW,GAAG,KAAK7D,QAAL,CAAcR,YAAd,CAApB;;AAEA,SAAKX,UAAL,CAAgB,6BAAhB,EAA+C;AAC7CZ,MAAAA,OAD6C;AAE7CC,MAAAA,KAF6C;AAG7CC,MAAAA,WAAW,EAAE,IAHgC;AAI7CqB,MAAAA,YAJ6C;AAK7CqE,MAAAA,WAL6C;AAM7CvE,MAAAA,WAAW,EAAE;AANgC,KAA/C;;AASA,SAAKU,QAAL,CAAcqE,MAAd,CAAqB7E,YAArB,EAAmC,CAAnC;AACD;;AAED4E,EAAAA,oBAAoB,CAAEnG,OAAF,EAAWC,KAAX,EAAkBC,WAAlB,EAA+B;AACjD,SAAKoE,cAAL,CAAoBtE,OAApB,GAA8BA,OAA9B;AACA,SAAKsE,cAAL,CAAoBrE,KAApB,GAA4BA,KAA5B;AACA,SAAKqE,cAAL,CAAoBpE,WAApB,GAAkCA,WAAlC;AACD;;AAEDmG,EAAAA,OAAO,GAAI;AACT,SAAK/B,cAAL,CAAoBtE,OAApB,GAA8B,IAA9B;AACA,SAAKsE,cAAL,CAAoBrE,KAApB,GAA4B,IAA5B;AACA,SAAKqE,cAAL,CAAoBpE,WAApB,GAAkC,IAAlC;AACD;;AAEDoG,EAAAA,oBAAoB,CAAErG,KAAF,EAAoC2C,KAApC,EAAuD2D,MAAvD,EAAyE9E,IAAzE,EAAwF;AAC1G,UAAM+E,UAAU,GAAG,KAAKnE,QAAL,CAAcxC,IAAjC;AAEA,WAAO,IAAIX,aAAJ,CAAkB,IAAlB,EAAwBe,KAAxB,EAA+BuG,UAA/B,EAA2C5D,KAA3C,EAAkD,KAAKhB,OAAvD,EAAgE,IAAhE,EAAsE2E,MAAtE,EAA8E9E,IAA9E,CAAP;AACD;;AAEDgF,EAAAA,UAAU,CAAEC,MAAF,EAAU;AAClB,SAAK/E,YAAL,CAAkBgF,IAAlB,CAAuBD,MAAvB;;AAEA,QAAI,CAAC,KAAKvB,SAAN,IAAmBuB,MAAM,CAACT,SAAP,IAAoB,KAAKd,SAAL,CAAec,SAA1D,EAAqE;AACnE,WAAKd,SAAL,GAAiBuB,MAAjB;AACD;AACF;;AAEDhE,EAAAA,QAAQ,CAAEtC,SAAF,EAAyE;AAC/E,UAAM;AAAEH,MAAAA,KAAF;AAAS2C,MAAAA,KAAT;AAAgB2D,MAAAA,MAAhB;AAAwB9E,MAAAA;AAAxB,QAAiCrB,SAAvC;;AACA,UAAMwG,YAAY,GAAG,KAAKhG,UAAL,CAAiB,8BAA6BgC,KAAM,EAApD,EAA8DxC,SAA9D,CAArB;;AAEA,QAAIwG,YAAY,KAAK,KAArB,EAA4B;AAC1B,aAAO,KAAP;AACD;;AAED,UAAMF,MAAM,GAAGtG,SAAS,CAACsG,MAAV,GAAmB,KAAKJ,oBAAL,CAA0BrG,KAA1B,EAAiC2C,KAAjC,EAAwC2D,MAAxC,EAAgD9E,IAAhD,CAAlC;;AACA,UAAM;AAAEa,MAAAA;AAAF,QAAW,IAAjB;;AAEA,QAAIA,IAAJ,EAAU;AACR;AACA,YAAMvC,KAAK,GAAG,KAAKA,KAAL,IAAc,KAAKsC,QAAL,CAActC,KAA5B,IAAqC;AAAE8G,QAAAA,IAAI,EAAE,IAAR;AAAcC,QAAAA,KAAK,EAAE,IAArB;AAA2BC,QAAAA,GAAG,EAAE,IAAhC;AAAsCC,QAAAA,MAAM,EAAE;AAA9C,OAAnD;;AAEA,UAAIjH,KAAK,CAACgH,GAAV,EAAkB;AAAEzE,QAAAA,IAAI,CAACyE,GAAL,IAAeL,MAAM,CAAChG,KAAP,CAAagD,CAA5B;AAA+B;;AACnD,UAAI3D,KAAK,CAACiH,MAAV,EAAkB;AAAE1E,QAAAA,IAAI,CAAC0E,MAAL,IAAeN,MAAM,CAAChG,KAAP,CAAagD,CAA5B;AAA+B;;AACnD,UAAI3D,KAAK,CAAC8G,IAAV,EAAkB;AAAEvE,QAAAA,IAAI,CAACuE,IAAL,IAAeH,MAAM,CAAChG,KAAP,CAAa+C,CAA5B;AAA+B;;AACnD,UAAI1D,KAAK,CAAC+G,KAAV,EAAkB;AAAExE,QAAAA,IAAI,CAACwE,KAAL,IAAeJ,MAAM,CAAChG,KAAP,CAAa+C,CAA5B;AAA+B;;AAEnDnB,MAAAA,IAAI,CAAC2E,KAAL,GAAa3E,IAAI,CAACwE,KAAL,GAAaxE,IAAI,CAACuE,IAA/B;AACAvE,MAAAA,IAAI,CAAC4E,MAAL,GAAc5E,IAAI,CAAC0E,MAAL,GAAc1E,IAAI,CAACyE,GAAjC;AACD;;AAED,SAAKnG,UAAL,CAAiB,uBAAsBgC,KAAM,EAA7C,EAAuDxC,SAAvD;;AAEA,SAAKqG,UAAL,CAAgBC,MAAhB;;AAEA,SAAK9F,UAAL,CAAiB,6BAA4BgC,KAAM,EAAnD,EAA6DxC,SAA7D;;AAEA,WAAO,IAAP;AACD;;AAEDkD,EAAAA,IAAI,GAAI;AAAE,WAAO6D,IAAI,CAACC,GAAL,EAAP;AAAmB;;AAhfsB;AAmfrD,eAAe5H,WAAf;AACA,SAASJ,WAAT", + "sourcesContent": [ + "import * as utils from '../utils/index'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n}\n\nexport interface StartAction extends ActionProps {\n name: ActionName | string\n}\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = ''\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = ''\n}\n\nexport type PointerArgProps = {\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n pointerIndex: number\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: Interact.PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n pointerInfo: PointerInfo\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps<{\n pointerInfo: PointerInfo\n }>\n 'interactions:blur'\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoPhaseArg\n 'interactions:after-action-start': DoPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoPhaseArg\n 'interactions:after-action-move': DoPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoPhaseArg\n 'interactions:after-action-end': DoPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type _InteractionProxy = Pick<\nInteraction,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nexport class Interaction {\n // current interactable being interacted with\n interactable: Interactable = null\n\n // the target element of the interactable\n element: Interact.Element = null\n rect: Interact.Rect & Interact.Size\n edges: {\n [P in keyof Interact.Rect]?: boolean\n }\n\n _scopeFire: Interact.Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: Interact.EventTarget\n event: Interact.PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: _InteractionProxy = null\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, scopeFire }: {\n pointerType?: string\n scopeFire: Interact.Scope['fire']\n }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as _InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () { return that[key] },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n type: 'down',\n interaction: this,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action: StartAction, interactable: Interactable, element: Interact.Element) {\n if (this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) ||\n !interactable.options[action.name].enabled) {\n return false\n }\n\n utils.copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n this._stopped = false\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: EventPhase.Start,\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) {\n if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) {\n this.updatePointer(pointer, event, eventTarget, false)\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now())\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y)\n\n let dx\n let dy\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n type: 'move' as const,\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._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg?) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n }, signalArg || {})\n\n signalArg.phase = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, curEventTarget: Interact.EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n type: type as any,\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._scopeFire('interactions:blur', { event, type: 'blur', 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._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n getPointerIndex (pointer) {\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: Interact.EventTarget, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now())\n\n utils.pointer.copyCoords(this.coords.cur, this.coords.start)\n utils.pointer.copyCoords(this.coords.prev, this.coords.start)\n utils.pointer.pointerExtend(this.downPointer, pointer)\n\n this.downEvent = event\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: Interact.PointerType, event: Interact.PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) { return }\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this,\n })\n\n this.pointers.splice(pointerIndex, 1)\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy () {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd?: boolean, type?: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.interactable.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Omit & { iEvent?: InteractEvent }) {\n const { event, phase, preEnd, type } = signalArg\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type)\n const { rect } = this\n\n if (rect) {\n // update the rect modifications\n const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }\n\n if (edges.top) { rect.top += iEvent.delta.y }\n if (edges.bottom) { rect.bottom += iEvent.delta.y }\n if (edges.left) { rect.left += iEvent.delta.x }\n if (edges.right) { rect.right += iEvent.delta.x }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n _now () { return Date.now() }\n}\n\nexport default Interaction\nexport { PointerInfo }\n" + ] +} \ No newline at end of file diff --git a/packages/core/Interaction.spec.js b/packages/core/Interaction.spec.js deleted file mode 100644 index 5192a03d3..000000000 --- a/packages/core/Interaction.spec.js +++ /dev/null @@ -1,326 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import drag from '@interactjs/actions/drag'; -import autoStart from '@interactjs/auto-start/base'; -import pointerUtils from '@interactjs/utils/pointerUtils'; -import Signals from '@interactjs/utils/Signals'; -import InteractEvent from './InteractEvent'; -import Interaction from './Interaction'; -import * as helpers from './tests/_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, `interaction.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 destroy', t => { - const interaction = makeInteractionAndSignals(); - const pointer = { pointerId: 10 }; - const event = {}; - interaction.updatePointer(pointer, event, null); - interaction.destroy(); - t.strictEqual(interaction._latestPointer.pointer, null, 'interaction._latestPointer.pointer is null'); - t.strictEqual(interaction._latestPointer.event, null, 'interaction._latestPointer.event is null'); - t.strictEqual(interaction._latestPointer.eventTarget, null, 'interaction._latestPointer.eventTarget is null'); - 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(); - }); - t.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], event.timeStamp); - 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 interactable = helpers.mockInteractable(); - const element = {}; - const pointer = helpers.newPointer(); - const event = {}; - interaction.start(action, interactable, element); - t.equal(interaction.prepared.name, null, 'do nothing if !pointerIsDown'); - // pointers is still empty - interaction.pointerIsDown = true; - interaction.start(action, interactable, 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, interactable, element); - t.equal(interaction.prepared.name, null, 'do nothing if already interacting'); - interaction._interacting = false; - interactable.options[action.name] = { enabled: false }; - interaction.start(action, interactable, element); - t.equal(interaction.prepared.name, null, 'do nothing if action is not enabled'); - interactable.options[action.name] = { enabled: true }; - let signalArg; - // let interactingInStartListener - const signalListener = arg => { - signalArg = arg; - // interactingInStartListener = arg.interaction.interacting() - }; - interaction._signals.on('action-start', signalListener); - interaction.start(action, interactable, element); - t.equal(interaction.prepared.name, action.name, 'action is prepared'); - t.equal(interaction.interactable, interactable, 'interaction.interactable 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 { interaction, interactable, target, } = helpers.testEnv({ plugins: [drag, autoStart] }); - let stoppedBeforeStartFired; - interactable.on('dragstart', event => { - stoppedBeforeStartFired = interaction._stopped; - event.interaction.stop(); - }); - interaction.start({ name: 'drag' }, interactable, target); - t.notOk(stoppedBeforeStartFired, '!interaction._stopped in start listener'); - t.notOk(interaction.interacting(), 'interaction can be stopped from start event listener'); - t.ok(interaction._stopped, 'interaction._stopped after stop() in start listener'); - t.end(); -}); -test('Interaction createPreparedEvent', t => { - const scope = helpers.mockScope(); - const interaction = scope.interactions.new({}); - const interactable = helpers.mockInteractable(); - const action = { name: 'resize' }; - const phase = 'TEST_PHASE'; - interaction.prepared = action; - interaction.interactable = 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.interactable = 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3Rpb24uc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkludGVyYWN0aW9uLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxJQUFJLE1BQU0sMEJBQTBCLENBQUE7QUFDM0MsT0FBTyxTQUFTLE1BQU0sNkJBQTZCLENBQUE7QUFDbkQsT0FBTyxZQUFZLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxXQUFXLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUE7QUFFM0MsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFTLENBQUMsQ0FBQTtBQUUxRixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7SUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUM7UUFDbEMsV0FBVyxFQUFFLFFBQVE7UUFDckIsT0FBTztLQUNSLENBQUMsQ0FBQTtJQUNGLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUksRUFBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN6QixNQUFNLEVBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDekIsU0FBUyxFQUFFLENBQUM7S0FDYixDQUFBO0lBRUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8s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RixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN2RSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUMvQyxNQUFNLE1BQU0sR0FBRyxFQUE0QixDQUFBO0lBQzNDLElBQUksVUFBVSxDQUFBO0lBRWQseURBQXlEO0lBQ3pELFlBQVksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7UUFDMUIsVUFBVSxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDLENBQUE7SUFFRCxXQUFXLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUN2QyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTlCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFDeEIsOENBQThDLENBQUMsQ0FBQTtJQUVqRCxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUNuQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBRXJDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgZHJhZyBmcm9tICdAaW50ZXJhY3Rqcy9hY3Rpb25zL2RyYWcnXG5pbXBvcnQgYXV0b1N0YXJ0IGZyb20gJ0BpbnRlcmFjdGpzL2F1dG8tc3RhcnQvYmFzZSdcbmltcG9ydCBwb2ludGVyVXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcG9pbnRlclV0aWxzJ1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCBJbnRlcmFjdEV2ZW50IGZyb20gJy4vSW50ZXJhY3RFdmVudCdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICcuL0ludGVyYWN0aW9uJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL3Rlc3RzL19oZWxwZXJzJ1xuXG5jb25zdCBtYWtlSW50ZXJhY3Rpb25BbmRTaWduYWxzID0gKCkgPT4gbmV3IEludGVyYWN0aW9uKHsgc2lnbmFsczogbmV3IFNpZ25hbHMoKSB9IGFzIGFueSlcblxudGVzdCgnSW50ZXJhY3Rpb24gY29uc3RydWN0b3InLCB0ID0+IHtcbiAgY29uc3QgdGVzdFR5cGUgPSAndGVzdCdcbiAgY29uc3Qgc2lnbmFscyA9IG5ldyBTaWduYWxzKClcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBuZXcgSW50ZXJhY3Rpb24oe1xuICAgIHBvaW50ZXJUeXBlOiB0ZXN0VHlwZSxcbiAgICBzaWduYWxzLFxuICB9KVxuICBjb25zdCB6ZXJvQ29vcmRzID0ge1xuICAgIHBhZ2UgICAgIDogeyB4OiAwLCB5OiAwIH0sXG4gICAgY2xpZW50ICAgOiB7IHg6IDAsIHk6IDAgfSxcbiAgICB0aW1lU3RhbXA6IDAsXG4gIH1cblxuICB0LmVxdWFsKGludGVyYWN0aW9uLl9zaWduYWxzLCBzaWduYWxzLFxuICAgICdzaWduYWxzIG9wdGlvbiBpcyBzZXQgYXNzaWduZWQgdG8gaW50ZXJhY3Rpb24uX3NpZ25hbHMnKVxuXG4gIHQub2soaW50ZXJhY3Rpb24ucHJlcGFyZWQgaW5zdGFuY2VvZiBPYmplY3QsXG4gICAgJ2ludGVyYWN0aW9uLnByZXBhcmVkIGlzIGFuIG9iamVjdCcpXG4gIHQub2soaW50ZXJhY3Rpb24uZG93blBvaW50ZXIgaW5zdGFuY2VvZiBPYmplY3QsXG4gICAgJ2ludGVyYWN0aW9uLmRvd25Qb2ludGVyIGlzIGFuIG9iamVjdCcpXG5cbiAgZm9yIChjb25zdCBjb29yZEZpZWxkIGluIGludGVyYWN0aW9uLmNvb3Jkcykge1xuICAgIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLmNvb3Jkc1tjb29yZEZpZWxkXSwgemVyb0Nvb3JkcyxcbiAgICAgIGBpbnRlcmFjdGlvbi5jb29yZHMuJHtjb29yZEZpZWxkfSBzZXQgdG8gemVyb2ApXG4gIH1cblxuICB0LmVxdWFsKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlLCB0ZXN0VHlwZSxcbiAgICAnaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUgaXMgc2V0JylcblxuICAvLyBwb2ludGVySW5mbyBwcm9wZXJ0aWVzXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLFxuICAgIFtdLFxuICAgICdpbnRlcmFjdGlvbi5wb2ludGVycyBpcyBpbml0aWFsbHkgYW4gZW1wdHkgYXJyYXknKVxuXG4gIC8vIGZhbHNlIHByb3BlcnRpZXNcbiAgZm9yIChjb25zdCBwcm9wIG9mICdwb2ludGVySXNEb3duIHBvaW50ZXJXYXNNb3ZlZCBfaW50ZXJhY3RpbmcgbW91c2UnLnNwbGl0KCcgJykpIHtcbiAgICB0Lm5vdE9rKGludGVyYWN0aW9uW3Byb3BdLCBgaW50ZXJhY3Rpb24uJHtwcm9wfSBpcyBmYWxzZWApXG4gIH1cblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbiBkZXN0cm95JywgdCA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbWFrZUludGVyYWN0aW9uQW5kU2lnbmFscygpXG4gIGNvbnN0IHBvaW50ZXIgPSB7IHBvaW50ZXJJZDogMTAgfSBhcyBhbnlcbiAgY29uc3QgZXZlbnQgPSB7fSBhcyBhbnlcblxuICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKHBvaW50ZXIsIGV2ZW50LCBudWxsKVxuXG4gIGludGVyYWN0aW9uLmRlc3Ryb3koKVxuXG4gIHQuc3RyaWN0RXF1YWwoaW50ZXJhY3Rpb24uX2xhdGVzdFBvaW50ZXIucG9pbnRlciwgbnVsbCxcbiAgICAnaW50ZXJhY3Rpb24uX2xhdGVzdFBvaW50ZXIucG9pbnRlciBpcyBudWxsJylcblxuICB0LnN0cmljdEVxdWFsKGludGVyYWN0aW9uLl9sYXRlc3RQb2ludGVyLmV2ZW50LCBudWxsLFxuICAgICdpbnRlcmFjdGlvbi5fbGF0ZXN0UG9pbnRlci5ldmVudCBpcyBudWxsJylcblxuICB0LnN0cmljdEVxdWFsKGludGVyYWN0aW9uLl9sYXRlc3RQb2ludGVyLmV2ZW50VGFyZ2V0LCBudWxsLFxuICAgICdpbnRlcmFjdGlvbi5fbGF0ZXN0UG9pbnRlci5ldmVudFRhcmdldCBpcyBudWxsJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbi5nZXRQb2ludGVySW5kZXgnLCB0ID0+IHtcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBtYWtlSW50ZXJhY3Rpb25BbmRTaWduYWxzKClcblxuICBpbnRlcmFjdGlvbi5wb2ludGVycyA9IFsyLCA0LCA1LCAwLCAtMV0ubWFwKGlkID0+ICh7IGlkIH0pKSBhcyBhbnlcblxuICBpbnRlcmFjdGlvbi5wb2ludGVycy5mb3JFYWNoKCh7IGlkIH0sIGluZGV4KSA9PiB7XG4gICAgdC5lcXVhbChpbnRlcmFjdGlvbi5nZXRQb2ludGVySW5kZXgoeyBwb2ludGVySWQ6IGlkIH0pLCBpbmRleClcbiAgfSlcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyJywgdCA9PiB7XG4gIHQudGVzdCgnbm8gZXhpc3RpbmcgcG9pbnRlcnMnLCBzdCA9PiB7XG4gICAgY29uc3QgaW50ZXJhY3Rpb24gPSBtYWtlSW50ZXJhY3Rpb25BbmRTaWduYWxzKClcbiAgICBjb25zdCBwb2ludGVyID0geyBwb2ludGVySWQ6IDEwIH0gYXMgYW55XG4gICAgY29uc3QgZXZlbnQgPSB7fSBhcyBhbnlcblxuICAgIGNvbnN0IHJldCA9IGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgZXZlbnQsIG51bGwpXG5cbiAgICBzdC5kZWVwRXF1YWwoXG4gICAgICBpbnRlcmFjdGlvbi5wb2ludGVycyxcbiAgICAgIFt7XG4gICAgICAgIGlkOiBwb2ludGVyLnBvaW50ZXJJZCxcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGRvd25UaW1lOiBudWxsLFxuICAgICAgICBkb3duVGFyZ2V0OiBudWxsLFxuICAgICAgfV0sXG4gICAgICAnaW50ZXJhY3Rpb24ucG9pbnRlcnMgPT0gW3sgcG9pbnRlciwgLi4uIH1dJylcbiAgICBzdC5lcXVhbChyZXQsIDAsICduZXcgcG9pbnRlciBpbmRleCBpcyByZXR1cm5lZCcpXG5cbiAgICBzdC5lbmQoKVxuICB9KVxuXG4gIHQudGVzdCgnbmV3IHBvaW50ZXIgd2l0aCBleGlzaXRpbmcgcG9pbnRlcicsIHN0ID0+IHtcbiAgICBjb25zdCBpbnRlcmFjdGlvbiA9IG1ha2VJbnRlcmFjdGlvbkFuZFNpZ25hbHMoKVxuICAgIGNvbnN0IGV4aXN0aW5nOiBhbnkgPSB7IHBvaW50ZXJJZDogMCB9XG4gICAgY29uc3QgZXZlbnQ6IGFueSA9IHt9XG5cbiAgICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKGV4aXN0aW5nLCBldmVudCwgbnVsbClcblxuICAgIGNvbnN0IG5ld1BvaW50ZXI6IGFueSA9IHsgcG9pbnRlcklkOiAxMCB9XG4gICAgY29uc3QgcmV0ID0gaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihuZXdQb2ludGVyLCBldmVudCwgbnVsbClcblxuICAgIHN0LmRlZXBFcXVhbChcbiAgICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogZXhpc3RpbmcucG9pbnRlcklkLFxuICAgICAgICAgIHBvaW50ZXI6IGV4aXN0aW5nLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGRvd25UaW1lOiBudWxsLFxuICAgICAgICAgIGRvd25UYXJnZXQ6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogbmV3UG9pbnRlci5wb2ludGVySWQsXG4gICAgICAgICAgcG9pbnRlcjogbmV3UG9pbnRlcixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBkb3duVGltZTogbnVsbCxcbiAgICAgICAgICBkb3duVGFyZ2V0OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgICdpbnRlcmFjdGlvbi5wb2ludGVycyA9PSBbeyBwb2ludGVyOiBleGlzdGluZywgLi4uIH0sIHsgcG9pbnRlcjogbmV3UG9pbnRlciwgLi4uIH1dJylcblxuICAgIHN0LmVxdWFsKHJldCwgMSwgJ3NlY29uZCBwb2ludGVyIGluZGV4IGlzIDEnKVxuXG4gICAgc3QuZW5kKClcbiAgfSlcblxuICB0LnRlc3QoJ3VwZGF0ZSBleGlzdGluZyBwb2ludGVycycsIHN0ID0+IHtcbiAgICBjb25zdCBpbnRlcmFjdGlvbiA9IG1ha2VJbnRlcmFjdGlvbkFuZFNpZ25hbHMoKVxuXG4gICAgY29uc3Qgb2xkUG9pbnRlcnMgPSBbLTMsIDEwLCAyXS5tYXAocG9pbnRlcklkID0+ICh7IHBvaW50ZXJJZCB9KSlcbiAgICBjb25zdCBuZXdQb2ludGVycyA9IG9sZFBvaW50ZXJzLm1hcChwb2ludGVyID0+ICh7IC4uLnBvaW50ZXIsIG5ldzogdHJ1ZSB9KSlcblxuICAgIG9sZFBvaW50ZXJzLmZvckVhY2goKHBvaW50ZXI6IGFueSkgPT4gaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcihwb2ludGVyLCBwb2ludGVyLCBudWxsKSlcbiAgICBuZXdQb2ludGVycy5mb3JFYWNoKChwb2ludGVyOiBhbnkpID0+IGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIocG9pbnRlciwgcG9pbnRlciwgbnVsbCkpXG5cbiAgICBzdC5lcXVhbChpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGgsIG9sZFBvaW50ZXJzLmxlbmd0aCxcbiAgICAgICdudW1iZXIgb2YgcG9pbnRlcnMgaXMgdW5jaGFuZ2VkJylcblxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLmZvckVhY2goKHBvaW50ZXJJbmZvLCBpKSA9PiB7XG4gICAgICBzdC5lcXVhbChwb2ludGVySW5mby5pZCwgb2xkUG9pbnRlcnNbaV0ucG9pbnRlcklkLFxuICAgICAgICBgcG9pbnRlclske2l9XS5pZCBpcyB0aGUgc2FtZWApXG4gICAgICBzdC5ub3RFcXVhbChwb2ludGVySW5mby5wb2ludGVyLCBvbGRQb2ludGVyc1tpXSxcbiAgICAgICAgYG5ldyBwb2ludGVyICR7aX0gIT09IG9sZCBwb2ludGVyIG9iamVjdGApXG4gICAgfSlcblxuICAgIHN0LmVuZCgpXG4gIH0pXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnSW50ZXJhY3Rpb24ucmVtb3ZlUG9pbnRlcicsIHQgPT4ge1xuICBjb25zdCBpbnRlcmFjdGlvbiA9IG1ha2VJbnRlcmFjdGlvbkFuZFNpZ25hbHMoKVxuICBjb25zdCBpZHMgPSBbMCwgMSwgMiwgM11cbiAgY29uc3QgcmVtb3ZhbHMgPSBbXG4gICAgeyBpZDogMCwgcmVtYWluOiBbMSwgMiwgM10sIG1lc3NhZ2U6ICdmaXJzdCBvZiA0JyB9LFxuICAgIHsgaWQ6IDIsIHJlbWFpbjogWzEsICAgIDNdLCBtZXNzYWdlOiAnbWlkZGxlIG9mIDMnIH0sXG4gICAgeyBpZDogMywgcmVtYWluOiBbMSAgICAgIF0sIG1lc3NhZ2U6ICdsYXN0IG9mIDInIH0sXG4gICAgeyBpZDogMSwgcmVtYWluOiBbICAgICAgIF0sIG1lc3NhZ2U6ICdmaW5hbCcgfSxcbiAgXVxuXG4gIGlkcy5mb3JFYWNoKHBvaW50ZXJJZCA9PiBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKHsgcG9pbnRlcklkIH0gYXMgYW55LCB7fSBhcyBhbnksIG51bGwpKVxuXG4gIGZvciAoY29uc3QgcmVtb3ZhbCBvZiByZW1vdmFscykge1xuICAgIGludGVyYWN0aW9uLnJlbW92ZVBvaW50ZXIoeyBwb2ludGVySWQ6IHJlbW92YWwuaWQgfSBhcyBJbnRlcmFjdC5Qb2ludGVyVHlwZSwgbnVsbClcblxuICAgIHQuZGVlcEVxdWFsKFxuICAgICAgaW50ZXJhY3Rpb24ucG9pbnRlcnMubWFwKHAgPT4gcC5pZCksXG4gICAgICByZW1vdmFsLnJlbWFpbixcbiAgICAgIGAke3JlbW92YWwubWVzc2FnZX0gLSByZW1haW5pbmcgaW50ZXJhY3Rpb24ucG9pbnRlcnMgaXMgY29ycmVjdGApXG4gIH1cblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbi5wb2ludGVye0Rvd24sTW92ZSxVcH0gdXBkYXRlUG9pbnRlcicsIHQgPT4ge1xuICBjb25zdCBzaWduYWxzID0gbmV3IFNpZ25hbHMoKVxuICBjb25zdCBpbnRlcmFjdGlvbiA9IG5ldyBJbnRlcmFjdGlvbih7IHNpZ25hbHMgfSBhcyBhbnkpXG4gIGNvbnN0IGV2ZW50VGFyZ2V0OiBhbnkgPSB7fVxuICBjb25zdCBwb2ludGVyOiBhbnkgPSB7XG4gICAgdGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICBwb2ludGVySWQ6IDAsXG4gIH1cbiAgbGV0IGluZm86IGFueSA9IHt9XG5cbiAgc2lnbmFscy5vbigndXBkYXRlLXBvaW50ZXInLCBhcmcgPT4geyBpbmZvLnVwZGF0ZWQgPSBhcmcucG9pbnRlckluZm8gfSlcbiAgc2lnbmFscy5vbigncmVtb3ZlLXBvaW50ZXInLCBhcmcgPT4geyBpbmZvLnJlbW92ZWQgPSBhcmcucG9pbnRlckluZm8gfSlcblxuICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnRpbWVTdGFtcCA9IDBcbiAgY29uc3QgY29tbW9uUG9pbnRlckluZm8gPSB7XG4gICAgaWQ6IDAsXG4gICAgcG9pbnRlcixcbiAgICBldmVudDogcG9pbnRlcixcbiAgICBkb3duVGltZTogbnVsbCxcbiAgICBkb3duVGFyZ2V0OiBudWxsLFxuICB9XG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24ocG9pbnRlciwgcG9pbnRlciwgZXZlbnRUYXJnZXQpXG4gIHQuZGVlcEVxdWFsKFxuICAgIGluZm8udXBkYXRlZCxcbiAgICB7XG4gICAgICAuLi5jb21tb25Qb2ludGVySW5mbyxcbiAgICAgIGRvd25UaW1lOiBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnRpbWVTdGFtcCxcbiAgICAgIGRvd25UYXJnZXQ6IGV2ZW50VGFyZ2V0LFxuICAgIH0sXG4gICAgJ2ludGVyYWN0aW9uLnBvaW50ZXJEb3duIHVwZGF0ZXMgcG9pbnRlcidcbiAgKVxuICB0LmVxdWFsKGluZm8ucmVtb3ZlZCwgdW5kZWZpbmVkLCAnaW50ZXJhY3Rpb24ucG9pbnRlckRvd24gZG9lc25cXCd0IHJlbW92ZSBwb2ludGVyJylcbiAgaW50ZXJhY3Rpb24ucmVtb3ZlUG9pbnRlcihwb2ludGVyLCBudWxsKVxuICBpbmZvID0ge31cblxuICBpbnRlcmFjdGlvbi5wb2ludGVyTW92ZShwb2ludGVyLCBwb2ludGVyLCBldmVudFRhcmdldClcbiAgdC5kZWVwRXF1YWwoXG4gICAgaW5mby51cGRhdGVkLFxuICAgIGNvbW1vblBvaW50ZXJJbmZvLFxuICAgICdpbnRlcmFjdGlvbi5wb2ludGVyTW92ZSB1cGRhdGVzIHBvaW50ZXInXG4gIClcbiAgdC5lcXVhbChpbmZvLnJlbW92ZWQsIHVuZGVmaW5lZCwgJ2ludGVyYWN0aW9uLnBvaW50ZXJNb3ZlIGRvZXNuXFwndCByZW1vdmUgcG9pbnRlcicpXG4gIGluZm8gPSB7fVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJVcChwb2ludGVyLCBwb2ludGVyLCBldmVudFRhcmdldCwgbnVsbClcbiAgdC5lcXVhbChpbmZvLnVwZGF0ZWQsIHVuZGVmaW5lZCwgJ2ludGVyYWN0aW9uLnBvaW50ZXJVcCBkb2VzblxcJ3QgdXBkYXRlIGV4aXN0aW5nIHBvaW50ZXInKVxuICBpbmZvID0ge31cblxuICBpbnRlcmFjdGlvbi5wb2ludGVyVXAocG9pbnRlciwgcG9pbnRlciwgZXZlbnRUYXJnZXQsIG51bGwpXG4gIHQuZGVlcEVxdWFsKFxuICAgIGluZm8udXBkYXRlZCxcbiAgICBjb21tb25Qb2ludGVySW5mbyxcbiAgICAnaW50ZXJhY3Rpb24ucG9pbnRlclVwIHVwZGF0ZXMgbm9uIGV4aXN0aW5nIHBvaW50ZXInXG4gIClcbiAgdC5kZWVwRXF1YWwoaW5mby5yZW1vdmVkLCBjb21tb25Qb2ludGVySW5mbywgJ2ludGVyYWN0aW9uLnBvaW50ZXJVcCBhbHNvIHJlbW92ZXMgcG9pbnRlcicpXG4gIGluZm8gPSB7fVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0ludGVyYWN0aW9uLnBvaW50ZXJEb3duJywgdCA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbWFrZUludGVyYWN0aW9uQW5kU2lnbmFscygpXG4gIGNvbnN0IGNvb3JkcyA9IGhlbHBlcnMubmV3Q29vcmRzU2V0KClcbiAgY29uc3QgZXZlbnRUYXJnZXQgPSB7fSBhcyBJbnRlcmFjdC5FbGVtZW50XG4gIGNvbnN0IGV2ZW50OiBhbnkgPSB7XG4gICAgdHlwZTogJ2Rvd24nLFxuICAgIHRhcmdldDogZXZlbnRUYXJnZXQsXG4gIH1cbiAgY29uc3QgcG9pbnRlcjogYW55ID0gaGVscGVycy5uZXdQb2ludGVyKClcbiAgbGV0IHNpZ25hbEFyZ1xuXG4gIGNvbnN0IHNpZ25hbExpc3RlbmVyID0gYXJnID0+IHtcbiAgICBzaWduYWxBcmcgPSBhcmdcbiAgfVxuXG4gIGludGVyYWN0aW9uLl9zaWduYWxzLm9uKCdkb3duJywgc2lnbmFsTGlzdGVuZXIpXG5cbiAgY29uc3QgcG9pbnRlckNvb3JkczogYW55ID0geyBwYWdlOiB7fSwgY2xpZW50OiB7fSB9XG4gIHBvaW50ZXJVdGlscy5zZXRDb29yZHMocG9pbnRlckNvb3JkcywgW3BvaW50ZXJdLCBldmVudC50aW1lU3RhbXApXG5cbiAgZm9yIChjb25zdCBwcm9wIGluIGNvb3Jkcykge1xuICAgIHBvaW50ZXJVdGlscy5jb3B5Q29vcmRzKGludGVyYWN0aW9uLmNvb3Jkc1twcm9wXSwgY29vcmRzW3Byb3BdKVxuICB9XG5cbiAgLy8gdGVzdCB3aGlsZSBpbnRlcmFjdGluZ1xuICBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcgPSB0cnVlXG4gIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldClcblxuICB0LmVxdWFsKGludGVyYWN0aW9uLmRvd25FdmVudCwgbnVsbCwgJ2Rvd25FdmVudCBpcyBub3QgdXBkYXRlZCcpXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLFxuICAgIFt7XG4gICAgICBpZDogcG9pbnRlci5wb2ludGVySWQsXG4gICAgICBwb2ludGVyLFxuICAgICAgZXZlbnQsXG4gICAgICBkb3duVGltZTogbnVsbCxcbiAgICAgIGRvd25UYXJnZXQ6IG51bGwsXG4gICAgfV0sXG4gICAgJ3BvaW50ZXIgaXMgYWRkZWQnXG4gIClcblxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5kb3duUG9pbnRlciwge30gYXMgYW55LCAnZG93blBvaW50ZXIgaXMgbm90IHVwZGF0ZWQnKVxuXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLmNvb3Jkcy5zdGFydCwgY29vcmRzLnN0YXJ0LCAnY29vcmRzLnN0YXJ0IGFyZSBub3QgbW9kaWZpZWQnKVxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5jb29yZHMuY3VyLCAgIGNvb3Jkcy5jdXIsICAgJ2Nvb3Jkcy5jdXIgICBhcmUgbm90IG1vZGlmaWVkJylcbiAgdC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24uY29vcmRzLnByZXYsICBjb29yZHMucHJldiwgICdjb29yZHMucHJldiAgYXJlIG5vdCBtb2RpZmllZCcpXG5cbiAgdC5vayhpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duLCAncG9pbnRlcklzRG93bicpXG4gIHQubm90T2soaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkLCAnIXBvaW50ZXJXYXNNb3ZlZCcpXG5cbiAgdC5lcXVhbChzaWduYWxBcmcucG9pbnRlciwgICAgICBwb2ludGVyLCAgICAgJ3BvaW50ZXIgICAgICBpbiBkb3duIHNpZ25hbCBhcmcnKVxuICB0LmVxdWFsKHNpZ25hbEFyZy5ldmVudCwgICAgICAgIGV2ZW50LCAgICAgICAnZXZlbnQgICAgICAgIGluIGRvd24gc2lnbmFsIGFyZycpXG4gIHQuZXF1YWwoc2lnbmFsQXJnLmV2ZW50VGFyZ2V0LCAgZXZlbnRUYXJnZXQsICdldmVudFRhcmdldCAgaW4gZG93biBzaWduYWwgYXJnJylcbiAgdC5lcXVhbChzaWduYWxBcmcucG9pbnRlckluZGV4LCAwLCAgICAgICAgICAgJ3BvaW50ZXJJbmRleCBpbiBkb3duIHNpZ25hbCBhcmcnKVxuXG4gIC8vIHRlc3Qgd2hpbGUgbm90IGludGVyYWN0aW5nXG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IGZhbHNlXG4gIC8vIHJlc2V0IHBvaW50ZXJJc0Rvd25cbiAgaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biA9IGZhbHNlXG4gIC8vIHByZXRlbmQgcG9pbnRlciB3YXMgbW92ZWRcbiAgaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkID0gdHJ1ZVxuICAvLyByZXNldCBzaWduYWxBcmcgb2JqZWN0XG4gIHNpZ25hbEFyZyA9IHVuZGVmaW5lZFxuXG4gIGludGVyYWN0aW9uLnJlbW92ZVBvaW50ZXIocG9pbnRlciwgbnVsbClcbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24ocG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0KVxuXG4gIC8vIHRpbWVTdGFtcCBpcyBhc3NpZ25lZCB3aXRoIG5ldyBEYXRlLmdldFRpbWUoKVxuICAvLyBkb24ndCBsZXQgaXQgY2F1c2UgZGVlcEVhdWFsIHRvIGZhaWxcbiAgcG9pbnRlckNvb3Jkcy50aW1lU3RhbXAgPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQudGltZVN0YW1wXG5cbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5kb3duRXZlbnQsIGV2ZW50LCAnZG93bkV2ZW50IGlzIHVwZGF0ZWQnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJzLFxuICAgIFt7XG4gICAgICBpZDogcG9pbnRlci5wb2ludGVySWQsXG4gICAgICBwb2ludGVyLFxuICAgICAgZXZlbnQsXG4gICAgICBkb3duVGltZTogcG9pbnRlckNvb3Jkcy50aW1lU3RhbXAsXG4gICAgICBkb3duVGFyZ2V0OiBldmVudFRhcmdldCxcbiAgICB9XSxcbiAgICAnaW50ZXJhY3Rpb24ucG9pbnRlcnMgaXMgdXBkYXRlZCcpXG5cbiAgdC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LCBwb2ludGVyQ29vcmRzLCAnY29vcmRzLnN0YXJ0IGFyZSBzZXQgdG8gcG9pbnRlcicpXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLmNvb3Jkcy5jdXIsICAgcG9pbnRlckNvb3JkcywgJ2Nvb3Jkcy5jdXIgICBhcmUgc2V0IHRvIHBvaW50ZXInKVxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5jb29yZHMucHJldiwgIHBvaW50ZXJDb29yZHMsICdjb29yZHMucHJldiAgYXJlIHNldCB0byBwb2ludGVyJylcblxuICB0LmVxdWFsKHR5cGVvZiBzaWduYWxBcmcsICdvYmplY3QnLCAnZG93biBzaWduYWwgd2FzIGZpcmVkIGFnYWluJylcbiAgdC5vayhpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duLCAncG9pbnRlcklzRG93bicpXG4gIHQubm90T2soaW50ZXJhY3Rpb24ucG9pbnRlcldhc01vdmVkLCAncG9pbnRlcldhc01vdmVkIHNob3VsZCBhbHdheXMgY2hhbmdlIHRvIGZhbHNlJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbi5zdGFydCcsIHQgPT4ge1xuICBjb25zdCBpbnRlcmFjdGlvbiA9IG1ha2VJbnRlcmFjdGlvbkFuZFNpZ25hbHMoKVxuICBjb25zdCBhY3Rpb24gPSB7IG5hbWU6ICdURVNUJyB9XG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IGhlbHBlcnMubW9ja0ludGVyYWN0YWJsZSgpXG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IHt9XG4gIGNvbnN0IHBvaW50ZXIgPSBoZWxwZXJzLm5ld1BvaW50ZXIoKVxuICBjb25zdCBldmVudDogYW55ID0ge31cblxuICBpbnRlcmFjdGlvbi5zdGFydChhY3Rpb24sIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lLCBudWxsLCAnZG8gbm90aGluZyBpZiAhcG9pbnRlcklzRG93bicpXG5cbiAgLy8gcG9pbnRlcnMgaXMgc3RpbGwgZW1wdHlcbiAgaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biA9IHRydWVcbiAgaW50ZXJhY3Rpb24uc3RhcnQoYWN0aW9uLCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG4gIHQuZXF1YWwoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSwgbnVsbCwgJ2RvIG5vdGhpbmcgaWYgdG9vIGZldyBwb2ludGVycyBhcmUgZG93bicpXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24ocG9pbnRlciwgZXZlbnQsIG51bGwpXG5cbiAgaW50ZXJhY3Rpb24uX2ludGVyYWN0aW5nID0gdHJ1ZVxuICBpbnRlcmFjdGlvbi5zdGFydChhY3Rpb24sIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lLCBudWxsLCAnZG8gbm90aGluZyBpZiBhbHJlYWR5IGludGVyYWN0aW5nJylcblxuICBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcgPSBmYWxzZVxuXG4gIGludGVyYWN0YWJsZS5vcHRpb25zW2FjdGlvbi5uYW1lXSA9IHsgZW5hYmxlZDogZmFsc2UgfVxuICBpbnRlcmFjdGlvbi5zdGFydChhY3Rpb24sIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lLCBudWxsLCAnZG8gbm90aGluZyBpZiBhY3Rpb24gaXMgbm90IGVuYWJsZWQnKVxuICBpbnRlcmFjdGFibGUub3B0aW9uc1thY3Rpb24ubmFtZV0gPSB7IGVuYWJsZWQ6IHRydWUgfVxuXG4gIGxldCBzaWduYWxBcmdcbiAgLy8gbGV0IGludGVyYWN0aW5nSW5TdGFydExpc3RlbmVyXG4gIGNvbnN0IHNpZ25hbExpc3RlbmVyID0gYXJnID0+IHtcbiAgICBzaWduYWxBcmcgPSBhcmdcbiAgICAvLyBpbnRlcmFjdGluZ0luU3RhcnRMaXN0ZW5lciA9IGFyZy5pbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpXG4gIH1cblxuICBpbnRlcmFjdGlvbi5fc2lnbmFscy5vbignYWN0aW9uLXN0YXJ0Jywgc2lnbmFsTGlzdGVuZXIpXG4gIGludGVyYWN0aW9uLnN0YXJ0KGFjdGlvbiwgaW50ZXJhY3RhYmxlLCBlbGVtZW50KVxuXG4gIHQuZXF1YWwoaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSwgYWN0aW9uLm5hbWUsICdhY3Rpb24gaXMgcHJlcGFyZWQnKVxuICB0LmVxdWFsKGludGVyYWN0aW9uLmludGVyYWN0YWJsZSwgaW50ZXJhY3RhYmxlLCAnaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlIGlzIHVwZGF0ZWQnKVxuICB0LmVxdWFsKGludGVyYWN0aW9uLmVsZW1lbnQsIGVsZW1lbnQsICdpbnRlcmFjdGlvbi5lbGVtZW50IGlzIHVwZGF0ZWQnKVxuXG4gIC8vIHQuYXNzZXJ0KGludGVyYWN0aW5nSW5TdGFydExpc3RlbmVyLCAnaW50ZXJhY3Rpb24gaXMgaW50ZXJhY3RpbmcgZHVyaW5nIGFjdGlvbi1zdGFydCBzaWduYWwnKVxuICB0LmFzc2VydChpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpLCAnaW50ZXJhY3Rpb24gaXMgaW50ZXJhY3RpbmcgYWZ0ZXIgc3RhcnQgbWV0aG9kJylcbiAgdC5lcXVhbChzaWduYWxBcmcuaW50ZXJhY3Rpb24sIGludGVyYWN0aW9uLCAnaW50ZXJhY3Rpb24gaW4gc2lnbmFsIGFyZycpXG4gIHQuZXF1YWwoc2lnbmFsQXJnLmV2ZW50LCBldmVudCwgJ2V2ZW50IChpbnRlcmFjdGlvbi5kb3duRXZlbnQpIGluIHNpZ25hbCBhcmcnKVxuXG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IGZhbHNlXG5cbiAgLy8gaW50ZXJhY3Rpb24uc3RhcnQoYWN0aW9uLCB0YXJnZXQsIGVsZW1lbnQpXG4gIC8vIHQuZGVlcEVxdWFsKHNjb3BlLmludGVyYWN0aW9ucy5saXN0LCBbaW50ZXJhY3Rpb25dLCAnaW50ZXJhY3Rpb24gaXMgYWRkZWQgYmFjayB0byBzY29wZScpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnc3RvcCBpbnRlcmFjdGlvbiBmcm9tIHN0YXJ0IGV2ZW50JywgdCA9PiB7XG4gIGNvbnN0IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBpbnRlcmFjdGFibGUsXG4gICAgdGFyZ2V0LFxuICB9ID0gaGVscGVycy50ZXN0RW52KHsgcGx1Z2luczogW2RyYWcsIGF1dG9TdGFydF0gfSlcblxuICBsZXQgc3RvcHBlZEJlZm9yZVN0YXJ0RmlyZWRcblxuICBpbnRlcmFjdGFibGUub24oJ2RyYWdzdGFydCcsIGV2ZW50ID0+IHtcbiAgICBzdG9wcGVkQmVmb3JlU3RhcnRGaXJlZCA9IGludGVyYWN0aW9uLl9zdG9wcGVkXG5cbiAgICBldmVudC5pbnRlcmFjdGlvbi5zdG9wKClcbiAgfSlcblxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdkcmFnJyB9LCBpbnRlcmFjdGFibGUsIHRhcmdldCBhcyBIVE1MRWxlbWVudClcblxuICB0Lm5vdE9rKHN0b3BwZWRCZWZvcmVTdGFydEZpcmVkLCAnIWludGVyYWN0aW9uLl9zdG9wcGVkIGluIHN0YXJ0IGxpc3RlbmVyJylcbiAgdC5ub3RPayhpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpLCAnaW50ZXJhY3Rpb24gY2FuIGJlIHN0b3BwZWQgZnJvbSBzdGFydCBldmVudCBsaXN0ZW5lcicpXG4gIHQub2soaW50ZXJhY3Rpb24uX3N0b3BwZWQsICdpbnRlcmFjdGlvbi5fc3RvcHBlZCBhZnRlciBzdG9wKCkgaW4gc3RhcnQgbGlzdGVuZXInKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ0ludGVyYWN0aW9uIGNyZWF0ZVByZXBhcmVkRXZlbnQnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG5cbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KVxuICBjb25zdCBpbnRlcmFjdGFibGUgPSBoZWxwZXJzLm1vY2tJbnRlcmFjdGFibGUoKVxuICBjb25zdCBhY3Rpb24gPSB7IG5hbWU6ICdyZXNpemUnIH1cbiAgY29uc3QgcGhhc2UgPSAnVEVTVF9QSEFTRSdcblxuICBpbnRlcmFjdGlvbi5wcmVwYXJlZCA9IGFjdGlvblxuICBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUgPSBpbnRlcmFjdGFibGVcbiAgaW50ZXJhY3Rpb24uZWxlbWVudCA9IGludGVyYWN0YWJsZS5lbGVtZW50XG4gIGludGVyYWN0aW9uLnByZXZFdmVudCA9IHsgcGFnZToge30sIGNsaWVudDoge30sIHZlbG9jaXR5OiB7fSB9XG5cbiAgY29uc3QgaUV2ZW50ID0gaW50ZXJhY3Rpb24uX2NyZWF0ZVByZXBhcmVkRXZlbnQoe30sIHBoYXNlKVxuXG4gIHQub2soaUV2ZW50IGluc3RhbmNlb2YgSW50ZXJhY3RFdmVudCxcbiAgICAnSW50ZXJhY3RFdmVudCBpcyBmaXJlZCcpXG5cbiAgdC5lcXVhbChpRXZlbnQudHlwZSwgYWN0aW9uLm5hbWUgKyBwaGFzZSxcbiAgICAnZXZlbnQgdHlwZScpXG5cbiAgdC5lcXVhbChpRXZlbnQuaW50ZXJhY3RhYmxlLCBpbnRlcmFjdGFibGUsXG4gICAgJ2V2ZW50LmludGVyYWN0YWJsZScpXG5cbiAgdC5lcXVhbChpRXZlbnQudGFyZ2V0LCBpbnRlcmFjdGFibGUuZWxlbWVudCxcbiAgICAnZXZlbnQudGFyZ2V0JylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdJbnRlcmFjdGlvbiBmaXJlRXZlbnQnLCB0ID0+IHtcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBuZXcgSW50ZXJhY3Rpb24oeyBzaWduYWxzOiBoZWxwZXJzLm1vY2tTaWduYWxzKCkgfSlcbiAgY29uc3QgaW50ZXJhY3RhYmxlID0gaGVscGVycy5tb2NrSW50ZXJhY3RhYmxlKClcbiAgY29uc3QgaUV2ZW50ID0ge30gYXMgSW50ZXJhY3QuSW50ZXJhY3RFdmVudFxuICBsZXQgZmlyZWRFdmVudFxuXG4gIC8vIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBhY3Rpb25zLmZpcmVQcmVwYXJlZFxuICBpbnRlcmFjdGFibGUuZmlyZSA9IGV2ZW50ID0+IHtcbiAgICBmaXJlZEV2ZW50ID0gZXZlbnRcbiAgfVxuXG4gIGludGVyYWN0aW9uLmludGVyYWN0YWJsZSA9IGludGVyYWN0YWJsZVxuICBpbnRlcmFjdGlvbi5fZmlyZUV2ZW50KGlFdmVudClcblxuICB0LmVxdWFsKGZpcmVkRXZlbnQsIGlFdmVudCxcbiAgICAndGFyZ2V0IGludGVyYWN0YWJsZVxcJ3MgZmlyZSBtZXRob2QgaXMgY2FsbGVkJylcblxuICB0LmVxdWFsKGludGVyYWN0aW9uLnByZXZFdmVudCwgaUV2ZW50LFxuICAgICdpbnRlcmFjdGlvbi5wcmV2RXZlbnQgaXMgdXBkYXRlZCcpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/core/PointerInfo.d.ts b/packages/core/PointerInfo.d.ts index 78fcdd539..41971b49a 100644 --- a/packages/core/PointerInfo.d.ts +++ b/packages/core/PointerInfo.d.ts @@ -3,7 +3,7 @@ export declare class PointerInfo { pointer: Interact.PointerType; event: Interact.PointerEventType; downTime: number; - downTarget: Node; - constructor(id: number, pointer: Interact.PointerType, event: Interact.PointerEventType, downTime: number, downTarget: Node); + downTarget: Interact.EventTarget; + constructor(id: number, pointer: Interact.PointerType, event: Interact.PointerEventType, downTime: number, downTarget: Interact.EventTarget); } export default PointerInfo; diff --git a/packages/core/PointerInfo.js b/packages/core/PointerInfo.js index 9ada86626..93f8a8528 100644 --- a/packages/core/PointerInfo.js +++ b/packages/core/PointerInfo.js @@ -1,12 +1,13 @@ /* eslint-disable @typescript-eslint/no-parameter-properties */ export class PointerInfo { - constructor(id, pointer, event, downTime, downTarget) { - this.id = id; - this.pointer = pointer; - this.event = event; - this.downTime = downTime; - this.downTarget = downTarget; - } + constructor(id, pointer, event, downTime, downTarget) { + this.id = id; + this.pointer = pointer; + this.event = event; + this.downTime = downTime; + this.downTarget = downTarget; + } + } export default PointerInfo; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRlckluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJQb2ludGVySW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrREFBK0Q7QUFDL0QsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDUyxFQUFVLEVBQ1YsT0FBNkIsRUFDN0IsS0FBZ0MsRUFDaEMsUUFBZ0IsRUFDaEIsVUFBZ0I7UUFKaEIsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUNWLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzdCLFVBQUssR0FBTCxLQUFLLENBQTJCO1FBQ2hDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsZUFBVSxHQUFWLFVBQVUsQ0FBTTtJQUN0QixDQUFDO0NBQ0w7QUFFRCxlQUFlLFdBQVcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1wYXJhbWV0ZXItcHJvcGVydGllcyAqL1xuZXhwb3J0IGNsYXNzIFBvaW50ZXJJbmZvIHtcbiAgY29uc3RydWN0b3IgKFxuICAgIHB1YmxpYyBpZDogbnVtYmVyLFxuICAgIHB1YmxpYyBwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZSxcbiAgICBwdWJsaWMgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsXG4gICAgcHVibGljIGRvd25UaW1lOiBudW1iZXIsXG4gICAgcHVibGljIGRvd25UYXJnZXQ6IE5vZGUsXG4gICkge31cbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRlckluZm9cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=PointerInfo.js.map \ No newline at end of file diff --git a/packages/core/PointerInfo.js.map b/packages/core/PointerInfo.js.map new file mode 100644 index 000000000..88157f826 --- /dev/null +++ b/packages/core/PointerInfo.js.map @@ -0,0 +1,19 @@ +{ + "version": 3, + "sources": [ + "PointerInfo.ts" + ], + "names": [ + "PointerInfo", + "constructor", + "id", + "pointer", + "event", + "downTime", + "downTarget" + ], + "mappings": "AAAA;AACA,OAAO,MAAMA,WAAN,CAAkB;AACvBC,EAAAA,WAAW,CACFC,EADE,EAEFC,OAFE,EAGFC,KAHE,EAIFC,QAJE,EAKFC,UALE,EAMT;AAAA,SALOJ,EAKP,GALOA,EAKP;AAAA,SAJOC,OAIP,GAJOA,OAIP;AAAA,SAHOC,KAGP,GAHOA,KAGP;AAAA,SAFOC,QAEP,GAFOA,QAEP;AAAA,SADOC,UACP,GADOA,UACP;AAAE;;AAPmB;AAUzB,eAAeN,WAAf", + "sourcesContent": [ + "/* eslint-disable @typescript-eslint/no-parameter-properties */\nexport class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: Interact.EventTarget,\n ) {}\n}\n\nexport default PointerInfo\n" + ] +} \ No newline at end of file diff --git a/packages/core/defaultOptions.js b/packages/core/defaultOptions.js index c0b9926a2..9f08a0553 100644 --- a/packages/core/defaultOptions.js +++ b/packages/core/defaultOptions.js @@ -1,14 +1,19 @@ // tslint:disable no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-interface +// export interface Options extends BaseDefaults, PerActionDefaults {} export const defaults = { - base: { - preventDefault: 'auto', - deltaSource: 'page', - }, - perAction: { - enabled: false, - origin: { x: 0, y: 0 }, - }, - actions: {}, + base: { + preventDefault: 'auto', + deltaSource: 'page' + }, + perAction: { + enabled: false, + origin: { + x: 0, + y: 0 + } + }, + actions: {} }; export default defaults; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdE9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZWZhdWx0T3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFrQ3BDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBYTtJQUNoQyxJQUFJLEVBQUU7UUFDSixjQUFjLEVBQUUsTUFBTTtRQUN0QixXQUFXLEVBQUUsTUFBTTtLQUNwQjtJQUVELFNBQVMsRUFBRTtRQUNULE9BQU8sRUFBRSxLQUFLO1FBQ2QsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0tBQ3ZCO0lBRUQsT0FBTyxFQUFFLEVBQW9CO0NBQzlCLENBQUE7QUFFRCxlQUFlLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlIG5vLWVtcHR5LWludGVyZmFjZVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRzIHtcbiAgYmFzZTogQmFzZURlZmF1bHRzXG4gIHBlckFjdGlvbjogUGVyQWN0aW9uRGVmYXVsdHNcbiAgYWN0aW9uczogQWN0aW9uRGVmYXVsdHNcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVmYXVsdHMge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEZWZhdWx0cyB7XG4gIHByZXZlbnREZWZhdWx0PzogJ2F1dG8nIHwgJ25ldmVyJyB8IHN0cmluZ1xuICBkZWx0YVNvdXJjZT86ICdwYWdlJyB8ICdjbGllbnQnXG4gIGNvbnRleHQ/OiBJbnRlcmFjdC5FdmVudFRhcmdldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlckFjdGlvbkRlZmF1bHRzIHtcbiAgZW5hYmxlZD86IGJvb2xlYW5cbiAgb3JpZ2luPzogSW50ZXJhY3QuUG9pbnQgfCBzdHJpbmcgfCBJbnRlcmFjdC5FbGVtZW50XG4gIGxpc3RlbmVycz86IEludGVyYWN0Lkxpc3RlbmVyc1xuICBhbGxvd0Zyb20/OiBzdHJpbmcgfCBJbnRlcmFjdC5FbGVtZW50XG4gIGlnbm9yZUZyb20/OiBzdHJpbmcgfCBJbnRlcmFjdC5FbGVtZW50XG59XG5cbmV4cG9ydCB0eXBlIE9wdGlvbnMgPSBQYXJ0aWFsPEJhc2VEZWZhdWx0cz4gJiBQYXJ0aWFsPFBlckFjdGlvbkRlZmF1bHRzPiAmIHtcbiAgW1AgaW4ga2V5b2YgQWN0aW9uRGVmYXVsdHNdPzogUGFydGlhbDxBY3Rpb25EZWZhdWx0c1tQXT5cbn1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIGV4dGVuZHMgQmFzZURlZmF1bHRzLCBQZXJBY3Rpb25EZWZhdWx0cyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNBcmcgZXh0ZW5kcyBCYXNlRGVmYXVsdHMsIEludGVyYWN0Lk9yQm9vbGVhbjxQZXJBY3Rpb25EZWZhdWx0cz4ge31cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzOiBEZWZhdWx0cyA9IHtcbiAgYmFzZToge1xuICAgIHByZXZlbnREZWZhdWx0OiAnYXV0bycsXG4gICAgZGVsdGFTb3VyY2U6ICdwYWdlJyxcbiAgfSxcblxuICBwZXJBY3Rpb246IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBvcmlnaW46IHsgeDogMCwgeTogMCB9LFxuICB9LFxuXG4gIGFjdGlvbnM6IHt9IGFzIEFjdGlvbkRlZmF1bHRzLFxufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0c1xuIl19 \ No newline at end of file +//# sourceMappingURL=defaultOptions.js.map \ No newline at end of file diff --git a/packages/core/defaultOptions.js.map b/packages/core/defaultOptions.js.map new file mode 100644 index 000000000..dddd62f3c --- /dev/null +++ b/packages/core/defaultOptions.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "sources": [ + "defaultOptions.ts" + ], + "names": [ + "defaults", + "base", + "preventDefault", + "deltaSource", + "perAction", + "enabled", + "origin", + "x", + "y", + "actions" + ], + "mappings": "AAAA;AAQA;AAsBA;AAIA,OAAO,MAAMA,QAAkB,GAAG;AAChCC,EAAAA,IAAI,EAAE;AACJC,IAAAA,cAAc,EAAE,MADZ;AAEJC,IAAAA,WAAW,EAAE;AAFT,GAD0B;AAMhCC,EAAAA,SAAS,EAAE;AACTC,IAAAA,OAAO,EAAE,KADA;AAETC,IAAAA,MAAM,EAAE;AAAEC,MAAAA,CAAC,EAAE,CAAL;AAAQC,MAAAA,CAAC,EAAE;AAAX;AAFC,GANqB;AAWhCC,EAAAA,OAAO,EAAE;AAXuB,CAA3B;AAcP,eAAeT,QAAf", + "sourcesContent": [ + "// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Interact.EventTarget\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Interact.Element\n listeners?: Interact.Listeners\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n" + ] +} \ No newline at end of file diff --git a/packages/core/interactablePreventDefault.d.ts b/packages/core/interactablePreventDefault.d.ts index 69bc4e829..a5a41e957 100644 --- a/packages/core/interactablePreventDefault.d.ts +++ b/packages/core/interactablePreventDefault.d.ts @@ -6,9 +6,9 @@ declare module '@interactjs/core/Interactable' { } declare function preventDefault(this: Interact.Interactable, newValue?: 'always' | 'never' | 'auto'): string | import("@interactjs/core/Interactable").Interactable; export declare function install(scope: Interact.Scope): void; -export declare type Install = typeof install; declare const _default: { id: string; install: typeof install; + listeners: {}; }; export default _default; diff --git a/packages/core/interactablePreventDefault.js b/packages/core/interactablePreventDefault.js index dcb07e9ae..e69472ff8 100644 --- a/packages/core/interactablePreventDefault.js +++ b/packages/core/interactablePreventDefault.js @@ -1,91 +1,112 @@ -import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'; -import events from '@interactjs/utils/events'; -import * as is from '@interactjs/utils/is'; -import { getWindow } from '@interactjs/utils/window'; +import { matchesSelector, nodeContains } from "../utils/domUtils.js"; +import events from "../utils/events.js"; +import * as is from "../utils/is.js"; +import { getWindow } from "../utils/window.js"; + function preventDefault(newValue) { - if (/^(always|never|auto)$/.test(newValue)) { - this.options.preventDefault = newValue; - return this; - } - if (is.bool(newValue)) { - this.options.preventDefault = newValue ? 'always' : 'never'; - return this; - } - return this.options.preventDefault; + if (/^(always|never|auto)$/.test(newValue)) { + this.options.preventDefault = newValue; + return this; + } + + if (is.bool(newValue)) { + this.options.preventDefault = newValue ? 'always' : 'never'; + return this; + } + + return this.options.preventDefault; } + function checkAndPreventDefault(interactable, scope, event) { - const setting = interactable.options.preventDefault; - if (setting === 'never') { - return; - } - if (setting === 'always') { - event.preventDefault(); - return; - } - // setting === 'auto' - // if the browser supports passive event listeners and isn't running on iOS, - // don't preventDefault of touch{start,move} events. CSS touch-action and - // user-select should be used instead of calling event.preventDefault(). - if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) { - const doc = getWindow(event.target).document; - const docOptions = scope.getDocOptions(doc); - if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) { - return; - } - } - // don't preventDefault of pointerdown events - if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) { - return; - } - // don't preventDefault on editable elements - if (is.element(event.target) && - matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { - return; - } + const setting = interactable.options.preventDefault; + + if (setting === 'never') { + return; + } + + if (setting === 'always') { event.preventDefault(); -} -function onInteractionEvent({ interaction, event }) { - if (interaction.interactable) { - interaction.interactable.checkAndPreventDefault(event); + return; + } // setting === 'auto' + // if the browser supports passive event listeners and isn't running on iOS, + // don't preventDefault of touch{start,move} events. CSS touch-action and + // user-select should be used instead of calling event.preventDefault(). + + + if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) { + const doc = getWindow(event.target).document; + const docOptions = scope.getDocOptions(doc); + + if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) { + return; } + } // don't preventDefault of pointerdown events + + + if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) { + return; + } // don't preventDefault on editable elements + + + if (is.element(event.target) && matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { + return; + } + + event.preventDefault(); } + +function onInteractionEvent({ + interaction, + event +}) { + if (interaction.interactable) { + interaction.interactable.checkAndPreventDefault(event); + } +} + export function install(scope) { - /** @lends Interactable */ - const Interactable = scope.Interactable; - /** - * Returns or sets whether to prevent the browser's default behaviour in - * response to pointer events. Can be set to: - * - `'always'` to always prevent - * - `'never'` to never prevent - * - `'auto'` to let interact.js try to determine what would be best - * - * @param {string} [newValue] `'always'`, `'never'` or `'auto'` - * @return {string | Interactable} The current setting or this Interactable - */ - Interactable.prototype.preventDefault = preventDefault; - Interactable.prototype.checkAndPreventDefault = function (event) { - return checkAndPreventDefault(this, scope, event); - }; - for (const eventSignal of ['down', 'move', 'up', 'cancel']) { - scope.interactions.signals.on(eventSignal, onInteractionEvent); + /** @lends Interactable */ + const { + Interactable + } = scope; + /** + * Returns or sets whether to prevent the browser's default behaviour in + * response to pointer events. Can be set to: + * - `'always'` to always prevent + * - `'never'` to never prevent + * - `'auto'` to let interact.js try to determine what would be best + * + * @param {string} [newValue] `'always'`, `'never'` or `'auto'` + * @return {string | Interactable} The current setting or this Interactable + */ + + Interactable.prototype.preventDefault = preventDefault; + + Interactable.prototype.checkAndPreventDefault = function (event) { + return checkAndPreventDefault(this, scope, event); + }; // prevent native HTML5 drag on interact.js target elements + + + scope.interactions.docEvents.push({ + type: 'dragstart', + + listener(event) { + for (const interaction of scope.interactions.list) { + if (interaction.element && (interaction.element === event.target || nodeContains(interaction.element, event.target))) { + interaction.interactable.checkAndPreventDefault(event); + return; + } + } } - // prevent native HTML5 drag on interact.js target elements - scope.interactions.docEvents.push({ - type: 'dragstart', - listener(event) { - for (const interaction of scope.interactions.list) { - if (interaction.element && - (interaction.element === event.target || - nodeContains(interaction.element, event.target))) { - interaction.interactable.checkAndPreventDefault(event); - return; - } - } - }, - }); + + }); } export default { - id: 'core/interactablePreventDefault', - install, + id: 'core/interactablePreventDefault', + install, + listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => { + acc[`interactions:${eventType}`] = onInteractionEvent; + return acc; + }, {}) }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RhYmxlUHJldmVudERlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlcmFjdGFibGVQcmV2ZW50RGVmYXVsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQzFFLE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBU3BELFNBQVMsY0FBYyxDQUErQixRQUFzQztJQUMxRixJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUE7UUFDdEMsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUVELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBQzNELE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFBO0FBQ3BDLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFFLFlBQW1DLEVBQUUsS0FBcUIsRUFBRSxLQUFZO0lBQ3ZHLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFBO0lBRW5ELElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtRQUFFLE9BQU07S0FBRTtJQUVuQyxJQUFJLE9BQU8sS0FBSyxRQUFRLEVBQUU7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3RCLE9BQU07S0FDUDtJQUVELHFCQUFxQjtJQUVyQiw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSxJQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNwRSxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUM1QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTNDLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQzdFLE9BQU07U0FDUDtLQUNGO0lBRUQsNkNBQTZDO0lBQzdDLElBQUksc0NBQXNDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzRCxPQUFNO0tBQ1A7SUFFRCw0Q0FBNEM7SUFDNUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDeEIsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsdUVBQXVFLENBQUMsRUFBRTtRQUMxRyxPQUFNO0tBQ1A7SUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUE7QUFDeEIsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFzQjtJQUNyRSxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUU7UUFDNUIsV0FBVyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFjLENBQUMsQ0FBQTtLQUNoRTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFFLEtBQXFCO0lBQzVDLDBCQUEwQjtJQUMxQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFBO0lBRXZDOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQTtJQUV0RCxZQUFZLENBQUMsU0FBUyxDQUFDLHNCQUFzQixHQUFHLFVBQVUsS0FBSztRQUM3RCxPQUFPLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDbkQsQ0FBQyxDQUFBO0lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQzFELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtLQUMvRDtJQUVELDJEQUEyRDtJQUMzRCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxFQUFFLFdBQVc7UUFDakIsUUFBUSxDQUFFLEtBQUs7WUFDYixLQUFLLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO2dCQUNqRCxJQUFJLFdBQVcsQ0FBQyxPQUFPO29CQUNyQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE1BQU07d0JBQ3BDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO29CQUNuRCxXQUFXLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUN0RCxPQUFNO2lCQUNQO2FBQ0Y7UUFDSCxDQUFDO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUlELGVBQWU7SUFDYixFQUFFLEVBQUUsaUNBQWlDO0lBQ3JDLE9BQU87Q0FDUixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWF0Y2hlc1NlbGVjdG9yLCBub2RlQ29udGFpbnMgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21VdGlscydcbmltcG9ydCBldmVudHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXZlbnRzJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy93aW5kb3cnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RhYmxlIHtcbiAgICBwcmV2ZW50RGVmYXVsdDogdHlwZW9mIHByZXZlbnREZWZhdWx0XG4gICAgY2hlY2tBbmRQcmV2ZW50RGVmYXVsdDogKGV2ZW50OiBFdmVudCkgPT4gdm9pZFxuICB9XG59XG5cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0ICh0aGlzOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsIG5ld1ZhbHVlPzogJ2Fsd2F5cycgfCAnbmV2ZXInIHwgJ2F1dG8nKSB7XG4gIGlmICgvXihhbHdheXN8bmV2ZXJ8YXV0bykkLy50ZXN0KG5ld1ZhbHVlKSkge1xuICAgIHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCA9IG5ld1ZhbHVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGlmIChpcy5ib29sKG5ld1ZhbHVlKSkge1xuICAgIHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCA9IG5ld1ZhbHVlID8gJ2Fsd2F5cycgOiAnbmV2ZXInXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJldHVybiB0aGlzLm9wdGlvbnMucHJldmVudERlZmF1bHRcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRQcmV2ZW50RGVmYXVsdCAoaW50ZXJhY3RhYmxlOiBJbnRlcmFjdC5JbnRlcmFjdGFibGUsIHNjb3BlOiBJbnRlcmFjdC5TY29wZSwgZXZlbnQ6IEV2ZW50KSB7XG4gIGNvbnN0IHNldHRpbmcgPSBpbnRlcmFjdGFibGUub3B0aW9ucy5wcmV2ZW50RGVmYXVsdFxuXG4gIGlmIChzZXR0aW5nID09PSAnbmV2ZXInKSB7IHJldHVybiB9XG5cbiAgaWYgKHNldHRpbmcgPT09ICdhbHdheXMnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gc2V0dGluZyA9PT0gJ2F1dG8nXG5cbiAgLy8gaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgcGFzc2l2ZSBldmVudCBsaXN0ZW5lcnMgYW5kIGlzbid0IHJ1bm5pbmcgb24gaU9TLFxuICAvLyBkb24ndCBwcmV2ZW50RGVmYXVsdCBvZiB0b3VjaHtzdGFydCxtb3ZlfSBldmVudHMuIENTUyB0b3VjaC1hY3Rpb24gYW5kXG4gIC8vIHVzZXItc2VsZWN0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdCgpLlxuICBpZiAoZXZlbnRzLnN1cHBvcnRzUGFzc2l2ZSAmJiAvXnRvdWNoKHN0YXJ0fG1vdmUpJC8udGVzdChldmVudC50eXBlKSkge1xuICAgIGNvbnN0IGRvYyA9IGdldFdpbmRvdyhldmVudC50YXJnZXQpLmRvY3VtZW50XG4gICAgY29uc3QgZG9jT3B0aW9ucyA9IHNjb3BlLmdldERvY09wdGlvbnMoZG9jKVxuXG4gICAgaWYgKCEoZG9jT3B0aW9ucyAmJiBkb2NPcHRpb25zLmV2ZW50cykgfHwgZG9jT3B0aW9ucy5ldmVudHMucGFzc2l2ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIC8vIGRvbid0IHByZXZlbnREZWZhdWx0IG9mIHBvaW50ZXJkb3duIGV2ZW50c1xuICBpZiAoL14obW91c2V8cG9pbnRlcnx0b3VjaCkqKGRvd258c3RhcnQpL2kudGVzdChldmVudC50eXBlKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gZG9uJ3QgcHJldmVudERlZmF1bHQgb24gZWRpdGFibGUgZWxlbWVudHNcbiAgaWYgKGlzLmVsZW1lbnQoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgbWF0Y2hlc1NlbGVjdG9yKGV2ZW50LnRhcmdldCwgJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxbY29udGVudGVkaXRhYmxlPXRydWVdLFtjb250ZW50ZWRpdGFibGU9dHJ1ZV0gKicpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25FdmVudCAoeyBpbnRlcmFjdGlvbiwgZXZlbnQgfTogSW50ZXJhY3QuU2lnbmFsQXJnKSB7XG4gIGlmIChpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUpIHtcbiAgICBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUuY2hlY2tBbmRQcmV2ZW50RGVmYXVsdChldmVudCBhcyBFdmVudClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbCAoc2NvcGU6IEludGVyYWN0LlNjb3BlKSB7XG4gIC8qKiBAbGVuZHMgSW50ZXJhY3RhYmxlICovXG4gIGNvbnN0IEludGVyYWN0YWJsZSA9IHNjb3BlLkludGVyYWN0YWJsZVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG9yIHNldHMgd2hldGhlciB0byBwcmV2ZW50IHRoZSBicm93c2VyJ3MgZGVmYXVsdCBiZWhhdmlvdXIgaW5cbiAgICogcmVzcG9uc2UgdG8gcG9pbnRlciBldmVudHMuIENhbiBiZSBzZXQgdG86XG4gICAqICAtIGAnYWx3YXlzJ2AgdG8gYWx3YXlzIHByZXZlbnRcbiAgICogIC0gYCduZXZlcidgIHRvIG5ldmVyIHByZXZlbnRcbiAgICogIC0gYCdhdXRvJ2AgdG8gbGV0IGludGVyYWN0LmpzIHRyeSB0byBkZXRlcm1pbmUgd2hhdCB3b3VsZCBiZSBiZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmV3VmFsdWVdIGAnYWx3YXlzJ2AsIGAnbmV2ZXInYCBvciBgJ2F1dG8nYFxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCBJbnRlcmFjdGFibGV9IFRoZSBjdXJyZW50IHNldHRpbmcgb3IgdGhpcyBJbnRlcmFjdGFibGVcbiAgICovXG4gIEludGVyYWN0YWJsZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdFxuXG4gIEludGVyYWN0YWJsZS5wcm90b3R5cGUuY2hlY2tBbmRQcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBjaGVja0FuZFByZXZlbnREZWZhdWx0KHRoaXMsIHNjb3BlLCBldmVudClcbiAgfVxuXG4gIGZvciAoY29uc3QgZXZlbnRTaWduYWwgb2YgWydkb3duJywgJ21vdmUnLCAndXAnLCAnY2FuY2VsJ10pIHtcbiAgICBzY29wZS5pbnRlcmFjdGlvbnMuc2lnbmFscy5vbihldmVudFNpZ25hbCwgb25JbnRlcmFjdGlvbkV2ZW50KVxuICB9XG5cbiAgLy8gcHJldmVudCBuYXRpdmUgSFRNTDUgZHJhZyBvbiBpbnRlcmFjdC5qcyB0YXJnZXQgZWxlbWVudHNcbiAgc2NvcGUuaW50ZXJhY3Rpb25zLmRvY0V2ZW50cy5wdXNoKHtcbiAgICB0eXBlOiAnZHJhZ3N0YXJ0JyxcbiAgICBsaXN0ZW5lciAoZXZlbnQpIHtcbiAgICAgIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QpIHtcbiAgICAgICAgaWYgKGludGVyYWN0aW9uLmVsZW1lbnQgJiZcbiAgICAgICAgICAoaW50ZXJhY3Rpb24uZWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0IHx8XG4gICAgICAgICAgIG5vZGVDb250YWlucyhpbnRlcmFjdGlvbi5lbGVtZW50LCBldmVudC50YXJnZXQpKSkge1xuICAgICAgICAgIGludGVyYWN0aW9uLmludGVyYWN0YWJsZS5jaGVja0FuZFByZXZlbnREZWZhdWx0KGV2ZW50KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cblxuZXhwb3J0IHR5cGUgSW5zdGFsbCA9IHR5cGVvZiBpbnN0YWxsXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaWQ6ICdjb3JlL2ludGVyYWN0YWJsZVByZXZlbnREZWZhdWx0JyxcbiAgaW5zdGFsbCxcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=interactablePreventDefault.js.map \ No newline at end of file diff --git a/packages/core/interactablePreventDefault.js.map b/packages/core/interactablePreventDefault.js.map new file mode 100644 index 000000000..194f3e803 --- /dev/null +++ b/packages/core/interactablePreventDefault.js.map @@ -0,0 +1,51 @@ +{ + "version": 3, + "sources": [ + "interactablePreventDefault.ts" + ], + "names": [ + "matchesSelector", + "nodeContains", + "events", + "is", + "getWindow", + "preventDefault", + "newValue", + "test", + "options", + "bool", + "checkAndPreventDefault", + "interactable", + "scope", + "event", + "setting", + "supportsPassive", + "type", + "doc", + "target", + "document", + "docOptions", + "getDocOptions", + "passive", + "element", + "onInteractionEvent", + "interaction", + "install", + "Interactable", + "prototype", + "interactions", + "docEvents", + "push", + "listener", + "list", + "id", + "listeners", + "reduce", + "acc", + "eventType" + ], + "mappings": "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", + "sourcesContent": [ + "import { matchesSelector, nodeContains } from '../utils/domUtils'\nimport events from '../utils/events'\nimport * as is from '../utils/is'\nimport { getWindow } from '../utils/window'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault: typeof preventDefault\n checkAndPreventDefault: (event: Event) => void\n }\n}\n\nfunction preventDefault (this: Interact.Interactable, newValue?: 'always' | 'never' | 'auto') {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n}\n\nfunction checkAndPreventDefault (interactable: Interact.Interactable, scope: Interact.Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') { return }\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: { interaction: Interact.Interaction, event: Interact.PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Interact.Scope) {\n /** @lends Interactable */\n const { Interactable } = scope\n\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n * @return {string | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {}),\n}\n" + ] +} \ No newline at end of file diff --git a/packages/core/interactablePreventDefault.spec.js b/packages/core/interactablePreventDefault.spec.js deleted file mode 100644 index dfe156971..000000000 --- a/packages/core/interactablePreventDefault.spec.js +++ /dev/null @@ -1,23 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import drag from '@interactjs/actions/drag'; -import { autoStart } from '@interactjs/auto-start'; -import interactablePreventDefault from './interactablePreventDefault'; -import * as helpers from './tests/_helpers'; -test('interactablePreventDefault', t => { - const { scope, interactable, } = helpers.testEnv({ - plugins: [interactablePreventDefault, autoStart, drag], - }); - const { MouseEvent, Event, } = scope.window; - interactable.draggable({}); - const mouseEvent = new MouseEvent('mousedown', { bubbles: true }); - const nativeDragStart = new Event('dragstart', { bubbles: true }); - let nativeDragStartPrevented = false; - nativeDragStart.preventDefault = () => { - nativeDragStartPrevented = true; - }; - scope.document.body.dispatchEvent(mouseEvent); - scope.document.body.dispatchEvent(nativeDragStart); - t.ok(nativeDragStartPrevented, 'native dragstart is prevented on interactable '); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RhYmxlUHJldmVudERlZmF1bHQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVyYWN0YWJsZVByZXZlbnREZWZhdWx0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxJQUFJLE1BQU0sMEJBQTBCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELE9BQU8sMEJBQTBCLE1BQU0sOEJBQThCLENBQUE7QUFDckUsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQTtBQUUzQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDckMsTUFBTSxFQUNKLEtBQUssRUFDTCxZQUFZLEdBQ2IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUM7S0FDdkQsQ0FBQyxDQUFBO0lBRUYsTUFBTSxFQUNKLFVBQVUsRUFDVixLQUFLLEdBQ04sR0FBRyxLQUFLLENBQUMsTUFBYSxDQUFBO0lBRXZCLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFMUIsTUFBTSxVQUFVLEdBQWUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDN0UsTUFBTSxlQUFlLEdBQVUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDeEUsSUFBSSx3QkFBd0IsR0FBRyxLQUFLLENBQUE7SUFFcEMsZUFBZSxDQUFDLGNBQWMsR0FBRyxHQUFHLEVBQUU7UUFDcEMsd0JBQXdCLEdBQUcsSUFBSSxDQUFBO0lBQ2pDLENBQUMsQ0FBQTtJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM3QyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxnREFBZ0QsQ0FBQyxDQUFBO0lBRWhGLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgZHJhZyBmcm9tICdAaW50ZXJhY3Rqcy9hY3Rpb25zL2RyYWcnXG5pbXBvcnQgeyBhdXRvU3RhcnQgfSBmcm9tICdAaW50ZXJhY3Rqcy9hdXRvLXN0YXJ0J1xuaW1wb3J0IGludGVyYWN0YWJsZVByZXZlbnREZWZhdWx0IGZyb20gJy4vaW50ZXJhY3RhYmxlUHJldmVudERlZmF1bHQnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJy4vdGVzdHMvX2hlbHBlcnMnXG5cbnRlc3QoJ2ludGVyYWN0YWJsZVByZXZlbnREZWZhdWx0JywgdCA9PiB7XG4gIGNvbnN0IHtcbiAgICBzY29wZSxcbiAgICBpbnRlcmFjdGFibGUsXG4gIH0gPSBoZWxwZXJzLnRlc3RFbnYoe1xuICAgIHBsdWdpbnM6IFtpbnRlcmFjdGFibGVQcmV2ZW50RGVmYXVsdCwgYXV0b1N0YXJ0LCBkcmFnXSxcbiAgfSlcblxuICBjb25zdCB7XG4gICAgTW91c2VFdmVudCxcbiAgICBFdmVudCxcbiAgfSA9IHNjb3BlLndpbmRvdyBhcyBhbnlcblxuICBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHt9KVxuXG4gIGNvbnN0IG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnbW91c2Vkb3duJywgeyBidWJibGVzOiB0cnVlIH0pXG4gIGNvbnN0IG5hdGl2ZURyYWdTdGFydDogRXZlbnQgPSBuZXcgRXZlbnQoJ2RyYWdzdGFydCcsIHsgYnViYmxlczogdHJ1ZSB9KVxuICBsZXQgbmF0aXZlRHJhZ1N0YXJ0UHJldmVudGVkID0gZmFsc2VcblxuICBuYXRpdmVEcmFnU3RhcnQucHJldmVudERlZmF1bHQgPSAoKSA9PiB7XG4gICAgbmF0aXZlRHJhZ1N0YXJ0UHJldmVudGVkID0gdHJ1ZVxuICB9XG5cbiAgc2NvcGUuZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpXG4gIHNjb3BlLmRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuYXRpdmVEcmFnU3RhcnQpXG5cbiAgdC5vayhuYXRpdmVEcmFnU3RhcnRQcmV2ZW50ZWQsICduYXRpdmUgZHJhZ3N0YXJ0IGlzIHByZXZlbnRlZCBvbiBpbnRlcmFjdGFibGUgJylcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/core/interactionFinder.js b/packages/core/interactionFinder.js index fedb274bf..cc78bd4ce 100644 --- a/packages/core/interactionFinder.js +++ b/packages/core/interactionFinder.js @@ -1,105 +1,142 @@ -import * as dom from '@interactjs/utils/domUtils'; +import * as dom from "../utils/domUtils.js"; const finder = { - methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'], - search(details) { - for (const method of finder.methodOrder) { - const interaction = finder[method](details); - if (interaction) { - return interaction; - } + methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'], + + search(details) { + for (const method of finder.methodOrder) { + const interaction = finder[method](details); + + if (interaction) { + return interaction; + } + } + }, + + // try to resume simulation with a new pointer + simulationResume({ + pointerType, + eventType, + eventTarget, + scope + }) { + if (!/down|start/i.test(eventType)) { + return null; + } + + for (const interaction of scope.interactions.list) { + let element = eventTarget; + + if (interaction.simulation && interaction.simulation.allowResume && interaction.pointerType === pointerType) { + while (element) { + // if the element is the interaction element + if (element === interaction.element) { + return interaction; + } + + element = dom.parentNode(element); } - }, - // try to resume simulation with a new pointer - simulationResume({ pointerType, eventType, eventTarget, scope }) { - if (!/down|start/i.test(eventType)) { - return null; + } + } + + return null; + }, + + // if it's a mouse or pen interaction + mouseOrPen({ + pointerId, + pointerType, + eventType, + scope + }) { + if (pointerType !== 'mouse' && pointerType !== 'pen') { + return null; + } + + let firstNonActive; + + for (const interaction of scope.interactions.list) { + if (interaction.pointerType === pointerType) { + // if it's a down event, skip interactions with running simulations + if (interaction.simulation && !hasPointerId(interaction, pointerId)) { + continue; + } // if the interaction is active, return it immediately + + + if (interaction.interacting()) { + return interaction; + } // otherwise save it and look for another active interaction + else if (!firstNonActive) { + firstNonActive = interaction; + } + } + } // if no active mouse interaction was found use the first inactive mouse + // interaction + + + if (firstNonActive) { + return firstNonActive; + } // find any mouse or pen interaction. + // ignore the interaction if the eventType is a *down, and a simulation + // is active + + + for (const interaction of scope.interactions.list) { + if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) { + return interaction; + } + } + + return null; + }, + + // get interaction that has this pointer + hasPointer({ + pointerId, + scope + }) { + for (const interaction of scope.interactions.list) { + if (hasPointerId(interaction, pointerId)) { + return interaction; + } + } + + return null; + }, + + // get first idle interaction with a matching pointerType + idle({ + pointerType, + scope + }) { + for (const interaction of scope.interactions.list) { + // if there's already a pointer held down + if (interaction.pointers.length === 1) { + const target = interaction.interactable; // don't add this pointer if there is a target interactable and it + // isn't gesturable + + if (target && !(target.options.gesture && target.options.gesture.enabled)) { + continue; } - for (const interaction of scope.interactions.list) { - let element = eventTarget; - if (interaction.simulation && interaction.simulation.allowResume && - (interaction.pointerType === pointerType)) { - while (element) { - // if the element is the interaction element - if (element === interaction.element) { - return interaction; - } - element = dom.parentNode(element); - } - } + } // maximum of 2 pointers per interaction + else if (interaction.pointers.length >= 2) { + continue; } - return null; - }, - // if it's a mouse or pen interaction - mouseOrPen({ pointerId, pointerType, eventType, scope }) { - if (pointerType !== 'mouse' && pointerType !== 'pen') { - return null; - } - let firstNonActive; - for (const interaction of scope.interactions.list) { - if (interaction.pointerType === pointerType) { - // if it's a down event, skip interactions with running simulations - if (interaction.simulation && !hasPointerId(interaction, pointerId)) { - continue; - } - // if the interaction is active, return it immediately - if (interaction.interacting()) { - return interaction; - } - // otherwise save it and look for another active interaction - else if (!firstNonActive) { - firstNonActive = interaction; - } - } - } - // if no active mouse interaction was found use the first inactive mouse - // interaction - if (firstNonActive) { - return firstNonActive; - } - // find any mouse or pen interaction. - // ignore the interaction if the eventType is a *down, and a simulation - // is active - for (const interaction of scope.interactions.list) { - if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) { - return interaction; - } - } - return null; - }, - // get interaction that has this pointer - hasPointer({ pointerId, scope }) { - for (const interaction of scope.interactions.list) { - if (hasPointerId(interaction, pointerId)) { - return interaction; - } - } - return null; - }, - // get first idle interaction with a matching pointerType - idle({ pointerType, scope }) { - for (const interaction of scope.interactions.list) { - // if there's already a pointer held down - if (interaction.pointers.length === 1) { - const target = interaction.interactable; - // don't add this pointer if there is a target interactable and it - // isn't gesturable - if (target && !(target.options.gesture && target.options.gesture.enabled)) { - continue; - } - } - // maximum of 2 pointers per interaction - else if (interaction.pointers.length >= 2) { - continue; - } - if (!interaction.interacting() && (pointerType === interaction.pointerType)) { - return interaction; - } - } - return null; - }, + + if (!interaction.interacting() && pointerType === interaction.pointerType) { + return interaction; + } + } + + return null; + } + }; + function hasPointerId(interaction, pointerId) { - return interaction.pointers.some(({ id }) => id === pointerId); + return interaction.pointers.some(({ + id + }) => id === pointerId); } + export default finder; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25GaW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlcmFjdGlvbkZpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLDRCQUE0QixDQUFBO0FBWWpELE1BQU0sTUFBTSxHQUFHO0lBQ2IsV0FBVyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUM7SUFFckUsTUFBTSxDQUFFLE9BQU87UUFDYixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBRTNDLElBQUksV0FBVyxFQUFFO2dCQUNmLE9BQU8sV0FBVyxDQUFBO2FBQ25CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLGdCQUFnQixDQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFpQjtRQUM3RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtZQUNqRCxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUE7WUFFekIsSUFBSSxXQUFXLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDNUQsQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxFQUFFO2dCQUM3QyxPQUFPLE9BQU8sRUFBRTtvQkFDZCw0Q0FBNEM7b0JBQzVDLElBQUksT0FBTyxLQUFLLFdBQVcsQ0FBQyxPQUFPLEVBQUU7d0JBQ25DLE9BQU8sV0FBVyxDQUFBO3FCQUNuQjtvQkFDRCxPQUFPLEdBQUcsR0FBRyxDQUFD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LFNBQWlCO0lBQ3pFLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUE7QUFDaEUsQ0FBQztBQUVELGVBQWUsTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZG9tIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2RvbVV0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaERldGFpbHMge1xuICBwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZVxuICBwb2ludGVySWQ6IG51bWJlclxuICBwb2ludGVyVHlwZTogc3RyaW5nXG4gIGV2ZW50VHlwZTogc3RyaW5nXG4gIGV2ZW50VGFyZ2V0OiBJbnRlcmFjdC5FdmVudFRhcmdldFxuICBjdXJFdmVudFRhcmdldDogSW50ZXJhY3QuRXZlbnRUYXJnZXRcbiAgc2NvcGU6IEludGVyYWN0LlNjb3BlXG59XG5cbmNvbnN0IGZpbmRlciA9IHtcbiAgbWV0aG9kT3JkZXI6IFsnc2ltdWxhdGlvblJlc3VtZScsICdtb3VzZU9yUGVuJywgJ2hhc1BvaW50ZXInLCAnaWRsZSddLFxuXG4gIHNlYXJjaCAoZGV0YWlscykge1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGZpbmRlci5tZXRob2RPcmRlcikge1xuICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBmaW5kZXJbbWV0aG9kXShkZXRhaWxzKVxuXG4gICAgICBpZiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIHRyeSB0byByZXN1bWUgc2ltdWxhdGlvbiB3aXRoIGEgbmV3IHBvaW50ZXJcbiAgc2ltdWxhdGlvblJlc3VtZSAoeyBwb2ludGVyVHlwZSwgZXZlbnRUeXBlLCBldmVudFRhcmdldCwgc2NvcGUgfTogU2VhcmNoRGV0YWlscykge1xuICAgIGlmICghL2Rvd258c3RhcnQvaS50ZXN0KGV2ZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgbGV0IGVsZW1lbnQgPSBldmVudFRhcmdldFxuXG4gICAgICBpZiAoaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiAmJiBpbnRlcmFjdGlvbi5zaW11bGF0aW9uLmFsbG93UmVzdW1lICYmXG4gICAgICAgICAgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZSkpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyB0aGUgaW50ZXJhY3Rpb24gZWxlbWVudFxuICAgICAgICAgIGlmIChlbGVtZW50ID09PSBpbnRlcmFjdGlvbi5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxlbWVudCA9IGRvbS5wYXJlbnROb2RlKGVsZW1lbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIC8vIGlmIGl0J3MgYSBtb3VzZSBvciBwZW4gaW50ZXJhY3Rpb25cbiAgbW91c2VPclBlbiAoeyBwb2ludGVySWQsIHBvaW50ZXJUeXBlLCBldmVudFR5cGUsIHNjb3BlIH06IFNlYXJjaERldGFpbHMpIHtcbiAgICBpZiAocG9pbnRlclR5cGUgIT09ICdtb3VzZScgJiYgcG9pbnRlclR5cGUgIT09ICdwZW4nKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGxldCBmaXJzdE5vbkFjdGl2ZVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZSkge1xuICAgICAgICAvLyBpZiBpdCdzIGEgZG93biBldmVudCwgc2tpcCBpbnRlcmFjdGlvbnMgd2l0aCBydW5uaW5nIHNpbXVsYXRpb25zXG4gICAgICAgIGlmIChpbnRlcmFjdGlvbi5zaW11bGF0aW9uICYmICFoYXNQb2ludGVySWQoaW50ZXJhY3Rpb24sIHBvaW50ZXJJZCkpIHsgY29udGludWUgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBpbnRlcmFjdGlvbiBpcyBhY3RpdmUsIHJldHVybiBpdCBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSkge1xuICAgICAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSBzYXZlIGl0IGFuZCBsb29rIGZvciBhbm90aGVyIGFjdGl2ZSBpbnRlcmFjdGlvblxuICAgICAgICBlbHNlIGlmICghZmlyc3ROb25BY3RpdmUpIHtcbiAgICAgICAgICBmaXJzdE5vbkFjdGl2ZSA9IGludGVyYWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBubyBhY3RpdmUgbW91c2UgaW50ZXJhY3Rpb24gd2FzIGZvdW5kIHVzZSB0aGUgZmlyc3QgaW5hY3RpdmUgbW91c2VcbiAgICAvLyBpbnRlcmFjdGlvblxuICAgIGlmIChmaXJzdE5vbkFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZpcnN0Tm9uQWN0aXZlXG4gICAgfVxuXG4gICAgLy8gZmluZCBhbnkgbW91c2Ugb3IgcGVuIGludGVyYWN0aW9uLlxuICAgIC8vIGlnbm9yZSB0aGUgaW50ZXJhY3Rpb24gaWYgdGhlIGV2ZW50VHlwZSBpcyBhICpkb3duLCBhbmQgYSBzaW11bGF0aW9uXG4gICAgLy8gaXMgYWN0aXZlXG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZSAmJiAhKC9kb3duL2kudGVzdChldmVudFR5cGUpICYmIGludGVyYWN0aW9uLnNpbXVsYXRpb24pKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG5cbiAgLy8gZ2V0IGludGVyYWN0aW9uIHRoYXQgaGFzIHRoaXMgcG9pbnRlclxuICBoYXNQb2ludGVyICh7IHBvaW50ZXJJZCwgc2NvcGUgfTogU2VhcmNoRGV0YWlscykge1xuICAgIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QpIHtcbiAgICAgIGlmIChoYXNQb2ludGVySWQoaW50ZXJhY3Rpb24sIHBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICAvLyBnZXQgZmlyc3QgaWRsZSBpbnRlcmFjdGlvbiB3aXRoIGEgbWF0Y2hpbmcgcG9pbnRlclR5cGVcbiAgaWRsZSAoeyBwb2ludGVyVHlwZSwgc2NvcGUgfTogU2VhcmNoRGV0YWlscykge1xuICAgIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2Ygc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QpIHtcbiAgICAgIC8vIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIHBvaW50ZXIgaGVsZCBkb3duXG4gICAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGludGVyYWN0aW9uLmludGVyYWN0YWJsZVxuICAgICAgICAvLyBkb24ndCBhZGQgdGhpcyBwb2ludGVyIGlmIHRoZXJlIGlzIGEgdGFyZ2V0IGludGVyYWN0YWJsZSBhbmQgaXRcbiAgICAgICAgLy8gaXNuJ3QgZ2VzdHVyYWJsZVxuICAgICAgICBpZiAodGFyZ2V0ICYmICEodGFyZ2V0Lm9wdGlvbnMuZ2VzdHVyZSAmJiB0YXJnZXQub3B0aW9ucy5nZXN0dXJlLmVuYWJsZWQpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gbWF4aW11bSBvZiAyIHBvaW50ZXJzIHBlciBpbnRlcmFjdGlvblxuICAgICAgZWxzZSBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcnMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmIChwb2ludGVyVHlwZSA9PT0gaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUpKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG59XG5cbmZ1bmN0aW9uIGhhc1BvaW50ZXJJZCAoaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uLCBwb2ludGVySWQ6IG51bWJlcikge1xuICByZXR1cm4gaW50ZXJhY3Rpb24ucG9pbnRlcnMuc29tZSgoeyBpZCB9KSA9PiBpZCA9PT0gcG9pbnRlcklkKVxufVxuXG5leHBvcnQgZGVmYXVsdCBmaW5kZXJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=interactionFinder.js.map \ No newline at end of file diff --git a/packages/core/interactionFinder.js.map b/packages/core/interactionFinder.js.map new file mode 100644 index 000000000..f59e6618a --- /dev/null +++ b/packages/core/interactionFinder.js.map @@ -0,0 +1,47 @@ +{ + "version": 3, + "sources": [ + "interactionFinder.ts" + ], + "names": [ + "dom", + "finder", + "methodOrder", + "search", + "details", + "method", + "interaction", + "simulationResume", + "pointerType", + "eventType", + "eventTarget", + "scope", + "test", + "interactions", + "list", + "element", + "simulation", + "allowResume", + "parentNode", + "mouseOrPen", + "pointerId", + "firstNonActive", + "hasPointerId", + "interacting", + "hasPointer", + "idle", + "pointers", + "length", + "target", + "interactable", + "options", + "gesture", + "enabled", + "some", + "id" + ], + "mappings": "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", + "sourcesContent": [ + "import * as dom from '../utils/domUtils'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Interact.EventTarget\n curEventTarget: Interact.EventTarget\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && (pointerType === interaction.pointerType)) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId (interaction: Interact.Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n" + ] +} \ No newline at end of file diff --git a/packages/core/interactionFinder.spec.js b/packages/core/interactionFinder.spec.js deleted file mode 100644 index 22fd9d0f0..000000000 --- a/packages/core/interactionFinder.spec.js +++ /dev/null @@ -1,41 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import finder from './interactionFinder'; -import * as helpers from './tests/_helpers'; -test('modifiers/snap', t => { - const { interactable, event, coords, scope, } = helpers.testEnv(); - const { body } = scope.document; - const { list } = scope.interactions; - const details = { - pointer: event, - get pointerId() { return details.pointer.pointerId; }, - get pointerType() { return details.pointer.pointerType; }, - eventType: null, - eventTarget: body, - curEventTarget: scope.document, - scope, - }; - scope.interactions.new({ pointerType: 'touch' }); - scope.interactions.new({ pointerType: 'mouse' }); - coords.pointerType = 'mouse'; - list[0].pointerType = 'mouse'; - list[2]._interacting = true; - t.equal(list.indexOf(finder.search(details)), 2, '[pointerType: mouse] skips inactive mouse and touch interaction'); - list[2]._interacting = false; - t.equal(list.indexOf(finder.search(details)), 0, '[pointerType: mouse] returns first idle mouse interaction'); - coords.pointerId = 4; - list[1].pointerDown({ ...event }, { ...event }, body); - coords.pointerType = 'touch'; - t.equal(list.indexOf(finder.search(details)), 1, '[pointerType: touch] gets interaction with pointerId'); - coords.pointerId = 5; - t.equal(list.indexOf(finder.search(details)), 1, `[pointerType: touch] returns idle touch interaction without matching pointerId - and existing touch interaction has pointer and no target`); - interactable.options.gesture = { enabled: false }; - list[1].interactable = interactable; - t.equal(list.indexOf(finder.search(details)), -1, `[pointerType: touch] no result without matching pointerId - and existing touch interaction has a pointer and target not gesturable`); - interactable.options.gesture = { enabled: true }; - t.equal(list.indexOf(finder.search(details)), 1, `[pointerType: touch] returns idle touch interaction with gesturable target - and existing pointer`); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25GaW5kZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVyYWN0aW9uRmluZGVyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUE7QUFDeEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQTtBQUUzQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDekIsTUFBTSxFQUNKLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLEtBQUssR0FDTixHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUVyQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQTtJQUUvQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtJQUNuQyxNQUFNLE9BQU8sR0FBRztRQUNkLE9BQU8sRUFBRSxLQUFLO1FBQ2QsSUFBSSxTQUFTLEtBQU0sT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLEtBQU0sT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUM7UUFDekQsU0FBUyxFQUFFLElBQUk7UUFDZixXQUFXLEVBQUUsSUFBSTtRQUNqQixjQUFjLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDOUIsS0FBSztLQUNOLENBQUE7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ2hELEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFaEQsTUFBTSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUE7SUFDNUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUE7SUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFFM0IsQ0FBQyxDQUFDLEtBQUssQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDcEMsQ0FBQyxFQUNELGlFQUFpRSxDQUNsRSxDQUFBO0lBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7SUFFNUIsQ0FBQyxDQUFDLEtBQUssQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDcEMsQ0FBQyxFQUNELDJEQUEyRCxDQUM1RCxDQUFBO0lBRUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7SUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFTLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ25FLE1BQU0sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFBO0lBRTVCLENBQUMsQ0FBQyxLQUFLLENBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3BDLENBQUMsRUFDRCxzREFBc0QsQ0FDdkQsQ0FBQTtJQUVELE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO0lBRXBCLENBQUMsQ0FBQyxLQUFLLENBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3BDLENBQUMsRUFDRDs2REFDeUQsQ0FDMUQsQ0FBQTtJQUVELFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFBO0lBQ2pELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBRW5DLENBQUMsQ0FBQyxLQUFLLENBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3BDLENBQUMsQ0FBQyxFQUNGOzJFQUN1RSxDQUN4RSxDQUFBO0lBRUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFFaEQsQ0FBQyxDQUFDLEtBQUssQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDcEMsQ0FBQyxFQUNEO3lCQUNxQixDQUN0QixDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBmaW5kZXIgZnJvbSAnLi9pbnRlcmFjdGlvbkZpbmRlcidcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi90ZXN0cy9faGVscGVycydcblxudGVzdCgnbW9kaWZpZXJzL3NuYXAnLCB0ID0+IHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0YWJsZSxcbiAgICBldmVudCxcbiAgICBjb29yZHMsXG4gICAgc2NvcGUsXG4gIH0gPSBoZWxwZXJzLnRlc3RFbnYoKVxuXG4gIGNvbnN0IHsgYm9keSB9ID0gc2NvcGUuZG9jdW1lbnRcblxuICBjb25zdCB7IGxpc3QgfSA9IHNjb3BlLmludGVyYWN0aW9uc1xuICBjb25zdCBkZXRhaWxzID0ge1xuICAgIHBvaW50ZXI6IGV2ZW50LFxuICAgIGdldCBwb2ludGVySWQgKCkgeyByZXR1cm4gZGV0YWlscy5wb2ludGVyLnBvaW50ZXJJZCB9LFxuICAgIGdldCBwb2ludGVyVHlwZSAoKSB7IHJldHVybiBkZXRhaWxzLnBvaW50ZXIucG9pbnRlclR5cGUgfSxcbiAgICBldmVudFR5cGU6IG51bGwsXG4gICAgZXZlbnRUYXJnZXQ6IGJvZHksXG4gICAgY3VyRXZlbnRUYXJnZXQ6IHNjb3BlLmRvY3VtZW50LFxuICAgIHNjb3BlLFxuICB9XG5cbiAgc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyh7IHBvaW50ZXJUeXBlOiAndG91Y2gnIH0pXG4gIHNjb3BlLmludGVyYWN0aW9ucy5uZXcoeyBwb2ludGVyVHlwZTogJ21vdXNlJyB9KVxuXG4gIGNvb3Jkcy5wb2ludGVyVHlwZSA9ICdtb3VzZSdcbiAgbGlzdFswXS5wb2ludGVyVHlwZSA9ICdtb3VzZSdcbiAgbGlzdFsyXS5faW50ZXJhY3RpbmcgPSB0cnVlXG5cbiAgdC5lcXVhbChcbiAgICBsaXN0LmluZGV4T2YoZmluZGVyLnNlYXJjaChkZXRhaWxzKSksXG4gICAgMixcbiAgICAnW3BvaW50ZXJUeXBlOiBtb3VzZV0gc2tpcHMgaW5hY3RpdmUgbW91c2UgYW5kIHRvdWNoIGludGVyYWN0aW9uJ1xuICApXG5cbiAgbGlzdFsyXS5faW50ZXJhY3RpbmcgPSBmYWxzZVxuXG4gIHQuZXF1YWwoXG4gICAgbGlzdC5pbmRleE9mKGZpbmRlci5zZWFyY2goZGV0YWlscykpLFxuICAgIDAsXG4gICAgJ1twb2ludGVyVHlwZTogbW91c2VdIHJldHVybnMgZmlyc3QgaWRsZSBtb3VzZSBpbnRlcmFjdGlvbidcbiAgKVxuXG4gIGNvb3Jkcy5wb2ludGVySWQgPSA0XG4gIGxpc3RbMV0ucG9pbnRlckRvd24oeyAuLi5ldmVudCB9IGFzIGFueSwgeyAuLi5ldmVudCB9IGFzIGFueSwgYm9keSlcbiAgY29vcmRzLnBvaW50ZXJUeXBlID0gJ3RvdWNoJ1xuXG4gIHQuZXF1YWwoXG4gICAgbGlzdC5pbmRleE9mKGZpbmRlci5zZWFyY2goZGV0YWlscykpLFxuICAgIDEsXG4gICAgJ1twb2ludGVyVHlwZTogdG91Y2hdIGdldHMgaW50ZXJhY3Rpb24gd2l0aCBwb2ludGVySWQnXG4gIClcblxuICBjb29yZHMucG9pbnRlcklkID0gNVxuXG4gIHQuZXF1YWwoXG4gICAgbGlzdC5pbmRleE9mKGZpbmRlci5zZWFyY2goZGV0YWlscykpLFxuICAgIDEsXG4gICAgYFtwb2ludGVyVHlwZTogdG91Y2hdIHJldHVybnMgaWRsZSB0b3VjaCBpbnRlcmFjdGlvbiB3aXRob3V0IG1hdGNoaW5nIHBvaW50ZXJJZFxuICAgIGFuZCBleGlzdGluZyB0b3VjaCBpbnRlcmFjdGlvbiBoYXMgcG9pbnRlciBhbmQgbm8gdGFyZ2V0YFxuICApXG5cbiAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZ2VzdHVyZSA9IHsgZW5hYmxlZDogZmFsc2UgfVxuICBsaXN0WzFdLmludGVyYWN0YWJsZSA9IGludGVyYWN0YWJsZVxuXG4gIHQuZXF1YWwoXG4gICAgbGlzdC5pbmRleE9mKGZpbmRlci5zZWFyY2goZGV0YWlscykpLFxuICAgIC0xLFxuICAgIGBbcG9pbnRlclR5cGU6IHRvdWNoXSBubyByZXN1bHQgd2l0aG91dCBtYXRjaGluZyBwb2ludGVySWRcbiAgICBhbmQgZXhpc3RpbmcgdG91Y2ggaW50ZXJhY3Rpb24gaGFzIGEgcG9pbnRlciBhbmQgdGFyZ2V0IG5vdCBnZXN0dXJhYmxlYFxuICApXG5cbiAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZ2VzdHVyZSA9IHsgZW5hYmxlZDogdHJ1ZSB9XG5cbiAgdC5lcXVhbChcbiAgICBsaXN0LmluZGV4T2YoZmluZGVyLnNlYXJjaChkZXRhaWxzKSksXG4gICAgMSxcbiAgICBgW3BvaW50ZXJUeXBlOiB0b3VjaF0gcmV0dXJucyBpZGxlIHRvdWNoIGludGVyYWN0aW9uIHdpdGggZ2VzdHVyYWJsZSB0YXJnZXRcbiAgICBhbmQgZXhpc3RpbmcgcG9pbnRlcmBcbiAgKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/core/interactions.d.ts b/packages/core/interactions.d.ts index f28dbe9df..e111183b6 100644 --- a/packages/core/interactions.d.ts +++ b/packages/core/interactions.d.ts @@ -1,11 +1,10 @@ -import Signals from '@interactjs/utils/Signals'; import InteractionBase from './Interaction'; +import { SearchDetails } from './interactionFinder'; import { Scope } from './scope'; -declare module '@interactjs/core/scope' { +declare module '../core/scope' { interface Scope { Interaction: typeof InteractionBase; interactions: { - signals: Signals; new: (options: any) => InteractionBase; list: InteractionBase[]; listeners: { @@ -20,16 +19,24 @@ declare module '@interactjs/core/scope' { prevTouchTime: number; } } +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactions:find': { + interaction: InteractionBase; + searchDetails: SearchDetails; + }; + } +} declare function install(scope: Scope): void; declare function doOnInteractions(method: any, scope: any): (event: any) => void; -declare function onDocSignal({ doc, scope, options }: { - doc: any; - scope: any; - options: any; -}, signalName: any): void; +declare function onDocSignal({ doc, scope, options }: Interact.SignalArgs[T], eventMethodName: 'add' | 'remove'): void; declare const _default: { id: string; install: typeof install; + listeners: { + 'scope:add-document': (arg: any) => void; + 'scope:remove-document': (arg: any) => void; + }; onDocSignal: typeof onDocSignal; doOnInteractions: typeof doOnInteractions; methodNames: string[]; diff --git a/packages/core/interactions.js b/packages/core/interactions.js index 87e6afeb4..92ff9c2c3 100644 --- a/packages/core/interactions.js +++ b/packages/core/interactions.js @@ -1,194 +1,250 @@ -import browser from '@interactjs/utils/browser'; -import domObjects from '@interactjs/utils/domObjects'; -import { nodeContains } from '@interactjs/utils/domUtils'; -import events from '@interactjs/utils/events'; -import pointerUtils from '@interactjs/utils/pointerUtils'; -import Signals from '@interactjs/utils/Signals'; -import InteractionBase from './Interaction'; -import finder from './interactionFinder'; -const methodNames = [ - 'pointerDown', 'pointerMove', 'pointerUp', - 'updatePointer', 'removePointer', 'windowBlur', -]; +import browser from "../utils/browser.js"; +import domObjects from "../utils/domObjects.js"; +import { nodeContains } from "../utils/domUtils.js"; +import events from "../utils/events.js"; +import pointerUtils from "../utils/pointerUtils.js"; +import InteractionBase from "./Interaction.js"; +import finder from "./interactionFinder.js"; +import { Scope } from "./scope.js"; +const methodNames = ['pointerDown', 'pointerMove', 'pointerUp', 'updatePointer', 'removePointer', 'windowBlur']; + function install(scope) { - const signals = new Signals(); - const listeners = {}; - for (const method of methodNames) { - listeners[method] = doOnInteractions(method, scope); + const listeners = {}; + + for (const method of methodNames) { + listeners[method] = doOnInteractions(method, scope); + } + + const pEventTypes = browser.pEventTypes; + let docEvents; + + if (domObjects.PointerEvent) { + docEvents = [{ + type: pEventTypes.down, + listener: releasePointersOnRemovedEls + }, { + type: pEventTypes.down, + listener: listeners.pointerDown + }, { + type: pEventTypes.move, + listener: listeners.pointerMove + }, { + type: pEventTypes.up, + listener: listeners.pointerUp + }, { + type: pEventTypes.cancel, + listener: listeners.pointerUp + }]; + } else { + docEvents = [{ + type: 'mousedown', + listener: listeners.pointerDown + }, { + type: 'mousemove', + listener: listeners.pointerMove + }, { + type: 'mouseup', + listener: listeners.pointerUp + }, { + type: 'touchstart', + listener: releasePointersOnRemovedEls + }, { + type: 'touchstart', + listener: listeners.pointerDown + }, { + type: 'touchmove', + listener: listeners.pointerMove + }, { + type: 'touchend', + listener: listeners.pointerUp + }, { + type: 'touchcancel', + listener: listeners.pointerUp + }]; + } + + docEvents.push({ + type: 'blur', + + listener(event) { + for (const interaction of scope.interactions.list) { + interaction.documentBlur(event); + } } - const pEventTypes = browser.pEventTypes; - let docEvents; - if (domObjects.PointerEvent) { - docEvents = [ - { type: pEventTypes.down, listener: releasePointersOnRemovedEls }, - { type: pEventTypes.down, listener: listeners.pointerDown }, - { type: pEventTypes.move, listener: listeners.pointerMove }, - { type: pEventTypes.up, listener: listeners.pointerUp }, - { type: pEventTypes.cancel, listener: listeners.pointerUp }, - ]; + + }); // for ignoring browser's simulated mouse events + + scope.prevTouchTime = 0; + scope.Interaction = class Interaction extends InteractionBase { + get pointerMoveTolerance() { + return scope.interactions.pointerMoveTolerance; } - else { - docEvents = [ - { type: 'mousedown', listener: listeners.pointerDown }, - { type: 'mousemove', listener: listeners.pointerMove }, - { type: 'mouseup', listener: listeners.pointerUp }, - { type: 'touchstart', listener: releasePointersOnRemovedEls }, - { type: 'touchstart', listener: listeners.pointerDown }, - { type: 'touchmove', listener: listeners.pointerMove }, - { type: 'touchend', listener: listeners.pointerUp }, - { type: 'touchcancel', listener: listeners.pointerUp }, - ]; + + set pointerMoveTolerance(value) { + scope.interactions.pointerMoveTolerance = value; } - docEvents.push({ - type: 'blur', - listener(event) { - for (const interaction of scope.interactions.list) { - interaction.documentBlur(event); - } - }, - }); - scope.signals.on('add-document', onDocSignal); - scope.signals.on('remove-document', onDocSignal); - // for ignoring browser's simulated mouse events - scope.prevTouchTime = 0; - scope.Interaction = class Interaction extends InteractionBase { - get pointerMoveTolerance() { - return scope.interactions.pointerMoveTolerance; - } - set pointerMoveTolerance(value) { - scope.interactions.pointerMoveTolerance = value; - } - _now() { return scope.now(); } - }; - scope.interactions = { - signals, - // all active and idle interactions - list: [], - new(options) { - options.signals = signals; - const interaction = new scope.Interaction(options); - scope.interactions.list.push(interaction); - return interaction; - }, - listeners, - docEvents, - pointerMoveTolerance: 1, - }; - function releasePointersOnRemovedEls() { - // for all inactive touch interactions with pointers down - for (const interaction of scope.interactions.list) { - if (!interaction.pointerIsDown || - interaction.pointerType !== 'touch' || - interaction._interacting) { - continue; - } - // if a pointer is down on an element that is no longer in the DOM tree - for (const pointer of interaction.pointers) { - if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) { - // remove the pointer from the interaction - interaction.removePointer(pointer.pointer, pointer.event); - } - } + + _now() { + return scope.now(); + } + + }; + scope.interactions = { + // all active and idle interactions + list: [], + + new(options) { + options.scopeFire = (name, arg) => scope.fire(name, arg); + + const interaction = new scope.Interaction(options); + scope.interactions.list.push(interaction); + return interaction; + }, + + listeners, + docEvents, + pointerMoveTolerance: 1 + }; + + function releasePointersOnRemovedEls() { + // for all inactive touch interactions with pointers down + for (const interaction of scope.interactions.list) { + if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) { + continue; + } // if a pointer is down on an element that is no longer in the DOM tree + + + for (const pointer of interaction.pointers) { + if (!scope.documents.some(({ + doc + }) => nodeContains(doc, pointer.downTarget))) { + // remove the pointer from the interaction + interaction.removePointer(pointer.pointer, pointer.event); } + } } + } } + function doOnInteractions(method, scope) { - return function (event) { - const interactions = scope.interactions.list; - const pointerType = pointerUtils.getPointerType(event); - const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event); - const matches = []; // [ [pointer, interaction], ...] - if (/^touch/.test(event.type)) { - scope.prevTouchTime = scope.now(); - for (const changedTouch of event.changedTouches) { - const pointer = changedTouch; - const pointerId = pointerUtils.getPointerId(pointer); - const searchDetails = { - pointer, - pointerId, - pointerType, - eventType: event.type, - eventTarget, - curEventTarget, - scope, - }; - const interaction = getInteraction(searchDetails); - matches.push([ - searchDetails.pointer, - searchDetails.eventTarget, - searchDetails.curEventTarget, - interaction, - ]); - } - } - else { - let invalidPointer = false; - if (!browser.supportsPointerEvent && /mouse/.test(event.type)) { - // ignore mouse events while touch interactions are active - for (let i = 0; i < interactions.length && !invalidPointer; i++) { - invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown; - } - // try to ignore mouse events that are simulated by the browser - // after a touch event - invalidPointer = invalidPointer || - (scope.now() - scope.prevTouchTime < 500) || - // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated - event.timeStamp === 0; - } - if (!invalidPointer) { - const searchDetails = { - pointer: event, - pointerId: pointerUtils.getPointerId(event), - pointerType, - eventType: event.type, - curEventTarget, - eventTarget, - scope, - }; - const interaction = getInteraction(searchDetails); - matches.push([ - searchDetails.pointer, - searchDetails.eventTarget, - searchDetails.curEventTarget, - interaction, - ]); - } - } - // eslint-disable-next-line no-shadow - for (const [pointer, eventTarget, curEventTarget, interaction] of matches) { - interaction[method](pointer, event, eventTarget, curEventTarget); - } - }; + return function (event) { + const interactions = scope.interactions.list; + const pointerType = pointerUtils.getPointerType(event); + const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event); + const matches = []; // [ [pointer, interaction], ...] + + if (/^touch/.test(event.type)) { + scope.prevTouchTime = scope.now(); + + for (const changedTouch of event.changedTouches) { + const pointer = changedTouch; + const pointerId = pointerUtils.getPointerId(pointer); + const searchDetails = { + pointer, + pointerId, + pointerType, + eventType: event.type, + eventTarget, + curEventTarget, + scope + }; + const interaction = getInteraction(searchDetails); + matches.push([searchDetails.pointer, searchDetails.eventTarget, searchDetails.curEventTarget, interaction]); + } + } else { + let invalidPointer = false; + + if (!browser.supportsPointerEvent && /mouse/.test(event.type)) { + // ignore mouse events while touch interactions are active + for (let i = 0; i < interactions.length && !invalidPointer; i++) { + invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown; + } // try to ignore mouse events that are simulated by the browser + // after a touch event + + + invalidPointer = invalidPointer || scope.now() - scope.prevTouchTime < 500 || // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated + event.timeStamp === 0; + } + + if (!invalidPointer) { + const searchDetails = { + pointer: event, + pointerId: pointerUtils.getPointerId(event), + pointerType, + eventType: event.type, + curEventTarget, + eventTarget, + scope + }; + const interaction = getInteraction(searchDetails); + matches.push([searchDetails.pointer, searchDetails.eventTarget, searchDetails.curEventTarget, interaction]); + } + } // eslint-disable-next-line no-shadow + + + for (const [pointer, eventTarget, curEventTarget, interaction] of matches) { + interaction[method](pointer, event, eventTarget, curEventTarget); + } + }; } + function getInteraction(searchDetails) { - const { pointerType, scope } = searchDetails; - const foundInteraction = finder.search(searchDetails); - const signalArg = { interaction: foundInteraction, searchDetails }; - scope.interactions.signals.fire('find', signalArg); - return signalArg.interaction || scope.interactions.new({ pointerType }); + const { + pointerType, + scope + } = searchDetails; + const foundInteraction = finder.search(searchDetails); + const signalArg = { + interaction: foundInteraction, + searchDetails + }; + scope.fire('interactions:find', signalArg); + return signalArg.interaction || scope.interactions.new({ + pointerType + }); } -function onDocSignal({ doc, scope, options }, signalName) { - const { docEvents } = scope.interactions; - const eventMethod = signalName.indexOf('add') === 0 - ? events.add : events.remove; - if (scope.browser.isIOS && !options.events) { - options.events = { passive: false }; - } - // delegate event listener - for (const eventType in events.delegatedEvents) { - eventMethod(doc, eventType, events.delegateListener); - eventMethod(doc, eventType, events.delegateUseCapture, true); - } - const eventOptions = options && options.events; - for (const { type, listener } of docEvents) { - eventMethod(doc, type, listener, eventOptions); - } + +function onDocSignal({ + doc, + scope, + options +}, eventMethodName) { + const { + docEvents + } = scope.interactions; + const eventMethod = events[eventMethodName]; + + if (scope.browser.isIOS && !options.events) { + options.events = { + passive: false + }; + } // delegate event listener + + + for (const eventType in events.delegatedEvents) { + eventMethod(doc, eventType, events.delegateListener); + eventMethod(doc, eventType, events.delegateUseCapture, true); + } + + const eventOptions = options && options.events; + + for (const { + type, + listener + } of docEvents) { + eventMethod(doc, type, listener, eventOptions); + } } + export default { - id: 'core/interactions', - install, - onDocSignal, - doOnInteractions, - methodNames, + id: 'core/interactions', + install, + listeners: { + 'scope:add-document': arg => onDocSignal(arg, 'add'), + 'scope:remove-document': arg => onDocSignal(arg, 'remove') + }, + onDocSignal, + doOnInteractions, + methodNames }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJhY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBQy9DLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN6RCxPQUFPLE1BQU0sTUFBTSwwQkFBMEIsQ0FBQTtBQUM3QyxPQUFPLFlBQVksTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RCxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLGVBQWUsTUFBTSxlQUFlLENBQUE7QUFDM0MsT0FBTyxNQUF5QixNQUFNLHFCQUFxQixDQUFBO0FBa0IzRCxNQUFNLFdBQVcsR0FBRztJQUNsQixhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVc7SUFDekMsZUFBZSxFQUFFLGVBQWUsRUFBRSxZQUFZO0NBQy9DLENBQUE7QUFFRCxTQUFTLE9BQU8sQ0FBRSxLQUFZO0lBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7SUFFN0IsTUFBTSxTQUFTLEdBQUcsRUFBUyxDQUFBO0lBRTNCLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxFQUFFO1FBQ2hDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7S0FDcEQ7SUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFBO0lBQ3ZDLElBQUksU0FBOEMsQ0FBQTtJQUVsRCxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUU7UUFDM0IsU0FBUyxHQUFHO1lBQ1YsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBSSxRQUFRLEVBQUUsMkJBQTJCLEVBQUU7WUFDbkUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBSSxRQUFRLEVB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b20gJ0BpbnRlcmFjdGpzL3V0aWxzL2Jyb3dzZXInXG5pbXBvcnQgZG9tT2JqZWN0cyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9kb21PYmplY3RzJ1xuaW1wb3J0IHsgbm9kZUNvbnRhaW5zIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tVXRpbHMnXG5pbXBvcnQgZXZlbnRzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V2ZW50cydcbmltcG9ydCBwb2ludGVyVXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcG9pbnRlclV0aWxzJ1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCBJbnRlcmFjdGlvbkJhc2UgZnJvbSAnLi9JbnRlcmFjdGlvbidcbmltcG9ydCBmaW5kZXIsIHsgU2VhcmNoRGV0YWlscyB9IGZyb20gJy4vaW50ZXJhY3Rpb25GaW5kZXInXG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJy4vc2NvcGUnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgSW50ZXJhY3Rpb246IHR5cGVvZiBJbnRlcmFjdGlvbkJhc2VcbiAgICBpbnRlcmFjdGlvbnM6IHtcbiAgICAgIHNpZ25hbHM6IFNpZ25hbHNcbiAgICAgIG5ldzogKG9wdGlvbnM6IGFueSkgPT4gSW50ZXJhY3Rpb25CYXNlXG4gICAgICBsaXN0OiBJbnRlcmFjdGlvbkJhc2VbXVxuICAgICAgbGlzdGVuZXJzOiB7IFt0eXBlOiBzdHJpbmddOiBJbnRlcmFjdC5MaXN0ZW5lciB9XG4gICAgICBkb2NFdmVudHM6IEFycmF5PHsgdHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogSW50ZXJhY3QuTGlzdGVuZXIgfT5cbiAgICAgIHBvaW50ZXJNb3ZlVG9sZXJhbmNlOiBudW1iZXJcbiAgICB9XG4gICAgcHJldlRvdWNoVGltZTogbnVtYmVyXG4gIH1cbn1cblxuY29uc3QgbWV0aG9kTmFtZXMgPSBbXG4gICdwb2ludGVyRG93bicsICdwb2ludGVyTW92ZScsICdwb2ludGVyVXAnLFxuICAndXBkYXRlUG9pbnRlcicsICdyZW1vdmVQb2ludGVyJywgJ3dpbmRvd0JsdXInLFxuXVxuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qgc2lnbmFscyA9IG5ldyBTaWduYWxzKClcblxuICBjb25zdCBsaXN0ZW5lcnMgPSB7fSBhcyBhbnlcblxuICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBtZXRob2ROYW1lcykge1xuICAgIGxpc3RlbmVyc1ttZXRob2RdID0gZG9PbkludGVyYWN0aW9ucyhtZXRob2QsIHNjb3BlKVxuICB9XG5cbiAgY29uc3QgcEV2ZW50VHlwZXMgPSBicm93c2VyLnBFdmVudFR5cGVzXG4gIGxldCBkb2NFdmVudHM6IHR5cGVvZiBzY29wZS5pbnRlcmFjdGlvbnMuZG9jRXZlbnRzXG5cbiAgaWYgKGRvbU9iamVjdHMuUG9pbnRlckV2ZW50KSB7XG4gICAgZG9jRXZlbnRzID0gW1xuICAgICAgeyB0eXBlOiBwRXZlbnRUeXBlcy5kb3duLCAgIGxpc3RlbmVyOiByZWxlYXNlUG9pbnRlcnNPblJlbW92ZWRFbHMgfSxcbiAgICAgIHsgdHlwZTogcEV2ZW50VHlwZXMuZG93biwgICBsaXN0ZW5lcjogbGlzdGVuZXJzLnBvaW50ZXJEb3duIH0sXG4gICAgICB7IHR5cGU6IHBFdmVudFR5cGVzLm1vdmUsICAgbGlzdGVuZXI6IGxpc3RlbmVycy5wb2ludGVyTW92ZSB9LFxuICAgICAgeyB0eXBlOiBwRXZlbnRUeXBlcy51cCwgICAgIGxpc3RlbmVyOiBsaXN0ZW5lcnMucG9pbnRlclVwIH0sXG4gICAgICB7IHR5cGU6IHBFdmVudFR5cGVzLmNhbmNlbCwgbGlzdGVuZXI6IGxpc3RlbmVycy5wb2ludGVyVXAgfSxcbiAgICBdXG4gIH1cbiAgZWxzZSB7XG4gICAgZG9jRXZlbnRzID0gW1xuICAgICAgeyB0eXBlOiAnbW91c2Vkb3duJywgbGlzdGVuZXI6IGxpc3RlbmVycy5wb2ludGVyRG93biB9LFxuICAgICAgeyB0eXBlOiAnbW91c2Vtb3ZlJywgbGlzdGVuZXI6IGxpc3RlbmVycy5wb2ludGVyTW92ZSB9LFxuICAgICAgeyB0eXBlOiAnbW91c2V1cCcsIGxpc3RlbmVyOiBsaXN0ZW5lcnMucG9pbnRlclVwIH0sXG5cbiAgICAgIHsgdHlwZTogJ3RvdWNoc3RhcnQnLCBsaXN0ZW5lcjogcmVsZWFzZVBvaW50ZXJzT25SZW1vdmVkRWxzIH0sXG4gICAgICB7IHR5cGU6ICd0b3VjaHN0YXJ0JywgbGlzdGVuZXI6IGxpc3RlbmVycy5wb2ludGVyRG93biB9LFxuICAgICAgeyB0eXBlOiAndG91Y2htb3ZlJywgbGlzdGVuZXI6IGxpc3RlbmVycy5wb2ludGVyTW92ZSB9LFxuICAgICAgeyB0eXBlOiAndG91Y2hlbmQnLCBsaXN0ZW5lcjogbGlzdGVuZXJzLnBvaW50ZXJVcCB9LFxuICAgICAgeyB0eXBlOiAndG91Y2hjYW5jZWwnLCBsaXN0ZW5lcjogbGlzdGVuZXJzLnBvaW50ZXJVcCB9LFxuICAgIF1cbiAgfVxuXG4gIGRvY0V2ZW50cy5wdXNoKHtcbiAgICB0eXBlOiAnYmx1cicsXG4gICAgbGlzdGVuZXIgKGV2ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgICAgIGludGVyYWN0aW9uLmRvY3VtZW50Qmx1cihldmVudClcbiAgICAgIH1cbiAgICB9LFxuICB9KVxuXG4gIHNjb3BlLnNpZ25hbHMub24oJ2FkZC1kb2N1bWVudCcsIG9uRG9jU2lnbmFsKVxuICBzY29wZS5zaWduYWxzLm9uKCdyZW1vdmUtZG9jdW1lbnQnLCBvbkRvY1NpZ25hbClcblxuICAvLyBmb3IgaWdub3JpbmcgYnJvd3NlcidzIHNpbXVsYXRlZCBtb3VzZSBldmVudHNcbiAgc2NvcGUucHJldlRvdWNoVGltZSA9IDBcblxuICBzY29wZS5JbnRlcmFjdGlvbiA9IGNsYXNzIEludGVyYWN0aW9uIGV4dGVuZHMgSW50ZXJhY3Rpb25CYXNlIHtcbiAgICBnZXQgcG9pbnRlck1vdmVUb2xlcmFuY2UgKCkge1xuICAgICAgcmV0dXJuIHNjb3BlLmludGVyYWN0aW9ucy5wb2ludGVyTW92ZVRvbGVyYW5jZVxuICAgIH1cblxuICAgIHNldCBwb2ludGVyTW92ZVRvbGVyYW5jZSAodmFsdWUpIHtcbiAgICAgIHNjb3BlLmludGVyYWN0aW9ucy5wb2ludGVyTW92ZVRvbGVyYW5jZSA9IHZhbHVlXG4gICAgfVxuXG4gICAgX25vdyAoKSB7IHJldHVybiBzY29wZS5ub3coKSB9XG4gIH1cblxuICBzY29wZS5pbnRlcmFjdGlvbnMgPSB7XG4gICAgc2lnbmFscyxcbiAgICAvLyBhbGwgYWN0aXZlIGFuZCBpZGxlIGludGVyYWN0aW9uc1xuICAgIGxpc3Q6IFtdLFxuICAgIG5ldyAob3B0aW9uczogeyBwb2ludGVyVHlwZT86IHN0cmluZywgc2lnbmFscz86IFNpZ25hbHMgfSkge1xuICAgICAgb3B0aW9ucy5zaWduYWxzID0gc2lnbmFsc1xuXG4gICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IG5ldyBzY29wZS5JbnRlcmFjdGlvbihvcHRpb25zIGFzIFJlcXVpcmVkPHR5cGVvZiBvcHRpb25zPilcblxuICAgICAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QucHVzaChpbnRlcmFjdGlvbilcbiAgICAgIHJldHVybiBpbnRlcmFjdGlvblxuICAgIH0sXG4gICAgbGlzdGVuZXJzLFxuICAgIGRvY0V2ZW50cyxcbiAgICBwb2ludGVyTW92ZVRvbGVyYW5jZTogMSxcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbGVhc2VQb2ludGVyc09uUmVtb3ZlZEVscyAoKSB7XG4gICAgLy8gZm9yIGFsbCBpbmFjdGl2ZSB0b3VjaCBpbnRlcmFjdGlvbnMgd2l0aCBwb2ludGVycyBkb3duXG4gICAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgICAgaWYgKCFpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duIHx8XG4gICAgICAgIGludGVyYWN0aW9uLnBvaW50ZXJUeXBlICE9PSAndG91Y2gnIHx8XG4gICAgICAgIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBpZiBhIHBvaW50ZXIgaXMgZG93biBvbiBhbiBlbGVtZW50IHRoYXQgaXMgbm8gbG9uZ2VyIGluIHRoZSBET00gdHJlZVxuICAgICAgZm9yIChjb25zdCBwb2ludGVyIG9mIGludGVyYWN0aW9uLnBvaW50ZXJzKSB7XG4gICAgICAgIGlmICghc2NvcGUuZG9jdW1lbnRzLnNvbWUoKHsgZG9jIH0pID0+IG5vZGVDb250YWlucyhkb2MsIHBvaW50ZXIuZG93blRhcmdldCkpKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBwb2ludGVyIGZyb20gdGhlIGludGVyYWN0aW9uXG4gICAgICAgICAgaW50ZXJhY3Rpb24ucmVtb3ZlUG9pbnRlcihwb2ludGVyLnBvaW50ZXIsIHBvaW50ZXIuZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZG9PbkludGVyYWN0aW9ucyAobWV0aG9kLCBzY29wZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgY29uc3QgaW50ZXJhY3Rpb25zID0gc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3RcblxuICAgIGNvbnN0IHBvaW50ZXJUeXBlID0gcG9pbnRlclV0aWxzLmdldFBvaW50ZXJUeXBlKGV2ZW50KVxuICAgIGNvbnN0IFtldmVudFRhcmdldCwgY3VyRXZlbnRUYXJnZXRdID0gcG9pbnRlclV0aWxzLmdldEV2ZW50VGFyZ2V0cyhldmVudClcbiAgICBjb25zdCBtYXRjaGVzID0gW10gLy8gWyBbcG9pbnRlciwgaW50ZXJhY3Rpb25dLCAuLi5dXG5cbiAgICBpZiAoL150b3VjaC8udGVzdChldmVudC50eXBlKSkge1xuICAgICAgc2NvcGUucHJldlRvdWNoVGltZSA9IHNjb3BlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZFRvdWNoIG9mIGV2ZW50LmNoYW5nZWRUb3VjaGVzKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSBjaGFuZ2VkVG91Y2hcbiAgICAgICAgY29uc3QgcG9pbnRlcklkID0gcG9pbnRlclV0aWxzLmdldFBvaW50ZXJJZChwb2ludGVyKVxuICAgICAgICBjb25zdCBzZWFyY2hEZXRhaWxzOiBTZWFyY2hEZXRhaWxzID0ge1xuICAgICAgICAgIHBvaW50ZXIsXG4gICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgIHBvaW50ZXJUeXBlLFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICBjdXJFdmVudFRhcmdldCxcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IGdldEludGVyYWN0aW9uKHNlYXJjaERldGFpbHMpXG5cbiAgICAgICAgbWF0Y2hlcy5wdXNoKFtcbiAgICAgICAgICBzZWFyY2hEZXRhaWxzLnBvaW50ZXIsXG4gICAgICAgICAgc2VhcmNoRGV0YWlscy5ldmVudFRhcmdldCxcbiAgICAgICAgICBzZWFyY2hEZXRhaWxzLmN1ckV2ZW50VGFyZ2V0LFxuICAgICAgICAgIGludGVyYWN0aW9uLFxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxldCBpbnZhbGlkUG9pbnRlciA9IGZhbHNlXG5cbiAgICAgIGlmICghYnJvd3Nlci5zdXBwb3J0c1BvaW50ZXJFdmVudCAmJiAvbW91c2UvLnRlc3QoZXZlbnQudHlwZSkpIHtcbiAgICAgICAgLy8gaWdub3JlIG1vdXNlIGV2ZW50cyB3aGlsZSB0b3VjaCBpbnRlcmFjdGlvbnMgYXJlIGFjdGl2ZVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludGVyYWN0aW9ucy5sZW5ndGggJiYgIWludmFsaWRQb2ludGVyOyBpKyspIHtcbiAgICAgICAgICBpbnZhbGlkUG9pbnRlciA9IGludGVyYWN0aW9uc1tpXS5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJyAmJiBpbnRlcmFjdGlvbnNbaV0ucG9pbnRlcklzRG93blxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHJ5IHRvIGlnbm9yZSBtb3VzZSBldmVudHMgdGhhdCBhcmUgc2ltdWxhdGVkIGJ5IHRoZSBicm93c2VyXG4gICAgICAgIC8vIGFmdGVyIGEgdG91Y2ggZXZlbnRcbiAgICAgICAgaW52YWxpZFBvaW50ZXIgPSBpbnZhbGlkUG9pbnRlciB8fFxuICAgICAgICAgIChzY29wZS5ub3coKSAtIHNjb3BlLnByZXZUb3VjaFRpbWUgPCA1MDApIHx8XG4gICAgICAgICAgLy8gb24gaU9TIGFuZCBGaXJlZm94IE1vYmlsZSwgTW91c2VFdmVudC50aW1lU3RhbXAgaXMgemVybyBpZiBzaW11bGF0ZWRcbiAgICAgICAgICBldmVudC50aW1lU3RhbXAgPT09IDBcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnZhbGlkUG9pbnRlcikge1xuICAgICAgICBjb25zdCBzZWFyY2hEZXRhaWxzID0ge1xuICAgICAgICAgIHBvaW50ZXI6IGV2ZW50LFxuICAgICAgICAgIHBvaW50ZXJJZDogcG9pbnRlclV0aWxzLmdldFBvaW50ZXJJZChldmVudCksXG4gICAgICAgICAgcG9pbnRlclR5cGUsXG4gICAgICAgICAgZXZlbnRUeXBlOiBldmVudC50eXBlLFxuICAgICAgICAgIGN1ckV2ZW50VGFyZ2V0LFxuICAgICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb24gPSBnZXRJbnRlcmFjdGlvbihzZWFyY2hEZXRhaWxzKVxuXG4gICAgICAgIG1hdGNoZXMucHVzaChbXG4gICAgICAgICAgc2VhcmNoRGV0YWlscy5wb2ludGVyLFxuICAgICAgICAgIHNlYXJjaERldGFpbHMuZXZlbnRUYXJnZXQsXG4gICAgICAgICAgc2VhcmNoRGV0YWlscy5jdXJFdmVudFRhcmdldCxcbiAgICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgZm9yIChjb25zdCBbcG9pbnRlciwgZXZlbnRUYXJnZXQsIGN1ckV2ZW50VGFyZ2V0LCBpbnRlcmFjdGlvbl0gb2YgbWF0Y2hlcykge1xuICAgICAgaW50ZXJhY3Rpb25bbWV0aG9kXShwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGN1ckV2ZW50VGFyZ2V0KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbnRlcmFjdGlvbiAoc2VhcmNoRGV0YWlsczogU2VhcmNoRGV0YWlscykge1xuICBjb25zdCB7IHBvaW50ZXJUeXBlLCBzY29wZSB9ID0gc2VhcmNoRGV0YWlsc1xuXG4gIGNvbnN0IGZvdW5kSW50ZXJhY3Rpb24gPSBmaW5kZXIuc2VhcmNoKHNlYXJjaERldGFpbHMpXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHsgaW50ZXJhY3Rpb246IGZvdW5kSW50ZXJhY3Rpb24sIHNlYXJjaERldGFpbHMgfVxuXG4gIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2ZpbmQnLCBzaWduYWxBcmcpXG5cbiAgcmV0dXJuIHNpZ25hbEFyZy5pbnRlcmFjdGlvbiB8fCBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHsgcG9pbnRlclR5cGUgfSlcbn1cblxuZnVuY3Rpb24gb25Eb2NTaWduYWwgKHsgZG9jLCBzY29wZSwgb3B0aW9ucyB9LCBzaWduYWxOYW1lKSB7XG4gIGNvbnN0IHsgZG9jRXZlbnRzIH0gPSBzY29wZS5pbnRlcmFjdGlvbnNcbiAgY29uc3QgZXZlbnRNZXRob2QgPSBzaWduYWxOYW1lLmluZGV4T2YoJ2FkZCcpID09PSAwXG4gICAgPyBldmVudHMuYWRkIDogZXZlbnRzLnJlbW92ZVxuXG4gIGlmIChzY29wZS5icm93c2VyLmlzSU9TICYmICFvcHRpb25zLmV2ZW50cykge1xuICAgIG9wdGlvbnMuZXZlbnRzID0geyBwYXNzaXZlOiBmYWxzZSB9XG4gIH1cblxuICAvLyBkZWxlZ2F0ZSBldmVudCBsaXN0ZW5lclxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBpbiBldmVudHMuZGVsZWdhdGVkRXZlbnRzKSB7XG4gICAgZXZlbnRNZXRob2QoZG9jLCBldmVudFR5cGUsIGV2ZW50cy5kZWxlZ2F0ZUxpc3RlbmVyKVxuICAgIGV2ZW50TWV0aG9kKGRvYywgZXZlbnRUeXBlLCBldmVudHMuZGVsZWdhdGVVc2VDYXB0dXJlLCB0cnVlKVxuICB9XG5cbiAgY29uc3QgZXZlbnRPcHRpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmV2ZW50c1xuXG4gIGZvciAoY29uc3QgeyB0eXBlLCBsaXN0ZW5lciB9IG9mIGRvY0V2ZW50cykge1xuICAgIGV2ZW50TWV0aG9kKGRvYywgdHlwZSwgbGlzdGVuZXIsIGV2ZW50T3B0aW9ucylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlkOiAnY29yZS9pbnRlcmFjdGlvbnMnLFxuICBpbnN0YWxsLFxuICBvbkRvY1NpZ25hbCxcbiAgZG9PbkludGVyYWN0aW9ucyxcbiAgbWV0aG9kTmFtZXMsXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=interactions.js.map \ No newline at end of file diff --git a/packages/core/interactions.js.map b/packages/core/interactions.js.map new file mode 100644 index 000000000..2cc646729 --- /dev/null +++ b/packages/core/interactions.js.map @@ -0,0 +1,98 @@ +{ + "version": 3, + "sources": [ + "interactions.ts" + ], + "names": [ + "browser", + "domObjects", + "nodeContains", + "events", + "pointerUtils", + "InteractionBase", + "finder", + "Scope", + "methodNames", + "install", + "scope", + "listeners", + "method", + "doOnInteractions", + "pEventTypes", + "docEvents", + "PointerEvent", + "type", + "down", + "listener", + "releasePointersOnRemovedEls", + "pointerDown", + "move", + "pointerMove", + "up", + "pointerUp", + "cancel", + "push", + "event", + "interaction", + "interactions", + "list", + "documentBlur", + "prevTouchTime", + "Interaction", + "pointerMoveTolerance", + "value", + "_now", + "now", + "new", + "options", + "scopeFire", + "name", + "arg", + "fire", + "pointerIsDown", + "pointerType", + "_interacting", + "pointer", + "pointers", + "documents", + "some", + "doc", + "downTarget", + "removePointer", + "getPointerType", + "eventTarget", + "curEventTarget", + "getEventTargets", + "matches", + "test", + "changedTouch", + "changedTouches", + "pointerId", + "getPointerId", + "searchDetails", + "eventType", + "getInteraction", + "invalidPointer", + "supportsPointerEvent", + "i", + "length", + "timeStamp", + "foundInteraction", + "search", + "signalArg", + "onDocSignal", + "eventMethodName", + "eventMethod", + "isIOS", + "passive", + "delegatedEvents", + "delegateListener", + "delegateUseCapture", + "eventOptions", + "id" + ], + "mappings": "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", + "sourcesContent": [ + "import browser from '../utils/browser'\nimport domObjects from '../utils/domObjects'\nimport { nodeContains } from '../utils/domUtils'\nimport events from '../utils/events'\nimport pointerUtils from '../utils/pointerUtils'\nimport InteractionBase from './Interaction'\nimport finder, { SearchDetails } from './interactionFinder'\nimport { Scope } from './scope'\n\ndeclare module '../core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n docEvents: Array<{ type: string, listener: Interact.Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n }\n else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () { return scope.now() }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new (options: { pointerType?: string, scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls () {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown ||\n interaction.pointerType !== 'touch' ||\n interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n}\n\nfunction doOnInteractions (method, scope) {\n return function (event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer ||\n (scope.now() - scope.prevTouchTime < 500) ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction (searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal ({ doc, scope, options }: Interact.SignalArgs[T], eventMethodName: 'add' | 'remove') {\n const { docEvents } = scope.interactions\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nexport default {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': arg => onDocSignal(arg, 'add'),\n 'scope:remove-document': arg => onDocSignal(arg, 'remove'),\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/core/interactions.spec.js b/packages/core/interactions.spec.js deleted file mode 100644 index e480ce606..000000000 --- a/packages/core/interactions.spec.js +++ /dev/null @@ -1,57 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import Signals from '@interactjs/utils/Signals'; -import Interaction from './Interaction'; -import interactions from './interactions'; -import * as helpers from './tests/_helpers'; -test('interactions', t => { - let scope = helpers.mockScope(); - const interaction = scope.interactions.new({ pointerType: 'TEST' }); - t.equal(scope.interactions.list[0], interaction, 'new Interaction is pushed to scope.interactions'); - 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(); - 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(); -}); -test('interactions removes pointers on targeting removed elements', t => { - const { interaction, scope, } = helpers.testEnv(); - const { TouchEvent, Touch = function (_t) { return _t; } } = scope.window; - const div1 = scope.document.body.appendChild(scope.document.createElement('div')); - const div2 = scope.document.body.appendChild(scope.document.createElement('div')); - const touch1Init = { bubbles: true, changedTouches: [new Touch({ identifier: 1, target: div1 })] }; - const touch2Init = { bubbles: true, changedTouches: [new Touch({ identifier: 2, target: div2 })] }; - interaction.pointerType = 'touch'; - div1.dispatchEvent(new TouchEvent('touchstart', touch1Init)); - div1.dispatchEvent(new TouchEvent('touchmove', touch1Init)); - t.equal(scope.interactions.list.length, 1); - t.equal(interaction.pointers.length, 1, 'down pointer added to interaction'); - t.equal(interaction._latestPointer.eventTarget, div1, '_latestPointer target is down target'); - div1.remove(); - div2.dispatchEvent(new TouchEvent('touchstart', touch2Init)); - t.deepEqual(scope.interactions.list, [interaction], 'interaction with removed element is reused for new pointer'); - t.equal(interaction.pointers.length, 1, 'pointer on removed element is removed from existing interaction and new pointerdown is added'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25zLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlcmFjdGlvbnMuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsQ0FBQTtBQUMvQyxPQUFPLFdBQVcsTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxZQUFZLE1BQU0sZ0JBQWdCLENBQUE7QUFDekMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQTtBQUUzQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3ZCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUUvQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBRW5FLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUM3QyxpREFBaUQsQ0FBQyxDQUFBO0lBRXBELENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksWUFBWSxNQUFNLEVBQUUsb0NBQW9DLENBQUMsQ0FBQTtJQUVoRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQTtJQUU5QyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFDL0Ysb0NBQW9DLENBQUMsQ0FBQTtJQUV2QyxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRTNC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LENBQUMsS0FBSyxDQUNMLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUMzQixDQUFDLEVBQ0QsOEZBQThGLENBQUMsQ0FBQTtJQUVqRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IFNpZ25hbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvU2lnbmFscydcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICcuL0ludGVyYWN0aW9uJ1xuaW1wb3J0IGludGVyYWN0aW9ucyBmcm9tICcuL2ludGVyYWN0aW9ucydcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi90ZXN0cy9faGVscGVycydcblxudGVzdCgnaW50ZXJhY3Rpb25zJywgdCA9PiB7XG4gIGxldCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoeyBwb2ludGVyVHlwZTogJ1RFU1QnIH0pXG5cbiAgdC5lcXVhbChzY29wZS5pbnRlcmFjdGlvbnMubGlzdFswXSwgaW50ZXJhY3Rpb24sXG4gICAgJ25ldyBJbnRlcmFjdGlvbiBpcyBwdXNoZWQgdG8gc2NvcGUuaW50ZXJhY3Rpb25zJylcblxuICB0Lm9rKHNjb3BlLmludGVyYWN0aW9ucyBpbnN0YW5jZW9mIE9iamVjdCwgJ2ludGVyYWN0aW9ucyBvYmplY3QgYWRkZWQgdG8gc2NvcGUnKVxuXG4gIGNvbnN0IGxpc3RlbmVycyA9IHNjb3BlLmludGVyYWN0aW9ucy5saXN0ZW5lcnNcblxuICB0Lm9rKGludGVyYWN0aW9ucy5tZXRob2ROYW1lcy5yZWR1Y2UoKGFjYywgbSkgPT4gYWNjICYmIHR5cGVvZiBsaXN0ZW5lcnNbbV0gPT09ICdmdW5jdGlvbicsIHRydWUpLFxuICAgICdpbnRlcmFjdGlvbnMgb2JqZWN0IGFkZGVkIHRvIHNjb3BlJylcblxuICBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBjb25zdCBuZXdJbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG5cbiAgdC5hc3NlcnQodHlwZW9mIHNjb3BlLmludGVyYWN0aW9ucyA9PT0gJ29iamVjdCcpXG4gIHQuYXNzZXJ0KHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzIGluc3RhbmNlb2YgU2lnbmFscylcbiAgdC5hc3NlcnQodHlwZW9mIHNjb3BlLmludGVyYWN0aW9ucy5uZXcgPT09ICdmdW5jdGlvbicpXG4gIHQuYXNzZXJ0KG5ld0ludGVyYWN0aW9uIGluc3RhbmNlb2YgSW50ZXJhY3Rpb24pXG4gIHQuZXF1YWwobmV3SW50ZXJhY3Rpb24uX3NpZ25hbHMsIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzKVxuXG4gIHQuYXNzZXJ0KHR5cGVvZiBzY29wZS5hY3Rpb25zID09PSAnb2JqZWN0JylcbiAgdC5kZWVwRXF1YWwoc2NvcGUuYWN0aW9ucy5uYW1lcywgW10pXG4gIHQuZGVlcEVxdWFsKHNjb3BlLmFjdGlvbnMubWV0aG9kRGljdCwge30pXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnaW50ZXJhY3Rpb25zIGRvY3VtZW50IGV2ZW50IG9wdGlvbnMnLCB0ID0+IHtcbiAgY29uc3Qgc2NvcGUgPSBoZWxwZXJzLm1vY2tTY29wZSgpXG4gIGNvbnN0IGRvYyA9IHNjb3BlLmRvY3VtZW50XG5cbiAgbGV0IG9wdGlvbnMgPSB7fVxuICBzY29wZS5icm93c2VyID0geyBpc0lPUzogZmFsc2UgfVxuICBzY29wZS5zaWduYWxzLmZpcmUoJ2FkZC1kb2N1bWVudCcsIHsgZG9jLCBzY29wZSwgb3B0aW9ucyB9KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG9wdGlvbnMsXG4gICAge30sXG4gICAgJ25vIGRvYyBvcHRpb25zLmV2ZW50LnBhc3NpdmUgaXMgYWRkZWQgd2hlbiBub3QgaU9TJylcblxuICBvcHRpb25zID0ge31cblxuICBzY29wZS5icm93c2VyLmlzSU9TID0gdHJ1ZVxuICBzY29wZS5zaWduYWxzLmZpcmUoJ2FkZC1kb2N1bWVudCcsIHsgZG9jLCBzY29wZSwgb3B0aW9ucyB9KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG9wdGlvbnMsXG4gICAgeyBldmVudHM6IHsgcGFzc2l2ZTogZmFsc2UgfSB9LFxuICAgICdkb2Mgb3B0aW9ucy5ldmVudC5wYXNzaXZlIGlzIHNldCB0byBmYWxzZSBmb3IgaU9TJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdpbnRlcmFjdGlvbnMgcmVtb3ZlcyBwb2ludGVycyBvbiB0YXJnZXRpbmcgcmVtb3ZlZCBlbGVtZW50cycsIHQgPT4ge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgc2NvcGUsXG4gIH0gPSBoZWxwZXJzLnRlc3RFbnYoKVxuXG4gIGNvbnN0IHsgVG91Y2hFdmVudCwgVG91Y2ggPSBmdW5jdGlvbiAoX3QpIHsgcmV0dXJuIF90IH0gfSA9IHNjb3BlLndpbmRvdyBhcyBhbnlcbiAgY29uc3QgZGl2MSA9IHNjb3BlLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NvcGUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpXG4gIGNvbnN0IGRpdjIgPSBzY29wZS5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjb3BlLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKVxuXG4gIGNvbnN0IHRvdWNoMUluaXQgPSB7IGJ1YmJsZXM6IHRydWUsIGNoYW5nZWRUb3VjaGVzOiBbbmV3IFRvdWNoKHsgaWRlbnRpZmllcjogMSwgdGFyZ2V0OiBkaXYxIH0pXSB9XG4gIGNvbnN0IHRvdWNoMkluaXQgPSB7IGJ1YmJsZXM6IHRydWUsIGNoYW5nZWRUb3VjaGVzOiBbbmV3IFRvdWNoKHsgaWRlbnRpZmllcjogMiwgdGFyZ2V0OiBkaXYyIH0pXSB9XG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlclR5cGUgPSAndG91Y2gnXG4gIGRpdjEuZGlzcGF0Y2hFdmVudChuZXcgVG91Y2hFdmVudCgndG91Y2hzdGFydCcsIHRvdWNoMUluaXQpKVxuICBkaXYxLmRpc3BhdGNoRXZlbnQobmV3IFRvdWNoRXZlbnQoJ3RvdWNobW92ZScsIHRvdWNoMUluaXQpKVxuXG4gIHQuZXF1YWwoXG4gICAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QubGVuZ3RoLFxuICAgIDEpXG5cbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGgsIDEsICdkb3duIHBvaW50ZXIgYWRkZWQgdG8gaW50ZXJhY3Rpb24nKVxuICB0LmVxdWFsKGludGVyYWN0aW9uLl9sYXRlc3RQb2ludGVyLmV2ZW50VGFyZ2V0LCBkaXYxLCAnX2xhdGVzdFBvaW50ZXIgdGFyZ2V0IGlzIGRvd24gdGFyZ2V0JylcblxuICBkaXYxLnJlbW92ZSgpXG5cbiAgZGl2Mi5kaXNwYXRjaEV2ZW50KG5ldyBUb3VjaEV2ZW50KCd0b3VjaHN0YXJ0JywgdG91Y2gySW5pdCkpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QsXG4gICAgW2ludGVyYWN0aW9uXSxcbiAgICAnaW50ZXJhY3Rpb24gd2l0aCByZW1vdmVkIGVsZW1lbnQgaXMgcmV1c2VkIGZvciBuZXcgcG9pbnRlcicpXG5cbiAgdC5lcXVhbChcbiAgICBpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGgsXG4gICAgMSxcbiAgICAncG9pbnRlciBvbiByZW1vdmVkIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIGV4aXN0aW5nIGludGVyYWN0aW9uIGFuZCBuZXcgcG9pbnRlcmRvd24gaXMgYWRkZWQnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/core/scope.d.ts b/packages/core/scope.d.ts index 396c39a1a..d302997cf 100644 --- a/packages/core/scope.d.ts +++ b/packages/core/scope.d.ts @@ -1,9 +1,35 @@ -import * as utils from '@interactjs/utils'; +import * as utils from '../utils/index'; import defaults from './defaultOptions'; import Eventable from './Eventable'; import InteractableBase from './Interactable'; import InteractableSet from './InteractableSet'; import InteractEvent from './InteractEvent'; +export interface SignalArgs { + 'scope:add-document': DocSignalArg; + 'scope:remove-document': DocSignalArg; + 'interactable:unset': { + interactable: InteractableBase; + }; + 'interactable:set': { + interactable: InteractableBase; + options: Interact.Options; + }; + 'interactions:destroy': { + interaction: Interact.Interaction; + }; +} +export declare type ListenerName = keyof SignalArgs; +declare type ListenerMap = { + [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean; +}; +interface DocSignalArg { + doc: Document; + window: Window; + scope: Scope; + options?: { + [index: string]: any; + }; +} export declare enum ActionName { } export interface Actions { @@ -16,13 +42,18 @@ export interface Actions { export declare function createScope(): Scope; export declare type Defaults = typeof defaults; export interface Plugin { - id?: string; - install(scope: Scope, options?: any): void; [key: string]: any; + id?: string; + listeners?: ListenerMap; + before?: string; + install?(scope: Scope, options?: any): void; } export declare class Scope { id: string; - signals: utils.Signals; + listenerMaps: Array<{ + map: ListenerMap; + id: string; + }>; browser: { init: (window: any) => void; supportsTouch: boolean; @@ -44,7 +75,7 @@ export declare class Scope { }; events: { add: (element: EventTarget, type: string, listener: (event: Event | import("../utils/events").FakeEvent) => any, optionalArg?: any) => void; - remove: (element: EventTarget, type: string, listener?: "all" | ((event: Event | import("../utils/events").FakeEvent) => any), optionalArg?: any) => void; + remove: (element: EventTarget, type: string, listener?: ((event: Event | import("../utils/events").FakeEvent) => any) | "all", optionalArg?: any) => void; addDelegate: (selector: string, context: Node, type: string, listener: (event: Event | import("../utils/events").FakeEvent) => any, optionalArg?: any) => void; removeDelegate: (selector: any, context: any, type: any, listener?: any, optionalArg?: any) => void; delegateListener: (event: Event, optionalArg?: any) => void; @@ -82,11 +113,15 @@ export declare class Scope { doc: Document; options: any; }>; - _plugins: Plugin[]; - _pluginMap: { - [id: string]: Plugin; + _plugins: { + list: Plugin[]; + map: { + [id: string]: Plugin; + }; }; constructor(); + addListeners(map: ListenerMap, id?: string): void; + fire(name: T, arg: SignalArgs[T]): void | false; onWindowUnload: (event: BeforeUnloadEvent) => void; init(window: Window): Scope; pluginIsInstalled(plugin: Plugin): boolean | Plugin; @@ -100,3 +135,4 @@ export declare class Scope { now(): number; } export declare function initScope(scope: Scope, window: Window): Scope; +export {}; diff --git a/packages/core/scope.js b/packages/core/scope.js index 0a0aae435..8e3f3211d 100644 --- a/packages/core/scope.js +++ b/packages/core/scope.js @@ -1,134 +1,253 @@ -import * as utils from '@interactjs/utils'; -import domObjects from '@interactjs/utils/domObjects'; -import defaults from './defaultOptions'; -import Eventable from './Eventable'; -import InteractableBase from './Interactable'; -import InteractableSet from './InteractableSet'; -import InteractEvent from './InteractEvent'; -import interactions from './interactions'; -const { win, browser, raf, Signals, events, } = utils; -export var ActionName; -(function (ActionName) { -})(ActionName || (ActionName = {})); +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import domObjects from "../utils/domObjects.js"; +import * as utils from "../utils/index.js"; +import defaults from "./defaultOptions.js"; +import Eventable from "./Eventable.js"; +import InteractableBase from "./Interactable.js"; +import InteractableSet from "./InteractableSet.js"; +import InteractEvent from "./InteractEvent.js"; +import interactions from "./interactions.js"; +const { + win, + browser, + raf, + events +} = utils; +export let ActionName; + +(function (ActionName) {})(ActionName || (ActionName = {})); + export function createScope() { - return new Scope(); + return new Scope(); } export class Scope { - constructor() { - this.id = `__interact_scope_${Math.floor(Math.random() * 100)}`; - this.signals = new Signals(); - this.browser = browser; - this.events = events; - this.utils = utils; - this.defaults = utils.clone(defaults); - this.Eventable = Eventable; - this.actions = { - names: [], - methodDict: {}, - eventTypes: [], - }; - this.InteractEvent = InteractEvent; - this.interactables = new InteractableSet(this); - // all documents being listened to - this.documents = []; - this._plugins = []; - this._pluginMap = {}; - this.onWindowUnload = (event) => this.removeDocument(event.target); - const scope = this; - this.Interactable = class Interactable extends InteractableBase { - get _defaults() { return scope.defaults; } - set(options) { - super.set(options); - scope.interactables.signals.fire('set', { - options, - interactable: this, - }); - return this; - } - unset() { - super.unset(); - for (let i = scope.interactions.list.length - 1; i >= 0; i--) { - const interaction = scope.interactions.list[i]; - if (interaction.interactable === this) { - interaction.stop(); - scope.interactions.signals.fire('destroy', { interaction }); - interaction.destroy(); - if (scope.interactions.list.length > 2) { - scope.interactions.list.splice(i, 1); - } - } - } - scope.interactables.signals.fire('unset', { interactable: this }); + // main window + // main document + // main window + // all documents being listened to + constructor() { + _defineProperty(this, "id", `__interact_scope_${Math.floor(Math.random() * 100)}`); + + _defineProperty(this, "listenerMaps", []); + + _defineProperty(this, "browser", browser); + + _defineProperty(this, "events", events); + + _defineProperty(this, "utils", utils); + + _defineProperty(this, "defaults", utils.clone(defaults)); + + _defineProperty(this, "Eventable", Eventable); + + _defineProperty(this, "actions", { + names: [], + methodDict: {}, + eventTypes: [] + }); + + _defineProperty(this, "InteractEvent", InteractEvent); + + _defineProperty(this, "Interactable", void 0); + + _defineProperty(this, "interactables", new InteractableSet(this)); + + _defineProperty(this, "_win", void 0); + + _defineProperty(this, "document", void 0); + + _defineProperty(this, "window", void 0); + + _defineProperty(this, "documents", []); + + _defineProperty(this, "_plugins", { + list: [], + map: {} + }); + + _defineProperty(this, "onWindowUnload", event => this.removeDocument(event.target)); + + const scope = this; + this.Interactable = class Interactable extends InteractableBase { + get _defaults() { + return scope.defaults; + } + + set(options) { + super.set(options); + scope.fire('interactable:set', { + options, + interactable: this + }); + return this; + } + + unset() { + super.unset(); + + for (let i = scope.interactions.list.length - 1; i >= 0; i--) { + const interaction = scope.interactions.list[i]; + + if (interaction.interactable === this) { + interaction.stop(); + scope.fire('interactions:destroy', { + interaction + }); + interaction.destroy(); + + if (scope.interactions.list.length > 2) { + scope.interactions.list.splice(i, 1); } - }; + } + } + + scope.fire('interactable:unset', { + interactable: this + }); + } + + }; + } + + addListeners(map, id) { + this.listenerMaps.push({ + id, + map + }); + } + + fire(name, arg) { + for (const { + map: { + [name]: listener + } + } of this.listenerMaps) { + if (!!listener && listener(arg, this, name) === false) { + return false; + } } - init(window) { - return initScope(this, window); + } + + init(window) { + return initScope(this, window); + } + + pluginIsInstalled(plugin) { + return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1; + } + + usePlugin(plugin, options) { + if (this.pluginIsInstalled(plugin)) { + return this; } - pluginIsInstalled(plugin) { - return this._pluginMap[plugin.id] || this._plugins.indexOf(plugin) !== -1; + + if (plugin.id) { + this._plugins.map[plugin.id] = plugin; } - usePlugin(plugin, options) { - if (this.pluginIsInstalled(plugin)) { - return this; - } - if (plugin.id) { - this._pluginMap[plugin.id] = plugin; - } - plugin.install(this, options); - this._plugins.push(plugin); - return this; + + this._plugins.list.push(plugin); + + if (plugin.install) { + plugin.install(this, options); } - addDocument(doc, options) { - // do nothing if document is already known - if (this.getDocIndex(doc) !== -1) { - return false; - } - const window = win.getWindow(doc); - options = options ? utils.extend({}, options) : {}; - this.documents.push({ doc, options }); - events.documents.push(doc); - // don't add an unload event for the main document - // so that the page may be cached in browser history - if (doc !== this.document) { - events.add(window, 'unload', this.onWindowUnload); + + if (plugin.listeners && plugin.before) { + let index = 0; + + for (; index < this.listenerMaps.length; index++) { + const otherId = this.listenerMaps[index].id; + + if (otherId === plugin.before) { + break; } - this.signals.fire('add-document', { doc, window, scope: this, options }); - } - removeDocument(doc) { - const index = this.getDocIndex(doc); - const window = win.getWindow(doc); - const options = this.documents[index].options; - events.remove(window, 'unload', this.onWindowUnload); - this.documents.splice(index, 1); - events.documents.splice(index, 1); - this.signals.fire('remove-document', { doc, window, scope: this, options }); + } + + this.listenerMaps.splice(index, 0, { + id: plugin.id, + map: plugin.listeners + }); + } else if (plugin.listeners) { + this.listenerMaps.push({ + id: plugin.id, + map: plugin.listeners + }); } - getDocIndex(doc) { - for (let i = 0; i < this.documents.length; i++) { - if (this.documents[i].doc === doc) { - return i; - } - } - return -1; + + return this; + } + + addDocument(doc, options) { + // do nothing if document is already known + if (this.getDocIndex(doc) !== -1) { + return false; } - getDocOptions(doc) { - const docIndex = this.getDocIndex(doc); - return docIndex === -1 ? null : this.documents[docIndex].options; + + const window = win.getWindow(doc); + options = options ? utils.extend({}, options) : {}; + this.documents.push({ + doc, + options + }); + events.documents.push(doc); // don't add an unload event for the main document + // so that the page may be cached in browser history + + if (doc !== this.document) { + events.add(window, 'unload', this.onWindowUnload); } - now() { - return (this.window.Date || Date).now(); + + this.fire('scope:add-document', { + doc, + window, + scope: this, + options + }); + } + + removeDocument(doc) { + const index = this.getDocIndex(doc); + const window = win.getWindow(doc); + const options = this.documents[index].options; + events.remove(window, 'unload', this.onWindowUnload); + this.documents.splice(index, 1); + events.documents.splice(index, 1); + this.fire('scope:remove-document', { + doc, + window, + scope: this, + options + }); + } + + getDocIndex(doc) { + for (let i = 0; i < this.documents.length; i++) { + if (this.documents[i].doc === doc) { + return i; + } } + + return -1; + } + + getDocOptions(doc) { + const docIndex = this.getDocIndex(doc); + return docIndex === -1 ? null : this.documents[docIndex].options; + } + + now() { + return (this.window.Date || Date).now(); + } + } export function initScope(scope, window) { - win.init(window); - domObjects.init(window); - browser.init(window); - raf.init(window); - events.init(window); - scope.usePlugin(interactions); - scope.document = window.document; - scope.window = window; - return scope; + win.init(window); + domObjects.init(window); + browser.init(window); + raf.init(window); + events.init(window); + scope.usePlugin(interactions); + scope.document = window.document; + scope.window = window; + return scope; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFBO0FBQzFDLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sUUFBUSxNQUFNLGtCQUFrQixDQUFBO0FBQ3ZDLE9BQU8sU0FBUyxNQUFNLGFBQWEsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLGdCQUFnQixDQUFBO0FBQzdDLE9BQU8sZUFBZSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFBO0FBQzNDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFBO0FBRXpDLE1BQU0sRUFDSixHQUFHLEVBQ0gsT0FBTyxFQUNQLEdBQUcsRUFDSCxPQUFPLEVBQ1AsTUFBTSxHQUNQLEdBQUcsS0FBSyxDQUFBO0FBRVQsTUFBTSxDQUFOLElBQVksVUFDWDtBQURELFdBQVksVUFBVTtBQUN0QixDQUFDLEVBRFcsVUFBVSxLQUFWLFVBQVUsUUFDckI7QUFRRCxNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPLElBQUksS0FBSyxFQUFFLENBQUE7QUFDcEIsQ0FBQztBQVVELE1BQU0sT0FBTyxLQUFLO0lBaUNoQjtRQWhDQSxPQUFFLEdBQUcsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUE7UUFDMUQsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDdkIsWUFBTyxHQUFHLE9BQU8sQ0FBQTtRQUNqQixXQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ2YsVUFBSyxHQUFHLEtBQUssQ0FBQTtRQUNiLGFBQVEsR0FBYSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBYSxDQUFBO1FBQ3RELGNBQVMsR0FBRyxTQUFTLENBQUE7UUFDckIsWUFBTyxHQUFZ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QyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ2pFLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxTQUFTLENBQUUsS0FBWSxFQUFFLE1BQWM7SUFDckQsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNoQixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDcEIsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRW5CLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDN0IsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQ2hDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBRXJCLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzJ1xuaW1wb3J0IGRvbU9iamVjdHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tT2JqZWN0cydcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRPcHRpb25zJ1xuaW1wb3J0IEV2ZW50YWJsZSBmcm9tICcuL0V2ZW50YWJsZSdcbmltcG9ydCBJbnRlcmFjdGFibGVCYXNlIGZyb20gJy4vSW50ZXJhY3RhYmxlJ1xuaW1wb3J0IEludGVyYWN0YWJsZVNldCBmcm9tICcuL0ludGVyYWN0YWJsZVNldCdcbmltcG9ydCBJbnRlcmFjdEV2ZW50IGZyb20gJy4vSW50ZXJhY3RFdmVudCdcbmltcG9ydCBpbnRlcmFjdGlvbnMgZnJvbSAnLi9pbnRlcmFjdGlvbnMnXG5cbmNvbnN0IHtcbiAgd2luLFxuICBicm93c2VyLFxuICByYWYsXG4gIFNpZ25hbHMsXG4gIGV2ZW50cyxcbn0gPSB1dGlsc1xuXG5leHBvcnQgZW51bSBBY3Rpb25OYW1lIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25zIHtcbiAgbmFtZXM6IEFjdGlvbk5hbWVbXVxuICBtZXRob2REaWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIGV2ZW50VHlwZXM6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY29wZSAoKSB7XG4gIHJldHVybiBuZXcgU2NvcGUoKVxufVxuXG5leHBvcnQgdHlwZSBEZWZhdWx0cyA9IHR5cGVvZiBkZWZhdWx0c1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbiB7XG4gIGlkPzogc3RyaW5nXG4gIGluc3RhbGwgKHNjb3BlOiBTY29wZSwgb3B0aW9ucz86IGFueSk6IHZvaWRcbiAgW2tleTogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCBjbGFzcyBTY29wZSB7XG4gIGlkID0gYF9faW50ZXJhY3Rfc2NvcGVfJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApfWBcbiAgc2lnbmFscyA9IG5ldyBTaWduYWxzKClcbiAgYnJvd3NlciA9IGJyb3dzZXJcbiAgZXZlbnRzID0gZXZlbnRzXG4gIHV0aWxzID0gdXRpbHNcbiAgZGVmYXVsdHM6IERlZmF1bHRzID0gdXRpbHMuY2xvbmUoZGVmYXVsdHMpIGFzIERlZmF1bHRzXG4gIEV2ZW50YWJsZSA9IEV2ZW50YWJsZVxuICBhY3Rpb25zOiBBY3Rpb25zID0ge1xuICAgIG5hbWVzOiBbXSxcbiAgICBtZXRob2REaWN0OiB7fSxcbiAgICBldmVudFR5cGVzOiBbXSxcbiAgfVxuXG4gIEludGVyYWN0RXZlbnQgPSBJbnRlcmFjdEV2ZW50XG4gIEludGVyYWN0YWJsZSE6IHR5cGVvZiBJbnRlcmFjdGFibGVCYXNlXG4gIGludGVyYWN0YWJsZXMgPSBuZXcgSW50ZXJhY3RhYmxlU2V0KHRoaXMpXG5cbiAgLy8gbWFpbiB3aW5kb3dcbiAgX3dpbiE6IFdpbmRvd1xuXG4gIC8vIG1haW4gZG9jdW1lbnRcbiAgZG9jdW1lbnQhOiBEb2N1bWVudFxuXG4gIC8vIG1haW4gd2luZG93XG4gIHdpbmRvdyE6IFdpbmRvd1xuXG4gIC8vIGFsbCBkb2N1bWVudHMgYmVpbmcgbGlzdGVuZWQgdG9cbiAgZG9jdW1lbnRzOiBBcnJheTx7IGRvYzogRG9jdW1lbnQsIG9wdGlvbnM6IGFueSB9PiA9IFtdXG5cbiAgX3BsdWdpbnM6IFBsdWdpbltdID0gW11cbiAgX3BsdWdpbk1hcDogeyBbaWQ6IHN0cmluZ106IFBsdWdpbiB9ID0ge31cblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzIGFzIFNjb3BlXG5cbiAgICA7KHRoaXMgYXMgeyBJbnRlcmFjdGFibGU6IHR5cGVvZiBJbnRlcmFjdGFibGVCYXNlIH0pLkludGVyYWN0YWJsZSA9IGNsYXNzIEludGVyYWN0YWJsZSBleHRlbmRzIEludGVyYWN0YWJsZUJhc2UgaW1wbGVtZW50cyBJbnRlcmFjdGFibGVCYXNlIHtcbiAgICAgIGdldCBfZGVmYXVsdHMgKCkgeyByZXR1cm4gc2NvcGUuZGVmYXVsdHMgfVxuXG4gICAgICBzZXQgKG9wdGlvbnM6IGFueSkge1xuICAgICAgICBzdXBlci5zZXQob3B0aW9ucylcblxuICAgICAgICBzY29wZS5pbnRlcmFjdGFibGVzLnNpZ25hbHMuZmlyZSgnc2V0Jywge1xuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgaW50ZXJhY3RhYmxlOiB0aGlzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9XG5cbiAgICAgIHVuc2V0ICgpIHtcbiAgICAgICAgc3VwZXIudW5zZXQoKVxuICAgICAgICBmb3IgKGxldCBpID0gc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5saXN0W2ldXG5cbiAgICAgICAgICBpZiAoaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlID09PSB0aGlzKSB7XG4gICAgICAgICAgICBpbnRlcmFjdGlvbi5zdG9wKClcbiAgICAgICAgICAgIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLmZpcmUoJ2Rlc3Ryb3knLCB7IGludGVyYWN0aW9uIH0pXG4gICAgICAgICAgICBpbnRlcmFjdGlvbi5kZXN0cm95KClcblxuICAgICAgICAgICAgaWYgKHNjb3BlLmludGVyYWN0aW9ucy5saXN0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3Quc3BsaWNlKGksIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUuaW50ZXJhY3RhYmxlcy5zaWduYWxzLmZpcmUoJ3Vuc2V0JywgeyBpbnRlcmFjdGFibGU6IHRoaXMgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbldpbmRvd1VubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHRoaXMucmVtb3ZlRG9jdW1lbnQoZXZlbnQudGFyZ2V0IGFzIERvY3VtZW50KVxuXG4gIGluaXQgKHdpbmRvdzogV2luZG93KSB7XG4gICAgcmV0dXJuIGluaXRTY29wZSh0aGlzLCB3aW5kb3cpXG4gIH1cblxuICBwbHVnaW5Jc0luc3RhbGxlZCAocGx1Z2luOiBQbHVnaW4pIHtcbiAgICByZXR1cm4gdGhpcy5fcGx1Z2luTWFwW3BsdWdpbi5pZF0gfHwgdGhpcy5fcGx1Z2lucy5pbmRleE9mKHBsdWdpbikgIT09IC0xXG4gIH1cblxuICB1c2VQbHVnaW4gKHBsdWdpbjogUGx1Z2luLCBvcHRpb25zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGlmICh0aGlzLnBsdWdpbklzSW5zdGFsbGVkKHBsdWdpbikpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKHBsdWdpbi5pZCkgeyB0aGlzLl9wbHVnaW5NYXBbcGx1Z2luLmlkXSA9IHBsdWdpbiB9XG5cbiAgICBwbHVnaW4uaW5zdGFsbCh0aGlzLCBvcHRpb25zKVxuICAgIHRoaXMuX3BsdWdpbnMucHVzaChwbHVnaW4pXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgYWRkRG9jdW1lbnQgKGRvYzogRG9jdW1lbnQsIG9wdGlvbnM/OiBhbnkpOiB2b2lkIHwgZmFsc2Uge1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgZG9jdW1lbnQgaXMgYWxyZWFkeSBrbm93blxuICAgIGlmICh0aGlzLmdldERvY0luZGV4KGRvYykgIT09IC0xKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgICBjb25zdCB3aW5kb3cgPSB3aW4uZ2V0V2luZG93KGRvYylcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zID8gdXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zKSA6IHt9XG5cbiAgICB0aGlzLmRvY3VtZW50cy5wdXNoKHsgZG9jLCBvcHRpb25zIH0pXG4gICAgZXZlbnRzLmRvY3VtZW50cy5wdXNoKGRvYylcblxuICAgIC8vIGRvbid0IGFkZCBhbiB1bmxvYWQgZXZlbnQgZm9yIHRoZSBtYWluIGRvY3VtZW50XG4gICAgLy8gc28gdGhhdCB0aGUgcGFnZSBtYXkgYmUgY2FjaGVkIGluIGJyb3dzZXIgaGlzdG9yeVxuICAgIGlmIChkb2MgIT09IHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgIGV2ZW50cy5hZGQod2luZG93LCAndW5sb2FkJywgdGhpcy5vbldpbmRvd1VubG9hZClcbiAgICB9XG5cbiAgICB0aGlzLnNpZ25hbHMuZmlyZSgnYWRkLWRvY3VtZW50JywgeyBkb2MsIHdpbmRvdywgc2NvcGU6IHRoaXMsIG9wdGlvbnMgfSlcbiAgfVxuXG4gIHJlbW92ZURvY3VtZW50IChkb2M6IERvY3VtZW50KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldERvY0luZGV4KGRvYylcblxuICAgIGNvbnN0IHdpbmRvdyA9IHdpbi5nZXRXaW5kb3coZG9jKVxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmRvY3VtZW50c1tpbmRleF0ub3B0aW9uc1xuXG4gICAgZXZlbnRzLnJlbW92ZSh3aW5kb3csICd1bmxvYWQnLCB0aGlzLm9uV2luZG93VW5sb2FkKVxuXG4gICAgdGhpcy5kb2N1bWVudHMuc3BsaWNlKGluZGV4LCAxKVxuICAgIGV2ZW50cy5kb2N1bWVudHMuc3BsaWNlKGluZGV4LCAxKVxuXG4gICAgdGhpcy5zaWduYWxzLmZpcmUoJ3JlbW92ZS1kb2N1bWVudCcsIHsgZG9jLCB3aW5kb3csIHNjb3BlOiB0aGlzLCBvcHRpb25zIH0pXG4gIH1cblxuICBnZXREb2NJbmRleCAoZG9jOiBEb2N1bWVudCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb2N1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50c1tpXS5kb2MgPT09IGRvYykge1xuICAgICAgICByZXR1cm4gaVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAtMVxuICB9XG5cbiAgZ2V0RG9jT3B0aW9ucyAoZG9jOiBEb2N1bWVudCkge1xuICAgIGNvbnN0IGRvY0luZGV4ID0gdGhpcy5nZXREb2NJbmRleChkb2MpXG5cbiAgICByZXR1cm4gZG9jSW5kZXggPT09IC0xID8gbnVsbCA6IHRoaXMuZG9jdW1lbnRzW2RvY0luZGV4XS5vcHRpb25zXG4gIH1cblxuICBub3cgKCkge1xuICAgIHJldHVybiAoKHRoaXMud2luZG93IGFzIGFueSkuRGF0ZSBhcyB0eXBlb2YgRGF0ZSB8fCBEYXRlKS5ub3coKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0U2NvcGUgKHNjb3BlOiBTY29wZSwgd2luZG93OiBXaW5kb3cpIHtcbiAgd2luLmluaXQod2luZG93KVxuICBkb21PYmplY3RzLmluaXQod2luZG93KVxuICBicm93c2VyLmluaXQod2luZG93KVxuICByYWYuaW5pdCh3aW5kb3cpXG4gIGV2ZW50cy5pbml0KHdpbmRvdylcblxuICBzY29wZS51c2VQbHVnaW4oaW50ZXJhY3Rpb25zKVxuICBzY29wZS5kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxuICBzY29wZS53aW5kb3cgPSB3aW5kb3dcblxuICByZXR1cm4gc2NvcGVcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=scope.js.map \ No newline at end of file diff --git a/packages/core/scope.js.map b/packages/core/scope.js.map new file mode 100644 index 000000000..7d6e883ec --- /dev/null +++ b/packages/core/scope.js.map @@ -0,0 +1,88 @@ +{ + "version": 3, + "sources": [ + "scope.ts" + ], + "names": [ + "domObjects", + "utils", + "defaults", + "Eventable", + "InteractableBase", + "InteractableSet", + "InteractEvent", + "interactions", + "win", + "browser", + "raf", + "events", + "ActionName", + "createScope", + "Scope", + "constructor", + "Math", + "floor", + "random", + "clone", + "names", + "methodDict", + "eventTypes", + "list", + "map", + "event", + "removeDocument", + "target", + "scope", + "Interactable", + "_defaults", + "set", + "options", + "fire", + "interactable", + "unset", + "i", + "length", + "interaction", + "stop", + "destroy", + "splice", + "addListeners", + "id", + "listenerMaps", + "push", + "name", + "arg", + "listener", + "init", + "window", + "initScope", + "pluginIsInstalled", + "plugin", + "_plugins", + "indexOf", + "usePlugin", + "install", + "listeners", + "before", + "index", + "otherId", + "addDocument", + "doc", + "getDocIndex", + "getWindow", + "extend", + "documents", + "document", + "add", + "onWindowUnload", + "remove", + "getDocOptions", + "docIndex", + "now", + "Date" + ], + "mappings": "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", + "sourcesContent": [ + "import domObjects from '../utils/domObjects'\nimport * as utils from '../utils/index'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractableSet from './InteractableSet'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase, options: Interact.Options }\n 'interactions:destroy': { interaction: Interact.Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\ntype ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options?: { [index: string]: any }\n}\n\nconst {\n win,\n browser,\n raf,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string\n install? (scope: Scope, options?: any): void\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n listenerMaps: Array<{\n map: ListenerMap\n id: string\n }> = []\n\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\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: Interact.Options) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable === this) {\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n }\n\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners (map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire (name: T, arg: SignalArgs[T]): void | false {\n for (const { map: { [name]: listener } } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) { this._plugins.map[plugin.id] = plugin }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n\n for (; index < this.listenerMaps.length; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (otherId === plugin.before) { break }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n }\n else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { 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.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now () {\n return ((this.window as any).Date as typeof Date || Date).now()\n }\n}\n\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n scope.usePlugin(interactions)\n scope.document = window.document\n scope.window = window\n\n return scope\n}\n" + ] +} \ No newline at end of file diff --git a/packages/core/scope.spec.js b/packages/core/scope.spec.js deleted file mode 100644 index 763e667a2..000000000 --- a/packages/core/scope.spec.js +++ /dev/null @@ -1,14 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from './tests/_helpers'; -test('scope', t => { - const { scope, interactable, interaction, event, } = helpers.testEnv(); - interactable.options.test = { enabled: true }; - interaction.pointerDown(event, event, scope.document.body); - interaction.start({ name: 'test' }, interactable, scope.document.body); - const started = interaction._interacting; - interactable.unset(); - const stopped = !interaction._interacting; - t.ok(started && stopped, 'interaction is stopped on interactable.unset()'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjb3BlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQTtBQUUzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2hCLE1BQU0sRUFDSixLQUFLLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEdBQ04sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBRXBCO0lBQUMsWUFBWSxDQUFDLE9BQWUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFFdkQsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDMUQsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUV0RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFBO0lBRXhDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUVwQixNQUFNLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUE7SUFFekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxFQUFFLGdEQUFnRCxDQUFDLENBQUE7SUFFMUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi90ZXN0cy9faGVscGVycydcblxudGVzdCgnc2NvcGUnLCB0ID0+IHtcbiAgY29uc3Qge1xuICAgIHNjb3BlLFxuICAgIGludGVyYWN0YWJsZSxcbiAgICBpbnRlcmFjdGlvbixcbiAgICBldmVudCxcbiAgfSA9IGhlbHBlcnMudGVzdEVudigpXG5cbiAgOyhpbnRlcmFjdGFibGUub3B0aW9ucyBhcyBhbnkpLnRlc3QgPSB7IGVuYWJsZWQ6IHRydWUgfVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKGV2ZW50LCBldmVudCwgc2NvcGUuZG9jdW1lbnQuYm9keSlcbiAgaW50ZXJhY3Rpb24uc3RhcnQoeyBuYW1lOiAndGVzdCcgfSwgaW50ZXJhY3RhYmxlLCBzY29wZS5kb2N1bWVudC5ib2R5KVxuXG4gIGNvbnN0IHN0YXJ0ZWQgPSBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmdcblxuICBpbnRlcmFjdGFibGUudW5zZXQoKVxuXG4gIGNvbnN0IHN0b3BwZWQgPSAhaW50ZXJhY3Rpb24uX2ludGVyYWN0aW5nXG5cbiAgdC5vayhzdGFydGVkICYmIHN0b3BwZWQsICdpbnRlcmFjdGlvbiBpcyBzdG9wcGVkIG9uIGludGVyYWN0YWJsZS51bnNldCgpJylcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/core/tests/_helpers.d.ts b/packages/core/tests/_helpers.d.ts index 7bfb86c53..8650b2dcb 100644 --- a/packages/core/tests/_helpers.d.ts +++ b/packages/core/tests/_helpers.d.ts @@ -1,4 +1,4 @@ -import { MockCoords } from '@interactjs/utils/pointerUtils'; +import { MockCoords } from '../../utils/pointerUtils'; export declare function unique(): number; export declare function uniqueProps(obj: any): void; export declare function newCoordsSet(n?: number): { @@ -59,10 +59,8 @@ export declare function newCoordsSet(n?: 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: T, props: K[]): Pick; +export declare function mockScope(options?: any): import("@interactjs/core/scope").Scope; +export declare function getProps(src: T, props: K[]): Pick; export declare function testEnv({ plugins, target, rect, }?: { plugins?: Interact.Plugin[]; target?: T; @@ -87,7 +85,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & MouseEvent) | ({ + } & MouseEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -101,7 +99,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & PointerEvent) | ({ + } & MouseEvent & PointerEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -115,7 +113,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & TouchEvent) | ({ + } & MouseEvent & import("../../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -129,7 +127,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & import("@interactjs/core/InteractEvent").InteractEvent) | ({ + } & MouseEvent & TouchEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -143,7 +141,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent) | ({ + } & Touch & MouseEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -157,7 +155,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent & PointerEvent) | ({ + } & Touch & PointerEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -171,7 +169,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent & TouchEvent) | ({ + } & Touch & import("../../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -185,7 +183,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent & import("@interactjs/core/InteractEvent").InteractEvent) | ({ + } & Touch & TouchEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -227,7 +225,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & PointerEvent & TouchEvent) | ({ + } & PointerEvent & import("../../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -241,7 +239,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & PointerEvent & import("@interactjs/core/InteractEvent").InteractEvent) | ({ + } & PointerEvent & TouchEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -255,7 +253,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent & MouseEvent) | ({ + } & import("../../types/types").InteractEvent & MouseEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -269,7 +267,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent & PointerEvent) | ({ + } & import("../../types/types").InteractEvent & PointerEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -283,7 +281,7 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent & TouchEvent) | ({ + } & import("../../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -297,6 +295,6 @@ export declare function testEnv({ plugi readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent); + } & import("../../types/types").InteractEvent & TouchEvent); }; export declare function timeout(n: any): Promise; diff --git a/packages/core/tests/_helpers.js b/packages/core/tests/_helpers.js deleted file mode 100644 index 29c29bf53..000000000 --- a/packages/core/tests/_helpers.js +++ /dev/null @@ -1,132 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -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) => { - if (prop in src) { - acc[prop] = src[prop]; - } - return acc; - }, {}); -} -export function testEnv({ plugins = [], target, rect = { top: 0, left: 0, bottom: 0, right: 0 }, } = {}) { - const scope = mockScope(); - for (const plugin of plugins) { - scope.usePlugin(plugin); - } - if (!target) { - target = scope.document.body; - } - const interaction = scope.interactions.new({}); - const interactable = scope.interactables.new(target); - const coords = utils.pointer.newCoords(); - coords.target = target; - const event = utils.pointer.coordsToEvent(coords); - interactable.rectChecker(() => ({ ...rect })); - return { - scope, - interaction, - target, - interactable, - coords, - event, - }; -} -export function timeout(n) { - return new Promise(resolve => setTimeout(resolve, n)); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJfaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ25ELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFFMUMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFdEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBO0FBRWYsTUFBTSxVQUFVLE1BQU07SUFDcEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUUsR0FBRztJQUM5QixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRTtRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLFNBQVE7U0FBRTtRQUUzQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtTQUN2QjthQUNJO1lBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtTQUN4QjtLQUNGO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUUsQ0FBQyxHQUFHLENBQUM7SUFDakMsT0FBTztRQUNMLEtBQUssRUFBRTtZQUNMLElBQUksRUFBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsTUFBTSxFQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENB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QyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFnQixDQUFBO0lBRXRELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3RCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWpELFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRTdDLE9BQU87UUFDTCxLQUFLO1FBQ0wsV0FBVztRQUNYLE1BQU07UUFDTixZQUFZO1FBQ1osTUFBTTtRQUNOLEtBQUs7S0FDTixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUUsQ0FBQztJQUN4QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuaW1wb3J0IHsgZG9jIH0gZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L2RvbWF0b3InXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcbmltcG9ydCB7IE1vY2tDb29yZHMgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9wb2ludGVyVXRpbHMnXG5pbXBvcnQgU2lnbmFscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9TaWduYWxzJ1xuaW1wb3J0IEV2ZW50YWJsZSBmcm9tICcuLi9FdmVudGFibGUnXG5pbXBvcnQgeyBjcmVhdGVTY29wZSB9IGZyb20gJy4uL3Njb3BlJ1xuXG5sZXQgY291bnRlciA9IDBcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZSAoKSB7XG4gIHJldHVybiAoY291bnRlcisrKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlUHJvcHMgKG9iaikge1xuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsgY29udGludWUgfVxuXG4gICAgaWYgKHV0aWxzLmlzLm9iamVjdChvYmopKSB7XG4gICAgICB1bmlxdWVQcm9wcyhvYmpbcHJvcF0pXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb2JqW3Byb3BdID0gKGNvdW50ZXIrKylcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0Nvb3Jkc1NldCAobiA9IDApIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDoge1xuICAgICAgcGFnZSAgICAgOiB7IHg6IG4rKywgeTogbisrIH0sXG4gICAgICBjbGllbnQgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIHRpbWVTdGFtcDogbisrLFxuICAgIH0sXG4gICAgY3VyOiB7XG4gICAgICBwYWdlICAgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIGNsaWVudCAgIDogeyB4OiBuKyssIHk6IG4rKyB9LFxuICAgICAgdGltZVN0YW1wOiBuKyssXG4gICAgfSxcbiAgICBwcmV2OiB7XG4gICAgICBwYWdlICAgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIGNsaWVudCAgIDogeyB4OiBuKyssIHk6IG4rKyB9LFxuICAgICAgdGltZVN0YW1wOiBuKyssXG4gICAgfSxcbiAgICBkZWx0YToge1xuICAgICAgcGFnZSAgICAgOiB7IHg6IG4rKywgeTogbisrIH0sXG4gICAgICBjbGllbnQgICA6IHsgeDogbisrLCB5OiBuKysgfSxcbiAgICAgIHRpbWVTdGFtcDogbisrLFxuICAgIH0sXG4gICAgdmVsb2NpdHk6IHtcbiAgICAgIHBhZ2UgICAgIDogeyB4OiBuKyssIHk6IG4rKyB9LFxuICAgICAgY2xpZW50ICAgOiB7IHg6IG4rKywgeTogbisrIH0sXG4gICAgICB0aW1lU3RhbXA6IG4rKyxcbiAgICB9LFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdQb2ludGVyIChuID0gNTApIHtcbiAgcmV0dXJuIHtcbiAgICBwb2ludGVySWQ6IG4rKyxcbiAgICBwYWdlWDogbisrLFxuICAgIHBhZ2VZOiBuKyssXG4gICAgY2xpZW50WDogbisrLFxuICAgIGNsaWVudFk6IG4rKyxcbiAgfSBhcyBJbnRlcmFjdC5Qb2ludGVyVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Njb3BlIChvcHRpb25zID0ge30gYXMgYW55KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gb3B0aW9ucy5kb2N1bWVudCB8fCBkb2NcbiAgY29uc3Qgd2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXdcblxuICBjb25zdCBzY29wZTogYW55ID0gY3JlYXRlU2NvcGUoKS5pbml0KHdpbmRvdylcblxuICBzY29wZS5pbnRlcmFjdCA9IE9iamVjdC5hc3NpZ24oKCkgPT4ge30sIHsgdXNlICgpIHt9IH0pIGFzIGFueVxuXG4gIHJldHVybiBzY29wZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NpZ25hbHMgKCkge1xuICByZXR1cm4ge1xuICAgIG9uICgpIHt9LFxuICAgIG9mZiAoKSB7fSxcbiAgICBmaXJlICgpIHt9LFxuICB9IGFzIHVua25vd24gYXMgYW55XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50ZXJhY3RhYmxlIChwcm9wcyA9IHt9KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHtcbiAgICAgIF9zaWduYWxzOiBuZXcgU2lnbmFscygpLFxuICAgICAgX2FjdGlvbnM6IHtcbiAgICAgICAgbmFtZXM6IFtdLFxuICAgICAgICBtZXRob2REaWN0OiB7fSxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGRlbHRhU291cmNlOiAncGFnZScsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiB7fSxcbiAgICAgIGV2ZW50czogbmV3IEV2ZW50YWJsZSgpLFxuICAgICAgZ2V0UmVjdCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRcbiAgICAgICAgICA/IHV0aWxzLmRvbS5nZXRFbGVtZW50Q2xpZW50UmVjdCh0aGlzLmVsZW1lbnQpXG4gICAgICAgICAgOiB7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9XG4gICAgICB9LFxuICAgICAgZmlyZSAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5ldmVudHMuZmlyZShldmVudClcbiAgICAgIH0sXG4gICAgfSxcbiAgICBwcm9wcykgYXMgYW55XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wczxUIGV4dGVuZHMge30sIEsgZXh0ZW5kcyBrZXlvZiBUPiAoc3JjOiBULCBwcm9wczogS1tdKSB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKGFjYywgcHJvcCkgPT4ge1xuICAgIGlmIChwcm9wIGluIHNyYykge1xuICAgICAgYWNjW3Byb3BdID0gc3JjW3Byb3BdXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyBQaWNrPFQsIEs+KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdEVudjxUIGV4dGVuZHMgSW50ZXJhY3QuVGFyZ2V0ID0gSFRNTEVsZW1lbnQ+ICh7XG4gIHBsdWdpbnMgPSBbXSxcbiAgdGFyZ2V0LFxuICByZWN0ID0geyAgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwICB9LFxufToge1xuICBwbHVnaW5zPzogSW50ZXJhY3QuUGx1Z2luW11cbiAgdGFyZ2V0PzogVFxuICByZWN0PzogSW50ZXJhY3QuUmVjdFxufSA9IHt9KSB7XG4gIGNvbnN0IHNjb3BlOiBJbnRlcmFjdC5TY29wZSA9IG1vY2tTY29wZSgpXG5cbiAgZm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuICAgIHNjb3BlLnVzZVBsdWdpbihwbHVnaW4pXG4gIH1cblxuICBpZiAoIXRhcmdldCkge1xuICAgICh0YXJnZXQgYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudCkgPSBzY29wZS5kb2N1bWVudC5ib2R5XG4gIH1cblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KHRhcmdldClcbiAgY29uc3QgY29vcmRzID0gdXRpbHMucG9pbnRlci5uZXdDb29yZHMoKSBhcyBNb2NrQ29vcmRzXG5cbiAgY29vcmRzLnRhcmdldCA9IHRhcmdldFxuICBjb25zdCBldmVudCA9IHV0aWxzLnBvaW50ZXIuY29vcmRzVG9FdmVudChjb29yZHMpXG5cbiAgaW50ZXJhY3RhYmxlLnJlY3RDaGVja2VyKCgpID0+ICh7IC4uLnJlY3QgfSkpXG5cbiAgcmV0dXJuIHtcbiAgICBzY29wZSxcbiAgICBpbnRlcmFjdGlvbixcbiAgICB0YXJnZXQsXG4gICAgaW50ZXJhY3RhYmxlLFxuICAgIGNvb3JkcyxcbiAgICBldmVudCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZW91dCAobikge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG4pKVxufVxuIl19 \ No newline at end of file diff --git a/packages/dev-tools/devTools.spec.js b/packages/dev-tools/devTools.spec.js deleted file mode 100644 index 0f5867c37..000000000 --- a/packages/dev-tools/devTools.spec.js +++ /dev/null @@ -1,64 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import { drag, resize } from '@interactjs/actions'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import * as utils from '@interactjs/utils'; -import devTools from './'; -const { checks, links, prefix } = devTools; -const checkMap = checks.reduce((acc, check) => { - acc[check.name] = check; - return acc; -}, {}); -test('devTools', t => { - const scope = helpers.mockScope(); - const logs = []; - function log(args, type) { - logs.push({ args, type }); - } - scope.usePlugin(devTools, { - logger: { - warn(...args) { log(args, 'warn'); }, - log(...args) { log(args, 'log'); }, - error(...args) { log(args, 'error'); }, - }, - }); - scope.usePlugin(drag); - scope.usePlugin(resize); - const element = scope.document.body.appendChild(scope.document.createElement('div')); - const event = utils.pointer.coordsToEvent(utils.pointer.newCoords()); - const interactable = scope.interactables.new(element) - .draggable(true) - .resizable({ onmove: () => { } }); - const interaction = scope.interactions.new({}); - interaction.pointerDown(event, event, element); - interaction.start({ name: 'drag' }, interactable, element); - t.deepEqual(logs[0], { args: [prefix + checkMap.touchAction.text, element, links.touchAction], type: 'warn' }, 'warning about missing touchAction'); - t.deepEqual(logs[1], { args: [prefix + checkMap.noListeners.text, 'drag', interactable], type: 'warn' }, 'warning about missing move listeners'); - interaction.stop(); - // resolve touchAction - element.style.touchAction = 'none'; - // resolve missing listeners - interactable.on('dragmove', () => { }); - interaction.start({ name: 'resize' }, interactable, element); - interaction.pointerMove(event, event, element); - interaction.end(); - t.deepEqual(logs[2], { args: [prefix + checkMap.boxSizing.text, element, links.boxSizing], type: 'warn' }, 'warning about resizing without "box-sizing: none"'); - // resolve boxSizing - element.style.boxSizing = 'border-box'; - interaction.start({ name: 'resize' }, interactable, element); - interaction.move({ event, pointer: event }); - interaction.end(); - interaction.start({ name: 'drag' }, interactable, element); - interaction.pointerMove(event, event, element); - interaction.end(); - t.equal(logs.length, 3, 'no warnings when issues are resolved'); - // re-introduce boxSizing issue - element.style.boxSizing = ''; - interaction.start({ name: 'drag' }, interactable, element); - interaction.end(); - interactable.options.devTools.ignore = { boxSizing: true }; - interaction.start({ name: 'drag' }, interactable, element); - interaction.end(); - t.equal(logs.length, 3, 'no warning with options.devTools.ignore'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2VG9vbHMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRldlRvb2xzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNsRCxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFDMUMsT0FBTyxRQUEyQixNQUFNLElBQUksQ0FBQTtBQUU1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUE7QUFDMUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUM1QyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUN2QixPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMsRUFBRSxFQUE4QixDQUFDLENBQUE7QUFFbEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuQixNQUFNLEtBQUssR0FBbUIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ2pELE1BQU0sSUFBSSxHQUErQyxFQUFFLENBQUE7SUFFM0QsU0FBUyxHQUFHLENBQUUsSUFBSSxFQUFFLElBQUk7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtRQUN4QixNQUFNLEVBQUU7WUFDTixJQUFJLENBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUM7WUFDcEMsR0FBRyxDQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBRSxHQUFHLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBLENBQUMsQ0FBQztTQUN2QztLQUNGLENBQUMsQ0FBQTtJQUVGLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDckIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUV2QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUNwRixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDcEUsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1NBQ2xELFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDZixTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNsQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUU5QyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDOUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDMUQsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQ3hGLG1DQUFtQyxDQUFDLENBQUE7SUFFdEMsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFDbEYsc0NBQXNDLENBQUMsQ0FBQTtJQUV6QyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFbEIsc0JBQXNCO0lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQTtJQUNsQyw0QkFBNEI7SUFDNUIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUE7SUFFckMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDNUQsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzlDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUVqQixDQUFDLENBQUMsU0FBUyxDQUNULElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFDcEYsbURBQW1ELENBQUMsQ0FBQTtJQUV0RCxvQkFBb0I7SUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFBO0lBRXRDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzVELFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDM0MsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBRWpCLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFELFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM5QyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFakIsQ0FBQyxDQUFDLEtBQUssQ0FDTCxJQUFJLENBQUMsTUFBTSxFQUNYLENBQUMsRUFDRCxzQ0FBc0MsQ0FBQyxDQUFBO0lBRXpDLCtCQUErQjtJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFNUIsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDMUQsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBRWpCLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUUxRCxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMxRCxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFakIsQ0FBQyxDQUFDLEtBQUssQ0FDTCxJQUFJLENBQUMsTUFBTSxFQUNYLENBQUMsRUFDRCx5Q0FBeUMsQ0FBQyxDQUFBO0lBRTVDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgeyBkcmFnLCByZXNpemUgfSBmcm9tICdAaW50ZXJhY3Rqcy9hY3Rpb25zJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgZGV2VG9vbHMsIHsgQ2hlY2ssIExvZ2dlciB9IGZyb20gJy4vJ1xuXG5jb25zdCB7IGNoZWNrcywgbGlua3MsIHByZWZpeCB9ID0gZGV2VG9vbHNcbmNvbnN0IGNoZWNrTWFwID0gY2hlY2tzLnJlZHVjZSgoYWNjLCBjaGVjaykgPT4ge1xuICBhY2NbY2hlY2submFtZV0gPSBjaGVja1xuICByZXR1cm4gYWNjXG59LCB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBDaGVja30pXG5cbnRlc3QoJ2RldlRvb2xzJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlOiBJbnRlcmFjdC5TY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcbiAgY29uc3QgbG9nczogQXJyYXk8eyBhcmdzOiBhbnlbXSwgdHlwZToga2V5b2YgTG9nZ2VyIH0+ID0gW11cblxuICBmdW5jdGlvbiBsb2cgKGFyZ3MsIHR5cGUpIHtcbiAgICBsb2dzLnB1c2goeyBhcmdzLCB0eXBlIH0pXG4gIH1cblxuICBzY29wZS51c2VQbHVnaW4oZGV2VG9vbHMsIHtcbiAgICBsb2dnZXI6IHtcbiAgICAgIHdhcm4gKC4uLmFyZ3MpIHsgbG9nKGFyZ3MsICd3YXJuJykgfSxcbiAgICAgIGxvZyAoLi4uYXJncykgeyBsb2coYXJncywgJ2xvZycpIH0sXG4gICAgICBlcnJvciAoLi4uYXJncykgeyBsb2coYXJncywgJ2Vycm9yJykgfSxcbiAgICB9LFxuICB9KVxuXG4gIHNjb3BlLnVzZVBsdWdpbihkcmFnKVxuICBzY29wZS51c2VQbHVnaW4ocmVzaXplKVxuXG4gIGNvbnN0IGVsZW1lbnQgPSBzY29wZS5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjb3BlLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKVxuICBjb25zdCBldmVudCA9IHV0aWxzLnBvaW50ZXIuY29vcmRzVG9FdmVudCh1dGlscy5wb2ludGVyLm5ld0Nvb3JkcygpKVxuICBjb25zdCBpbnRlcmFjdGFibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLm5ldyhlbGVtZW50KVxuICAgIC5kcmFnZ2FibGUodHJ1ZSlcbiAgICAucmVzaXphYmxlKHsgb25tb3ZlOiAoKSA9PiB7fSB9KVxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24oZXZlbnQsIGV2ZW50LCBlbGVtZW50KVxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdkcmFnJyB9LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG4gIHQuZGVlcEVxdWFsKFxuICAgIGxvZ3NbMF0sXG4gICAgeyBhcmdzOiBbcHJlZml4ICsgY2hlY2tNYXAudG91Y2hBY3Rpb24udGV4dCwgZWxlbWVudCwgbGlua3MudG91Y2hBY3Rpb25dLCB0eXBlOiAnd2FybicgfSxcbiAgICAnd2FybmluZyBhYm91dCBtaXNzaW5nIHRvdWNoQWN0aW9uJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBsb2dzWzFdLFxuICAgIHsgYXJnczogW3ByZWZpeCArIGNoZWNrTWFwLm5vTGlzdGVuZXJzLnRleHQsICdkcmFnJywgaW50ZXJhY3RhYmxlXSwgdHlwZTogJ3dhcm4nIH0sXG4gICAgJ3dhcm5pbmcgYWJvdXQgbWlzc2luZyBtb3ZlIGxpc3RlbmVycycpXG5cbiAgaW50ZXJhY3Rpb24uc3RvcCgpXG5cbiAgLy8gcmVzb2x2ZSB0b3VjaEFjdGlvblxuICBlbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uID0gJ25vbmUnXG4gIC8vIHJlc29sdmUgbWlzc2luZyBsaXN0ZW5lcnNcbiAgaW50ZXJhY3RhYmxlLm9uKCdkcmFnbW92ZScsICgpID0+IHt9KVxuXG4gIGludGVyYWN0aW9uLnN0YXJ0KHsgbmFtZTogJ3Jlc2l6ZScgfSwgaW50ZXJhY3RhYmxlLCBlbGVtZW50KVxuICBpbnRlcmFjdGlvbi5wb2ludGVyTW92ZShldmVudCwgZXZlbnQsIGVsZW1lbnQpXG4gIGludGVyYWN0aW9uLmVuZCgpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgbG9nc1syXSxcbiAgICB7IGFyZ3M6IFtwcmVmaXggKyBjaGVja01hcC5ib3hTaXppbmcudGV4dCwgZWxlbWVudCwgbGlua3MuYm94U2l6aW5nXSwgdHlwZTogJ3dhcm4nIH0sXG4gICAgJ3dhcm5pbmcgYWJvdXQgcmVzaXppbmcgd2l0aG91dCBcImJveC1zaXppbmc6IG5vbmVcIicpXG5cbiAgLy8gcmVzb2x2ZSBib3hTaXppbmdcbiAgZWxlbWVudC5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcblxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdyZXNpemUnIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgaW50ZXJhY3Rpb24ubW92ZSh7IGV2ZW50LCBwb2ludGVyOiBldmVudCB9KVxuICBpbnRlcmFjdGlvbi5lbmQoKVxuXG4gIGludGVyYWN0aW9uLnN0YXJ0KHsgbmFtZTogJ2RyYWcnIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgaW50ZXJhY3Rpb24ucG9pbnRlck1vdmUoZXZlbnQsIGV2ZW50LCBlbGVtZW50KVxuICBpbnRlcmFjdGlvbi5lbmQoKVxuXG4gIHQuZXF1YWwoXG4gICAgbG9ncy5sZW5ndGgsXG4gICAgMyxcbiAgICAnbm8gd2FybmluZ3Mgd2hlbiBpc3N1ZXMgYXJlIHJlc29sdmVkJylcblxuICAvLyByZS1pbnRyb2R1Y2UgYm94U2l6aW5nIGlzc3VlXG4gIGVsZW1lbnQuc3R5bGUuYm94U2l6aW5nID0gJydcblxuICBpbnRlcmFjdGlvbi5zdGFydCh7IG5hbWU6ICdkcmFnJyB9LCBpbnRlcmFjdGFibGUsIGVsZW1lbnQpXG4gIGludGVyYWN0aW9uLmVuZCgpXG5cbiAgaW50ZXJhY3RhYmxlLm9wdGlvbnMuZGV2VG9vbHMuaWdub3JlID0geyBib3hTaXppbmc6IHRydWUgfVxuXG4gIGludGVyYWN0aW9uLnN0YXJ0KHsgbmFtZTogJ2RyYWcnIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcbiAgaW50ZXJhY3Rpb24uZW5kKClcblxuICB0LmVxdWFsKFxuICAgIGxvZ3MubGVuZ3RoLFxuICAgIDMsXG4gICAgJ25vIHdhcm5pbmcgd2l0aCBvcHRpb25zLmRldlRvb2xzLmlnbm9yZScpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/dev-tools/index.d.ts b/packages/dev-tools/index.d.ts index 4b00f23a0..3e37e09eb 100644 --- a/packages/dev-tools/index.d.ts +++ b/packages/dev-tools/index.d.ts @@ -40,6 +40,7 @@ declare function install(scope: Interact.Scope, { logger }?: { declare const defaultExport: { id: string; install: () => void; + listeners?: undefined; checks?: undefined; CheckName?: undefined; links?: undefined; @@ -47,6 +48,11 @@ declare const defaultExport: { } | { id: string; install: typeof install; + listeners: { + 'interactions:action-start': ({ interaction }: { + interaction: any; + }, scope: any) => void; + }; checks: Check[]; CheckName: typeof CheckName; links: { diff --git a/packages/dev-tools/index.js b/packages/dev-tools/index.js index b71c16e26..edf4fc621 100644 --- a/packages/dev-tools/index.js +++ b/packages/dev-tools/index.js @@ -1,115 +1,140 @@ /* eslint-disable no-console */ + /* global process */ -import domObjects from '@interactjs/utils/domObjects'; -import { parentNode } from '@interactjs/utils/domUtils'; -import extend from '@interactjs/utils/extend'; -import * as is from '@interactjs/utils/is'; -import win from '@interactjs/utils/window'; +import domObjects from "../utils/domObjects.js"; +import { parentNode } from "../utils/domUtils.js"; +import extend from "../utils/extend.js"; +import * as is from "../utils/is.js"; +import win from "../utils/window.js"; var CheckName; + (function (CheckName) { - CheckName["touchAction"] = ""; - CheckName["boxSizing"] = ""; - CheckName["noListeners"] = ""; + CheckName["touchAction"] = ""; + CheckName["boxSizing"] = ""; + CheckName["noListeners"] = ""; })(CheckName || (CheckName = {})); + const prefix = '[interact.js] '; const links = { - touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action', - boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing', + touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action', + boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing' }; -const isProduction = process.env.NODE_ENV === 'production'; -// eslint-disable-next-line no-restricted-syntax -function install(scope, { logger } = {}) { - const { interactions, Interactable, defaults, } = scope; - logger = logger || console; - interactions.signals.on('action-start', ({ interaction }) => { - for (const check of checks) { - const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]; - if (!(options && options.devTools && options.devTools.ignore[check.name]) && - check.perform(interaction)) { - logger.warn(prefix + check.text, ...check.getInfo(interaction)); - } - } - }); - defaults.base.devTools = { - ignore: {}, - }; - Interactable.prototype.devTools = function (options) { - if (options) { - extend(this.options.devTools, options); - return this; - } - return this.options.devTools; - }; +const isProduction = undefined === 'production'; // eslint-disable-next-line no-restricted-syntax + +function install(scope, { + logger +} = {}) { + const { + Interactable, + defaults + } = scope; + scope.logger = logger || console; + defaults.base.devTools = { + ignore: {} + }; + + Interactable.prototype.devTools = function (options) { + if (options) { + extend(this.options.devTools, options); + return this; + } + + return this.options.devTools; + }; } -const checks = [ - { - name: 'touchAction', - perform({ element }) { - return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/); - }, - getInfo({ element }) { - return [ - element, - links.touchAction, - ]; - }, - text: 'Consider adding CSS "touch-action: none" to this element\n', - }, - { - name: 'boxSizing', - perform(interaction) { - const { element } = interaction; - return interaction.prepared.name === 'resize' && - element instanceof domObjects.HTMLElement && - !hasStyle(element, 'boxSizing', /border-box/); - }, - text: 'Consider adding CSS "box-sizing: border-box" to this resizable element', - getInfo({ element }) { - return [ - element, - links.boxSizing, - ]; - }, - }, - { - name: 'noListeners', - perform(interaction) { - const actionName = interaction.prepared.name; - const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []; - return !moveListeners.length; - }, - getInfo(interaction) { - return [ - interaction.prepared.name, - interaction.interactable, - ]; - }, - text: 'There are no listeners set for this action', - }, -]; + +const checks = [{ + name: 'touchAction', + + perform({ + element + }) { + return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/); + }, + + getInfo({ + element + }) { + return [element, links.touchAction]; + }, + + text: 'Consider adding CSS "touch-action: none" to this element\n' +}, { + name: 'boxSizing', + + perform(interaction) { + const { + element + } = interaction; + return interaction.prepared.name === 'resize' && element instanceof domObjects.HTMLElement && !hasStyle(element, 'boxSizing', /border-box/); + }, + + text: 'Consider adding CSS "box-sizing: border-box" to this resizable element', + + getInfo({ + element + }) { + return [element, links.boxSizing]; + } + +}, { + name: 'noListeners', + + perform(interaction) { + const actionName = interaction.prepared.name; + const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []; + return !moveListeners.length; + }, + + getInfo(interaction) { + return [interaction.prepared.name, interaction.interactable]; + }, + + text: 'There are no listeners set for this action' +}]; + function hasStyle(element, prop, styleRe) { - return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop]); + return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop]); } + function parentHasStyle(element, prop, styleRe) { - let parent = element; - while (is.element(parent)) { - if (hasStyle(parent, prop, styleRe)) { - return true; - } - parent = parentNode(parent); + let parent = element; + + while (is.element(parent)) { + if (hasStyle(parent, prop, styleRe)) { + return true; } - return false; + + parent = parentNode(parent); + } + + return false; } + const id = 'dev-tools'; -const defaultExport = isProduction - ? { id, install: () => { } } - : { - id, - install, - checks, - CheckName, - links, - prefix, - }; +const defaultExport = isProduction ? { + id, + install: () => {} +} : { + id, + install, + listeners: { + 'interactions:action-start': ({ + interaction + }, scope) => { + for (const check of checks) { + const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]; + + if (!(options && options.devTools && options.devTools.ignore[check.name]) && check.perform(interaction)) { + scope.logger.warn(prefix + check.text, ...check.getInfo(interaction)); + } + } + } + }, + checks, + CheckName, + links, + prefix +}; export default defaultExport; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0Isb0JBQW9CO0FBQ3BCLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN2RCxPQUFPLE1BQU0sTUFBTSwwQkFBMEIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzFDLE9BQU8sR0FBRyxNQUFNLDBCQUEwQixDQUFBO0FBcUMxQyxJQUFLLFNBSUo7QUFKRCxXQUFLLFNBQVM7SUFDWiw2QkFBZ0IsQ0FBQTtJQUNoQiwyQkFBYyxDQUFBO0lBQ2QsNkJBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQUpJLFNBQVMsS0FBVCxTQUFTLFFBSWI7QUFFRCxNQUFNLE1BQU0sR0FBSSxnQkFBZ0IsQ0FBQTtBQUNoQyxNQUFNLEtBQUssR0FBRztJQUNaLFdBQVcsRUFBRSwrREFBK0Q7SUFDNUUsU0FBUyxFQUFFLDZEQUE2RDtDQUN6RSxDQUFBO0FBRUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFBO0FBRTFELGdEQUFnRDtBQUNoRCxTQUFTLE9BQU8sQ0FBRSxLQUFxQixFQUFFLEVBQUUsTUFBTSxLQUEwQixFQUFFO0lBQzNFLE1BQU0sRUFDSixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUNULE1BQU0sR0FBRyxNQUFNLElBQUksT0FBTyxDQUFBO0lBRTFCLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUMxRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtZQUMxQixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsWUFBWSxJQUFJ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QyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ3hGLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBRSxPQUF5QixFQUFFLElBQStCLEVBQUUsT0FBZTtJQUNsRyxJQUFJLE1BQU0sR0FBRyxPQUFzQixDQUFBO0lBRW5DLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN6QixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQzVCO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFBO0FBQ3RCLE1BQU0sYUFBYSxHQUFHLFlBQVk7SUFDaEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUU7SUFDM0IsQ0FBQyxDQUFDO1FBQ0EsRUFBRTtRQUNGLE9BQU87UUFDUCxNQUFNO1FBQ04sU0FBUztRQUNULEtBQUs7UUFDTCxNQUFNO0tBQ1AsQ0FBQTtBQUVILGVBQWUsYUFBYSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZ2xvYmFsIHByb2Nlc3MgKi9cbmltcG9ydCBkb21PYmplY3RzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2RvbU9iamVjdHMnXG5pbXBvcnQgeyBwYXJlbnROb2RlIH0gZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZG9tVXRpbHMnXG5pbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCAqIGFzIGlzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2lzJ1xuaW1wb3J0IHdpbiBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy93aW5kb3cnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgbG9nZ2VyOiBMb2dnZXJcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9kZWZhdWx0T3B0aW9ucycge1xuICBpbnRlcmZhY2UgQmFzZURlZmF1bHRzIHtcbiAgICBkZXZUb29scz86IERldlRvb2xzT3B0aW9uc1xuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RhYmxlIHtcbiAgICBkZXZUb29scz86IEludGVyYWN0Lk9wdGlvbk1ldGhvZDxEZXZUb29sc09wdGlvbnM+XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXZUb29sc09wdGlvbnMge1xuICBpZ25vcmU6IHsgW1AgaW4ga2V5b2YgdHlwZW9mIENoZWNrTmFtZV0/OiBib29sZWFuIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xuICB3YXJuOiAoLi4uYXJnczogYW55W10pID0+IHZvaWRcbiAgZXJyb3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZFxuICBsb2c6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrIHtcbiAgbmFtZTogc3RyaW5nXG4gIHRleHQ6IHN0cmluZ1xuICBwZXJmb3JtOiAoaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uKSA9PiBib29sZWFuXG4gIGdldEluZm86IChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pID0+IGFueVtdXG59XG5cbmVudW0gQ2hlY2tOYW1lIHtcbiAgdG91Y2hBY3Rpb24gPSAnJyxcbiAgYm94U2l6aW5nID0gJycsXG4gIG5vTGlzdGVuZXJzID0gJycsXG59XG5cbmNvbnN0IHByZWZpeCAgPSAnW2ludGVyYWN0LmpzXSAnXG5jb25zdCBsaW5rcyA9IHtcbiAgdG91Y2hBY3Rpb246ICdodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdG91Y2gtYWN0aW9uJyxcbiAgYm94U2l6aW5nOiAnaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JveC1zaXppbmcnLFxufVxuXG5jb25zdCBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuZnVuY3Rpb24gaW5zdGFsbCAoc2NvcGU6IEludGVyYWN0LlNjb3BlLCB7IGxvZ2dlciB9OiB7IGxvZ2dlcj86IExvZ2dlciB9ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9ucyxcbiAgICBJbnRlcmFjdGFibGUsXG4gICAgZGVmYXVsdHMsXG4gIH0gPSBzY29wZVxuICBsb2dnZXIgPSBsb2dnZXIgfHwgY29uc29sZVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhY3Rpb24tc3RhcnQnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUgJiYgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLm9wdGlvbnNbaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZV1cblxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMgJiYgb3B0aW9ucy5kZXZUb29scyAmJiBvcHRpb25zLmRldlRvb2xzLmlnbm9yZVtjaGVjay5uYW1lXSkgJiZcbiAgICAgICAgY2hlY2sucGVyZm9ybShpbnRlcmFjdGlvbilcbiAgICAgICkge1xuICAgICAgICBsb2dnZXIud2FybihwcmVmaXggKyBjaGVjay50ZXh0LCAuLi5jaGVjay5nZXRJbmZvKGludGVyYWN0aW9uKSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgZGVmYXVsdHMuYmFzZS5kZXZUb29scyA9IHtcbiAgICBpZ25vcmU6IHt9LFxuICB9XG5cbiAgSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5kZXZUb29scyA9IGZ1bmN0aW9uIChvcHRpb25zPykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBleHRlbmQodGhpcy5vcHRpb25zLmRldlRvb2xzLCBvcHRpb25zKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRldlRvb2xzXG4gIH1cbn1cblxuY29uc3QgY2hlY2tzOiBDaGVja1tdID0gW1xuICB7XG4gICAgbmFtZTogJ3RvdWNoQWN0aW9uJyxcbiAgICBwZXJmb3JtICh7IGVsZW1lbnQgfSkge1xuICAgICAgcmV0dXJuICFwYXJlbnRIYXNTdHlsZShlbGVtZW50LCAndG91Y2hBY3Rpb24nLCAvcGFuLXxwaW5jaHxub25lLylcbiAgICB9LFxuICAgIGdldEluZm8gKHsgZWxlbWVudCB9KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBsaW5rcy50b3VjaEFjdGlvbixcbiAgICAgIF1cbiAgICB9LFxuICAgIHRleHQ6ICdDb25zaWRlciBhZGRpbmcgQ1NTIFwidG91Y2gtYWN0aW9uOiBub25lXCIgdG8gdGhpcyBlbGVtZW50XFxuJyxcbiAgfSxcblxuICB7XG4gICAgbmFtZTogJ2JveFNpemluZycsXG4gICAgcGVyZm9ybSAoaW50ZXJhY3Rpb24pIHtcbiAgICAgIGNvbnN0IHsgZWxlbWVudCB9ID0gaW50ZXJhY3Rpb25cblxuICAgICAgcmV0dXJuIGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUgPT09ICdyZXNpemUnICYmXG4gICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBkb21PYmplY3RzLkhUTUxFbGVtZW50ICYmXG4gICAgICAgICFoYXNTdHlsZShlbGVtZW50LCAnYm94U2l6aW5nJywgL2JvcmRlci1ib3gvKVxuICAgIH0sXG4gICAgdGV4dDogJ0NvbnNpZGVyIGFkZGluZyBDU1MgXCJib3gtc2l6aW5nOiBib3JkZXItYm94XCIgdG8gdGhpcyByZXNpemFibGUgZWxlbWVudCcsXG4gICAgZ2V0SW5mbyAoeyBlbGVtZW50IH0pIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGxpbmtzLmJveFNpemluZyxcbiAgICAgIF1cbiAgICB9LFxuICB9LFxuXG4gIHtcbiAgICBuYW1lOiAnbm9MaXN0ZW5lcnMnLFxuICAgIHBlcmZvcm0gKGludGVyYWN0aW9uKSB7XG4gICAgICBjb25zdCBhY3Rpb25OYW1lID0gaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZVxuICAgICAgY29uc3QgbW92ZUxpc3RlbmVycyA9IGludGVyYWN0aW9uLmludGVyYWN0YWJsZS5ldmVudHMudHlwZXNbYCR7YWN0aW9uTmFtZX1tb3ZlYF0gfHwgW11cblxuICAgICAgcmV0dXJuICFtb3ZlTGlzdGVuZXJzLmxlbmd0aFxuICAgIH0sXG4gICAgZ2V0SW5mbyAoaW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGludGVyYWN0aW9uLnByZXBhcmVkLm5hbWUsXG4gICAgICAgIGludGVyYWN0aW9uLmludGVyYWN0YWJsZSxcbiAgICAgIF1cbiAgICB9LFxuICAgIHRleHQ6ICdUaGVyZSBhcmUgbm8gbGlzdGVuZXJzIHNldCBmb3IgdGhpcyBhY3Rpb24nLFxuICB9LFxuXVxuXG5mdW5jdGlvbiBoYXNTdHlsZSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3A6IGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb24sIHN0eWxlUmU6IFJlZ0V4cCkge1xuICByZXR1cm4gc3R5bGVSZS50ZXN0KGVsZW1lbnQuc3R5bGVbcHJvcF0gfHwgd2luLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW3Byb3BdKVxufVxuXG5mdW5jdGlvbiBwYXJlbnRIYXNTdHlsZSAoZWxlbWVudDogSW50ZXJhY3QuRWxlbWVudCwgcHJvcDoga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiwgc3R5bGVSZTogUmVnRXhwKSB7XG4gIGxldCBwYXJlbnQgPSBlbGVtZW50IGFzIEhUTUxFbGVtZW50XG5cbiAgd2hpbGUgKGlzLmVsZW1lbnQocGFyZW50KSkge1xuICAgIGlmIChoYXNTdHlsZShwYXJlbnQsIHByb3AsIHN0eWxlUmUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHBhcmVudCA9IHBhcmVudE5vZGUocGFyZW50KVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IGlkID0gJ2Rldi10b29scydcbmNvbnN0IGRlZmF1bHRFeHBvcnQgPSBpc1Byb2R1Y3Rpb25cbiAgPyB7IGlkLCBpbnN0YWxsOiAoKSA9PiB7fSB9XG4gIDoge1xuICAgIGlkLFxuICAgIGluc3RhbGwsXG4gICAgY2hlY2tzLFxuICAgIENoZWNrTmFtZSxcbiAgICBsaW5rcyxcbiAgICBwcmVmaXgsXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdEV4cG9ydFxuIl19 \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/dev-tools/index.js.map b/packages/dev-tools/index.js.map new file mode 100644 index 000000000..519752317 --- /dev/null +++ b/packages/dev-tools/index.js.map @@ -0,0 +1,63 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "domObjects", + "parentNode", + "extend", + "is", + "win", + "CheckName", + "prefix", + "links", + "touchAction", + "boxSizing", + "isProduction", + "install", + "scope", + "logger", + "Interactable", + "defaults", + "console", + "base", + "devTools", + "ignore", + "prototype", + "options", + "checks", + "name", + "perform", + "element", + "parentHasStyle", + "getInfo", + "text", + "interaction", + "prepared", + "HTMLElement", + "hasStyle", + "actionName", + "moveListeners", + "interactable", + "events", + "types", + "length", + "prop", + "styleRe", + "test", + "style", + "window", + "getComputedStyle", + "parent", + "id", + "defaultExport", + "listeners", + "check", + "warn" + ], + "mappings": "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", + "sourcesContent": [ + "/* eslint-disable no-console */\n/* global process */\nimport domObjects from '../utils/domObjects'\nimport { parentNode } from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\nimport win from '../utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools?: Interact.OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: string\n text: string\n perform: (interaction: Interact.Interaction) => boolean\n getInfo: (interaction: Interact.Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = '',\n boxSizing = '',\n noListeners = '',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\n// eslint-disable-next-line no-restricted-syntax\nfunction install (scope: Interact.Scope, { logger }: { logger?: Logger } = {}) {\n const {\n Interactable,\n defaults,\n } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n}\n\nconst checks: Check[] = [\n {\n name: 'touchAction',\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [\n element,\n links.touchAction,\n ]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: 'boxSizing',\n perform (interaction) {\n const { element } = interaction\n\n return interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [\n element,\n links.boxSizing,\n ]\n },\n },\n\n {\n name: 'noListeners',\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [\n interaction.prepared.name,\n interaction.interactable,\n ]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop])\n}\n\nfunction parentHasStyle (element: Interact.Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent)\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n" + ] +} \ No newline at end of file diff --git a/packages/inertia/index.d.ts b/packages/inertia/index.d.ts index 0ab8cbfe3..394f3425a 100644 --- a/packages/inertia/index.d.ts +++ b/packages/inertia/index.d.ts @@ -1,3 +1,4 @@ +import { EventPhase } from '../core/InteractEvent'; declare module '@interactjs/core/InteractEvent' { enum EventPhase { Resume = "resume", @@ -46,7 +47,20 @@ declare module '@interactjs/core/defaultOptions' { } | boolean; } } +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactions:action-resume': { + interaction: Interact.Interaction; + phase: EventPhase.Resume; + }; + } +} declare function install(scope: Interact.Scope): void; +declare function resume({ interaction, event, pointer, eventTarget }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope): void; +declare function release({ interaction, event, noPreEnd }: Interact.DoPhaseArg & { + noPreEnd?: boolean; +}, scope: Interact.Scope): boolean; +declare function stop({ interaction }: Interact.DoPhaseArg): void; declare function calcInertia(interaction: Interact.Interaction, state: any): void; declare function inertiaTick(interaction: Interact.Interaction): void; declare function smothEndTick(interaction: Interact.Interaction): void; @@ -54,6 +68,15 @@ declare function updateInertiaCoords(interaction: Interact.Interaction): void; declare const _default: { id: string; install: typeof install; + listeners: { + 'interactions:new': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:before-action-end': typeof release; + 'interactions:down': typeof resume; + 'interactions:stop': typeof stop; + }; + before: string; calcInertia: typeof calcInertia; inertiaTick: typeof inertiaTick; smothEndTick: typeof smothEndTick; diff --git a/packages/inertia/index.js b/packages/inertia/index.js index 54dd534d0..60abe130b 100644 --- a/packages/inertia/index.js +++ b/packages/inertia/index.js @@ -1,246 +1,290 @@ -import { EventPhase } from '@interactjs/core/InteractEvent'; -import modifiers, { restoreCoords, setCoords } from '@interactjs/modifiers/base'; -import * as utils from '@interactjs/utils'; -import raf from '@interactjs/utils/raf'; +import { EventPhase } from "../core/InteractEvent.js"; +import modifiers, { restoreCoords, setCoords } from "../modifiers/base.js"; +import * as utils from "../utils/index.js"; +import raf from "../utils/raf.js"; EventPhase.Resume = 'resume'; EventPhase.InertiaStart = 'inertiastart'; + function install(scope) { - const { interactions, defaults, } = scope; - interactions.signals.on('new', ({ interaction }) => { - interaction.inertia = { - active: false, - smoothEnd: false, - allowResume: false, - upCoords: {}, - timeout: null, - }; - }); - interactions.signals.on('before-action-end', (arg) => release(arg, scope)); - interactions.signals.on('down', (arg) => resume(arg, scope)); - interactions.signals.on('stop', stop); - defaults.perAction.inertia = { - enabled: false, - resistance: 10, - minSpeed: 100, - endSpeed: 10, - allowResume: true, - smoothEndDuration: 300, - }; - scope.usePlugin(modifiers); + const { + defaults + } = scope; + scope.usePlugin(modifiers); + defaults.perAction.inertia = { + enabled: false, + resistance: 10, + // the lambda in exponential decay + minSpeed: 100, + // target speed must be above this for inertia to start + endSpeed: 10, + // the speed at which inertia is slow enough to stop + allowResume: true, + // allow resuming an action in inertia phase + smoothEndDuration: 300 // animate to snap/restrict endOnly if there's no inertia + + }; } -function resume({ interaction, event, pointer, eventTarget }, scope) { - const state = interaction.inertia; - // Check if the down event hits the current inertia target - if (state.active) { - let element = eventTarget; - // climb up the DOM tree from the event target - while (utils.is.element(element)) { - // if interaction element is the current inertia target element - if (element === interaction.element) { - // stop inertia - raf.cancel(state.timeout); - state.active = false; - interaction.simulation = null; - // update pointers to the down event's coordinates - interaction.updatePointer(pointer, event, eventTarget, true); - utils.pointer.setCoords(interaction.coords.cur, interaction.pointers.map(p => p.pointer), interaction._now()); - // fire appropriate signals - const signalArg = { - interaction, - phase: EventPhase.Resume, - }; - scope.interactions.signals.fire('action-resume', signalArg); - // fire a reume event - const resumeEvent = new scope.InteractEvent(interaction, event, interaction.prepared.name, EventPhase.Resume, interaction.element); - interaction._fireEvent(resumeEvent); - utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur); - break; - } - element = utils.dom.parentNode(element); - } + +function resume({ + interaction, + event, + pointer, + eventTarget +}, scope) { + const state = interaction.inertia; // Check if the down event hits the current inertia target + + if (state.active) { + let element = eventTarget; // climb up the DOM tree from the event target + + while (utils.is.element(element)) { + // if interaction element is the current inertia target element + if (element === interaction.element) { + // stop inertia + raf.cancel(state.timeout); + state.active = false; + interaction.simulation = null; // update pointers to the down event's coordinates + + interaction.updatePointer(pointer, event, eventTarget, true); + utils.pointer.setCoords(interaction.coords.cur, interaction.pointers.map(p => p.pointer), interaction._now()); // fire appropriate signals + + const signalArg = { + interaction, + phase: EventPhase.Resume + }; + scope.fire('interactions:action-resume', signalArg); // fire a reume event + + const resumeEvent = new scope.InteractEvent(interaction, event, interaction.prepared.name, EventPhase.Resume, interaction.element); + + interaction._fireEvent(resumeEvent); + + utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur); + break; + } + + element = utils.dom.parentNode(element); } + } } -function release({ interaction, event, noPreEnd }, scope) { - const state = interaction.inertia; - if (!interaction.interacting() || - (interaction.simulation && interaction.simulation.active) || - noPreEnd) { - return null; - } - const options = getOptions(interaction); - const now = interaction._now(); - const { client: velocityClient } = interaction.coords.velocity; - const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y); - let smoothEnd = false; - let modifierResult; - // check if inertia should be started - const inertiaPossible = (options && options.enabled && - interaction.prepared.name !== 'gesture' && - event !== state.startEvent); - const inertia = (inertiaPossible && - (now - interaction.coords.cur.timeStamp) < 50 && - pointerSpeed > options.minSpeed && - pointerSpeed > options.endSpeed); - const modifierArg = { - interaction, - pageCoords: interaction.coords.cur.page, - states: inertiaPossible && interaction.modifiers.states.map(modifierStatus => utils.extend({}, modifierStatus)), - preEnd: true, - prevCoords: null, - requireEndOnly: null, - phase: EventPhase.InertiaStart, - }; - // smoothEnd - if (inertiaPossible && !inertia) { - modifierArg.prevCoords = interaction.modifiers.result - ? interaction.modifiers.result.coords - : interaction.prevEvent.page; - modifierArg.requireEndOnly = false; - modifierResult = modifiers.setAll(modifierArg); - if (modifierResult.changed) { - smoothEnd = true; - } + +function release({ + interaction, + event, + noPreEnd +}, scope) { + const state = interaction.inertia; + + if (!interaction.interacting() || interaction.simulation && interaction.simulation.active || noPreEnd) { + return null; + } + + const options = getOptions(interaction); + + const now = interaction._now(); + + const { + client: velocityClient + } = interaction.coords.velocity; + const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y); + let smoothEnd = false; + let modifierResult; // check if inertia should be started + + const inertiaPossible = options && options.enabled && interaction.prepared.name !== 'gesture' && event !== state.startEvent; + const inertia = inertiaPossible && now - interaction.coords.cur.timeStamp < 50 && pointerSpeed > options.minSpeed && pointerSpeed > options.endSpeed; + const modifierArg = { + interaction, + interactable: interaction.interactable, + element: interaction.element, + rect: interaction.rect, + pageCoords: interaction.coords.cur.page, + states: inertiaPossible && interaction.modifiers.states.map(modifierStatus => utils.extend({}, modifierStatus)), + preEnd: true, + prevCoords: null, + requireEndOnly: null, + phase: EventPhase.InertiaStart + }; // smoothEnd + + if (inertiaPossible && !inertia) { + modifierArg.prevCoords = interaction.modifiers.result ? interaction.modifiers.result.coords : interaction.prevEvent.page; + modifierArg.requireEndOnly = false; + modifierResult = modifiers.setAll(modifierArg); + + if (modifierResult.changed) { + smoothEnd = true; } - if (!(inertia || smoothEnd)) { - return null; - } - utils.pointer.copyCoords(state.upCoords, interaction.coords.cur); - setCoords(modifierArg); - interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(interaction, event, - // FIXME add proper typing Action.name - interaction.prepared.name, EventPhase.InertiaStart, interaction.element); - restoreCoords(modifierArg); - state.t0 = now; - state.active = true; - state.allowResume = options.allowResume; - interaction.simulation = state; - interaction.interactable.fire(state.startEvent); - if (inertia) { - state.vx0 = interaction.coords.velocity.client.x; - state.vy0 = interaction.coords.velocity.client.y; - state.v0 = pointerSpeed; - calcInertia(interaction, state); - utils.extend(modifierArg.pageCoords, interaction.coords.cur.page); - modifierArg.pageCoords.x += state.xe; - modifierArg.pageCoords.y += state.ye; - modifierArg.prevCoords = null; - modifierArg.requireEndOnly = true; - modifierResult = modifiers.setAll(modifierArg); - state.modifiedXe += modifierResult.delta.x; - state.modifiedYe += modifierResult.delta.y; - state.timeout = raf.request(() => inertiaTick(interaction)); - } - else { - state.smoothEnd = true; - state.xe = modifierResult.delta.x; - state.ye = modifierResult.delta.y; - state.sx = state.sy = 0; - state.timeout = raf.request(() => smothEndTick(interaction)); - } - return false; + } + + if (!(inertia || smoothEnd)) { + return null; + } + + utils.pointer.copyCoords(state.upCoords, interaction.coords.cur); + setCoords(modifierArg); + interaction.pointers[0].pointer = state.startEvent = new scope.InteractEvent(interaction, event, // FIXME add proper typing Action.name + interaction.prepared.name, EventPhase.InertiaStart, interaction.element); + restoreCoords(modifierArg); + state.t0 = now; + state.active = true; + state.allowResume = options.allowResume; + interaction.simulation = state; + interaction.interactable.fire(state.startEvent); + + if (inertia) { + state.vx0 = interaction.coords.velocity.client.x; + state.vy0 = interaction.coords.velocity.client.y; + state.v0 = pointerSpeed; + calcInertia(interaction, state); + utils.extend(modifierArg.pageCoords, interaction.coords.cur.page); + modifierArg.pageCoords.x += state.xe; + modifierArg.pageCoords.y += state.ye; + modifierArg.prevCoords = null; + modifierArg.requireEndOnly = true; + modifierResult = modifiers.setAll(modifierArg); + state.modifiedXe += modifierResult.delta.x; + state.modifiedYe += modifierResult.delta.y; + state.timeout = raf.request(() => inertiaTick(interaction)); + } else { + state.smoothEnd = true; + state.xe = modifierResult.delta.x; + state.ye = modifierResult.delta.y; + state.sx = state.sy = 0; + state.timeout = raf.request(() => smothEndTick(interaction)); + } + + return false; } -function stop({ interaction }) { - const state = interaction.inertia; - if (state.active) { - raf.cancel(state.timeout); - state.active = false; - interaction.simulation = null; - } + +function stop({ + interaction +}) { + const state = interaction.inertia; + + if (state.active) { + raf.cancel(state.timeout); + state.active = false; + interaction.simulation = null; + } } + function calcInertia(interaction, state) { - const options = getOptions(interaction); - const lambda = options.resistance; - const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda; - state.x0 = interaction.prevEvent.page.x; - state.y0 = interaction.prevEvent.page.y; - state.t0 = state.startEvent.timeStamp / 1000; - state.sx = state.sy = 0; - state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda; - state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda; - state.te = inertiaDur; - state.lambda_v0 = lambda / state.v0; - state.one_ve_v0 = 1 - options.endSpeed / state.v0; + const options = getOptions(interaction); + const lambda = options.resistance; + const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda; + state.x0 = interaction.prevEvent.page.x; + state.y0 = interaction.prevEvent.page.y; + state.t0 = state.startEvent.timeStamp / 1000; + state.sx = state.sy = 0; + state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda; + state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda; + state.te = inertiaDur; + state.lambda_v0 = lambda / state.v0; + state.one_ve_v0 = 1 - options.endSpeed / state.v0; } + function inertiaTick(interaction) { - updateInertiaCoords(interaction); - utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur); - utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta); - const state = interaction.inertia; - const options = getOptions(interaction); - const lambda = options.resistance; - const t = interaction._now() / 1000 - state.t0; - if (t < state.te) { - const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0; - if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) { - state.sx = state.xe * progress; - state.sy = state.ye * progress; - } - else { - const quadPoint = utils.getQuadraticCurvePoint(0, 0, state.xe, state.ye, state.modifiedXe, state.modifiedYe, progress); - state.sx = quadPoint.x; - state.sy = quadPoint.y; - } - interaction.move(); - state.timeout = raf.request(() => inertiaTick(interaction)); + updateInertiaCoords(interaction); + utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur); + utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta); + const state = interaction.inertia; + const options = getOptions(interaction); + const lambda = options.resistance; + const t = interaction._now() / 1000 - state.t0; + + if (t < state.te) { + const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0; + + if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) { + state.sx = state.xe * progress; + state.sy = state.ye * progress; + } else { + const quadPoint = utils.getQuadraticCurvePoint(0, 0, state.xe, state.ye, state.modifiedXe, state.modifiedYe, progress); + state.sx = quadPoint.x; + state.sy = quadPoint.y; } - else { - state.sx = state.modifiedXe; - state.sy = state.modifiedYe; - interaction.move(); - interaction.end(state.startEvent); - state.active = false; - interaction.simulation = null; - } - utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur); + + interaction.move(); + state.timeout = raf.request(() => inertiaTick(interaction)); + } else { + state.sx = state.modifiedXe; + state.sy = state.modifiedYe; + interaction.move(); + interaction.end(state.startEvent); + state.active = false; + interaction.simulation = null; + } + + utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur); } + function smothEndTick(interaction) { - updateInertiaCoords(interaction); - const state = interaction.inertia; - const t = interaction._now() - state.t0; - const { smoothEndDuration: duration } = getOptions(interaction); - if (t < duration) { - state.sx = utils.easeOutQuad(t, 0, state.xe, duration); - state.sy = utils.easeOutQuad(t, 0, state.ye, duration); - interaction.move(); - state.timeout = raf.request(() => smothEndTick(interaction)); - } - else { - state.sx = state.xe; - state.sy = state.ye; - interaction.move(); - interaction.end(state.startEvent); - state.smoothEnd = - state.active = false; - interaction.simulation = null; - } + updateInertiaCoords(interaction); + const state = interaction.inertia; + const t = interaction._now() - state.t0; + const { + smoothEndDuration: duration + } = getOptions(interaction); + + if (t < duration) { + state.sx = utils.easeOutQuad(t, 0, state.xe, duration); + state.sy = utils.easeOutQuad(t, 0, state.ye, duration); + interaction.move(); + state.timeout = raf.request(() => smothEndTick(interaction)); + } else { + state.sx = state.xe; + state.sy = state.ye; + interaction.move(); + interaction.end(state.startEvent); + state.smoothEnd = state.active = false; + interaction.simulation = null; + } } + function updateInertiaCoords(interaction) { - const state = interaction.inertia; - // return if inertia isn't running - if (!state.active) { - return; - } - const pageUp = state.upCoords.page; - const clientUp = state.upCoords.client; - utils.pointer.setCoords(interaction.coords.cur, [{ - pageX: pageUp.x + state.sx, - pageY: pageUp.y + state.sy, - clientX: clientUp.x + state.sx, - clientY: clientUp.y + state.sy, - }], interaction._now()); + const state = interaction.inertia; // return if inertia isn't running + + if (!state.active) { + return; + } + + const pageUp = state.upCoords.page; + const clientUp = state.upCoords.client; + utils.pointer.setCoords(interaction.coords.cur, [{ + pageX: pageUp.x + state.sx, + pageY: pageUp.y + state.sy, + clientX: clientUp.x + state.sx, + clientY: clientUp.y + state.sy + }], interaction._now()); } -function getOptions({ interactable, prepared }) { - return interactable && - interactable.options && - prepared.name && - interactable.options[prepared.name].inertia; + +function getOptions({ + interactable, + prepared +}) { + return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia; } + export default { - id: 'inertia', - install, - calcInertia, - inertiaTick, - smothEndTick, - updateInertiaCoords, + id: 'inertia', + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.inertia = { + active: false, + smoothEnd: false, + allowResume: false, + upCoords: {}, + timeout: null + }; + }, + 'interactions:before-action-end': release, + 'interactions:down': resume, + 'interactions:stop': stop + }, + before: 'modifiers/base', + calcInertia, + inertiaTick, + smothEndTick, + updateInertiaCoords }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDM0QsT0FBTyxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDaEYsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQTtBQTBEdEMsVUFBa0IsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUNwQztBQUFDLFVBQWtCLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQTtBQUVsRCxTQUFTLE9BQU8sQ0FBRSxLQUFxQjtJQUNyQyxNQUFNLEVBQ0osWUFBWSxFQUNaLFFBQVEsR0FDVCxHQUFHLEtBQUssQ0FBQTtJQUVULFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNqRCxXQUFXLENBQUMsT0FBTyxHQUFHO1lBQ3BCLE1BQU0sRUFBTyxLQUFLO1lBQ2xCLFNBQVMsRUFBSSxLQUFLO1lBQ2xCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFFBQVEsRUFBSyxFQUFTO1lBQ3RCLE9BQU8sRUFBTSxJQUFJO1NBQ2xCLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBdUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzlGLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUNoRixZQUFZLENBQUMs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LENBQUMsQ0FBQTtBQUN6QixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUF3QjtJQUNuRSxPQUFPLFlBQVk7UUFDakIsWUFBWSxDQUFDLE9BQU87UUFDcEIsUUFBUSxDQUFDLElBQUk7UUFDYixZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUE7QUFDL0MsQ0FBQztBQUVELGVBQWU7SUFDYixFQUFFLEVBQUUsU0FBUztJQUNiLE9BQU87SUFDUCxXQUFXO0lBQ1gsV0FBVztJQUNYLFlBQVk7SUFDWixtQkFBbUI7Q0FDcEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50UGhhc2UgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0RXZlbnQnXG5pbXBvcnQgbW9kaWZpZXJzLCB7IHJlc3RvcmVDb29yZHMsIHNldENvb3JkcyB9IGZyb20gJ0BpbnRlcmFjdGpzL21vZGlmaWVycy9iYXNlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgcmFmIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JhZidcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RFdmVudCcge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIGVudW0gRXZlbnRQaGFzZSB7XG4gICAgUmVzdW1lID0gJ3Jlc3VtZScsXG4gICAgSW5lcnRpYVN0YXJ0ID0gJ2luZXJ0aWFzdGFydCcsXG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3Rpb24nIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0aW9uIHtcbiAgICBpbmVydGlhPzoge1xuICAgICAgYWN0aXZlOiBib29sZWFuXG4gICAgICBzbW9vdGhFbmQ6IGJvb2xlYW5cbiAgICAgIGFsbG93UmVzdW1lOiBib29sZWFuXG5cbiAgICAgIHN0YXJ0RXZlbnQ/OiBJbnRlcmFjdC5JbnRlcmFjdEV2ZW50XG4gICAgICB1cENvb3Jkczoge1xuICAgICAgICBwYWdlOiBJbnRlcmFjdC5Qb2ludFxuICAgICAgICBjbGllbnQ6IEludGVyYWN0LlBvaW50XG4gICAgICAgIHRpbWVTdGFtcDogbnVtYmVyXG4gICAgICB9XG5cbiAgICAgIHhlPzogbnVtYmVyXG4gICAgICB5ZT86IG51bWJlclxuICAgICAgc3g/OiBudW1iZXJcbiAgICAgIHN5PzogbnVtYmVyXG5cbiAgICAgIHQwPzogbnVtYmVyXG4gICAgICB0ZT86IG51bWJlclxuICAgICAgdjA/OiBudW1iZXJcbiAgICAgIHZ4MD86IG51bWJlclxuICAgICAgdnkwPzogbnVtYmVyXG4gICAgICBkdXJhdGlvbj86IG51bWJlclxuICAgICAgbW9kaWZpZWRYZT86IG51bWJlclxuICAgICAgbW9kaWZpZWRZZT86IG51bWJlclxuXG4gICAgICBsYW1iZGFfdjA/OiBudW1iZXIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgIG9uZV92ZV92MD86IG51bWJlciAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICAgdGltZW91dDogYW55XG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBQZXJBY3Rpb25EZWZhdWx0cyB7XG4gICAgaW5lcnRpYT86IHtcbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICByZXNpc3RhbmNlPzogbnVtYmVyICAgICAgICAvLyB0aGUgbGFtYmRhIGluIGV4cG9uZW50aWFsIGRlY2F5XG4gICAgICBtaW5TcGVlZD86IG51bWJlciAgICAgICAgICAvLyB0YXJnZXQgc3BlZWQgbXVzdCBiZSBhYm92ZSB0aGlzIGZvciBpbmVydGlhIHRvIHN0YXJ0XG4gICAgICBlbmRTcGVlZD86IG51bWJlciAgICAgICAgICAvLyB0aGUgc3BlZWQgYXQgd2hpY2ggaW5lcnRpYSBpcyBzbG93IGVub3VnaCB0byBzdG9wXG4gICAgICBhbGxvd1Jlc3VtZT86IHRydWUgICAgICAgICAvLyBhbGxvdyByZXN1bWluZyBhbiBhY3Rpb24gaW4gaW5lcnRpYSBwaGFzZVxuICAgICAgc21vb3RoRW5kRHVyYXRpb24/OiBudW1iZXIgLy8gYW5pbWF0ZSB0byBzbmFwL3Jlc3RyaWN0IGVuZE9ubHkgaWYgdGhlcmUncyBubyBpbmVydGlhXG4gICAgfSB8IGJvb2xlYW4gLy8gRklYTUVcbiAgfVxufVxuXG4oRXZlbnRQaGFzZSBhcyBhbnkpLlJlc3VtZSA9ICdyZXN1bWUnXG47KEV2ZW50UGhhc2UgYXMgYW55KS5JbmVydGlhU3RhcnQgPSAnaW5lcnRpYXN0YXJ0J1xuXG5mdW5jdGlvbiBpbnN0YWxsIChzY29wZTogSW50ZXJhY3QuU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9ucyxcbiAgICBkZWZhdWx0cyxcbiAgfSA9IHNjb3BlXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ25ldycsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5pbmVydGlhID0ge1xuICAgICAgYWN0aXZlICAgICA6IGZhbHNlLFxuICAgICAgc21vb3RoRW5kICA6IGZhbHNlLFxuICAgICAgYWxsb3dSZXN1bWU6IGZhbHNlLFxuICAgICAgdXBDb29yZHMgICA6IHt9IGFzIGFueSxcbiAgICAgIHRpbWVvdXQgICAgOiBudWxsLFxuICAgIH1cbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1lbmQnLCAoYXJnOiBJbnRlcmFjdC5TaWduYWxBcmcpID0+IHJlbGVhc2UoYXJnLCBzY29wZSkpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdkb3duJywgKGFyZzogSW50ZXJhY3QuU2lnbmFsQXJnKSA9PiByZXN1bWUoYXJnLCBzY29wZSkpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdzdG9wJywgc3RvcClcblxuICBkZWZhdWx0cy5wZXJBY3Rpb24uaW5lcnRpYSA9IHtcbiAgICBlbmFibGVkICAgICAgICAgIDogZmFsc2UsXG4gICAgcmVzaXN0YW5jZSAgICAgICA6IDEwLCAgICAvLyB0aGUgbGFtYmRhIGluIGV4cG9uZW50aWFsIGRlY2F5XG4gICAgbWluU3BlZWQgICAgICAgICA6IDEwMCwgICAvLyB0YXJnZXQgc3BlZWQgbXVzdCBiZSBhYm92ZSB0aGlzIGZvciBpbmVydGlhIHRvIHN0YXJ0XG4gICAgZW5kU3BlZWQgICAgICAgICA6IDEwLCAgICAvLyB0aGUgc3BlZWQgYXQgd2hpY2ggaW5lcnRpYSBpcyBzbG93IGVub3VnaCB0byBzdG9wXG4gICAgYWxsb3dSZXN1bWUgICAgICA6IHRydWUsICAvLyBhbGxvdyByZXN1bWluZyBhbiBhY3Rpb24gaW4gaW5lcnRpYSBwaGFzZVxuICAgIHNtb290aEVuZER1cmF0aW9uOiAzMDAsICAgLy8gYW5pbWF0ZSB0byBzbmFwL3Jlc3RyaWN0IGVuZE9ubHkgaWYgdGhlcmUncyBubyBpbmVydGlhXG4gIH1cblxuICBzY29wZS51c2VQbHVnaW4obW9kaWZpZXJzKVxufVxuXG5mdW5jdGlvbiByZXN1bWUgKFxuICB7IGludGVyYWN0aW9uLCBldmVudCwgcG9pbnRlciwgZXZlbnRUYXJnZXQgfTogSW50ZXJhY3QuU2lnbmFsQXJnLFxuICBzY29wZTogSW50ZXJhY3QuU2NvcGVcbikge1xuICBjb25zdCBzdGF0ZSA9IGludGVyYWN0aW9uLmluZXJ0aWFcblxuICAvLyBDaGVjayBpZiB0aGUgZG93biBldmVudCBoaXRzIHRoZSBjdXJyZW50IGluZXJ0aWEgdGFyZ2V0XG4gIGlmIChzdGF0ZS5hY3RpdmUpIHtcbiAgICBsZXQgZWxlbWVudCA9IGV2ZW50VGFyZ2V0XG5cbiAgICAvLyBjbGltYiB1cCB0aGUgRE9NIHRyZWUgZnJvbSB0aGUgZXZlbnQgdGFyZ2V0XG4gICAgd2hpbGUgKHV0aWxzLmlzLmVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIC8vIGlmIGludGVyYWN0aW9uIGVsZW1lbnQgaXMgdGhlIGN1cnJlbnQgaW5lcnRpYSB0YXJnZXQgZWxlbWVudFxuICAgICAgaWYgKGVsZW1lbnQgPT09IGludGVyYWN0aW9uLmVsZW1lbnQpIHtcbiAgICAgICAgLy8gc3RvcCBpbmVydGlhXG4gICAgICAgIHJhZi5jYW5jZWwoc3RhdGUudGltZW91dClcbiAgICAgICAgc3RhdGUuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiA9IG51bGxcblxuICAgICAgICAvLyB1cGRhdGUgcG9pbnRlcnMgdG8gdGhlIGRvd24gZXZlbnQncyBjb29yZGluYXRlc1xuICAgICAgICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgdHJ1ZSlcbiAgICAgICAgdXRpbHMucG9pbnRlci5zZXRDb29yZHMoXG4gICAgICAgICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1cixcbiAgICAgICAgICBpbnRlcmFjdGlvbi5wb2ludGVycy5tYXAocCA9PiBwLnBvaW50ZXIpLFxuICAgICAgICAgIGludGVyYWN0aW9uLl9ub3coKVxuICAgICAgICApXG5cbiAgICAgICAgLy8gZmlyZSBhcHByb3ByaWF0ZSBzaWduYWxzXG4gICAgICAgIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgICBwaGFzZTogRXZlbnRQaGFzZS5SZXN1bWUsXG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS5pbnRlcmFjdGlvbnMuc2lnbmFscy5maXJlKCdhY3Rpb24tcmVzdW1lJywgc2lnbmFsQXJnKVxuXG4gICAgICAgIC8vIGZpcmUgYSByZXVtZSBldmVudFxuICAgICAgICBjb25zdCByZXN1bWVFdmVudCA9IG5ldyBzY29wZS5JbnRlcmFjdEV2ZW50KFxuICAgICAgICAgIGludGVyYWN0aW9uLCBldmVudCwgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSwgRXZlbnRQaGFzZS5SZXN1bWUsIGludGVyYWN0aW9uLmVsZW1lbnQpXG5cbiAgICAgICAgaW50ZXJhY3Rpb24uX2ZpcmVFdmVudChyZXN1bWVFdmVudClcblxuICAgICAgICB1dGlscy5wb2ludGVyLmNvcHlDb29yZHMoaW50ZXJhY3Rpb24uY29vcmRzLnByZXYsIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQgPSB1dGlscy5kb20ucGFyZW50Tm9kZShlbGVtZW50KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWxlYXNlPFQgZXh0ZW5kcyBJbnRlcmFjdC5BY3Rpb25OYW1lPiAoXG4gIHsgaW50ZXJhY3Rpb24sIGV2ZW50LCBub1ByZUVuZCB9OiBJbnRlcmFjdC5TaWduYWxBcmcsXG4gIHNjb3BlOiBJbnRlcmFjdC5TY29wZVxuKSB7XG4gIGNvbnN0IHN0YXRlID0gaW50ZXJhY3Rpb24uaW5lcnRpYVxuXG4gIGlmICghaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSB8fFxuICAgIChpbnRlcmFjdGlvbi5zaW11bGF0aW9uICYmIGludGVyYWN0aW9uLnNpbXVsYXRpb24uYWN0aXZlKSB8fFxuICBub1ByZUVuZCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9ucyhpbnRlcmFjdGlvbilcblxuICBjb25zdCBub3cgPSBpbnRlcmFjdGlvbi5fbm93KClcbiAgY29uc3QgeyBjbGllbnQ6IHZlbG9jaXR5Q2xpZW50IH0gPSBpbnRlcmFjdGlvbi5jb29yZHMudmVsb2NpdHlcbiAgY29uc3QgcG9pbnRlclNwZWVkID0gdXRpbHMuaHlwb3QodmVsb2NpdHlDbGllbnQueCwgdmVsb2NpdHlDbGllbnQueSlcblxuICBsZXQgc21vb3RoRW5kID0gZmFsc2VcbiAgbGV0IG1vZGlmaWVyUmVzdWx0OiBSZXR1cm5UeXBlPHR5cGVvZiBtb2RpZmllcnMuc2V0QWxsPlxuXG4gIC8vIGNoZWNrIGlmIGluZXJ0aWEgc2hvdWxkIGJlIHN0YXJ0ZWRcbiAgY29uc3QgaW5lcnRpYVBvc3NpYmxlID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5lbmFibGVkICYmXG4gICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lICE9PSAnZ2VzdHVyZScgJiZcbiAgICAgICAgICAgICAgICAgICAgIGV2ZW50ICE9PSBzdGF0ZS5zdGFydEV2ZW50KVxuXG4gIGNvbnN0IGluZXJ0aWEgPSAoaW5lcnRpYVBvc3NpYmxlICYmXG4gICAgKG5vdyAtIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIudGltZVN0YW1wKSA8IDUwICYmXG4gICAgcG9pbnRlclNwZWVkID4gb3B0aW9ucy5taW5TcGVlZCAmJlxuICAgIHBvaW50ZXJTcGVlZCA+IG9wdGlvbnMuZW5kU3BlZWQpXG5cbiAgY29uc3QgbW9kaWZpZXJBcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgcGFnZUNvb3JkczogaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlLFxuICAgIHN0YXRlczogaW5lcnRpYVBvc3NpYmxlICYmIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXMubWFwKFxuICAgICAgbW9kaWZpZXJTdGF0dXMgPT4gdXRpbHMuZXh0ZW5kKHt9LCBtb2RpZmllclN0YXR1cylcbiAgICApLFxuICAgIHByZUVuZDogdHJ1ZSxcbiAgICBwcmV2Q29vcmRzOiBudWxsLFxuICAgIHJlcXVpcmVFbmRPbmx5OiBudWxsLFxuICAgIHBoYXNlOiBFdmVudFBoYXNlLkluZXJ0aWFTdGFydCxcbiAgfVxuXG4gIC8vIHNtb290aEVuZFxuICBpZiAoaW5lcnRpYVBvc3NpYmxlICYmICFpbmVydGlhKSB7XG4gICAgbW9kaWZpZXJBcmcucHJldkNvb3JkcyA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHRcbiAgICAgID8gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnJlc3VsdC5jb29yZHNcbiAgICAgIDogaW50ZXJhY3Rpb24ucHJldkV2ZW50LnBhZ2VcbiAgICBtb2RpZmllckFyZy5yZXF1aXJlRW5kT25seSA9IGZhbHNlXG4gICAgbW9kaWZpZXJSZXN1bHQgPSBtb2RpZmllcnMuc2V0QWxsKG1vZGlmaWVyQXJnKVxuXG4gICAgaWYgKG1vZGlmaWVyUmVzdWx0LmNoYW5nZWQpIHtcbiAgICAgIHNtb290aEVuZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICBpZiAoIShpbmVydGlhIHx8IHNtb290aEVuZCkpIHsgcmV0dXJuIG51bGwgfVxuXG4gIHV0aWxzLnBvaW50ZXIuY29weUNvb3JkcyhzdGF0ZS51cENvb3JkcywgaW50ZXJhY3Rpb24uY29vcmRzLmN1cilcblxuICBzZXRDb29yZHMobW9kaWZpZXJBcmcpXG4gIGludGVyYWN0aW9uLnBvaW50ZXJzWzBdLnBvaW50ZXIgPSBzdGF0ZS5zdGFydEV2ZW50ID0gbmV3IHNjb3BlLkludGVyYWN0RXZlbnQoXG4gICAgaW50ZXJhY3Rpb24sXG4gICAgZXZlbnQsXG4gICAgLy8gRklYTUUgYWRkIHByb3BlciB0eXBpbmcgQWN0aW9uLm5hbWVcbiAgICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lIGFzIFQsXG4gICAgRXZlbnRQaGFzZS5JbmVydGlhU3RhcnQsXG4gICAgaW50ZXJhY3Rpb24uZWxlbWVudCxcbiAgKVxuICByZXN0b3JlQ29vcmRzKG1vZGlmaWVyQXJnKVxuXG4gIHN0YXRlLnQwID0gbm93XG5cbiAgc3RhdGUuYWN0aXZlID0gdHJ1ZVxuICBzdGF0ZS5hbGxvd1Jlc3VtZSA9IG9wdGlvbnMuYWxsb3dSZXN1bWVcbiAgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiA9IHN0YXRlXG5cbiAgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLmZpcmUoc3RhdGUuc3RhcnRFdmVudClcblxuICBpZiAoaW5lcnRpYSkge1xuICAgIHN0YXRlLnZ4MCA9IGludGVyYWN0aW9uLmNvb3Jkcy52ZWxvY2l0eS5jbGllbnQueFxuICAgIHN0YXRlLnZ5MCA9IGludGVyYWN0aW9uLmNvb3Jkcy52ZWxvY2l0eS5jbGllbnQueVxuICAgIHN0YXRlLnYwID0gcG9pbnRlclNwZWVkXG5cbiAgICBjYWxjSW5lcnRpYShpbnRlcmFjdGlvbiwgc3RhdGUpXG5cbiAgICB1dGlscy5leHRlbmQobW9kaWZpZXJBcmcucGFnZUNvb3JkcywgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlKVxuXG4gICAgbW9kaWZpZXJBcmcucGFnZUNvb3Jkcy54ICs9IHN0YXRlLnhlXG4gICAgbW9kaWZpZXJBcmcucGFnZUNvb3Jkcy55ICs9IHN0YXRlLnllXG4gICAgbW9kaWZpZXJBcmcucHJldkNvb3JkcyA9IG51bGxcbiAgICBtb2RpZmllckFyZy5yZXF1aXJlRW5kT25seSA9IHRydWVcblxuICAgIG1vZGlmaWVyUmVzdWx0ID0gbW9kaWZpZXJzLnNldEFsbChtb2RpZmllckFyZylcblxuICAgIHN0YXRlLm1vZGlmaWVkWGUgKz0gbW9kaWZpZXJSZXN1bHQuZGVsdGEueFxuICAgIHN0YXRlLm1vZGlmaWVkWWUgKz0gbW9kaWZpZXJSZXN1bHQuZGVsdGEueVxuXG4gICAgc3RhdGUudGltZW91dCA9IHJhZi5yZXF1ZXN0KCgpID0+IGluZXJ0aWFUaWNrKGludGVyYWN0aW9uKSlcbiAgfVxuICBlbHNlIHtcbiAgICBzdGF0ZS5zbW9vdGhFbmQgPSB0cnVlXG4gICAgc3RhdGUueGUgPSBtb2RpZmllclJlc3VsdC5kZWx0YS54XG4gICAgc3RhdGUueWUgPSBtb2RpZmllclJlc3VsdC5kZWx0YS55XG5cbiAgICBzdGF0ZS5zeCA9IHN0YXRlLnN5ID0gMFxuXG4gICAgc3RhdGUudGltZW91dCA9IHJhZi5yZXF1ZXN0KCgpID0+IHNtb3RoRW5kVGljayhpbnRlcmFjdGlvbikpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gc3RvcCAoeyBpbnRlcmFjdGlvbiB9OiBJbnRlcmFjdC5TaWduYWxBcmcpIHtcbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG4gIGlmIChzdGF0ZS5hY3RpdmUpIHtcbiAgICByYWYuY2FuY2VsKHN0YXRlLnRpbWVvdXQpXG4gICAgc3RhdGUuYWN0aXZlID0gZmFsc2VcbiAgICBpbnRlcmFjdGlvbi5zaW11bGF0aW9uID0gbnVsbFxuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGNJbmVydGlhIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24sIHN0YXRlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuICBjb25zdCBsYW1iZGEgPSBvcHRpb25zLnJlc2lzdGFuY2VcbiAgY29uc3QgaW5lcnRpYUR1ciA9IC1NYXRoLmxvZyhvcHRpb25zLmVuZFNwZWVkIC8gc3RhdGUudjApIC8gbGFtYmRhXG5cbiAgc3RhdGUueDAgPSBpbnRlcmFjdGlvbi5wcmV2RXZlbnQucGFnZS54XG4gIHN0YXRlLnkwID0gaW50ZXJhY3Rpb24ucHJldkV2ZW50LnBhZ2UueVxuICBzdGF0ZS50MCA9IHN0YXRlLnN0YXJ0RXZlbnQudGltZVN0YW1wIC8gMTAwMFxuICBzdGF0ZS5zeCA9IHN0YXRlLnN5ID0gMFxuXG4gIHN0YXRlLm1vZGlmaWVkWGUgPSBzdGF0ZS54ZSA9IChzdGF0ZS52eDAgLSBpbmVydGlhRHVyKSAvIGxhbWJkYVxuICBzdGF0ZS5tb2RpZmllZFllID0gc3RhdGUueWUgPSAoc3RhdGUudnkwIC0gaW5lcnRpYUR1cikgLyBsYW1iZGFcbiAgc3RhdGUudGUgPSBpbmVydGlhRHVyXG5cbiAgc3RhdGUubGFtYmRhX3YwID0gbGFtYmRhIC8gc3RhdGUudjBcbiAgc3RhdGUub25lX3ZlX3YwID0gMSAtIG9wdGlvbnMuZW5kU3BlZWQgLyBzdGF0ZS52MFxufVxuXG5mdW5jdGlvbiBpbmVydGlhVGljayAoaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uKSB7XG4gIHVwZGF0ZUluZXJ0aWFDb29yZHMoaW50ZXJhY3Rpb24pXG4gIHV0aWxzLnBvaW50ZXIuc2V0Q29vcmREZWx0YXMoaW50ZXJhY3Rpb24uY29vcmRzLmRlbHRhLCBpbnRlcmFjdGlvbi5jb29yZHMucHJldiwgaW50ZXJhY3Rpb24uY29vcmRzLmN1cilcbiAgdXRpbHMucG9pbnRlci5zZXRDb29yZFZlbG9jaXR5KGludGVyYWN0aW9uLmNvb3Jkcy52ZWxvY2l0eSwgaW50ZXJhY3Rpb24uY29vcmRzLmRlbHRhKVxuXG4gIGNvbnN0IHN0YXRlID0gaW50ZXJhY3Rpb24uaW5lcnRpYVxuICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9ucyhpbnRlcmFjdGlvbilcbiAgY29uc3QgbGFtYmRhID0gb3B0aW9ucy5yZXNpc3RhbmNlXG4gIGNvbnN0IHQgPSBpbnRlcmFjdGlvbi5fbm93KCkgLyAxMDAwIC0gc3RhdGUudDBcblxuICBpZiAodCA8IHN0YXRlLnRlKSB7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSAgMSAtIChNYXRoLmV4cCgtbGFtYmRhICogdCkgLSBzdGF0ZS5sYW1iZGFfdjApIC8gc3RhdGUub25lX3ZlX3YwXG5cbiAgICBpZiAoc3RhdGUubW9kaWZpZWRYZSA9PT0gc3RhdGUueGUgJiYgc3RhdGUubW9kaWZpZWRZZSA9PT0gc3RhdGUueWUpIHtcbiAgICAgIHN0YXRlLnN4ID0gc3RhdGUueGUgKiBwcm9ncmVzc1xuICAgICAgc3RhdGUuc3kgPSBzdGF0ZS55ZSAqIHByb2dyZXNzXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcXVhZFBvaW50ID0gdXRpbHMuZ2V0UXVhZHJhdGljQ3VydmVQb2ludChcbiAgICAgICAgMCwgMCxcbiAgICAgICAgc3RhdGUueGUsIHN0YXRlLnllLFxuICAgICAgICBzdGF0ZS5tb2RpZmllZFhlLCBzdGF0ZS5tb2RpZmllZFllLFxuICAgICAgICBwcm9ncmVzcylcblxuICAgICAgc3RhdGUuc3ggPSBxdWFkUG9pbnQueFxuICAgICAgc3RhdGUuc3kgPSBxdWFkUG9pbnQueVxuICAgIH1cblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuXG4gICAgc3RhdGUudGltZW91dCA9IHJhZi5yZXF1ZXN0KCgpID0+IGluZXJ0aWFUaWNrKGludGVyYWN0aW9uKSlcbiAgfVxuICBlbHNlIHtcbiAgICBzdGF0ZS5zeCA9IHN0YXRlLm1vZGlmaWVkWGVcbiAgICBzdGF0ZS5zeSA9IHN0YXRlLm1vZGlmaWVkWWVcblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuICAgIGludGVyYWN0aW9uLmVuZChzdGF0ZS5zdGFydEV2ZW50KVxuICAgIHN0YXRlLmFjdGl2ZSA9IGZhbHNlXG4gICAgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiA9IG51bGxcbiAgfVxuXG4gIHV0aWxzLnBvaW50ZXIuY29weUNvb3JkcyhpbnRlcmFjdGlvbi5jb29yZHMucHJldiwgaW50ZXJhY3Rpb24uY29vcmRzLmN1cilcbn1cblxuZnVuY3Rpb24gc21vdGhFbmRUaWNrIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgdXBkYXRlSW5lcnRpYUNvb3JkcyhpbnRlcmFjdGlvbilcblxuICBjb25zdCBzdGF0ZSA9IGludGVyYWN0aW9uLmluZXJ0aWFcbiAgY29uc3QgdCA9IGludGVyYWN0aW9uLl9ub3coKSAtIHN0YXRlLnQwXG4gIGNvbnN0IHsgc21vb3RoRW5kRHVyYXRpb246IGR1cmF0aW9uIH0gPSBnZXRPcHRpb25zKGludGVyYWN0aW9uKVxuXG4gIGlmICh0IDwgZHVyYXRpb24pIHtcbiAgICBzdGF0ZS5zeCA9IHV0aWxzLmVhc2VPdXRRdWFkKHQsIDAsIHN0YXRlLnhlLCBkdXJhdGlvbilcbiAgICBzdGF0ZS5zeSA9IHV0aWxzLmVhc2VPdXRRdWFkKHQsIDAsIHN0YXRlLnllLCBkdXJhdGlvbilcblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuXG4gICAgc3RhdGUudGltZW91dCA9IHJhZi5yZXF1ZXN0KCgpID0+IHNtb3RoRW5kVGljayhpbnRlcmFjdGlvbikpXG4gIH1cbiAgZWxzZSB7XG4gICAgc3RhdGUuc3ggPSBzdGF0ZS54ZVxuICAgIHN0YXRlLnN5ID0gc3RhdGUueWVcblxuICAgIGludGVyYWN0aW9uLm1vdmUoKVxuICAgIGludGVyYWN0aW9uLmVuZChzdGF0ZS5zdGFydEV2ZW50KVxuXG4gICAgc3RhdGUuc21vb3RoRW5kID1cbiAgICAgIHN0YXRlLmFjdGl2ZSA9IGZhbHNlXG4gICAgaW50ZXJhY3Rpb24uc2ltdWxhdGlvbiA9IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVJbmVydGlhQ29vcmRzIChpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgY29uc3Qgc3RhdGUgPSBpbnRlcmFjdGlvbi5pbmVydGlhXG5cbiAgLy8gcmV0dXJuIGlmIGluZXJ0aWEgaXNuJ3QgcnVubmluZ1xuICBpZiAoIXN0YXRlLmFjdGl2ZSkgeyByZXR1cm4gfVxuXG4gIGNvbnN0IHBhZ2VVcCAgID0gc3RhdGUudXBDb29yZHMucGFnZVxuICBjb25zdCBjbGllbnRVcCA9IHN0YXRlLnVwQ29vcmRzLmNsaWVudFxuXG4gIHV0aWxzLnBvaW50ZXIuc2V0Q29vcmRzKGludGVyYWN0aW9uLmNvb3Jkcy5jdXIsIFt7XG4gICAgcGFnZVggIDogcGFnZVVwLnggICArIHN0YXRlLnN4LFxuICAgIHBhZ2VZICA6IHBhZ2VVcC55ICAgKyBzdGF0ZS5zeSxcbiAgICBjbGllbnRYOiBjbGllbnRVcC54ICsgc3RhdGUuc3gsXG4gICAgY2xpZW50WTogY2xpZW50VXAueSArIHN0YXRlLnN5LFxuICB9XSwgaW50ZXJhY3Rpb24uX25vdygpKVxufVxuXG5mdW5jdGlvbiBnZXRPcHRpb25zICh7IGludGVyYWN0YWJsZSwgcHJlcGFyZWQgfTogSW50ZXJhY3QuSW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIGludGVyYWN0YWJsZSAmJlxuICAgIGludGVyYWN0YWJsZS5vcHRpb25zICYmXG4gICAgcHJlcGFyZWQubmFtZSAmJlxuICAgIGludGVyYWN0YWJsZS5vcHRpb25zW3ByZXBhcmVkLm5hbWVdLmluZXJ0aWFcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpZDogJ2luZXJ0aWEnLFxuICBpbnN0YWxsLFxuICBjYWxjSW5lcnRpYSxcbiAgaW5lcnRpYVRpY2ssXG4gIHNtb3RoRW5kVGljayxcbiAgdXBkYXRlSW5lcnRpYUNvb3Jkcyxcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/inertia/index.js.map b/packages/inertia/index.js.map new file mode 100644 index 000000000..66d4b726a --- /dev/null +++ b/packages/inertia/index.js.map @@ -0,0 +1,143 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "EventPhase", + "modifiers", + "restoreCoords", + "setCoords", + "utils", + "raf", + "Resume", + "InertiaStart", + "install", + "scope", + "defaults", + "usePlugin", + "perAction", + "inertia", + "enabled", + "resistance", + "minSpeed", + "endSpeed", + "allowResume", + "smoothEndDuration", + "resume", + "interaction", + "event", + "pointer", + "eventTarget", + "state", + "active", + "element", + "is", + "cancel", + "timeout", + "simulation", + "updatePointer", + "coords", + "cur", + "pointers", + "map", + "p", + "_now", + "signalArg", + "phase", + "fire", + "resumeEvent", + "InteractEvent", + "prepared", + "name", + "_fireEvent", + "copyCoords", + "prev", + "dom", + "parentNode", + "release", + "noPreEnd", + "interacting", + "options", + "getOptions", + "now", + "client", + "velocityClient", + "velocity", + "pointerSpeed", + "hypot", + "x", + "y", + "smoothEnd", + "modifierResult", + "inertiaPossible", + "startEvent", + "timeStamp", + "modifierArg", + "interactable", + "rect", + "pageCoords", + "page", + "states", + "modifierStatus", + "extend", + "preEnd", + "prevCoords", + "requireEndOnly", + "result", + "prevEvent", + "setAll", + "changed", + "upCoords", + "t0", + "vx0", + "vy0", + "v0", + "calcInertia", + "xe", + "ye", + "modifiedXe", + "delta", + "modifiedYe", + "request", + "inertiaTick", + "sx", + "sy", + "smothEndTick", + "stop", + "lambda", + "inertiaDur", + "Math", + "log", + "x0", + "y0", + "te", + "lambda_v0", + "one_ve_v0", + "updateInertiaCoords", + "setCoordDeltas", + "setCoordVelocity", + "t", + "progress", + "exp", + "quadPoint", + "getQuadraticCurvePoint", + "move", + "end", + "duration", + "easeOutQuad", + "pageUp", + "clientUp", + "pageX", + "pageY", + "clientX", + "clientY", + "id", + "listeners", + "before" + ], + "mappings": "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", + "sourcesContent": [ + "import { EventPhase } from '../core/InteractEvent'\nimport modifiers, { restoreCoords, setCoords } from '../modifiers/base'\nimport * as utils from '../utils/index'\nimport raf from '../utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: {\n active: boolean\n smoothEnd: boolean\n allowResume: boolean\n\n startEvent?: Interact.InteractEvent\n upCoords: {\n page: Interact.Point\n client: Interact.Point\n timeStamp: number\n }\n\n xe?: number\n ye?: number\n sx?: number\n sy?: number\n\n t0?: number\n te?: number\n v0?: number\n vx0?: number\n vy0?: number\n duration?: number\n modifiedXe?: number\n modifiedYe?: number\n\n lambda_v0?: number // eslint-disable-line camelcase\n one_ve_v0?: number // eslint-disable-line camelcase\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:action-resume': {\n interaction: Interact.Interaction\n phase: EventPhase.Resume\n }\n }\n}\n\n(EventPhase as any).Resume = 'resume'\n;(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Interact.Scope) {\n const {\n defaults,\n } = scope\n\n scope.usePlugin(modifiers)\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 (\n { interaction, event, pointer, eventTarget }: Interact.SignalArgs['interactions:down'],\n scope: Interact.Scope,\n) {\n const state = interaction.inertia\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer as Interact.PointerType, event as Interact.PointerEventType, eventTarget, true)\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer),\n interaction._now(),\n )\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n phase: EventPhase.Resume as const,\n }\n\n scope.fire('interactions:action-resume', signalArg)\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event as Interact.PointerEventType, interaction.prepared.name, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release (\n { interaction, event, noPreEnd }: Interact.DoPhaseArg & { noPreEnd?: boolean },\n scope: Interact.Scope,\n) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = interaction._now()\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y)\n\n let smoothEnd = false\n let modifierResult: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: interaction.rect,\n pageCoords: interaction.coords.cur.page,\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus),\n ),\n preEnd: true,\n prevCoords: null,\n requireEndOnly: null,\n phase: EventPhase.InertiaStart,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierArg.prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.prevEvent.page\n modifierArg.requireEndOnly = false\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n setCoords(modifierArg)\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 restoreCoords(modifierArg)\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.interactable.fire(state.startEvent)\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x\n state.vy0 = interaction.coords.velocity.client.y\n state.v0 = pointerSpeed\n\n calcInertia(interaction, state)\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page)\n\n modifierArg.pageCoords.x += state.xe\n modifierArg.pageCoords.y += state.ye\n modifierArg.prevCoords = null\n modifierArg.requireEndOnly = true\n\n modifierResult = modifiers.setAll(modifierArg)\n\n state.modifiedXe += modifierResult.delta.x\n state.modifiedYe += modifierResult.delta.y\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.smoothEnd = true\n state.xe = modifierResult.delta.x\n state.ye = modifierResult.delta.y\n\n state.sx = state.sy = 0\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n\n return false\n}\n\nfunction stop ({ interaction }: Interact.DoPhaseArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = interaction._now() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.sx = state.modifiedXe\n state.sy = state.modifiedYe\n\n interaction.move()\n interaction.end(state.startEvent)\n state.active = false\n interaction.simulation = null\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n}\n\nfunction smothEndTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n\n const state = interaction.inertia\n const t = interaction._now() - state.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration)\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration)\n\n interaction.move()\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n else {\n state.sx = state.xe\n state.sy = state.ye\n\n interaction.move()\n interaction.end(state.startEvent)\n\n state.smoothEnd =\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction updateInertiaCoords (interaction: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [{\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n }], interaction._now())\n}\n\nfunction getOptions ({ interactable, prepared }: Interact.Interaction) {\n return interactable &&\n interactable.options &&\n prepared.name &&\n interactable.options[prepared.name].inertia\n}\n\nexport default {\n id: 'inertia',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n upCoords : {} as any,\n timeout : null,\n }\n },\n\n 'interactions:before-action-end': release,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n },\n before: 'modifiers/base',\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/inertia/inertia.spec.js b/packages/inertia/inertia.spec.js deleted file mode 100644 index bfd2d48bc..000000000 --- a/packages/inertia/inertia.spec.js +++ /dev/null @@ -1,76 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import drag from '@interactjs/actions/drag'; -import { EventPhase } from '@interactjs/core/InteractEvent'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import inertia from './'; -test('inertia', t => { - const { scope, interaction, target, interactable, coords, event, } = helpers.testEnv({ plugins: [inertia, drag] }); - const element = target; - const modifierChange = 5; - const testModifier = { - options: { endOnly: false }, - methods: { - set({ coords: modifierCoords, phase }) { - modifierCoords.x = modifierChange; - modifierCoords.y = modifierChange; - modifierCallPhases.push(phase); - }, - }, - }; - let fired = []; - let modifierCallPhases = []; - coords.client = coords.page; - scope.now = () => coords.timeStamp; - interactable.draggable({ inertia: true }).on('dragstart dragmove dragend draginertiastart', e => fired.push(e)); - // test inertia without modifiers or throw - downStartMoveUp({ x: 100, y: 0, dt: 1000 }); - t.notOk(interaction.inertia.active, '{ modifiers: [] } && !thrown: inertia is not activated'); - // test inertia without modifiers and with throw - downStartMoveUp({ x: 100, y: 0, dt: 10 }); - t.ok(interaction.inertia.active, 'thrown: inertia is activated'); - interactable.draggable({ modifiers: [testModifier] }); - // test inertia with { endOnly: false } modifier and with throw - downStartMoveUp({ x: 100, y: 0, dt: 10 }); - t.deepEqual(modifierCallPhases, [EventPhase.Move], '{ endOnly: false } && thrown: modifier is not called from pointerUp (requireEndOnly)'); - t.deepEqual(fired.map(({ page, type }) => ({ ...page, type })), [ - { x: 0, y: 0, type: 'dragstart' }, - { x: modifierChange, y: modifierChange, type: 'dragmove' }, - { x: modifierChange, y: modifierChange, type: 'draginertiastart' }, - ], '{ endOnly: false } && thrown: move, inertiastart, and end InteractEvents are modified'); - // test inertia with { endOnly: true } modifier and with throw - testModifier.options.endOnly = true; - downStartMoveUp({ x: 100, y: 0, dt: 10 }); - t.deepEqual(modifierCallPhases, [EventPhase.InertiaStart], '{ endOnly: true } && thrown: modifier is called from pointerUp'); - const modified = helpers.getProps(interaction.inertia, ['modifiedXe', 'modifiedYe']); - t.deepEqual(modified, { - // modified target minus move coords - modifiedXe: modifierChange - 100, - modifiedYe: modifierChange - 0, - }, '{ endOnly: true } && thrown: inertia target coords are correct'); - // test smoothEnd with { endOnly: false } modifier - testModifier.options.endOnly = false; - downStartMoveUp({ x: 1, y: 0, dt: 1000 }); - t.notOk(interaction.inertia.active, '{ endOnly: false } && !thrown: inertia smoothEnd is not activated'); - t.deepEqual(modifierCallPhases, [EventPhase.Move, EventPhase.InertiaStart], '{ endOnly: false } && !thrown: modifier is called from pointerUp'); - // test smoothEnd with { endOnly: true } modifier - testModifier.options.endOnly = true; - downStartMoveUp({ x: 1, y: 0, dt: 1000 }); - t.ok(interaction.inertia.active, '{ endOnly: true } && !thrown: inertia smoothEnd is activated'); - t.deepEqual(modifierCallPhases, [EventPhase.InertiaStart], '{ endOnly: true } && !thrown: modifier is called from pointerUp'); - interaction.stop(); - t.end(); - function downStartMoveUp({ x, y, dt }) { - fired = []; - modifierCallPhases = []; - coords.timeStamp = 0; - interaction.stop(); - Object.assign(coords.page, { x: 0, y: 0 }); - interaction.pointerDown(event, event, element); - interaction.start({ name: 'drag' }, interactable, element); - Object.assign(coords.page, { x, y }); - coords.timeStamp = dt; - interaction.pointerMove(event, event, element); - interaction.pointerUp(event, event, element, element); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5lcnRpYS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5lcnRpYS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sSUFBSSxNQUFNLDBCQUEwQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUMzRCxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sT0FBTyxNQUFNLElBQUksQ0FBQTtBQUV4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2xCLE1BQU0sRUFDSixLQUFLLEVBQ0wsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssR0FDTixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQXFCLENBQUE7SUFDckMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sWUFBWSxHQUFHO1FBQ25CLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7UUFDM0IsT0FBTyxFQUFFO1lBQ1AsR0FBRyxDQUFFLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUU7Z0JBQ3BDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFBO2dCQUNqQyxjQUFjLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQTtnQkFDakMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2hDLENBQUM7U0FDRjtLQUNGLENBQUE7SUFFRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUE7SUFDZCxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtJQUUzQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUE7SUFDM0IsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFBO0lBQ2xDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsNkNBQTZDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFL0csMENBQTBDO0lBQzFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMzQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLHdEQUF3RCxDQUFDLENBQUE7SUFFN0YsZ0RBQWdEO0lBQ2hELGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN6QyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLDhCQUE4QixDQUFDLENBQUE7SUFFaEUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLFlBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFNUQsK0RBQStEO0lBQy9ELGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN6QyxDQUFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLHNGQUFzRixDQUFDLENBQUE7SUFDMUksQ0FBQyxDQUFDLFNBQVMsQ0FDVCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQ2xEO1FBQ0UsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtRQUNqQyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQzFELEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtLQUNuRSxFQUNELHVGQUF1RixDQUN4RixDQUFBO0lBRUQsOERBQThEO0lBQzlELFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtJQUNuQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxnRUFBZ0UsQ0FBQyxDQUFBO0lBQzVILE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQ3BGLENBQUMsQ0FBQyxTQUFTLENBQ1QsUUFBUSxFQUNSO1FBQ0Usb0NBQW9DO1FBQ3BDLFVBQVUsRUFBRSxjQUFjLEdBQUcsR0FBRztRQUNoQyxVQUFVLEVBQUUsY0FBYyxHQUFHLENBQUM7S0FDL0IsRUFDRCxnRUFBZ0UsQ0FBQyxDQUFBO0lBRW5FLGtEQUFrRDtJQUNsRCxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDcEMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsbUVBQW1FLENBQUMsQ0FBQTtJQUN4RyxDQUFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsa0VBQWtFLENBQUMsQ0FBQTtJQUUvSSxpREFBaUQ7SUFDakQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO0lBQ25DLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN6QyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLDhEQUE4RCxDQUFDLENBQUE7SUFDaEcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxpRUFBaUUsQ0FBQyxDQUFBO0lBRTdILFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNsQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFUCxTQUFTLGVBQWUsQ0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ3BDLEtBQUssR0FBRyxFQUFFLENBQUE7UUFDVixrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFDdkIsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7UUFDcEIsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFBO1FBRWxCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTlDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTFELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3BDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBQ3JCLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM5QyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZELENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IGRyYWcgZnJvbSAnQGludGVyYWN0anMvYWN0aW9ucy9kcmFnJ1xuaW1wb3J0IHsgRXZlbnRQaGFzZSB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RFdmVudCdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9faGVscGVycydcbmltcG9ydCBpbmVydGlhIGZyb20gJy4vJ1xuXG50ZXN0KCdpbmVydGlhJywgdCA9PiB7XG4gIGNvbnN0IHtcbiAgICBzY29wZSxcbiAgICBpbnRlcmFjdGlvbixcbiAgICB0YXJnZXQsXG4gICAgaW50ZXJhY3RhYmxlLFxuICAgIGNvb3JkcyxcbiAgICBldmVudCxcbiAgfSA9IGhlbHBlcnMudGVzdEVudih7IHBsdWdpbnM6IFtpbmVydGlhLCBkcmFnXSB9KVxuICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gIGNvbnN0IG1vZGlmaWVyQ2hhbmdlID0gNVxuICBjb25zdCB0ZXN0TW9kaWZpZXIgPSB7XG4gICAgb3B0aW9uczogeyBlbmRPbmx5OiBmYWxzZSB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHNldCAoeyBjb29yZHM6IG1vZGlmaWVyQ29vcmRzLCBwaGFzZSB9KSB7XG4gICAgICAgIG1vZGlmaWVyQ29vcmRzLnggPSBtb2RpZmllckNoYW5nZVxuICAgICAgICBtb2RpZmllckNvb3Jkcy55ID0gbW9kaWZpZXJDaGFuZ2VcbiAgICAgICAgbW9kaWZpZXJDYWxsUGhhc2VzLnB1c2gocGhhc2UpXG4gICAgICB9LFxuICAgIH0sXG4gIH1cblxuICBsZXQgZmlyZWQgPSBbXVxuICBsZXQgbW9kaWZpZXJDYWxsUGhhc2VzID0gW11cblxuICBjb29yZHMuY2xpZW50ID0gY29vcmRzLnBhZ2VcbiAgc2NvcGUubm93ID0gKCkgPT4gY29vcmRzLnRpbWVTdGFtcFxuICBpbnRlcmFjdGFibGUuZHJhZ2dhYmxlKHsgaW5lcnRpYTogdHJ1ZSB9KS5vbignZHJhZ3N0YXJ0IGRyYWdtb3ZlIGRyYWdlbmQgZHJhZ2luZXJ0aWFzdGFydCcsIGUgPT4gZmlyZWQucHVzaChlKSlcblxuICAvLyB0ZXN0IGluZXJ0aWEgd2l0aG91dCBtb2RpZmllcnMgb3IgdGhyb3dcbiAgZG93blN0YXJ0TW92ZVVwKHsgeDogMTAwLCB5OiAwLCBkdDogMTAwMCB9KVxuICB0Lm5vdE9rKGludGVyYWN0aW9uLmluZXJ0aWEuYWN0aXZlLCAneyBtb2RpZmllcnM6IFtdIH0gJiYgIXRocm93bjogaW5lcnRpYSBpcyBub3QgYWN0aXZhdGVkJylcblxuICAvLyB0ZXN0IGluZXJ0aWEgd2l0aG91dCBtb2RpZmllcnMgYW5kIHdpdGggdGhyb3dcbiAgZG93blN0YXJ0TW92ZVVwKHsgeDogMTAwLCB5OiAwLCBkdDogMTAgfSlcbiAgdC5vayhpbnRlcmFjdGlvbi5pbmVydGlhLmFjdGl2ZSwgJ3Rocm93bjogaW5lcnRpYSBpcyBhY3RpdmF0ZWQnKVxuXG4gIGludGVyYWN0YWJsZS5kcmFnZ2FibGUoeyBtb2RpZmllcnM6IFt0ZXN0TW9kaWZpZXIgYXMgYW55XSB9KVxuXG4gIC8vIHRlc3QgaW5lcnRpYSB3aXRoIHsgZW5kT25seTogZmFsc2UgfSBtb2RpZmllciBhbmQgd2l0aCB0aHJvd1xuICBkb3duU3RhcnRNb3ZlVXAoeyB4OiAxMDAsIHk6IDAsIGR0OiAxMCB9KVxuICB0LmRlZXBFcXVhbChtb2RpZmllckNhbGxQaGFzZXMsIFtFdmVudFBoYXNlLk1vdmVdLCAneyBlbmRPbmx5OiBmYWxzZSB9ICYmIHRocm93bjogbW9kaWZpZXIgaXMgbm90IGNhbGxlZCBmcm9tIHBvaW50ZXJVcCAocmVxdWlyZUVuZE9ubHkpJylcbiAgdC5kZWVwRXF1YWwoXG4gICAgZmlyZWQubWFwKCh7IHBhZ2UsIHR5cGUgfSkgPT4gKHsgLi4ucGFnZSwgdHlwZSB9KSksXG4gICAgW1xuICAgICAgeyB4OiAwLCB5OiAwLCB0eXBlOiAnZHJhZ3N0YXJ0JyB9LFxuICAgICAgeyB4OiBtb2RpZmllckNoYW5nZSwgeTogbW9kaWZpZXJDaGFuZ2UsIHR5cGU6ICdkcmFnbW92ZScgfSxcbiAgICAgIHsgeDogbW9kaWZpZXJDaGFuZ2UsIHk6IG1vZGlmaWVyQ2hhbmdlLCB0eXBlOiAnZHJhZ2luZXJ0aWFzdGFydCcgfSxcbiAgICBdLFxuICAgICd7IGVuZE9ubHk6IGZhbHNlIH0gJiYgdGhyb3duOiBtb3ZlLCBpbmVydGlhc3RhcnQsIGFuZCBlbmQgSW50ZXJhY3RFdmVudHMgYXJlIG1vZGlmaWVkJ1xuICApXG5cbiAgLy8gdGVzdCBpbmVydGlhIHdpdGggeyBlbmRPbmx5OiB0cnVlIH0gbW9kaWZpZXIgYW5kIHdpdGggdGhyb3dcbiAgdGVzdE1vZGlmaWVyLm9wdGlvbnMuZW5kT25seSA9IHRydWVcbiAgZG93blN0YXJ0TW92ZVVwKHsgeDogMTAwLCB5OiAwLCBkdDogMTAgfSlcbiAgdC5kZWVwRXF1YWwobW9kaWZpZXJDYWxsUGhhc2VzLCBbRXZlbnRQaGFzZS5JbmVydGlhU3RhcnRdLCAneyBlbmRPbmx5OiB0cnVlIH0gJiYgdGhyb3duOiBtb2RpZmllciBpcyBjYWxsZWQgZnJvbSBwb2ludGVyVXAnKVxuICBjb25zdCBtb2RpZmllZCA9IGhlbHBlcnMuZ2V0UHJvcHMoaW50ZXJhY3Rpb24uaW5lcnRpYSwgWydtb2RpZmllZFhlJywgJ21vZGlmaWVkWWUnXSlcbiAgdC5kZWVwRXF1YWwoXG4gICAgbW9kaWZpZWQsXG4gICAge1xuICAgICAgLy8gbW9kaWZpZWQgdGFyZ2V0IG1pbnVzIG1vdmUgY29vcmRzXG4gICAgICBtb2RpZmllZFhlOiBtb2RpZmllckNoYW5nZSAtIDEwMCxcbiAgICAgIG1vZGlmaWVkWWU6IG1vZGlmaWVyQ2hhbmdlIC0gMCxcbiAgICB9LFxuICAgICd7IGVuZE9ubHk6IHRydWUgfSAmJiB0aHJvd246IGluZXJ0aWEgdGFyZ2V0IGNvb3JkcyBhcmUgY29ycmVjdCcpXG5cbiAgLy8gdGVzdCBzbW9vdGhFbmQgd2l0aCB7IGVuZE9ubHk6IGZhbHNlIH0gbW9kaWZpZXJcbiAgdGVzdE1vZGlmaWVyLm9wdGlvbnMuZW5kT25seSA9IGZhbHNlXG4gIGRvd25TdGFydE1vdmVVcCh7IHg6IDEsIHk6IDAsIGR0OiAxMDAwIH0pXG4gIHQubm90T2soaW50ZXJhY3Rpb24uaW5lcnRpYS5hY3RpdmUsICd7IGVuZE9ubHk6IGZhbHNlIH0gJiYgIXRocm93bjogaW5lcnRpYSBzbW9vdGhFbmQgaXMgbm90IGFjdGl2YXRlZCcpXG4gIHQuZGVlcEVxdWFsKG1vZGlmaWVyQ2FsbFBoYXNlcywgW0V2ZW50UGhhc2UuTW92ZSwgRXZlbnRQaGFzZS5JbmVydGlhU3RhcnRdLCAneyBlbmRPbmx5OiBmYWxzZSB9ICYmICF0aHJvd246IG1vZGlmaWVyIGlzIGNhbGxlZCBmcm9tIHBvaW50ZXJVcCcpXG5cbiAgLy8gdGVzdCBzbW9vdGhFbmQgd2l0aCB7IGVuZE9ubHk6IHRydWUgfSBtb2RpZmllclxuICB0ZXN0TW9kaWZpZXIub3B0aW9ucy5lbmRPbmx5ID0gdHJ1ZVxuICBkb3duU3RhcnRNb3ZlVXAoeyB4OiAxLCB5OiAwLCBkdDogMTAwMCB9KVxuICB0Lm9rKGludGVyYWN0aW9uLmluZXJ0aWEuYWN0aXZlLCAneyBlbmRPbmx5OiB0cnVlIH0gJiYgIXRocm93bjogaW5lcnRpYSBzbW9vdGhFbmQgaXMgYWN0aXZhdGVkJylcbiAgdC5kZWVwRXF1YWwobW9kaWZpZXJDYWxsUGhhc2VzLCBbRXZlbnRQaGFzZS5JbmVydGlhU3RhcnRdLCAneyBlbmRPbmx5OiB0cnVlIH0gJiYgIXRocm93bjogbW9kaWZpZXIgaXMgY2FsbGVkIGZyb20gcG9pbnRlclVwJylcblxuICBpbnRlcmFjdGlvbi5zdG9wKClcbiAgdC5lbmQoKVxuXG4gIGZ1bmN0aW9uIGRvd25TdGFydE1vdmVVcCAoeyB4LCB5LCBkdCB9KSB7XG4gICAgZmlyZWQgPSBbXVxuICAgIG1vZGlmaWVyQ2FsbFBoYXNlcyA9IFtdXG4gICAgY29vcmRzLnRpbWVTdGFtcCA9IDBcbiAgICBpbnRlcmFjdGlvbi5zdG9wKClcblxuICAgIE9iamVjdC5hc3NpZ24oY29vcmRzLnBhZ2UsIHsgeDogMCwgeTogMCB9KVxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKGV2ZW50LCBldmVudCwgZWxlbWVudClcblxuICAgIGludGVyYWN0aW9uLnN0YXJ0KHsgbmFtZTogJ2RyYWcnIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcblxuICAgIE9iamVjdC5hc3NpZ24oY29vcmRzLnBhZ2UsIHsgeCwgeSB9KVxuICAgIGNvb3Jkcy50aW1lU3RhbXAgPSBkdFxuICAgIGludGVyYWN0aW9uLnBvaW50ZXJNb3ZlKGV2ZW50LCBldmVudCwgZWxlbWVudClcbiAgICBpbnRlcmFjdGlvbi5wb2ludGVyVXAoZXZlbnQsIGV2ZW50LCBlbGVtZW50LCBlbGVtZW50KVxuICB9XG59KVxuIl19 \ No newline at end of file diff --git a/packages/interact/index.d.ts b/packages/interact/index.d.ts index 921219d70..542b20fdc 100644 --- a/packages/interact/index.d.ts +++ b/packages/interact/index.d.ts @@ -1,10 +1,10 @@ -import * as actions from '@interactjs/actions'; -import autoScroll from '@interactjs/auto-scroll'; -import interactablePreventDefault from '@interactjs/core/interactablePreventDefault'; -import inertia from '@interactjs/inertia'; -import modifiersBase from '@interactjs/modifiers/base'; -import * as pointerEvents from '@interactjs/pointer-events'; -import reflow from '@interactjs/reflow'; +import * as actions from '../actions/index'; +import autoScroll from '../auto-scroll/index'; +import interactablePreventDefault from '../core/interactablePreventDefault'; +import inertia from '../inertia/index'; +import modifiersBase from '../modifiers/base'; +import * as pointerEvents from '../pointer-events/index'; +import reflow from '../reflow/index'; import interact from './interact'; export declare function init(window: Window): import("@interactjs/interact/interact").InteractStatic; export default interact; diff --git a/packages/interact/index.js b/packages/interact/index.js index 089e5b35b..10484d41b 100644 --- a/packages/interact/index.js +++ b/packages/interact/index.js @@ -1,45 +1,50 @@ -import * as actions from '@interactjs/actions'; -import autoScroll from '@interactjs/auto-scroll'; -import * as autoStart from '@interactjs/auto-start'; -import interactablePreventDefault from '@interactjs/core/interactablePreventDefault'; -import devTools from '@interactjs/dev-tools'; -import inertia from '@interactjs/inertia'; -import * as modifiers from '@interactjs/modifiers'; -import modifiersBase from '@interactjs/modifiers/base'; -import * as pointerEvents from '@interactjs/pointer-events'; -import reflow from '@interactjs/reflow'; -import interact, { scope } from './interact'; +import * as actions from "../actions/index.js"; +import autoScroll from "../auto-scroll/index.js"; +import * as autoStart from "../auto-start/index.js"; +import interactablePreventDefault from "../core/interactablePreventDefault.js"; +import devTools from "../dev-tools/index.js"; +import inertia from "../inertia/index.js"; +import modifiersBase from "../modifiers/base.js"; +import * as modifiers from "../modifiers/index.js"; +import * as pointerEvents from "../pointer-events/index.js"; +import reflow from "../reflow/index.js"; +import interact, { scope } from "./interact.js"; export function init(window) { - scope.init(window); - interact.use(interactablePreventDefault); - // pointerEvents - interact.use(pointerEvents); - // inertia - interact.use(inertia); - // autoStart, hold - interact.use(autoStart); - // drag and drop, resize, gesture - interact.use(actions); - // snap, resize, etc. - interact.use(modifiersBase); - // for backwrads compatibility - for (const type in modifiers) { - const { _defaults, _methods } = modifiers[type]; - _defaults._methods = _methods; - scope.defaults.perAction[type] = _defaults; - } - // autoScroll - interact.use(autoScroll); - // reflow - interact.use(reflow); - // eslint-disable-next-line no-undef - if (process.env.NODE_ENV !== 'production') { - interact.use(devTools); - } - return interact; -} -// eslint-disable-next-line no-undef -interact.version = process.env.npm_package_version; + scope.init(window); + interact.use(interactablePreventDefault); // pointerEvents + + interact.use(pointerEvents); // inertia + + interact.use(inertia); // snap, resize, etc. + + interact.use(modifiersBase); // autoStart, hold + + interact.use(autoStart); // drag and drop, resize, gesture + + interact.use(actions); // for backwrads compatibility + + for (const type in modifiers) { + const { + _defaults, + _methods + } = modifiers[type]; + _defaults._methods = _methods; + scope.defaults.perAction[type] = _defaults; + } // autoScroll + + + interact.use(autoScroll); // reflow + + interact.use(reflow); // eslint-disable-next-line no-undef + + if (undefined !== 'production') { + interact.use(devTools); + } + + return interact; +} // eslint-disable-next-line no-undef + +interact.version = "1.7.0"; export default interact; -export { interact, actions, autoScroll, interactablePreventDefault, inertia, modifiersBase as modifiers, pointerEvents, reflow, }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sVUFBVSxNQUFNLHlCQUF5QixDQUFBO0FBQ2hELE9BQU8sS0FBSyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFDbkQsT0FBTywwQkFBMEIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNwRixPQUFPLFFBQVEsTUFBTSx1QkFBdUIsQ0FBQTtBQUM1QyxPQUFPLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQTtBQUN6QyxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFBO0FBQ2xELE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxhQUFhLE1BQU0sNEJBQTRCLENBQUE7QUFDM0QsT0FBTyxNQUFNLE1BQU0sb0JBQW9CLENBQUE7QUFDdkMsT0FBTyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFNUMsTUFBTSxVQUFVLElBQUksQ0FBRSxNQUFjO0lBQ2xDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBRXhDLGdCQUFnQjtJQUNoQixRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRTNCLFVBQVU7SUFDVixRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXJCLGtCQUFrQjtJQUNsQixRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXZCLGlDQUFpQztJQUNqQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXJCLHFCQUFxQjtJQUNyQixRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRTNCLDhCQUE4QjtJQUM5QixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRTtRQUM1QixNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUUvQyxTQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUM3QixLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUE7S0FDM0M7SUFFRCxhQUFhO0lBQ2IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUV4QixTQUFTO0lBQ1QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVwQixvQ0FBb0M7SUFDcEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLEVBQUU7UUFDekMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtLQUN2QjtJQUVELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxvQ0FBb0M7QUFDcEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFBO0FBRWxELGVBQWUsUUFBUSxDQUFBO0FBQ3ZCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFVBQVUsRUFDViwwQkFBMEIsRUFDMUIsT0FBTyxFQUNQLGFBQWEsSUFBSSxTQUFTLEVBQzFCLGFBQWEsRUFDYixNQUFNLEdBQ1AsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnQGludGVyYWN0anMvYWN0aW9ucydcbmltcG9ydCBhdXRvU2Nyb2xsIGZyb20gJ0BpbnRlcmFjdGpzL2F1dG8tc2Nyb2xsJ1xuaW1wb3J0ICogYXMgYXV0b1N0YXJ0IGZyb20gJ0BpbnRlcmFjdGpzL2F1dG8tc3RhcnQnXG5pbXBvcnQgaW50ZXJhY3RhYmxlUHJldmVudERlZmF1bHQgZnJvbSAnQGludGVyYWN0anMvY29yZS9pbnRlcmFjdGFibGVQcmV2ZW50RGVmYXVsdCdcbmltcG9ydCBkZXZUb29scyBmcm9tICdAaW50ZXJhY3Rqcy9kZXYtdG9vbHMnXG5pbXBvcnQgaW5lcnRpYSBmcm9tICdAaW50ZXJhY3Rqcy9pbmVydGlhJ1xuaW1wb3J0ICogYXMgbW9kaWZpZXJzIGZyb20gJ0BpbnRlcmFjdGpzL21vZGlmaWVycydcbmltcG9ydCBtb2RpZmllcnNCYXNlIGZyb20gJ0BpbnRlcmFjdGpzL21vZGlmaWVycy9iYXNlJ1xuaW1wb3J0ICogYXMgcG9pbnRlckV2ZW50cyBmcm9tICdAaW50ZXJhY3Rqcy9wb2ludGVyLWV2ZW50cydcbmltcG9ydCByZWZsb3cgZnJvbSAnQGludGVyYWN0anMvcmVmbG93J1xuaW1wb3J0IGludGVyYWN0LCB7IHNjb3BlIH0gZnJvbSAnLi9pbnRlcmFjdCdcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQgKHdpbmRvdzogV2luZG93KSB7XG4gIHNjb3BlLmluaXQod2luZG93KVxuXG4gIGludGVyYWN0LnVzZShpbnRlcmFjdGFibGVQcmV2ZW50RGVmYXVsdClcblxuICAvLyBwb2ludGVyRXZlbnRzXG4gIGludGVyYWN0LnVzZShwb2ludGVyRXZlbnRzKVxuXG4gIC8vIGluZXJ0aWFcbiAgaW50ZXJhY3QudXNlKGluZXJ0aWEpXG5cbiAgLy8gYXV0b1N0YXJ0LCBob2xkXG4gIGludGVyYWN0LnVzZShhdXRvU3RhcnQpXG5cbiAgLy8gZHJhZyBhbmQgZHJvcCwgcmVzaXplLCBnZXN0dXJlXG4gIGludGVyYWN0LnVzZShhY3Rpb25zKVxuXG4gIC8vIHNuYXAsIHJlc2l6ZSwgZXRjLlxuICBpbnRlcmFjdC51c2UobW9kaWZpZXJzQmFzZSlcblxuICAvLyBmb3IgYmFja3dyYWRzIGNvbXBhdGliaWxpdHlcbiAgZm9yIChjb25zdCB0eXBlIGluIG1vZGlmaWVycykge1xuICAgIGNvbnN0IHsgX2RlZmF1bHRzLCBfbWV0aG9kcyB9ID0gbW9kaWZpZXJzW3R5cGVdXG5cbiAgICBfZGVmYXVsdHMuX21ldGhvZHMgPSBfbWV0aG9kc1xuICAgIHNjb3BlLmRlZmF1bHRzLnBlckFjdGlvblt0eXBlXSA9IF9kZWZhdWx0c1xuICB9XG5cbiAgLy8gYXV0b1Njcm9sbFxuICBpbnRlcmFjdC51c2UoYXV0b1Njcm9sbClcblxuICAvLyByZWZsb3dcbiAgaW50ZXJhY3QudXNlKHJlZmxvdylcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpbnRlcmFjdC51c2UoZGV2VG9vbHMpXG4gIH1cblxuICByZXR1cm4gaW50ZXJhY3Rcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5pbnRlcmFjdC52ZXJzaW9uID0gcHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfdmVyc2lvblxuXG5leHBvcnQgZGVmYXVsdCBpbnRlcmFjdFxuZXhwb3J0IHtcbiAgaW50ZXJhY3QsXG4gIGFjdGlvbnMsXG4gIGF1dG9TY3JvbGwsXG4gIGludGVyYWN0YWJsZVByZXZlbnREZWZhdWx0LFxuICBpbmVydGlhLFxuICBtb2RpZmllcnNCYXNlIGFzIG1vZGlmaWVycyxcbiAgcG9pbnRlckV2ZW50cyxcbiAgcmVmbG93LFxufVxuIl19 \ No newline at end of file +export { interact, actions, autoScroll, interactablePreventDefault, inertia, modifiersBase as modifiers, pointerEvents, reflow }; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/interact/index.js.map b/packages/interact/index.js.map new file mode 100644 index 000000000..d13864c51 --- /dev/null +++ b/packages/interact/index.js.map @@ -0,0 +1,33 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "actions", + "autoScroll", + "autoStart", + "interactablePreventDefault", + "devTools", + "inertia", + "modifiersBase", + "modifiers", + "pointerEvents", + "reflow", + "interact", + "scope", + "init", + "window", + "use", + "type", + "_defaults", + "_methods", + "defaults", + "perAction", + "version" + ], + "mappings": "AAAA,OAAO,KAAKA,OAAZ;AACA,OAAOC,UAAP;AACA,OAAO,KAAKC,SAAZ;AACA,OAAOC,0BAAP;AACA,OAAOC,QAAP;AACA,OAAOC,OAAP;AACA,OAAOC,aAAP;AACA,OAAO,KAAKC,SAAZ;AACA,OAAO,KAAKC,aAAZ;AACA,OAAOC,MAAP;AACA,OAAOC,QAAP,IAAmBC,KAAnB;AAEA,OAAO,SAASC,IAAT,CAAeC,MAAf,EAA+B;AACpCF,EAAAA,KAAK,CAACC,IAAN,CAAWC,MAAX;AAEAH,EAAAA,QAAQ,CAACI,GAAT,CAAaX,0BAAb,EAHoC,CAKpC;;AACAO,EAAAA,QAAQ,CAACI,GAAT,CAAaN,aAAb,EANoC,CAQpC;;AACAE,EAAAA,QAAQ,CAACI,GAAT,CAAaT,OAAb,EAToC,CAWpC;;AACAK,EAAAA,QAAQ,CAACI,GAAT,CAAaR,aAAb,EAZoC,CAcpC;;AACAI,EAAAA,QAAQ,CAACI,GAAT,CAAaZ,SAAb,EAfoC,CAiBpC;;AACAQ,EAAAA,QAAQ,CAACI,GAAT,CAAad,OAAb,EAlBoC,CAoBpC;;AACA,OAAK,MAAMe,IAAX,IAAmBR,SAAnB,EAA8B;AAC5B,UAAM;AAAES,MAAAA,SAAF;AAAaC,MAAAA;AAAb,QAA0BV,SAAS,CAACQ,IAAD,CAAzC;AAEAC,IAAAA,SAAS,CAACC,QAAV,GAAqBA,QAArB;AACAN,IAAAA,KAAK,CAACO,QAAN,CAAeC,SAAf,CAAyBJ,IAAzB,IAAiCC,SAAjC;AACD,GA1BmC,CA4BpC;;;AACAN,EAAAA,QAAQ,CAACI,GAAT,CAAab,UAAb,EA7BoC,CA+BpC;;AACAS,EAAAA,QAAQ,CAACI,GAAT,CAAaL,MAAb,EAhCoC,CAkCpC;;AACA,MAAI,cAAyB,YAA7B,EAA2C;AACzCC,IAAAA,QAAQ,CAACI,GAAT,CAAaV,QAAb;AACD;;AAED,SAAOM,QAAP;AACD,C,CAED;;AACAA,QAAQ,CAACU,OAAT;AAEA,eAAeV,QAAf;AACA,SACEA,QADF,EAEEV,OAFF,EAGEC,UAHF,EAIEE,0BAJF,EAKEE,OALF,EAMEC,aAAa,IAAIC,SANnB,EAOEC,aAPF,EAQEC,MARF", + "sourcesContent": [ + "import * as actions from '../actions/index'\nimport autoScroll from '../auto-scroll/index'\nimport * as autoStart from '../auto-start/index'\nimport interactablePreventDefault from '../core/interactablePreventDefault'\nimport devTools from '../dev-tools/index'\nimport inertia from '../inertia/index'\nimport modifiersBase from '../modifiers/base'\nimport * as modifiers from '../modifiers/index'\nimport * as pointerEvents from '../pointer-events/index'\nimport reflow from '../reflow/index'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window) {\n scope.init(window)\n\n interact.use(interactablePreventDefault)\n\n // pointerEvents\n interact.use(pointerEvents)\n\n // inertia\n interact.use(inertia)\n\n // snap, resize, etc.\n interact.use(modifiersBase)\n\n // autoStart, hold\n interact.use(autoStart)\n\n // drag and drop, resize, gesture\n interact.use(actions)\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type]\n\n _defaults._methods = _methods\n scope.defaults.perAction[type] = _defaults\n }\n\n // autoScroll\n interact.use(autoScroll)\n\n // reflow\n interact.use(reflow)\n\n // eslint-disable-next-line no-undef\n if (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n }\n\n return interact\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = process.env.npm_package_version\n\nexport default interact\nexport {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/interact/interact.d.ts b/packages/interact/interact.d.ts index 8eb19b817..c52143ab4 100644 --- a/packages/interact/interact.d.ts +++ b/packages/interact/interact.d.ts @@ -1,8 +1,8 @@ /** @module interact */ -import { Options } from '@interactjs/core/defaultOptions'; -import Interactable from '@interactjs/core/Interactable'; -import { Scope } from '@interactjs/core/scope'; -import * as utils from '@interactjs/utils'; +import { Options } from '../core/defaultOptions'; +import Interactable from '../core/Interactable'; +import { Scope } from '../core/scope'; +import * as utils from '../utils/index'; declare module '@interactjs/core/scope' { interface Scope { interact: InteractStatic; diff --git a/packages/interact/interact.js b/packages/interact/interact.js index 85ca76b62..8f3ec95c3 100644 --- a/packages/interact/interact.js +++ b/packages/interact/interact.js @@ -1,8 +1,8 @@ /** @module interact */ -import { Scope } from '@interactjs/core/scope'; -import * as utils from '@interactjs/utils'; -import browser from '@interactjs/utils/browser'; -import events from '@interactjs/utils/events'; +import { Scope } from "../core/scope.js"; +import browser from "../utils/browser.js"; +import events from "../utils/events.js"; +import * as utils from "../utils/index.js"; const globalEvents = {}; const scope = new Scope(); /** @@ -30,13 +30,16 @@ const scope = new Scope(); * or CSS selector * @return {Interactable} */ + export const interact = function interact(target, options) { - let interactable = scope.interactables.get(target, options); - if (!interactable) { - interactable = scope.interactables.new(target, options); - interactable.events.global = globalEvents; - } - return interactable; + let interactable = scope.interactables.get(target, options); + + if (!interactable) { + interactable = scope.interactables.new(target, options); + interactable.events.global = globalEvents; + } + + return interactable; }; /** * Use a plugin @@ -47,10 +50,12 @@ export const interact = function interact(target, options) { * @param {function} plugin.install * @return {interact} */ + interact.use = use; + function use(plugin, options) { - scope.usePlugin(plugin, options); - return interact; + scope.usePlugin(plugin, options); + return interact; } /** * Check if an element or selector has been set with the {@link interact} @@ -62,9 +67,12 @@ function use(plugin, options) { * @return {boolean} Indicates if the element or CSS selector was previously * passed to interact */ + + interact.isSet = isSet; + function isSet(target, options) { - return !!scope.interactables.get(target, options && options.context); + return !!scope.interactables.get(target, options && options.context); } /** * Add a global listener for an InteractEvent or adds a DOM event to `document` @@ -77,38 +85,47 @@ function isSet(target, options) { * addEventListener * @return {object} interact */ + + interact.on = on; + function on(type, listener, options) { - if (utils.is.string(type) && type.search(' ') !== -1) { - type = type.trim().split(/ +/); - } - if (utils.is.array(type)) { - for (const eventType of type) { - interact.on(eventType, listener, options); - } - return interact; + if (utils.is.string(type) && type.search(' ') !== -1) { + type = type.trim().split(/ +/); + } + + if (utils.is.array(type)) { + for (const eventType of type) { + interact.on(eventType, listener, options); } - if (utils.is.object(type)) { - for (const prop in type) { - interact.on(prop, type[prop], listener); - } - return interact; + + return interact; + } + + if (utils.is.object(type)) { + for (const prop in type) { + interact.on(prop, type[prop], listener); } - // if it is an InteractEvent type, add listener to globalEvents - if (utils.arr.contains(scope.actions.eventTypes, type)) { - // if this type of event was never bound - if (!globalEvents[type]) { - globalEvents[type] = [listener]; - } - else { - globalEvents[type].push(listener); - } + + return interact; + } // if it is an InteractEvent type, add listener to globalEvents + + + if (utils.arr.contains(scope.actions.eventTypes, type)) { + // if this type of event was never bound + if (!globalEvents[type]) { + globalEvents[type] = [listener]; + } else { + globalEvents[type].push(listener); } - // If non InteractEvent type, addEventListener to document - else { - events.add(scope.document, type, listener, { options }); + } // If non InteractEvent type, addEventListener to document + else { + events.add(scope.document, type, listener, { + options + }); } - return interact; + + return interact; } /** * Removes a global InteractEvent listener or DOM event from `document` @@ -122,47 +139,51 @@ function on(type, listener, options) { * removeEventListener * @return {object} interact */ + + interact.off = off; + function off(type, listener, options) { - if (utils.is.string(type) && type.search(' ') !== -1) { - type = type.trim().split(/ +/); + if (utils.is.string(type) && type.search(' ') !== -1) { + type = type.trim().split(/ +/); + } + + if (utils.is.array(type)) { + for (const eventType of type) { + interact.off(eventType, listener, options); } - if (utils.is.array(type)) { - for (const eventType of type) { - interact.off(eventType, listener, options); - } - return interact; - } - if (utils.is.object(type)) { - for (const prop in type) { - interact.off(prop, type[prop], listener); - } - return interact; - } - if (!utils.arr.contains(scope.actions.eventTypes, type)) { - events.remove(scope.document, type, listener, options); - } - else { - let index; - if (type in globalEvents && - (index = globalEvents[type].indexOf(listener)) !== -1) { - globalEvents[type].splice(index, 1); - } + + return interact; + } + + if (utils.is.object(type)) { + for (const prop in type) { + interact.off(prop, type[prop], listener); } + return interact; + } + + if (!utils.arr.contains(scope.actions.eventTypes, type)) { + events.remove(scope.document, type, listener, options); + } else { + let index; + + if (type in globalEvents && (index = globalEvents[type].indexOf(listener)) !== -1) { + globalEvents[type].splice(index, 1); + } + } + + return interact; } -/** - * Returns an object which exposes internal data - * @alias module:interact.debug - * - * @return {object} An object with properties that outline the current state - * and expose internal functions and variables - */ + interact.debug = debug; + function debug() { - return scope; -} -// expose the functions used to calculate multi-touch properties + return scope; +} // expose the functions used to calculate multi-touch properties + + interact.getPointerAverage = utils.pointer.pointerAverage; interact.getTouchBBox = utils.pointer.touchBBox; interact.getTouchDistance = utils.pointer.touchDistance; @@ -176,18 +197,23 @@ interact.closest = utils.dom.closest; * * @return {boolean} Whether or not the browser supports touch input */ + interact.supportsTouch = supportsTouch; + function supportsTouch() { - return browser.supportsTouch; + return browser.supportsTouch; } /** * @alias module:interact.supportsPointerEvent * * @return {boolean} Whether or not the browser supports PointerEvents */ + + interact.supportsPointerEvent = supportsPointerEvent; + function supportsPointerEvent() { - return browser.supportsPointerEvent; + return browser.supportsPointerEvent; } /** * Cancels all interactions (end events are not fired) @@ -196,12 +222,16 @@ function supportsPointerEvent() { * * @return {object} interact */ + + interact.stop = stop; + function stop() { - for (const interaction of scope.interactions.list) { - interaction.stop(); - } - return interact; + for (const interaction of scope.interactions.list) { + interaction.stop(); + } + + return interact; } /** * Returns or sets the distance the pointer must be moved before an action @@ -212,26 +242,38 @@ function stop() { * @param {number} [newValue] The movement from the start position must be greater than this value * @return {interact | number} */ + + interact.pointerMoveTolerance = pointerMoveTolerance; + function pointerMoveTolerance(newValue) { - if (utils.is.number(newValue)) { - scope.interactions.pointerMoveTolerance = newValue; - return interact; - } - return scope.interactions.pointerMoveTolerance; + if (utils.is.number(newValue)) { + scope.interactions.pointerMoveTolerance = newValue; + return interact; + } + + return scope.interactions.pointerMoveTolerance; } -scope.interactables.signals.on('unset', ({ interactable }) => { - scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1); - // Stop related interactions when an Interactable is unset + +scope.addListeners({ + 'interactable:unset': ({ + interactable + }) => { + scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1); // Stop related interactions when an Interactable is unset + for (const interaction of scope.interactions.list) { - if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) { - interaction.stop(); - } + if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) { + interaction.stop(); + } } + } }); + interact.addDocument = (doc, options) => scope.addDocument(doc, options); + interact.removeDocument = doc => scope.removeDocument(doc); + scope.interact = interact; export { scope }; export default interact; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlcmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUI7QUFJdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzlDLE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUE7QUFDMUMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFnQzdDLE1BQU0sWUFBWSxHQUFRLEVBQUUsQ0FBQTtBQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQW1CLFNBQVMsUUFBUSxDQUFFLE1BQXVCLEVBQUUsT0FBYTtJQUMvRixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFM0QsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNqQixZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZELFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQTtLQUMxQztJQUVELE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQW1CLENBQUE7QUFFbkI7Ozs7Ozs7O0dBUUc7QUFDSCxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtBQUNsQixTQUFTLEdBQUcsQ0FBRSxNQUF1QixFQUFFLE9BQWdDO0lBQ3JFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRWhDLE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtBQUN0QixTQUFTLEtBQUssQ0FBRSxNQUF3QixFQUFFLE9BQWE7SUFDckQsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDdEUsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUNoQixTQUFTLEVBQUUsQ0FBRSxJQUFrQyxFQUFFLFFBQStCLEVBQUUsT0FBUTtJQUN4RixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDcEQsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDL0I7SUFFRCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hCLEtBQUssTUFBTSxTQUFTLElBQUssSUFBYyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUMxQztRQUVELE9BQU8sUUFBUSxDQUFBO0tBQ2hCO0lBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRTtZQUN2QixRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRyxJQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1NBQ2pFO1FBRUQsT0FBTyxRQUFRLENBQUE7S0FDaEI7SUFFRCwrREFBK0Q7SUFDL0QsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUN0RCx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUNoQzthQUNJO1lBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUNsQztLQUNGO0lBQ0QsMERBQTBEO1NBQ3JEO1FBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUE2QixFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtLQUM3RTtJQUVELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0FBQ2xCLFNBQVMsR0FBRyxDQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTztJQUNuQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDcEQsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDL0I7SUFFRCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hCLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxFQUFFO1lBQzVCLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUMzQztRQUVELE9BQU8sUUFBUSxDQUFBO0tBQ2hCO0lBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRTtZQUN2QixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7U0FDekM7UUFFRCxPQUFPLFFBQVEsQ0FBQTtLQUNoQjtJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUN2RCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtLQUN2RDtTQUNJO1FBQ0gsSUFBSSxLQUFLLENBQUE7UUFFVCxJQUFJLElBQUksSUFBSSxZQUFZO1lBQ3BCLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN6RCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtTQUNwQztLQUNGO0lBRUQsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0FBQ3RCLFNBQVMsS0FBSztJQUNaLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxRQUFRLENBQUMsaUJBQWlCLEdBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUE7QUFDMUQsUUFBUSxDQUFDLFlBQVksR0FBUyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQTtBQUNyRCxRQUFRLENBQUMsZ0JBQWdCLEdBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUE7QUFDekQsUUFBUSxDQUFDLGFBQWEsR0FBUSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQTtBQUV0RCxRQUFRLENBQUMsY0FBYyxHQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFBO0FBQ3hELFFBQVEsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFBO0FBQzlELFFBQVEsQ0FBQyxlQUFlLEdBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUE7QUFDekQsUUFBUSxDQUFDLE9BQU8sR0FBZ0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUE7QUFFakQ7Ozs7R0FJRztBQUNILFFBQVEsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO0FBQ3RDLFNBQVMsYUFBYTtJQUNwQixPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUE7QUFDOUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxRQUFRLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUE7QUFDcEQsU0FBUyxvQkFBb0I7SUFDM0IsT0FBTyxPQUFPLENBQUMsb0JBQW9CLENBQUE7QUFDckMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO0FBQ3BCLFNBQVMsSUFBSTtJQUNYLEtBQUssTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7UUFDakQsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFBO0tBQ25CO0lBRUQsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsUUFBUSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFBO0FBQ3BELFNBQVMsb0JBQW9CLENBQUUsUUFBUTtJQUNyQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFBO1FBRWxELE9BQU8sUUFBUSxDQUFBO0tBQ2hCO0lBRUQsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFBO0FBQ2hELENBQUM7QUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO0lBQzNELEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFbEYsMERBQTBEO0lBQzFELEtBQUssTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7UUFDakQsSUFBSSxXQUFXLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ2xHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtTQUNuQjtLQUNGO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFFRixRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDeEUsUUFBUSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFMUQsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7QUFFekIsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFBO0FBQ2hCLGVBQWUsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgaW50ZXJhY3QgKi9cblxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnXG5pbXBvcnQgSW50ZXJhY3RhYmxlIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJ1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgYnJvd3NlciBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9icm93c2VyJ1xuaW1wb3J0IGV2ZW50cyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9ldmVudHMnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgaW50ZXJhY3Q6IEludGVyYWN0U3RhdGljXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmFjdFN0YXRpYyB7XG4gICh0YXJnZXQ6IEludGVyYWN0LlRhcmdldCwgb3B0aW9ucz86IE9wdGlvbnMpOiBJbnRlcmFjdGFibGVcbiAgb246IHR5cGVvZiBvblxuICBwb2ludGVyTW92ZVRvbGVyYW5jZTogdHlwZW9mIHBvaW50ZXJNb3ZlVG9sZXJhbmNlXG4gIHN0b3A6IHR5cGVvZiBzdG9wXG4gIHN1cHBvcnRzUG9pbnRlckV2ZW50OiB0eXBlb2Ygc3VwcG9ydHNQb2ludGVyRXZlbnRcbiAgc3VwcG9ydHNUb3VjaDogdHlwZW9mIHN1cHBvcnRzVG91Y2hcbiAgZGVidWc6IHR5cGVvZiBkZWJ1Z1xuICBvZmY6IHR5cGVvZiBvZmZcbiAgaXNTZXQ6IHR5cGVvZiBpc1NldFxuICB1c2U6IHR5cGVvZiB1c2VcbiAgZ2V0UG9pbnRlckF2ZXJhZ2U6IHR5cGVvZiB1dGlscy5wb2ludGVyLnBvaW50ZXJBdmVyYWdlXG4gIGdldFRvdWNoQkJveDogdHlwZW9mIHV0aWxzLnBvaW50ZXIudG91Y2hCQm94XG4gIGdldFRvdWNoRGlzdGFuY2U6IHR5cGVvZiB1dGlscy5wb2ludGVyLnRvdWNoRGlzdGFuY2VcbiAgZ2V0VG91Y2hBbmdsZTogdHlwZW9mIHV0aWxzLnBvaW50ZXIudG91Y2hBbmdsZVxuICBnZXRFbGVtZW50UmVjdDogdHlwZW9mIHV0aWxzLmRvbS5nZXRFbGVtZW50UmVjdFxuICBnZXRFbGVtZW50Q2xpZW50UmVjdDogdHlwZW9mIHV0aWxzLmRvbS5nZXRFbGVtZW50Q2xpZW50UmVjdFxuICBtYXRjaGVzU2VsZWN0b3I6IHR5cGVvZiB1dGlscy5kb20ubWF0Y2hlc1NlbGVjdG9yXG4gIGNsb3Nlc3Q6IHR5cGVvZiB1dGlscy5kb20uY2xvc2VzdFxuICBhZGREb2N1bWVudDogdHlwZW9mIHNjb3BlLmFkZERvY3VtZW50XG4gIHJlbW92ZURvY3VtZW50OiB0eXBlb2Ygc2NvcGUucmVtb3ZlRG9jdW1lbnRcbiAgdmVyc2lvbjogc3RyaW5nXG59XG5cbmNvbnN0IGdsb2JhbEV2ZW50czogYW55ID0ge31cbmNvbnN0IHNjb3BlID0gbmV3IFNjb3BlKClcblxuLyoqXG4gKiBgYGBqc1xuICogaW50ZXJhY3QoJyNkcmFnZ2FibGUnKS5kcmFnZ2FibGUodHJ1ZSlcbiAqXG4gKiB2YXIgcmVjdGFibGVzID0gaW50ZXJhY3QoJ3JlY3QnKVxuICogcmVjdGFibGVzXG4gKiAgIC5nZXN0dXJhYmxlKHRydWUpXG4gKiAgIC5vbignZ2VzdHVyZW1vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAqICAgICAgIC8vIC4uLlxuICogICB9KVxuICogYGBgXG4gKlxuICogVGhlIG1ldGhvZHMgb2YgdGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzZXQgZWxlbWVudHMgYXMgaW50ZXJhY3RhYmxlc1xuICogYW5kIGFsc28gdG8gY2hhbmdlIHZhcmlvdXMgZGVmYXVsdCBzZXR0aW5ncy5cbiAqXG4gKiBDYWxsaW5nIGl0IGFzIGEgZnVuY3Rpb24gYW5kIHBhc3NpbmcgYW4gZWxlbWVudCBvciBhIHZhbGlkIENTUyBzZWxlY3RvclxuICogc3RyaW5nIHJldHVybnMgYW4gSW50ZXJhY3RhYmxlIG9iamVjdCB3aGljaCBoYXMgdmFyaW91cyBtZXRob2RzIHRvIGNvbmZpZ3VyZVxuICogaXQuXG4gKlxuICogQGdsb2JhbFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudCB8IHN0cmluZ30gdGFyZ2V0IFRoZSBIVE1MIG9yIFNWRyBFbGVtZW50IHRvIGludGVyYWN0IHdpdGhcbiAqIG9yIENTUyBzZWxlY3RvclxuICogQHJldHVybiB7SW50ZXJhY3RhYmxlfVxuICovXG5leHBvcnQgY29uc3QgaW50ZXJhY3Q6IEludGVyYWN0U3RhdGljID0gZnVuY3Rpb24gaW50ZXJhY3QgKHRhcmdldDogSW50ZXJhY3QuVGFyZ2V0LCBvcHRpb25zPzogYW55KSB7XG4gIGxldCBpbnRlcmFjdGFibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLmdldCh0YXJnZXQsIG9wdGlvbnMpXG5cbiAgaWYgKCFpbnRlcmFjdGFibGUpIHtcbiAgICBpbnRlcmFjdGFibGUgPSBzY29wZS5pbnRlcmFjdGFibGVzLm5ldyh0YXJnZXQsIG9wdGlvbnMpXG4gICAgaW50ZXJhY3RhYmxlLmV2ZW50cy5nbG9iYWwgPSBnbG9iYWxFdmVudHNcbiAgfVxuXG4gIHJldHVybiBpbnRlcmFjdGFibGVcbn0gYXMgSW50ZXJhY3RTdGF0aWNcblxuLyoqXG4gKiBVc2UgYSBwbHVnaW5cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOmludGVyYWN0LnVzZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBsdWdpbi5pbnN0YWxsXG4gKiBAcmV0dXJuIHtpbnRlcmFjdH1cbiAqL1xuaW50ZXJhY3QudXNlID0gdXNlXG5mdW5jdGlvbiB1c2UgKHBsdWdpbjogSW50ZXJhY3QuUGx1Z2luLCBvcHRpb25zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBzY29wZS51c2VQbHVnaW4ocGx1Z2luLCBvcHRpb25zKVxuXG4gIHJldHVybiBpbnRlcmFjdFxufVxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGVsZW1lbnQgb3Igc2VsZWN0b3IgaGFzIGJlZW4gc2V0IHdpdGggdGhlIHtAbGluayBpbnRlcmFjdH1cbiAqIGZ1bmN0aW9uXG4gKlxuICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5pc1NldFxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgRWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3JcbiAqIEByZXR1cm4ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB0aGUgZWxlbWVudCBvciBDU1Mgc2VsZWN0b3Igd2FzIHByZXZpb3VzbHlcbiAqIHBhc3NlZCB0byBpbnRlcmFjdFxuICovXG5pbnRlcmFjdC5pc1NldCA9IGlzU2V0XG5mdW5jdGlvbiBpc1NldCAodGFyZ2V0OiBJbnRlcmFjdC5FbGVtZW50LCBvcHRpb25zPzogYW55KSB7XG4gIHJldHVybiAhIXNjb3BlLmludGVyYWN0YWJsZXMuZ2V0KHRhcmdldCwgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQpXG59XG5cbi8qKlxuICogQWRkIGEgZ2xvYmFsIGxpc3RlbmVyIGZvciBhbiBJbnRlcmFjdEV2ZW50IG9yIGFkZHMgYSBET00gZXZlbnQgdG8gYGRvY3VtZW50YFxuICpcbiAqIEBhbGlhcyBtb2R1bGU6aW50ZXJhY3Qub25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5IHwgb2JqZWN0fSB0eXBlIFRoZSB0eXBlcyBvZiBldmVudHMgdG8gbGlzdGVuIGZvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIGV2ZW50IChzKVxuICogQHBhcmFtIHtvYmplY3QgfCBib29sZWFufSBbb3B0aW9uc10gb2JqZWN0IG9yIHVzZUNhcHR1cmUgZmxhZyBmb3JcbiAqIGFkZEV2ZW50TGlzdGVuZXJcbiAqIEByZXR1cm4ge29iamVjdH0gaW50ZXJhY3RcbiAqL1xuaW50ZXJhY3Qub24gPSBvblxuZnVuY3Rpb24gb24gKHR5cGU6IHN0cmluZyB8IEludGVyYWN0LkV2ZW50VHlwZXMsIGxpc3RlbmVyOiBJbnRlcmFjdC5MaXN0ZW5lcnNBcmcsIG9wdGlvbnM/KSB7XG4gIGlmICh1dGlscy5pcy5zdHJpbmcodHlwZSkgJiYgdHlwZS5zZWFyY2goJyAnKSAhPT0gLTEpIHtcbiAgICB0eXBlID0gdHlwZS50cmltKCkuc3BsaXQoLyArLylcbiAgfVxuXG4gIGlmICh1dGlscy5pcy5hcnJheSh0eXBlKSkge1xuICAgIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mICh0eXBlIGFzIGFueVtdKSkge1xuICAgICAgaW50ZXJhY3Qub24oZXZlbnRUeXBlLCBsaXN0ZW5lciwgb3B0aW9ucylcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJhY3RcbiAgfVxuXG4gIGlmICh1dGlscy5pcy5vYmplY3QodHlwZSkpIHtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gdHlwZSkge1xuICAgICAgaW50ZXJhY3Qub24ocHJvcCwgKHR5cGUgYXMgSW50ZXJhY3QuRXZlbnRUeXBlcylbcHJvcF0sIGxpc3RlbmVyKVxuICAgIH1cblxuICAgIHJldHVybiBpbnRlcmFjdFxuICB9XG5cbiAgLy8gaWYgaXQgaXMgYW4gSW50ZXJhY3RFdmVudCB0eXBlLCBhZGQgbGlzdGVuZXIgdG8gZ2xvYmFsRXZlbnRzXG4gIGlmICh1dGlscy5hcnIuY29udGFpbnMoc2NvcGUuYWN0aW9ucy5ldmVudFR5cGVzLCB0eXBlKSkge1xuICAgIC8vIGlmIHRoaXMgdHlwZSBvZiBldmVudCB3YXMgbmV2ZXIgYm91bmRcbiAgICBpZiAoIWdsb2JhbEV2ZW50c1t0eXBlXSkge1xuICAgICAgZ2xvYmFsRXZlbnRzW3R5cGVdID0gW2xpc3RlbmVyXVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGdsb2JhbEV2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKVxuICAgIH1cbiAgfVxuICAvLyBJZiBub24gSW50ZXJhY3RFdmVudCB0eXBlLCBhZGRFdmVudExpc3RlbmVyIHRvIGRvY3VtZW50XG4gIGVsc2Uge1xuICAgIGV2ZW50cy5hZGQoc2NvcGUuZG9jdW1lbnQsIHR5cGUsIGxpc3RlbmVyIGFzIEludGVyYWN0Lkxpc3RlbmVyLCB7IG9wdGlvbnMgfSlcbiAgfVxuXG4gIHJldHVybiBpbnRlcmFjdFxufVxuXG4vKipcbiAqIFJlbW92ZXMgYSBnbG9iYWwgSW50ZXJhY3RFdmVudCBsaXN0ZW5lciBvciBET00gZXZlbnQgZnJvbSBgZG9jdW1lbnRgXG4gKlxuICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5vZmZcbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5IHwgb2JqZWN0fSB0eXBlIFRoZSB0eXBlcyBvZiBldmVudHMgdGhhdCB3ZXJlIGxpc3RlbmVkXG4gKiBmb3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW59IG9wdGlvbnMgW29wdGlvbnNdIG9iamVjdCBvciB1c2VDYXB0dXJlIGZsYWcgZm9yXG4gKiByZW1vdmVFdmVudExpc3RlbmVyXG4gKiBAcmV0dXJuIHtvYmplY3R9IGludGVyYWN0XG4gKi9cbmludGVyYWN0Lm9mZiA9IG9mZlxuZnVuY3Rpb24gb2ZmICh0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICBpZiAodXRpbHMuaXMuc3RyaW5nKHR5cGUpICYmIHR5cGUuc2VhcmNoKCcgJykgIT09IC0xKSB7XG4gICAgdHlwZSA9IHR5cGUudHJpbSgpLnNwbGl0KC8gKy8pXG4gIH1cblxuICBpZiAodXRpbHMuaXMuYXJyYXkodHlwZSkpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiB0eXBlKSB7XG4gICAgICBpbnRlcmFjdC5vZmYoZXZlbnRUeXBlLCBsaXN0ZW5lciwgb3B0aW9ucylcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJhY3RcbiAgfVxuXG4gIGlmICh1dGlscy5pcy5vYmplY3QodHlwZSkpIHtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gdHlwZSkge1xuICAgICAgaW50ZXJhY3Qub2ZmKHByb3AsIHR5cGVbcHJvcF0sIGxpc3RlbmVyKVxuICAgIH1cblxuICAgIHJldHVybiBpbnRlcmFjdFxuICB9XG5cbiAgaWYgKCF1dGlscy5hcnIuY29udGFpbnMoc2NvcGUuYWN0aW9ucy5ldmVudFR5cGVzLCB0eXBlKSkge1xuICAgIGV2ZW50cy5yZW1vdmUoc2NvcGUuZG9jdW1lbnQsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKVxuICB9XG4gIGVsc2Uge1xuICAgIGxldCBpbmRleFxuXG4gICAgaWYgKHR5cGUgaW4gZ2xvYmFsRXZlbnRzICYmXG4gICAgICAgIChpbmRleCA9IGdsb2JhbEV2ZW50c1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKSkgIT09IC0xKSB7XG4gICAgICBnbG9iYWxFdmVudHNbdHlwZV0uc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbnRlcmFjdFxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdoaWNoIGV4cG9zZXMgaW50ZXJuYWwgZGF0YVxuICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5kZWJ1Z1xuICpcbiAqIEByZXR1cm4ge29iamVjdH0gQW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyB0aGF0IG91dGxpbmUgdGhlIGN1cnJlbnQgc3RhdGVcbiAqIGFuZCBleHBvc2UgaW50ZXJuYWwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXNcbiAqL1xuaW50ZXJhY3QuZGVidWcgPSBkZWJ1Z1xuZnVuY3Rpb24gZGVidWcgKCkge1xuICByZXR1cm4gc2NvcGVcbn1cblxuLy8gZXhwb3NlIHRoZSBmdW5jdGlvbnMgdXNlZCB0byBjYWxjdWxhdGUgbXVsdGktdG91Y2ggcHJvcGVydGllc1xuaW50ZXJhY3QuZ2V0UG9pbnRlckF2ZXJhZ2UgID0gdXRpbHMucG9pbnRlci5wb2ludGVyQXZlcmFnZVxuaW50ZXJhY3QuZ2V0VG91Y2hCQm94ICAgICAgID0gdXRpbHMucG9pbnRlci50b3VjaEJCb3hcbmludGVyYWN0LmdldFRvdWNoRGlzdGFuY2UgICA9IHV0aWxzLnBvaW50ZXIudG91Y2hEaXN0YW5jZVxuaW50ZXJhY3QuZ2V0VG91Y2hBbmdsZSAgICAgID0gdXRpbHMucG9pbnRlci50b3VjaEFuZ2xlXG5cbmludGVyYWN0LmdldEVsZW1lbnRSZWN0ICAgICAgID0gdXRpbHMuZG9tLmdldEVsZW1lbnRSZWN0XG5pbnRlcmFjdC5nZXRFbGVtZW50Q2xpZW50UmVjdCA9IHV0aWxzLmRvbS5nZXRFbGVtZW50Q2xpZW50UmVjdFxuaW50ZXJhY3QubWF0Y2hlc1NlbGVjdG9yICAgICAgPSB1dGlscy5kb20ubWF0Y2hlc1NlbGVjdG9yXG5pbnRlcmFjdC5jbG9zZXN0ICAgICAgICAgICAgICA9IHV0aWxzLmRvbS5jbG9zZXN0XG5cbi8qKlxuICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5zdXBwb3J0c1RvdWNoXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdG91Y2ggaW5wdXRcbiAqL1xuaW50ZXJhY3Quc3VwcG9ydHNUb3VjaCA9IHN1cHBvcnRzVG91Y2hcbmZ1bmN0aW9uIHN1cHBvcnRzVG91Y2ggKCkge1xuICByZXR1cm4gYnJvd3Nlci5zdXBwb3J0c1RvdWNoXG59XG5cbi8qKlxuICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5zdXBwb3J0c1BvaW50ZXJFdmVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBicm93c2VyIHN1cHBvcnRzIFBvaW50ZXJFdmVudHNcbiAqL1xuaW50ZXJhY3Quc3VwcG9ydHNQb2ludGVyRXZlbnQgPSBzdXBwb3J0c1BvaW50ZXJFdmVudFxuZnVuY3Rpb24gc3VwcG9ydHNQb2ludGVyRXZlbnQgKCkge1xuICByZXR1cm4gYnJvd3Nlci5zdXBwb3J0c1BvaW50ZXJFdmVudFxufVxuXG4vKipcbiAqIENhbmNlbHMgYWxsIGludGVyYWN0aW9ucyAoZW5kIGV2ZW50cyBhcmUgbm90IGZpcmVkKVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6aW50ZXJhY3Quc3RvcFxuICpcbiAqIEByZXR1cm4ge29iamVjdH0gaW50ZXJhY3RcbiAqL1xuaW50ZXJhY3Quc3RvcCA9IHN0b3BcbmZ1bmN0aW9uIHN0b3AgKCkge1xuICBmb3IgKGNvbnN0IGludGVyYWN0aW9uIG9mIHNjb3BlLmludGVyYWN0aW9ucy5saXN0KSB7XG4gICAgaW50ZXJhY3Rpb24uc3RvcCgpXG4gIH1cblxuICByZXR1cm4gaW50ZXJhY3Rcbn1cblxuLyoqXG4gKiBSZXR1cm5zIG9yIHNldHMgdGhlIGRpc3RhbmNlIHRoZSBwb2ludGVyIG11c3QgYmUgbW92ZWQgYmVmb3JlIGFuIGFjdGlvblxuICogc2VxdWVuY2Ugb2NjdXJzLiBUaGlzIGFsc28gYWZmZWN0cyB0b2xlcmFuY2UgZm9yIHRhcCBldmVudHMuXG4gKlxuICogQGFsaWFzIG1vZHVsZTppbnRlcmFjdC5wb2ludGVyTW92ZVRvbGVyYW5jZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbmV3VmFsdWVdIFRoZSBtb3ZlbWVudCBmcm9tIHRoZSBzdGFydCBwb3NpdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlXG4gKiBAcmV0dXJuIHtpbnRlcmFjdCB8IG51bWJlcn1cbiAqL1xuaW50ZXJhY3QucG9pbnRlck1vdmVUb2xlcmFuY2UgPSBwb2ludGVyTW92ZVRvbGVyYW5jZVxuZnVuY3Rpb24gcG9pbnRlck1vdmVUb2xlcmFuY2UgKG5ld1ZhbHVlKSB7XG4gIGlmICh1dGlscy5pcy5udW1iZXIobmV3VmFsdWUpKSB7XG4gICAgc2NvcGUuaW50ZXJhY3Rpb25zLnBvaW50ZXJNb3ZlVG9sZXJhbmNlID0gbmV3VmFsdWVcblxuICAgIHJldHVybiBpbnRlcmFjdFxuICB9XG5cbiAgcmV0dXJuIHNjb3BlLmludGVyYWN0aW9ucy5wb2ludGVyTW92ZVRvbGVyYW5jZVxufVxuXG5zY29wZS5pbnRlcmFjdGFibGVzLnNpZ25hbHMub24oJ3Vuc2V0JywgKHsgaW50ZXJhY3RhYmxlIH0pID0+IHtcbiAgc2NvcGUuaW50ZXJhY3RhYmxlcy5saXN0LnNwbGljZShzY29wZS5pbnRlcmFjdGFibGVzLmxpc3QuaW5kZXhPZihpbnRlcmFjdGFibGUpLCAxKVxuXG4gIC8vIFN0b3AgcmVsYXRlZCBpbnRlcmFjdGlvbnMgd2hlbiBhbiBJbnRlcmFjdGFibGUgaXMgdW5zZXRcbiAgZm9yIChjb25zdCBpbnRlcmFjdGlvbiBvZiBzY29wZS5pbnRlcmFjdGlvbnMubGlzdCkge1xuICAgIGlmIChpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUgPT09IGludGVyYWN0YWJsZSAmJiBpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmICFpbnRlcmFjdGlvbi5fZW5kaW5nKSB7XG4gICAgICBpbnRlcmFjdGlvbi5zdG9wKClcbiAgICB9XG4gIH1cbn0pXG5cbmludGVyYWN0LmFkZERvY3VtZW50ID0gKGRvYywgb3B0aW9ucykgPT4gc2NvcGUuYWRkRG9jdW1lbnQoZG9jLCBvcHRpb25zKVxuaW50ZXJhY3QucmVtb3ZlRG9jdW1lbnQgPSBkb2MgPT4gc2NvcGUucmVtb3ZlRG9jdW1lbnQoZG9jKVxuXG5zY29wZS5pbnRlcmFjdCA9IGludGVyYWN0XG5cbmV4cG9ydCB7IHNjb3BlIH1cbmV4cG9ydCBkZWZhdWx0IGludGVyYWN0XG4iXX0= \ No newline at end of file +//# sourceMappingURL=interact.js.map \ No newline at end of file diff --git a/packages/interact/interact.js.map b/packages/interact/interact.js.map new file mode 100644 index 000000000..62f7e49bc --- /dev/null +++ b/packages/interact/interact.js.map @@ -0,0 +1,85 @@ +{ + "version": 3, + "sources": [ + "interact.ts" + ], + "names": [ + "Scope", + "browser", + "events", + "utils", + "globalEvents", + "scope", + "interact", + "target", + "options", + "interactable", + "interactables", + "get", + "new", + "global", + "use", + "plugin", + "usePlugin", + "isSet", + "context", + "on", + "type", + "listener", + "is", + "string", + "search", + "trim", + "split", + "array", + "eventType", + "object", + "prop", + "arr", + "contains", + "actions", + "eventTypes", + "push", + "add", + "document", + "off", + "remove", + "index", + "indexOf", + "splice", + "debug", + "getPointerAverage", + "pointer", + "pointerAverage", + "getTouchBBox", + "touchBBox", + "getTouchDistance", + "touchDistance", + "getTouchAngle", + "touchAngle", + "getElementRect", + "dom", + "getElementClientRect", + "matchesSelector", + "closest", + "supportsTouch", + "supportsPointerEvent", + "stop", + "interaction", + "interactions", + "list", + "pointerMoveTolerance", + "newValue", + "number", + "addListeners", + "interacting", + "_ending", + "addDocument", + "doc", + "removeDocument" + ], + "mappings": "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", + "sourcesContent": [ + "/** @module interact */\n\nimport { Options } from '../core/defaultOptions'\nimport Interactable from '../core/Interactable'\nimport { Scope } from '../core/scope'\nimport browser from '../utils/browser'\nimport events from '../utils/events'\nimport * as utils from '../utils/index'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n */\ninteract.use = use\nfunction use (plugin: Interact.Plugin, options?: { [key: string]: any }) {\n scope.usePlugin(plugin, options)\n\n return interact\n}\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\ninteract.isSet = isSet\nfunction isSet (target: Interact.Element, options?: any) {\n return !!scope.interactables.get(target, options && options.context)\n}\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\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.addListeners({\n 'interactable:unset': ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) {\n interaction.stop()\n }\n }\n },\n})\n\ninteract.addDocument = (doc, options) => scope.addDocument(doc, options)\ninteract.removeDocument = doc => scope.removeDocument(doc)\n\nscope.interact = interact\n\nexport { scope }\nexport default interact\n" + ] +} \ No newline at end of file diff --git a/packages/interact/interact.spec.js b/packages/interact/interact.spec.js deleted file mode 100644 index c86eae21b..000000000 --- a/packages/interact/interact.spec.js +++ /dev/null @@ -1,55 +0,0 @@ -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(new JSDOM('').window); - 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'); - t.strictEqual(scope.interactions.list.length, 0, 'unset interactions are removed'); - const constructsUniqueMessage = 'unique contexts make unique interactables with identical targets'; - const doc1 = new JSDOM('').window.document; - const doc2 = new JSDOM('').window.document; - 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); - const doc3 = new JSDOM('').window.document; - const prevDocCount = scope.documents.length; - interact.addDocument(doc3, { events: { passive: false } }); - t.deepEqual(scope.documents[prevDocCount], { doc: doc3, options: { events: { passive: false } } }, 'interact.addDocument() adds to scope with options'); - interact.removeDocument(doc3); - t.equal(scope.documents.length, prevDocCount, 'interact.removeDocument() removes document from scope'); - scope.interactables.list.forEach(i => i.unset()); - const plugin1 = { id: 'test-1', install() { plugin1.count++; }, count: 0 }; - const plugin2 = { id: undefined, install() { plugin2.count++; }, count: 0 }; - interact.use(plugin1); - interact.use(plugin2); - t.deepEqual([plugin1.count, plugin2.count], [1, 1], 'new plugin install methods are called'); - interact.use({ ...plugin1 }); - t.deepEqual([plugin1.count, plugin2.count], [1, 1], 'different plugin object with same id not installed'); - interact.use(plugin2); - t.deepEqual([plugin1.count, plugin2.count], [1, 1], 'plugin without id not re-installed'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Quc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVyYWN0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ3JELE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTVDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWhDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsWUFBWSxLQUFLLENBQUMsWUFBWSxFQUNsRCxpREFBaUQsQ0FBQyxDQUFBO0lBQ3BELENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsRUFDekMsNERBQTRELENBQUMsQ0FBQTtJQUMvRCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQ3hDLHFDQUFxQyxDQUFDLENBQUE7SUFFeEMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFDeEMsaUNBQWlDLENBQUMsQ0FBQTtJQUNwQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQzdDLGdDQUFnQyxDQUFDLENBQUE7SUFFbkMsTUFBTSx1QkFBdUIsR0FDM0Isa0VBQWtFLENBQUE7SUFF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RSxDQUFDLEVBQUUsQ0FBQTtJQUUzRSxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFckIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLHVDQUF1QyxDQUFDLENBQUE7SUFFNUYsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUM1QixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0RBQW9ELENBQUMsQ0FBQTtJQUV6RyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFBO0lBRXpGLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSlNET00gfSBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvZG9tYXRvcidcbmltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IGludGVyYWN0LCB7IHNjb3BlIH0gZnJvbSAnLi9pbnRlcmFjdCdcblxudGVzdCgnaW50ZXJhY3QgZXhwb3J0JywgdCA9PiB7XG4gIHNjb3BlLmluaXQobmV3IEpTRE9NKCcnKS53aW5kb3cpXG5cbiAgY29uc3QgaW50ZXJhY3RhYmxlMSA9IGludGVyYWN0KCdzZWxlY3RvcicpXG4gIHQuYXNzZXJ0KGludGVyYWN0YWJsZTEgaW5zdGFuY2VvZiBzY29wZS5JbnRlcmFjdGFibGUsXG4gICAgJ2ludGVyYWN0IGZ1bmN0aW9uIHJldHVybnMgSW50ZXJhY3RhYmxlIGluc3RhbmNlJylcbiAgdC5lcXVhbChpbnRlcmFjdCgnc2VsZWN0b3InKSwgaW50ZXJhY3RhYmxlMSxcbiAgICAnc2FtZSBpbnRlcmFjdGFibGUgaXMgcmV0dXJuZWQgd2l0aCBzYW1lIHRhcmdldCBhbmQgY29udGV4dCcpXG4gIHQuZXF1YWwoc2NvcGUuaW50ZXJhY3RhYmxlcy5saXN0Lmxlbmd0aCwgMSxcbiAgICAnbmV3IGludGVyYWN0YWJsZXMgYXJlIGFkZGVkIHRvIGxpc3QnKVxuXG4gIGludGVyYWN0YWJsZTEudW5zZXQoKVxuICB0LmVxdWFsKHNjb3BlLmludGVyYWN0YWJsZXMubGlzdC5sZW5ndGgsIDAsXG4gICAgJ3Vuc2V0IGludGVyYWN0YWJsZXMgYXJlIHJlbW92ZWQnKVxuICB0LnN0cmljdEVxdWFsKHNjb3BlLmludGVyYWN0aW9ucy5saXN0Lmxlbmd0aCwgMCxcbiAgICAndW5zZXQgaW50ZXJhY3Rpb25zIGFyZSByZW1vdmVkJylcblxuICBjb25zdCBjb25zdHJ1Y3RzVW5pcXVlTWVzc2FnZSA9XG4gICAgJ3VuaXF1ZSBjb250ZXh0cyBtYWtlIHVuaXF1ZSBpbnRlcmFjdGFibGVzIHdpdGggaWRlbnRpY2FsIHRhcmdldHMnXG5cbiAgY29uc3QgZG9jMSA9IG5ldyBKU0RPTSgnJykud2luZG93LmRvY3VtZW50XG4gIGNvbnN0IGRvYzIgPSBuZXcgSlNET00oJycpLndpbmRvdy5kb2N1bWVudFxuICBjb25zdCByZXN1bHRzID0gW1xuICAgIFsncmVwZWF0JywgZG9jMV0sXG4gICAgWydyZXBlYXQnLCBkb2MyXSxcbiAgICBbZG9jMSwgZG9jMV0sXG4gICAgW2RvYzIuYm9keSwgZG9jMl0sXG4gIF0ucmVkdWNlKChhY2MsIFt0YXJnZXQsIGNvbnRleHRdKSA9PiB7XG4gICAgY29uc3QgaW50ZXJhY3RhYmxlID0gaW50ZXJhY3QodGFyZ2V0LCB7IGNvbnRleHQgfSlcblxuICAgIGlmIChhY2MuaW5jbHVkZXMoaW50ZXJhY3RhYmxlKSkge1xuICAgICAgdC5mYWlsKGNvbnN0cnVjdHNVbmlxdWVNZXNzYWdlKVxuICAgIH1cblxuICAgIGFjYy5wdXNoKHsgaW50ZXJhY3RhYmxlLCB0YXJnZXQsIGNvbnRleHQgfSlcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdKVxuXG4gIHQucGFzcyhjb25zdHJ1Y3RzVW5pcXVlTWVzc2FnZSlcblxuICBjb25zdCBnZXRzVW5pcXVlTWVzc2FnZSA9XG4gICAgJ2ludGVyYWN0aW9ucy5nZXQgcmV0dXJucyBjb3JyZWN0IHJlc3VsdCB3aXRoIGlkZW50aWNhbCB0YXJnZXRzIGFuZCBkaWZmZXJlbnQgY29udGV4dHMnXG5cbiAgZm9yIChjb25zdCB7IGludGVyYWN0YWJsZSwgdGFyZ2V0LCBjb250ZXh0IH0gb2YgcmVzdWx0cykge1xuICAgIGlmIChzY29wZS5pbnRlcmFjdGFibGVzLmdldCh0YXJnZXQsIHsgY29udGV4dCB9KSAhPT0gaW50ZXJhY3RhYmxlKSB7XG4gICAgICB0LmZhaWwoZ2V0c1VuaXF1ZU1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgdC5wYXNzKGdldHNVbmlxdWVNZXNzYWdlKVxuXG4gIGNvbnN0IGRvYzMgPSBuZXcgSlNET00oJycpLndpbmRvdy5kb2N1bWVudFxuXG4gIGNvbnN0IHByZXZEb2NDb3VudCA9IHNjb3BlLmRvY3VtZW50cy5sZW5ndGhcblxuICBpbnRlcmFjdC5hZGREb2N1bWVudChkb2MzLCB7IGV2ZW50czogeyBwYXNzaXZlOiBmYWxzZSB9IH0pXG4gIHQuZGVlcEVxdWFsKFxuICAgIHNjb3BlLmRvY3VtZW50c1twcmV2RG9jQ291bnRdLFxuICAgIHsgZG9jOiBkb2MzLCBvcHRpb25zOiB7IGV2ZW50czogeyBwYXNzaXZlOiBmYWxzZSB9IH0gfSxcbiAgICAnaW50ZXJhY3QuYWRkRG9jdW1lbnQoKSBhZGRzIHRvIHNjb3BlIHdpdGggb3B0aW9ucycpXG5cbiAgaW50ZXJhY3QucmVtb3ZlRG9jdW1lbnQoZG9jMylcbiAgdC5lcXVhbChcbiAgICBzY29wZS5kb2N1bWVudHMubGVuZ3RoLFxuICAgIHByZXZEb2NDb3VudCxcbiAgICAnaW50ZXJhY3QucmVtb3ZlRG9jdW1lbnQoKSByZW1vdmVzIGRvY3VtZW50IGZyb20gc2NvcGUnKVxuXG4gIHNjb3BlLmludGVyYWN0YWJsZXMubGlzdC5mb3JFYWNoKGkgPT4gaS51bnNldCgpKVxuXG4gIGNvbnN0IHBsdWdpbjEgPSB7IGlkOiAndGVzdC0xJywgaW5zdGFsbCAoKSB7IHBsdWdpbjEuY291bnQrKyB9LCBjb3VudDogMCB9XG4gIGNvbnN0IHBsdWdpbjIgPSB7IGlkOiB1bmRlZmluZWQsIGluc3RhbGwgKCkgeyBwbHVnaW4yLmNvdW50KysgfSwgY291bnQ6IDAgfVxuXG4gIGludGVyYWN0LnVzZShwbHVnaW4xKVxuICBpbnRlcmFjdC51c2UocGx1Z2luMilcblxuICB0LmRlZXBFcXVhbChbcGx1Z2luMS5jb3VudCwgcGx1Z2luMi5jb3VudF0sIFsxLCAxXSwgJ25ldyBwbHVnaW4gaW5zdGFsbCBtZXRob2RzIGFyZSBjYWxsZWQnKVxuXG4gIGludGVyYWN0LnVzZSh7IC4uLnBsdWdpbjEgfSlcbiAgdC5kZWVwRXF1YWwoW3BsdWdpbjEuY291bnQsIHBsdWdpbjIuY291bnRdLCBbMSwgMV0sICdkaWZmZXJlbnQgcGx1Z2luIG9iamVjdCB3aXRoIHNhbWUgaWQgbm90IGluc3RhbGxlZCcpXG5cbiAgaW50ZXJhY3QudXNlKHBsdWdpbjIpXG4gIHQuZGVlcEVxdWFsKFtwbHVnaW4xLmNvdW50LCBwbHVnaW4yLmNvdW50XSwgWzEsIDFdLCAncGx1Z2luIHdpdGhvdXQgaWQgbm90IHJlLWluc3RhbGxlZCcpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/interactjs/dist/api/Interactable.html b/packages/interactjs/dist/api/Interactable.html index d7d06eee3..185c9ae0e 100644 --- a/packages/interactjs/dist/api/Interactable.html +++ b/packages/interactjs/dist/api/Interactable.html @@ -219,7 +219,7 @@

actionCh
Source:
@@ -286,7 +286,7 @@

allowFromSource:
@@ -369,7 +369,7 @@

ignoreFrom<
Source:
@@ -396,6 +396,76 @@

ignoreFrom< }) + + + + +
+

preventDefault

+ + + + +
+

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

+
    +
  • 'always' to always prevent
  • +
  • 'never' to never prevent
  • +
  • 'auto' to let interact.js try to determine what would be best
  • +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + +
@@ -444,7 +514,7 @@

styleCurso
Source:
@@ -832,7 +902,7 @@

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

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

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

gesturable<
Source:
@@ -2690,7 +2760,7 @@

Returns:
-

reflow(action) → {Promise.<Interactable>}

+

reflow(action) → {Promise}

@@ -2740,7 +2810,7 @@

reflowSource:
@@ -2885,13 +2955,17 @@
Returns:
-Promise.<Interactable> +Promise
+
+

A promise that resolves to the Interactable when actions on all targets have ended

+
+ @@ -2982,7 +3056,7 @@

resizableSource:
diff --git a/packages/interactjs/dist/api/doclets.json b/packages/interactjs/dist/api/doclets.json index 61414239f..e4af21cd8 100644 --- a/packages/interactjs/dist/api/doclets.json +++ b/packages/interactjs/dist/api/doclets.json @@ -1 +1 @@ -[{"comment":"/** @article /home/taye/proj/interact.js/jsdoc/index.md **/","meta":{"filename":"index.md","lineno":1,"columnno":0,"path":"","code":{},"shortpath":"jsdoc/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":"T000002R004989","___s":true,"attribs":"","id":"index","ancestors":[]},{"comment":"/**\n * Don't call listeners on the remaining targets\n */","meta":{"range":[668,771],"filename":"BaseEvent.ts","lineno":39,"columnno":2,"path":"../packages/core","code":{"id":"astnode100012117","name":"BaseEvent#stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/BaseEvent.ts"},"description":"

Don't call listeners on the remaining targets

","name":"stopImmediatePropagation","longname":"BaseEvent#stopImmediatePropagation","kind":"function","memberof":"BaseEvent","scope":"instance","params":[],"___id":"T000002R001240","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[541,600],"filename":"BaseEvent.ts","lineno":32,"columnno":2,"path":"../packages/core","code":{"id":"astnode100012107","name":"BaseEvent#stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/BaseEvent.ts"},"description":"

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

","name":"stopPropagation","longname":"BaseEvent#stopPropagation","kind":"function","memberof":"BaseEvent","scope":"instance","params":[],"___id":"T000002R001238","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Class of events fired on dropzones during drags with acceptable targets.\n */","meta":{"range":[297,757],"filename":"DropEvent.ts","lineno":18,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100002467","name":"DropEvent","type":"MethodDefinition","paramnames":["dropState","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":[978,2068],"filename":"DropEvent.ts","lineno":38,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100002551","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":"T000002R000232","___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":[2359,2413],"filename":"interactablePreventDefault.ts","lineno":75,"columnno":2,"path":"../packages/core","code":{"id":"astnode100014843","name":"Interactable.prototype.preventDefault","type":"Identifier","funcscope":"install","value":"preventDefault","paramnames":[]},"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":"member","memberof":"install~Interactable","scope":"instance","___id":"T000002R001458","___s":true,"attribs":"","id":"preventDefault","ancestors":[],"signature":""},{"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":43,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100026512","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":"T000002R002654","___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":[5629,5922],"filename":"index.ts","lineno":210,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100003173","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":"T000002R000292","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":["interact."]},{"comment":"/** */","meta":{"range":[717,1017],"filename":"Interactable.ts","lineno":25,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013386","name":"exports.Interactable","type":"MethodDefinition","paramnames":["target","options","defaultContext"]},"shortpath":"packages/core/Interactable.ts"},"name":"Interactable","longname":"Interactable","kind":"class","memberof":"Interactable","scope":"instance","___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 * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */","meta":{"range":[3573,3625],"filename":"InteractableMethods.ts","lineno":96,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011774","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

Returns 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":"T000002R001201","___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":[2282,2509],"filename":"InteractableMethods.ts","lineno":69,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011754","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":"T000002R001200","___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":[5724,5765],"filename":"Interactable.ts","lineno":194,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013923","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":"T000002R001404","___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":[5359,5548],"filename":"Interactable.ts","lineno":176,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013893","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":"T000002R001402","___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":[3218,3790],"filename":"drag.ts","lineno":99,"columnno":6,"path":"../packages/actions","code":{"id":"astnode100001355","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":"T000002R000105","___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":[5073,5289],"filename":"index.ts","lineno":191,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100003148","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":"T000002R000291","___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":[4310,4410],"filename":"index.ts","lineno":147,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100003133","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":"T000002R000290","___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":[7047,7112],"filename":"Interactable.ts","lineno":257,"columnno":2,"path":"../packages/core","code":{"id":"astnode100014076","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":"T000002R001409","___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":[1099,1513],"filename":"gesture.ts","lineno":68,"columnno":2,"path":"../packages/actions","code":{"id":"astnode100005536","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":"T000002R000507","___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":[3423,3665],"filename":"Interactable.ts","lineno":105,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013743","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":"T000002R001392","___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":[1323,1554],"filename":"InteractableMethods.ts","lineno":37,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011734","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":"T000002R001199","___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":[8983,9075],"filename":"Interactable.ts","lineno":316,"columnno":2,"path":"../packages/core","code":{"id":"astnode100014239","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":"T000002R001419","___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":[8480,8570],"filename":"Interactable.ts","lineno":302,"columnno":2,"path":"../packages/core","code":{"id":"astnode100014223","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":"T000002R001418","___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":[4948,5025],"filename":"Interactable.ts","lineno":162,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013881","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":"T000002R001401","___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":[3994,4210],"filename":"Interactable.ts","lineno":124,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013792","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":"T000002R001395","___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":[1432,1527],"filename":"index.ts","lineno":54,"columnno":2,"path":"../packages/reflow","code":{"id":"astnode100037607","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":"T000002R004109","___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":[2888,2991],"filename":"resize.ts","lineno":87,"columnno":2,"path":"../packages/actions","code":{"id":"astnode100006994","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":"T000002R000700","___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":[9236,9854],"filename":"Interactable.ts","lineno":330,"columnno":2,"path":"../packages/core","code":{"id":"astnode100014255","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":"T000002R001420","___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":[3913,3961],"filename":"InteractableMethods.ts","lineno":129,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011782","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":"T000002R001202","___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":[10022,10836],"filename":"Interactable.ts","lineno":363,"columnno":2,"path":"../packages/core","code":{"id":"astnode100014368","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":"T000002R001428","___s":true,"attribs":"","id":"unset","signature":"() → {interact}","ancestors":["#Interactable#"]},{"comment":"/** */","meta":{"range":[516,2903],"filename":"InteractEvent.ts","lineno":20,"columnno":2,"path":"../packages/core","code":{"id":"astnode100015452","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":[4694,4797],"filename":"InteractEvent.ts","lineno":192,"columnno":2,"path":"../packages/core","code":{"id":"astnode100016298","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":"T000002R001604","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[4879,4938],"filename":"InteractEvent.ts","lineno":199,"columnno":2,"path":"../packages/core","code":{"id":"astnode100016312","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":"T000002R001607","___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":[8450,8809],"filename":"Interaction.ts","lineno":321,"columnno":2,"path":"../packages/core","code":{"id":"astnode100019272","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":"T000002R001899","___s":true,"attribs":"","id":"end","signature":"(eventopt)","ancestors":[]},{"comment":"/** */","meta":{"range":[2156,2693],"filename":"Interaction.ts","lineno":82,"columnno":2,"path":"../packages/core","code":{"id":"astnode100018527","name":"exports.Interaction","type":"MethodDefinition","paramnames":[""]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"name":"Interaction","longname":"Interaction#Interaction","kind":"class","memberof":"Interaction","scope":"instance","params":[],"___id":"T000003R000005","___s":true,"attribs":"","id":"Interaction","signature":"()","ancestors":[]},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[1550,1702],"filename":"Interaction.ts","lineno":94,"columnno":2,"path":"../packages/core","code":{"id":"astnode100018475","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":"T000002R001827","___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":[6985,7292],"filename":"Interaction.ts","lineno":260,"columnno":2,"path":"../packages/core","code":{"id":"astnode100019110","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":"T000002R001879","___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":[4118,4760],"filename":"Interaction.ts","lineno":152,"columnno":2,"path":"../packages/core","code":{"id":"astnode100018655","name":"Interaction#start","type":"MethodDefinition","paramnames":["action","interactable","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":"T000002R001853","___s":true,"attribs":"","id":"start","signature":"(action, target, element) → {object}","ancestors":[]},{"comment":"/** */","meta":{"range":[8959,9187],"filename":"Interaction.ts","lineno":333,"columnno":2,"path":"../packages/core","code":{"id":"astnode100019357","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":"T000002R001910","___s":true,"attribs":"","id":"stop","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[184,1167],"filename":"PointerEvent.ts","lineno":7,"columnno":2,"path":"../packages/pointer-events","code":{"id":"astnode100037243","name":"module.exports","type":"MethodDefinition","paramnames":["type","pointer","event","eventTarget","interaction","timeStamp"]},"shortpath":"packages/pointer-events/PointerEvent.ts"},"name":"exports","longname":"module.exports","kind":"class","memberof":"module","scope":"static","___id":"T000003R000006","___s":true,"attribs":"","id":"exports","signature":"()","ancestors":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.ts","lineno":1,"columnno":0,"path":"../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":[4549,4571],"filename":"interact.ts","lineno":210,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100026901","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":"T000002R002677","___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":[1739,1761],"filename":"interact.ts","lineno":95,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100026578","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":"T000002R002661","___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":[2899,2970],"filename":"base.ts","lineno":121,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100010231","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":"T000002R001048","___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":[3567,3585],"filename":"interact.ts","lineno":161,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100026749","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":"T000002R002670","___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":[2243,2259],"filename":"interact.ts","lineno":110,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100026604","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":"T000002R002663","___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":[6195,6247],"filename":"interact.ts","lineno":269,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100027044","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":"T000002R002694","___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":[5717,5737],"filename":"interact.ts","lineno":253,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100027018","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":"T000002R002691","___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":[5456,5508],"filename":"interact.ts","lineno":243,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100027005","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":"T000002R002689","___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":[5223,5261],"filename":"interact.ts","lineno":233,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100026992","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":"T000002R002687","___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":[1337,1355],"filename":"interact.ts","lineno":79,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100026558","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":"T000002R002659","___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":"../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":"T000002R003446","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"kind":"package","longname":"package:undefined","files":["/home/taye/proj/interact.js/packages/actions/actions.spec.ts","/home/taye/proj/interact.js/packages/actions/drag.spec.ts","/home/taye/proj/interact.js/packages/actions/drag.ts","/home/taye/proj/interact.js/packages/actions/drop/drop.spec.ts","/home/taye/proj/interact.js/packages/actions/drop/DropEvent.spec.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.spec.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.spec.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/autoStart.spec.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.spec.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/BaseEvent.ts","/home/taye/proj/interact.js/packages/core/defaultOptions.ts","/home/taye/proj/interact.js/packages/core/Eventable.spec.ts","/home/taye/proj/interact.js/packages/core/Eventable.ts","/home/taye/proj/interact.js/packages/core/Interactable.spec.ts","/home/taye/proj/interact.js/packages/core/Interactable.ts","/home/taye/proj/interact.js/packages/core/interactablePreventDefault.spec.ts","/home/taye/proj/interact.js/packages/core/interactablePreventDefault.ts","/home/taye/proj/interact.js/packages/core/InteractableSet.ts","/home/taye/proj/interact.js/packages/core/InteractEvent.ts","/home/taye/proj/interact.js/packages/core/Interaction.spec.ts","/home/taye/proj/interact.js/packages/core/Interaction.ts","/home/taye/proj/interact.js/packages/core/interactionFinder.spec.ts","/home/taye/proj/interact.js/packages/core/interactionFinder.ts","/home/taye/proj/interact.js/packages/core/interactions.spec.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.spec.ts","/home/taye/proj/interact.js/packages/core/scope.ts","/home/taye/proj/interact.js/packages/dev-tools/devTools.spec.ts","/home/taye/proj/interact.js/packages/dev-tools/index.ts","/home/taye/proj/interact.js/packages/inertia/index.ts","/home/taye/proj/interact.js/packages/inertia/inertia.spec.ts","/home/taye/proj/interact.js/packages/interact/index.ts","/home/taye/proj/interact.js/packages/interact/interact.spec.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.spec.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.spec.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/edges.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/pointer.spec.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/pointer.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/rect.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/size.spec.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/size.ts","/home/taye/proj/interact.js/packages/modifiers/snap/edges.spec.ts","/home/taye/proj/interact.js/packages/modifiers/snap/edges.ts","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.spec.ts","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.ts","/home/taye/proj/interact.js/packages/modifiers/snap/size.spec.ts","/home/taye/proj/interact.js/packages/modifiers/snap/size.ts","/home/taye/proj/interact.js/packages/pointer-events/base.spec.ts","/home/taye/proj/interact.js/packages/pointer-events/base.ts","/home/taye/proj/interact.js/packages/pointer-events/holdRepeat.spec.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.spec.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/reflow/reflow.spec.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/types/types.spec.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.spec.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/is.ts","/home/taye/proj/interact.js/packages/utils/isWindow.ts","/home/taye/proj/interact.js/packages/utils/normalizeListeners.spec.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/jsdoc/index.md"],"___id":"T000002R004990","___s":true,"attribs":"","id":"package:","ancestors":[]},{"comment":"/**\n * Prevent the default behaviour of the original Event\n */","meta":{"range":[1620,1683],"filename":"PointerEvent.ts","lineno":76,"columnno":2,"path":"../packages/pointer-events","code":{"id":"astnode100037484","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":"T000002R004100","___s":true,"attribs":"","id":"preventDefault","signature":"()","ancestors":[]}] \ No newline at end of file +[{"comment":"/** @article /home/taye/proj/interact.js/jsdoc/index.md **/","meta":{"filename":"index.md","lineno":1,"columnno":0,"path":"","code":{},"shortpath":"jsdoc/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":"T000002R003498","___s":true,"attribs":"","id":"index","ancestors":[]},{"comment":"/**\n * Don't call listeners on the remaining targets\n */","meta":{"range":[668,771],"filename":"BaseEvent.ts","lineno":39,"columnno":2,"path":"../packages/core","code":{"id":"astnode100008161","name":"BaseEvent#stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/BaseEvent.ts"},"description":"

Don't call listeners on the remaining targets

","name":"stopImmediatePropagation","longname":"BaseEvent#stopImmediatePropagation","kind":"function","memberof":"BaseEvent","scope":"instance","params":[],"___id":"T000002R000858","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[541,600],"filename":"BaseEvent.ts","lineno":32,"columnno":2,"path":"../packages/core","code":{"id":"astnode100008151","name":"BaseEvent#stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/BaseEvent.ts"},"description":"

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

","name":"stopPropagation","longname":"BaseEvent#stopPropagation","kind":"function","memberof":"BaseEvent","scope":"instance","params":[],"___id":"T000002R000856","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Class of events fired on dropzones during drags with acceptable targets.\n */","meta":{"range":[285,745],"filename":"DropEvent.ts","lineno":18,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100000544","name":"DropEvent","type":"MethodDefinition","paramnames":["dropState","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":[966,2056],"filename":"DropEvent.ts","lineno":38,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100000628","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":"T000002R000067","___s":true,"attribs":"","id":"reject","signature":"()","ancestors":["DropEvent#"]},{"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":[875,1161],"filename":"interact.ts","lineno":43,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100017673","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":"T000002R001903","___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":[3505,3798],"filename":"index.ts","lineno":142,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100000935","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":"T000002R000095","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":["interact."]},{"comment":"/** */","meta":{"range":[636,936],"filename":"Interactable.ts","lineno":25,"columnno":2,"path":"../packages/core","code":{"id":"astnode100008493","name":"exports.Interactable","type":"MethodDefinition","paramnames":["target","options","defaultContext"]},"shortpath":"packages/core/Interactable.ts"},"name":"Interactable","longname":"Interactable","kind":"class","memberof":"Interactable","scope":"instance","___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 * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */","meta":{"range":[3561,3613],"filename":"InteractableMethods.ts","lineno":93,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100007818","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

Returns 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":"T000002R000819","___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":[2270,2497],"filename":"InteractableMethods.ts","lineno":66,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100007798","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":"T000002R000818","___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":[5643,5684],"filename":"Interactable.ts","lineno":194,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009030","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":"T000002R000936","___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":[5278,5467],"filename":"Interactable.ts","lineno":176,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009000","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":"T000002R000934","___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":[3174,3746],"filename":"drag.ts","lineno":100,"columnno":6,"path":"../packages/actions","code":{"id":"astnode100000353","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":"T000002R000033","___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":[2949,3165],"filename":"index.ts","lineno":123,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100000910","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":"T000002R000094","___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":[2186,2286],"filename":"index.ts","lineno":79,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100000895","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":"T000002R000093","___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":[6966,7031],"filename":"Interactable.ts","lineno":257,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009183","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":"T000002R000941","___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":[1060,1474],"filename":"gesture.ts","lineno":67,"columnno":2,"path":"../packages/actions","code":{"id":"astnode100002822","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":"T000002R000266","___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":[3342,3584],"filename":"Interactable.ts","lineno":105,"columnno":2,"path":"../packages/core","code":{"id":"astnode100008850","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":"T000002R000924","___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":[1311,1542],"filename":"InteractableMethods.ts","lineno":34,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100007778","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":"T000002R000817","___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":[8902,8994],"filename":"Interactable.ts","lineno":316,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009346","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":"T000002R000951","___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":[8399,8489],"filename":"Interactable.ts","lineno":302,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009330","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":"T000002R000950","___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":[4867,4944],"filename":"Interactable.ts","lineno":162,"columnno":2,"path":"../packages/core","code":{"id":"astnode100008988","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":"T000002R000933","___s":true,"attribs":"","id":"origin","signature":"(originopt) → {object}","ancestors":["#Interactable#"]},{"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":[2320,2374],"filename":"interactablePreventDefault.ts","lineno":75,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009823","name":"Interactable.prototype.preventDefault","type":"Identifier","value":"preventDefault","paramnames":[]},"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":"Interactable#preventDefault","kind":"member","memberof":"Interactable","scope":"instance","___id":"T000002R000979","___s":true,"attribs":"","id":"preventDefault","ancestors":["#Interactable#"],"signature":""},{"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":[3913,4129],"filename":"Interactable.ts","lineno":124,"columnno":2,"path":"../packages/core","code":{"id":"astnode100008899","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":"T000002R000927","___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 } A promise that resolves to the `Interactable` when actions on all targets have ended\n */","meta":{"range":[1139,1234],"filename":"index.ts","lineno":42,"columnno":2,"path":"../packages/reflow","code":{"id":"astnode100024365","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"]},"description":"

A promise that resolves to the Interactable when actions on all targets have ended

"}],"name":"reflow","longname":"Interactable#reflow","kind":"function","memberof":"Interactable","scope":"instance","___id":"T000002R002791","___s":true,"attribs":"","id":"reflow","signature":"(action) → {Promise}","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":[2449,2552],"filename":"resize.ts","lineno":75,"columnno":2,"path":"../packages/actions","code":{"id":"astnode100003499","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":"T000002R000342","___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":[9155,9773],"filename":"Interactable.ts","lineno":330,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009362","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":"T000002R000952","___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":[3901,3949],"filename":"InteractableMethods.ts","lineno":126,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100007826","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":"T000002R000820","___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":[9941,10755],"filename":"Interactable.ts","lineno":363,"columnno":2,"path":"../packages/core","code":{"id":"astnode100009475","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":"T000002R000960","___s":true,"attribs":"","id":"unset","signature":"() → {interact}","ancestors":["#Interactable#"]},{"comment":"/** */","meta":{"range":[489,2876],"filename":"InteractEvent.ts","lineno":20,"columnno":2,"path":"../packages/core","code":{"id":"astnode100010428","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":[4667,4770],"filename":"InteractEvent.ts","lineno":192,"columnno":2,"path":"../packages/core","code":{"id":"astnode100011274","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":"T000002R001126","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[4852,4911],"filename":"InteractEvent.ts","lineno":199,"columnno":2,"path":"../packages/core","code":{"id":"astnode100011288","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":"T000002R001129","___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":[8641,9000],"filename":"Interaction.ts","lineno":388,"columnno":2,"path":"../packages/core","code":{"id":"astnode100012274","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":"T000002R001251","___s":true,"attribs":"","id":"end","signature":"(eventopt)","ancestors":[]},{"comment":"/** */","meta":{"range":[2153,2706],"filename":"Interaction.ts","lineno":82,"columnno":2,"path":"../packages/core","code":{"id":"astnode100011518","name":"exports.Interaction","type":"MethodDefinition","paramnames":[""]},"vars":{"":null},"shortpath":"packages/core/Interaction.ts"},"name":"Interaction","longname":"Interaction#Interaction","kind":"class","memberof":"Interaction","scope":"instance","params":[],"___id":"T000003R000005","___s":true,"attribs":"","id":"Interaction","signature":"()","ancestors":[]},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[1547,1699],"filename":"Interaction.ts","lineno":152,"columnno":2,"path":"../packages/core","code":{"id":"astnode100011466","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":"T000002R001173","___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":[7089,7396],"filename":"Interaction.ts","lineno":324,"columnno":2,"path":"../packages/core","code":{"id":"astnode100012105","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":"T000002R001228","___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":[4161,4803],"filename":"Interaction.ts","lineno":214,"columnno":2,"path":"../packages/core","code":{"id":"astnode100011644","name":"Interaction#start","type":"MethodDefinition","paramnames":["action","interactable","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":"T000002R001200","___s":true,"attribs":"","id":"start","signature":"(action, target, element) → {object}","ancestors":[]},{"comment":"/** */","meta":{"range":[9150,9388],"filename":"Interaction.ts","lineno":340,"columnno":2,"path":"../packages/core","code":{"id":"astnode100012359","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":"T000002R001262","___s":true,"attribs":"","id":"stop","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[166,1149],"filename":"PointerEvent.ts","lineno":7,"columnno":2,"path":"../packages/pointer-events","code":{"id":"astnode100024046","name":"module.exports","type":"MethodDefinition","paramnames":["type","pointer","event","eventTarget","interaction","timeStamp"]},"shortpath":"packages/pointer-events/PointerEvent.ts"},"name":"exports","longname":"module.exports","kind":"class","memberof":"module","scope":"static","___id":"T000003R000006","___s":true,"attribs":"","id":"exports","signature":"()","ancestors":[]},{"comment":"/** @module interact */","meta":{"filename":"interact.ts","lineno":1,"columnno":0,"path":"../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 * 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":[1709,1731],"filename":"interact.ts","lineno":95,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100017739","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":"T000002R001910","___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":[1097,1168],"filename":"base.ts","lineno":73,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100006252","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":"T000002R000656","___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":[3537,3555],"filename":"interact.ts","lineno":161,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100017910","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":"T000002R001919","___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":[2213,2229],"filename":"interact.ts","lineno":110,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100017765","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":"T000002R001912","___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":[5948,6000],"filename":"interact.ts","lineno":262,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100018205","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":"T000002R001943","___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":[5470,5490],"filename":"interact.ts","lineno":246,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100018179","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":"T000002R001940","___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":[5209,5261],"filename":"interact.ts","lineno":236,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100018166","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":"T000002R001938","___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":[4976,5014],"filename":"interact.ts","lineno":226,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100018153","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":"T000002R001936","___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":[1307,1325],"filename":"interact.ts","lineno":79,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100017719","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":"T000002R001908","___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":"../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":"T000002R002381","___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/BaseEvent.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/InteractableSet.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/interactionFinder.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/core/tests/_helpers.ts","/home/taye/proj/interact.js/packages/dev-tools/index.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/rect.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/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/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/jsdoc/index.md"],"___id":"T000002R003499","___s":true,"attribs":"","id":"package:","ancestors":[]},{"comment":"/**\n * Prevent the default behaviour of the original Event\n */","meta":{"range":[1602,1665],"filename":"PointerEvent.ts","lineno":76,"columnno":2,"path":"../packages/pointer-events","code":{"id":"astnode100024287","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":"T000002R002784","___s":true,"attribs":"","id":"preventDefault","signature":"()","ancestors":[]}] \ No newline at end of file diff --git a/packages/interactjs/dist/api/module-interact.html b/packages/interactjs/dist/api/module-interact.html index afcbd16ea..f5a64d874 100644 --- a/packages/interactjs/dist/api/module-interact.html +++ b/packages/interactjs/dist/api/module-interact.html @@ -71,70 +71,6 @@

Members

-
-

(static) debug

- - - - -
-

Returns an object which exposes internal data

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - -

(static) isSet

@@ -372,7 +308,7 @@

(static
Source:
@@ -436,7 +372,7 @@

(static) stopSource:
@@ -496,7 +432,7 @@

(static
Source:
@@ -556,7 +492,7 @@

(static) Source:
@@ -698,7 +634,7 @@

(static) Source:
diff --git a/packages/interactjs/dist/api/packages_actions_drag.ts.html b/packages/interactjs/dist/api/packages_actions_drag.ts.html index 5bd295bbb..14e7cf1b8 100644 --- a/packages/interactjs/dist/api/packages_actions_drag.ts.html +++ b/packages/interactjs/dist/api/packages_actions_drag.ts.html @@ -41,9 +41,9 @@

packages/actions/drag.ts

-
import { ActionName, Scope } from '@interactjs/core/scope'
-import * as arr from '@interactjs/utils/arr'
-import * as is from '@interactjs/utils/is'
+            
import { ActionName, Scope } from '../core/scope'
+import * as arr from '../utils/arr'
+import * as is from '../utils/is'
 
 declare module '@interactjs/core/Interactable' {
   interface Interactable {
@@ -78,15 +78,16 @@ 

packages/actions/drag.ts

const { actions, Interactable, - interactions, defaults, } = scope - interactions.signals.on('before-action-move', beforeMove) - interactions.signals.on('action-resume', beforeMove) + scope.addListeners({ + 'interactions:before-action-move': beforeMove, + 'interactions:action-resume': beforeMove, - // dragmove - interactions.signals.on('action-move', move) + // dragmove + 'interactions:action-move': move, + }) Interactable.prototype.draggable = drag.draggable diff --git a/packages/interactjs/dist/api/packages_actions_drop_DropEvent.ts.html b/packages/interactjs/dist/api/packages_actions_drop_DropEvent.ts.html index 33eff5f16..a850ff031 100644 --- a/packages/interactjs/dist/api/packages_actions_drop_DropEvent.ts.html +++ b/packages/interactjs/dist/api/packages_actions_drop_DropEvent.ts.html @@ -41,12 +41,12 @@

packages/actions/drop/DropEvent.ts

-
import BaseEvent from '@interactjs/core/BaseEvent'
-import Interactable from '@interactjs/core/Interactable'
-import InteractEvent from '@interactjs/core/InteractEvent'
-import Interaction from '@interactjs/core/Interaction'
-import { ActionName } from '@interactjs/core/scope'
-import * as arr from '@interactjs/utils/arr'
+            
import BaseEvent from '../../core/BaseEvent'
+import Interactable from '../../core/Interactable'
+import InteractEvent from '../../core/InteractEvent'
+import Interaction from '../../core/Interaction'
+import { ActionName } from '../../core/scope'
+import * as arr from '../../utils/arr'
 
 class DropEvent extends BaseEvent {
   target: Interact.Element
diff --git a/packages/interactjs/dist/api/packages_actions_drop_index.ts.html b/packages/interactjs/dist/api/packages_actions_drop_index.ts.html
index 7c9431516..f41db3495 100644
--- a/packages/interactjs/dist/api/packages_actions_drop_index.ts.html
+++ b/packages/interactjs/dist/api/packages_actions_drop_index.ts.html
@@ -41,10 +41,10 @@ 

packages/actions/drop/index.ts

-
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 Interactable from '../../core/Interactable'
+import InteractEvent from '../../core/InteractEvent'
+import { Scope } from '../../core/scope'
+import * as utils from '../../utils/index'
 import drag from '../drag'
 import DropEvent from './DropEvent'
 
@@ -114,79 +114,11 @@ 

packages/actions/drop/index.ts

interact, /** @lends Interactable */ Interactable, // eslint-disable-line no-shadow - interactions, defaults, } = scope scope.usePlugin(drag) - interactions.signals.on('before-action-start', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { return } - - interaction.dropState = { - cur: { - dropzone: null, - element: null, - }, - prev: { - dropzone: null, - element: null, - }, - rejected: null, - events: null, - activeDrops: null, - } - }) - - interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => { - if (interaction.prepared.name !== 'drag') { return } - - const { dropState } = interaction - - // reset active dropzones - dropState.activeDrops = null - dropState.events = null - dropState.activeDrops = getActiveDrops(scope, interaction.element) - dropState.events = getDropEvents(interaction, event, dragEvent) - - if (dropState.events.activate) { - fireActivationEvents(dropState.activeDrops, dropState.events.activate) - } - }) - - // FIXME proper signal types - interactions.signals.on('action-move', arg => onEventCreated(arg as any, scope)) - interactions.signals.on('action-end', arg => onEventCreated(arg as any, scope)) - - interactions.signals.on('after-action-move', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { return } - - fireDropEvents(interaction, interaction.dropState.events) - interaction.dropState.events = {} - }) - - interactions.signals.on('after-action-end', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { return } - - fireDropEvents(interaction, interaction.dropState.events) - }) - - interactions.signals.on('stop', ({ interaction }) => { - if (interaction.prepared.name !== 'drag') { return } - - const { dropState } = interaction - - if (dropState) { - dropState.activeDrops = null - dropState.events = null - dropState.cur.dropzone = null - dropState.cur.element = null - dropState.prev.dropzone = null - dropState.prev.element = null - dropState.rejected = false - } - }) - /** * * ```js @@ -445,7 +377,7 @@

packages/actions/drop/index.ts

dropState.prev.element = cur.element } -function onEventCreated ({ interaction, iEvent, event }: Interact.SignalArg, scope) { +function onEventCreated ({ interaction, iEvent, event }: Interact.DoPhaseArg, scope) { if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return } const { dropState } = interaction @@ -534,7 +466,7 @@

packages/actions/drop/index.ts

draggable: Interact.Interactable, draggableElement: Interact.Element, dropElement: Interact.Element, - rect: any + rect: any, ) { let dropped = false @@ -589,6 +521,74 @@

packages/actions/drop/index.ts

const drop = { id: 'actions/drop', install, + listeners: { + 'interactions:before-action-start': ({ interaction }) => { + if (interaction.prepared.name !== 'drag') { return } + + interaction.dropState = { + cur: { + dropzone: null, + element: null, + }, + prev: { + dropzone: null, + element: null, + }, + rejected: null, + events: null, + activeDrops: null, + } + }, + + 'interactions:after-action-start': ({ interaction, event, iEvent: dragEvent }, scope) => { + if (interaction.prepared.name !== 'drag') { return } + + const { dropState } = interaction + + // reset active dropzones + dropState.activeDrops = null + dropState.events = null + dropState.activeDrops = getActiveDrops(scope, interaction.element) + dropState.events = getDropEvents(interaction, event, dragEvent) + + if (dropState.events.activate) { + fireActivationEvents(dropState.activeDrops, dropState.events.activate) + } + }, + + // FIXME proper signal types + 'interactions:action-move': onEventCreated, + 'interactions:action-end': onEventCreated, + + 'interactions:after-action-move': function fireDropAfterMove ({ interaction }) { + if (interaction.prepared.name !== 'drag') { return } + + fireDropEvents(interaction, interaction.dropState.events) + interaction.dropState.events = {} + }, + + 'interactions:after-action-end': ({ interaction }) => { + if (interaction.prepared.name !== 'drag') { return } + + fireDropEvents(interaction, interaction.dropState.events) + }, + + 'interactions:stop': ({ interaction }) => { + if (interaction.prepared.name !== 'drag') { return } + + const { dropState } = interaction + + if (dropState) { + dropState.activeDrops = null + dropState.events = null + dropState.cur.dropzone = null + dropState.cur.element = null + dropState.prev.dropzone = null + dropState.prev.element = null + dropState.rejected = false + } + }, + }, getActiveDrops, getDrop, getDropEvents, diff --git a/packages/interactjs/dist/api/packages_actions_gesture.ts.html b/packages/interactjs/dist/api/packages_actions_gesture.ts.html index 788699113..49c957f69 100644 --- a/packages/interactjs/dist/api/packages_actions_gesture.ts.html +++ b/packages/interactjs/dist/api/packages_actions_gesture.ts.html @@ -41,9 +41,9 @@

packages/actions/gesture.ts

-
import InteractEvent from '@interactjs/core/InteractEvent'
-import { ActionName, Scope } from '@interactjs/core/scope'
-import * as utils from '@interactjs/utils'
+            
import InteractEvent from '../core/InteractEvent'
+import { ActionName, Scope } from '../core/scope'
+import * as utils from '../utils/index'
 
 export type GesturableMethod = Interact.ActionMethod<Interact.GesturableOptions>
 
@@ -94,7 +94,7 @@ 

packages/actions/gesture.ts

touches: Interact.PointerType[] } -export interface GestureSignalArg extends Interact.SignalArg { +export interface GestureSignalArg extends Interact.DoPhaseArg { iEvent: GestureEvent interaction: Interact.Interaction<ActionName.Gesture> event: Interact.PointerEventType | GestureEvent @@ -104,7 +104,6 @@

packages/actions/gesture.ts

const { actions, Interactable, - interactions, defaults, } = scope @@ -149,20 +148,6 @@

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) - interactions.signals.on('action-end', updateGestureProps) - - interactions.signals.on('new', ({ interaction }) => { - interaction.gesture = { - angle: 0, - distance: 0, - scale: 1, - startAngle: 0, - startDistance: 0, - } - }) - actions[ActionName.Gesture] = gesture actions.names.push(ActionName.Gesture) utils.arr.merge(actions.eventTypes, [ @@ -178,6 +163,22 @@

packages/actions/gesture.ts

const gesture = { id: 'actions/gesture', install, + listeners: { + 'interactions:action-start': updateGestureProps, + 'interactions:action-move': updateGestureProps, + 'interactions:action-end': updateGestureProps, + + 'interactions:new': ({ interaction }) => { + interaction.gesture = { + angle: 0, + distance: 0, + scale: 1, + startAngle: 0, + startDistance: 0, + } + }, + }, + defaults: { }, diff --git a/packages/interactjs/dist/api/packages_actions_resize.ts.html b/packages/interactjs/dist/api/packages_actions_resize.ts.html index 7f712df3c..761c44c4c 100644 --- a/packages/interactjs/dist/api/packages_actions_resize.ts.html +++ b/packages/interactjs/dist/api/packages_actions_resize.ts.html @@ -41,12 +41,12 @@

packages/actions/resize.ts

-
import { ActionProps, Interaction } from '@interactjs/core/Interaction'
-import { ActionName, Scope } from '@interactjs/core/scope'
-import * as arr from '@interactjs/utils/arr'
-import * as dom from '@interactjs/utils/domUtils'
-import extend from '@interactjs/utils/extend'
-import * as is from '@interactjs/utils/is'
+            
import { Interaction } from '../core/Interaction'
+import { ActionName, Scope } from '../core/scope'
+import * as arr from '../utils/arr'
+import * as dom from '../utils/domUtils'
+import extend from '../utils/extend'
+import * as is from '../utils/is'
 
 export type EdgeName = 'top' | 'left' | 'bottom' | 'right'
 
@@ -107,23 +107,11 @@ 

packages/actions/resize.ts

browser, /** @lends Interactable */ Interactable, // tslint:disable-line no-shadowed-variable - interactions, defaults, } = scope // Less Precision with touch input - interactions.signals.on('new', interaction => { - interaction.resizeAxes = 'xy' - }) - - interactions.signals.on('action-start', start) - interactions.signals.on('action-move', move) - interactions.signals.on('action-end', end) - - interactions.signals.on('action-start', updateEventAxes) - interactions.signals.on('action-move', updateEventAxes) - resize.cursors = initCursors(browser) resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10 @@ -193,6 +181,22 @@

packages/actions/resize.ts

const resize = { id: 'actions/resize', install, + listeners: { + 'interactions:new': ({ interaction }) => { + interaction.resizeAxes = 'xy' + }, + + 'interactions:action-start': arg => { + start(arg) + updateEventAxes(arg) + }, + 'interactions:action-move': arg => { + move(arg) + updateEventAxes(arg) + }, + 'interactions:action-end': end, + }, + defaults: { square: false, preserveAspectRatio: false, @@ -220,7 +224,7 @@

packages/actions/resize.ts

interactable: Interact.Interactable, element: Interact.Element, interaction: Interaction, - rect: Interact.Rect + rect: Interact.Rect, ) { if (!rect) { return null } @@ -271,7 +275,7 @@

packages/actions/resize.ts

cursors: null as ReturnType<typeof initCursors>, - getCursor ({ edges, axis, name }: ActionProps) { + getCursor ({ edges, axis, name }: Interact.ActionProps) { const cursors = resize.cursors let result: string = null @@ -552,8 +556,8 @@

packages/actions/resize.ts

iEvent.deltaRect = interaction.resizeRects.delta } -function updateEventAxes ({ iEvent, interaction, action }: { iEvent: ResizeEvent, interaction: Interaction, action: ActionName }) { - if (action !== ActionName.Resize || !interaction.resizeAxes) { return } +function updateEventAxes ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) { + if (interaction.prepared.name !== ActionName.Resize || !interaction.resizeAxes) { return } const options = interaction.interactable.options diff --git a/packages/interactjs/dist/api/packages_auto-start_InteractableMethods.ts.html b/packages/interactjs/dist/api/packages_auto-start_InteractableMethods.ts.html index b359344a0..9fe566552 100644 --- a/packages/interactjs/dist/api/packages_auto-start_InteractableMethods.ts.html +++ b/packages/interactjs/dist/api/packages_auto-start_InteractableMethods.ts.html @@ -41,15 +41,12 @@

packages/auto-start/InteractableMethods.ts

-
import { warnOnce } from '@interactjs/utils'
-import * as is from '@interactjs/utils/is'
+            
import { warnOnce } from '../utils/index'
+import * as is from '../utils/is'
 
 // TODO: there seems to be a @babel/preset-typescript bug causing regular import
 // syntax to remain in js output
-type Scope = import ('@interactjs/core/scope').Scope
 type Actions = import ('@interactjs/core/scope').Actions
-type Interaction = import ('@interactjs/core/Interaction').default
-type Interactable = import ('@interactjs/core/Interactable').default
 
 declare module '@interactjs/core/Interactable' {
   interface Interactable {
@@ -68,7 +65,7 @@ 

packages/auto-start/InteractableMethods.ts

} } -function install (scope: Scope) { +function install (scope: Interact.Scope) { const { /** @lends Interactable */ Interactable, // tslint:disable-line no-shadowed-variable @@ -105,7 +102,7 @@

packages/auto-start/InteractableMethods.ts

* @return {string | Element | object} The current ignoreFrom value or this * Interactable */ - Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) { + Interactable.prototype.ignoreFrom = warnOnce(function (this: Interact.Interactable, newValue) { return this._backCompatOption('ignoreFrom', newValue) }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).') @@ -132,7 +129,7 @@

packages/auto-start/InteractableMethods.ts

* @return {string | Element | object} The current allowFrom value or this * Interactable */ - Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) { + Interactable.prototype.allowFrom = warnOnce(function (this: Interact.Interactable, newValue) { return this._backCompatOption('allowFrom', newValue) }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).') @@ -178,16 +175,16 @@

packages/auto-start/InteractableMethods.ts

*/ Interactable.prototype.styleCursor = styleCursor - Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) { + Interactable.prototype.defaultActionChecker = function (this: Interact.Interactable, pointer, event, interaction, element) { return defaultActionChecker(this, pointer, event, interaction, element, actions) } } function getAction ( - this: Interactable, + this: Interact.Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, - interaction: Interaction, + interaction: Interact.Interaction, element: Interact.Element, ): Interact.ActionProps { const action = this.defaultActionChecker(pointer, event, interaction, element) @@ -200,10 +197,10 @@

packages/auto-start/InteractableMethods.ts

} function defaultActionChecker ( - interactable: Interactable, + interactable: Interact.Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, - interaction: Interaction, + interaction: Interact.Interaction, element: Interact.Element, actions: Actions, ) { @@ -232,7 +229,7 @@

packages/auto-start/InteractableMethods.ts

} } -function styleCursor (this: Interactable, newValue?: boolean) { +function styleCursor (this: Interact.Interactable, newValue?: boolean) { if (is.bool(newValue)) { this.options.styleCursor = newValue @@ -248,7 +245,7 @@

packages/auto-start/InteractableMethods.ts

return this.options.styleCursor } -function actionChecker (this: Interactable, checker: any) { +function actionChecker (this: Interact.Interactable, checker: any) { if (is.func(checker)) { this.options.actionChecker = checker diff --git a/packages/interactjs/dist/api/packages_auto-start_base.ts.html b/packages/interactjs/dist/api/packages_auto-start_base.ts.html index 83c93c347..7a5e8e0af 100644 --- a/packages/interactjs/dist/api/packages_auto-start_base.ts.html +++ b/packages/interactjs/dist/api/packages_auto-start_base.ts.html @@ -41,7 +41,7 @@

packages/auto-start/base.ts

-
import * as utils from '@interactjs/utils'
+            
import * as utils from '../utils/index'
 import InteractableMethods from './InteractableMethods'
 
 declare module '@interactjs/interact/interact' {
@@ -76,76 +76,28 @@ 

packages/auto-start/base.ts

} } +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'autoStart:before-start': Interact.SignalArgs['interactions:move'] + 'autoStart:prepared': { interaction: Interact.Interaction } + } +} + export interface AutoStart { // Allow this many interactions to happen simultaneously maxInteractions: number withinInteractionLimit: typeof withinInteractionLimit cursorElement: Interact.Element - signals: utils.Signals } function install (scope: Interact.Scope) { const { interact, - interactions, defaults, } = scope scope.usePlugin(InteractableMethods) - // set cursor style on mousedown - interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => { - if (interaction.interacting()) { return } - - const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope) - prepare(interaction, actionInfo, scope) - }) - - // set cursor style on mousemove - interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => { - if (interaction.pointerType !== 'mouse' || - interaction.pointerIsDown || - interaction.interacting()) { return } - - const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope) - prepare(interaction, actionInfo, scope) - }) - - interactions.signals.on('move', arg => { - const { interaction } = arg - - if (!interaction.pointerIsDown || - interaction.interacting() || - !interaction.pointerWasMoved || - !interaction.prepared.name) { - return - } - - scope.autoStart.signals.fire('before-start', arg) - - const { interactable } = interaction - - if (interaction.prepared.name && interactable) { - // check manualStart and interaction limit - if (interactable.options[interaction.prepared.name].manualStart || - !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { - interaction.stop() - } - else { - interaction.start(interaction.prepared, interactable, interaction.element) - setInteractionCursor(interaction, scope) - } - } - }) - - interactions.signals.on('stop', ({ interaction }) => { - const { interactable } = interaction - - if (interactable && interactable.options.styleCursor) { - setCursor(interaction.element, '', scope) - } - }) - defaults.base.actionChecker = null defaults.base.styleCursor = true @@ -179,7 +131,57 @@

packages/auto-start/base.ts

maxInteractions: Infinity, withinInteractionLimit, cursorElement: null, - signals: new utils.Signals(), + } +} + +function prepareOnDown ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope) { + if (interaction.interacting()) { return } + + const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope) + prepare(interaction, actionInfo, scope) +} + +function prepareOnMove ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) { + if (interaction.pointerType !== 'mouse' || + interaction.pointerIsDown || + interaction.interacting()) { return } + + const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Interact.Element, scope) + prepare(interaction, actionInfo, scope) +} + +function startOnMove (arg: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) { + const { interaction } = arg + + if (!interaction.pointerIsDown || + interaction.interacting() || + !interaction.pointerWasMoved || + !interaction.prepared.name) { + return + } + + scope.fire('autoStart:before-start', arg) + + const { interactable } = interaction + + if (interaction.prepared.name && interactable) { + // check manualStart and interaction limit + if (interactable.options[interaction.prepared.name].manualStart || + !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { + interaction.stop() + } + else { + interaction.start(interaction.prepared, interactable, interaction.element) + setInteractionCursor(interaction, scope) + } + } +} + +function clearCursorOnStop ({ interaction }: { interaction: Interact.Interaction }, scope: Interact.Scope) { + const { interactable } = interaction + + if (interactable && interactable.options.styleCursor) { + setCursor(interaction.element, '', scope) } } @@ -189,7 +191,7 @@

packages/auto-start/base.ts

action: Interact.ActionProps, interactable: Interact.Interactable, element: Interact.Element, - eventTarget: Interact.Element, + eventTarget: Interact.EventTarget, scope: Interact.Scope, ) { if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) && @@ -207,7 +209,7 @@

packages/auto-start/base.ts

event, matches: Interact.Interactable[], matchElements: Interact.Element[], - eventTarget: Interact.Element, + eventTarget: Interact.EventTarget, scope: Interact.Scope, ) { for (let i = 0, len = matches.length; i < len; i++) { @@ -240,7 +242,7 @@

packages/auto-start/base.ts

interaction: Interact.Interaction, pointer: Interact.PointerType, event: Interact.PointerEventType, - eventTarget: Interact.Element, + eventTarget: Interact.EventTarget, scope: Interact.Scope, ) { let matches = [] @@ -298,7 +300,7 @@

packages/auto-start/base.ts

setInteractionCursor(interaction, scope) - scope.autoStart.signals.fire('prepared', { interaction }) + scope.fire('autoStart:prepared', { interaction }) } function withinInteractionLimit (interactable: Interact.Interactable, element: Interact.Element, action, scope: Interact.Scope) { @@ -390,6 +392,15 @@

packages/auto-start/base.ts

export default { id: 'auto-start/base', install, + listeners: { + 'interactions:down': prepareOnDown, + 'interactions:move': (arg, scope) => { + prepareOnMove(arg, scope) + startOnMove(arg, scope) + }, + 'interactions:stop': clearCursorOnStop, + }, + before: 'ations', maxInteractions, withinInteractionLimit, validateAction, diff --git a/packages/interactjs/dist/api/packages_core_InteractEvent.ts.html b/packages/interactjs/dist/api/packages_core_InteractEvent.ts.html index c33917a97..cf46cc8e3 100644 --- a/packages/interactjs/dist/api/packages_core_InteractEvent.ts.html +++ b/packages/interactjs/dist/api/packages_core_InteractEvent.ts.html @@ -41,9 +41,9 @@

packages/core/InteractEvent.ts

-
import extend from '@interactjs/utils/extend'
-import getOriginXY from '@interactjs/utils/getOriginXY'
-import hypot from '@interactjs/utils/hypot'
+            
import extend from '../utils/extend'
+import getOriginXY from '../utils/getOriginXY'
+import hypot from '../utils/hypot'
 import BaseEvent from './BaseEvent'
 import defaults from './defaultOptions'
 import Interaction from './Interaction'
diff --git a/packages/interactjs/dist/api/packages_core_Interactable.ts.html b/packages/interactjs/dist/api/packages_core_Interactable.ts.html
index 50dd3bb97..811511b1d 100644
--- a/packages/interactjs/dist/api/packages_core_Interactable.ts.html
+++ b/packages/interactjs/dist/api/packages_core_Interactable.ts.html
@@ -41,15 +41,15 @@ 

packages/core/Interactable.ts

-
import * as arr from '@interactjs/utils/arr'
-import browser from '@interactjs/utils/browser'
-import clone from '@interactjs/utils/clone'
-import { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'
-import events from '@interactjs/utils/events'
-import extend from '@interactjs/utils/extend'
-import * as is from '@interactjs/utils/is'
-import normalizeListeners from '@interactjs/utils/normalizeListeners'
-import { getWindow } from '@interactjs/utils/window'
+            
import * as arr from '../utils/arr'
+import browser from '../utils/browser'
+import clone from '../utils/clone'
+import { getElementRect, matchesUpTo, nodeContains, trySelector } from '../utils/domUtils'
+import events from '../utils/events'
+import extend from '../utils/extend'
+import * as is from '../utils/is'
+import normalizeListeners from '../utils/normalizeListeners'
+import { getWindow } from '../utils/window'
 import { ActionDefaults, Defaults, Options } from './defaultOptions'
 import Eventable from './Eventable'
 import { Actions } from './scope'
@@ -253,7 +253,7 @@ 

packages/core/Interactable.ts

this: Interactable, options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue }, targetNode: Node, - eventTarget: Interact.Element, + eventTarget: Interact.EventTarget, ) { return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) && this.testAllow(options.allowFrom, targetNode, eventTarget)) @@ -263,7 +263,7 @@

packages/core/Interactable.ts

this: Interactable, allowFrom: IgnoreValue, targetNode: Node, - element: Interact.Element, + element: Interact.EventTarget, ) { if (!allowFrom) { return true } @@ -283,7 +283,7 @@

packages/core/Interactable.ts

this: Interactable, ignoreFrom: IgnoreValue, targetNode: Node, - element: Interact.Element, + element: Interact.EventTarget, ) { if (!ignoreFrom || !is.element(element)) { return false } diff --git a/packages/interactjs/dist/api/packages_core_Interaction.ts.html b/packages/interactjs/dist/api/packages_core_Interaction.ts.html index bd0fc562a..cead7041e 100644 --- a/packages/interactjs/dist/api/packages_core_Interaction.ts.html +++ b/packages/interactjs/dist/api/packages_core_Interaction.ts.html @@ -41,7 +41,7 @@

packages/core/Interaction.ts

-
import * as utils from '@interactjs/utils'
+            
import * as utils from '../utils/index'
 import Interactable from './Interactable'
 import InteractEvent, { EventPhase } from './InteractEvent'
 import PointerInfo from './PointerInfo'
@@ -73,6 +73,64 @@ 

packages/core/Interaction.ts

interacting = '' } +export type PointerArgProps<T extends {} = {}> = { + pointer: Interact.PointerType + event: Interact.PointerEventType + eventTarget: Interact.EventTarget + pointerIndex: number + interaction: Interaction +} & T + +export interface DoPhaseArg { + event: Interact.PointerEventType + phase: EventPhase + interaction: Interaction + iEvent: InteractEvent + preEnd?: boolean + type?: string +} + +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactions:new': { interaction: Interaction } + 'interactions:down': PointerArgProps<{ + type: 'down' + }> + 'interactions:move': PointerArgProps<{ + type: 'move' + dx: number + dy: number + duplicate: boolean + }> + 'interactions:up': PointerArgProps<{ + type: 'up' + curEventTarget: EventTarget + }> + 'interactions:cancel': SignalArgs['interactions:up'] & { + type: 'cancel' + curEventTarget: EventTarget + } + 'interactions:update-pointer': PointerArgProps<{ + pointerInfo: PointerInfo + down: boolean + }> + 'interactions:remove-pointer': PointerArgProps<{ + pointerInfo: PointerInfo + }> + 'interactions:blur' + 'interactions:before-action-start': Omit<DoPhaseArg, 'iEvent'> + 'interactions:action-start': DoPhaseArg + 'interactions:after-action-start': DoPhaseArg + 'interactions:before-action-move': Omit<DoPhaseArg, 'iEvent'> + 'interactions:action-move': DoPhaseArg + 'interactions:after-action-move': DoPhaseArg + 'interactions:before-action-end': Omit<DoPhaseArg, 'iEvent'> + 'interactions:action-end': DoPhaseArg + 'interactions:after-action-end': DoPhaseArg + 'interactions:stop': { interaction: Interaction } + } +} + export type _InteractionProxy = Pick< Interaction, keyof typeof _ProxyValues | keyof typeof _ProxyMethods @@ -89,7 +147,7 @@

packages/core/Interaction.ts

[P in keyof Interact.Rect]?: boolean } - _signals: utils.Signals + _scopeFire: Interact.Scope['fire'] // action that's ready to be fired on next move event prepared: ActionProps<T> = { @@ -157,8 +215,11 @@

packages/core/Interaction.ts

} /** */ - constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) { - this._signals = signals + constructor ({ pointerType, scopeFire }: { + pointerType?: string + scopeFire: Interact.Scope['fire'] + }) { + this._scopeFire = scopeFire this.pointerType = pointerType const that = this @@ -177,17 +238,18 @@

packages/core/Interaction.ts

}) } - this._signals.fire('new', { interaction: this }) + this._scopeFire('interactions:new', { interaction: this }) } - pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) { + pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) { const pointerIndex = this.updatePointer(pointer, event, eventTarget, true) - this._signals.fire('down', { + this._scopeFire('interactions:down', { pointer, event, eventTarget, pointerIndex, + type: 'down', interaction: this, }) } @@ -247,7 +309,7 @@

packages/core/Interaction.ts

return this._interacting } - pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) { + pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) { if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) { this.updatePointer(pointer, event, eventTarget, false) utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now()) @@ -273,6 +335,7 @@

packages/core/Interaction.ts

pointer, pointerIndex: this.getPointerIndex(pointer), event, + type: 'move' as const, eventTarget, dx, dy, @@ -286,11 +349,12 @@

packages/core/Interaction.ts

utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta) } - this._signals.fire('move', signalArg) + this._scopeFire('interactions:move', signalArg) if (!duplicateMove) { // if interacting, fire an 'action-move' signal etc if (this.interacting()) { + signalArg.type = null this.move(signalArg) } @@ -332,18 +396,21 @@

packages/core/Interaction.ts

} // End interact move events and stop auto-scroll unless simulation is running - pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, curEventTarget: EventTarget) { + pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, curEventTarget: Interact.EventTarget) { let pointerIndex = this.getPointerIndex(pointer) if (pointerIndex === -1) { pointerIndex = this.updatePointer(pointer, event, eventTarget, false) } - this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', { + const type = /cancel$/i.test(event.type) ? 'cancel' : 'up' + + this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', { pointer, pointerIndex, event, eventTarget, + type: type as any, curEventTarget, interaction: this, }) @@ -358,7 +425,7 @@

packages/core/Interaction.ts

documentBlur (event) { this.end(event) - this._signals.fire('blur', { event, interaction: this }) + this._scopeFire('interactions:blur', { event, type: 'blur', interaction: this }) } /** @@ -407,7 +474,7 @@

packages/core/Interaction.ts

/** */ stop () { - this._signals.fire('stop', { interaction: this }) + this._scopeFire('interactions:stop', { interaction: this }) this.interactable = this.element = null @@ -429,7 +496,7 @@

packages/core/Interaction.ts

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

packages/core/Interaction.ts

this._updateLatestPointer(pointer, event, eventTarget) - this._signals.fire('update-pointer', { + this._scopeFire('interactions:update-pointer', { pointer, event, eventTarget, @@ -494,9 +561,10 @@

packages/core/Interaction.ts

const pointerInfo = this.pointers[pointerIndex] - this._signals.fire('remove-pointer', { + this._scopeFire('interactions:remove-pointer', { pointer, event, + eventTarget: null, pointerIndex, pointerInfo, interaction: this, @@ -517,7 +585,7 @@

packages/core/Interaction.ts

this._latestPointer.eventTarget = null } - _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) { + _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd?: boolean, type?: string) { const actionName = this.prepared.name return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type) @@ -531,9 +599,9 @@

packages/core/Interaction.ts

} } - _doPhase (signalArg: Partial<Interact.SignalArg>) { + _doPhase (signalArg: Omit<DoPhaseArg, 'iEvent'> & { iEvent?: InteractEvent<T> }) { const { event, phase, preEnd, type } = signalArg - const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg) + const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg) if (beforeResult === false) { return false @@ -555,11 +623,11 @@

packages/core/Interaction.ts

rect.height = rect.bottom - rect.top } - this._signals.fire(`action-${phase}`, signalArg) + this._scopeFire(`interactions:action-${phase}` as any, signalArg) this._fireEvent(iEvent) - this._signals.fire(`after-action-${phase}`, signalArg) + this._scopeFire(`interactions:after-action-${phase}` as any, signalArg) return true } diff --git a/packages/interactjs/dist/api/packages_core_interactablePreventDefault.ts.html b/packages/interactjs/dist/api/packages_core_interactablePreventDefault.ts.html index c3f4a65d2..b97e29f12 100644 --- a/packages/interactjs/dist/api/packages_core_interactablePreventDefault.ts.html +++ b/packages/interactjs/dist/api/packages_core_interactablePreventDefault.ts.html @@ -41,10 +41,10 @@

packages/core/interactablePreventDefault.ts

-
import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'
-import events from '@interactjs/utils/events'
-import * as is from '@interactjs/utils/is'
-import { getWindow } from '@interactjs/utils/window'
+            
import { matchesSelector, nodeContains } from '../utils/domUtils'
+import events from '../utils/events'
+import * as is from '../utils/is'
+import { getWindow } from '../utils/window'
 
 declare module '@interactjs/core/Interactable' {
   interface Interactable {
@@ -105,7 +105,7 @@ 

packages/core/interactablePreventDefault.ts

event.preventDefault() } -function onInteractionEvent ({ interaction, event }: Interact.SignalArg) { +function onInteractionEvent ({ interaction, event }: { interaction: Interact.Interaction, event: Interact.PointerEventType }) { if (interaction.interactable) { interaction.interactable.checkAndPreventDefault(event as Event) } @@ -113,7 +113,7 @@

packages/core/interactablePreventDefault.ts

export function install (scope: Interact.Scope) { /** @lends Interactable */ - const Interactable = scope.Interactable + const { Interactable } = scope /** * Returns or sets whether to prevent the browser's default behaviour in @@ -131,10 +131,6 @@

packages/core/interactablePreventDefault.ts

return checkAndPreventDefault(this, scope, event) } - for (const eventSignal of ['down', 'move', 'up', 'cancel']) { - scope.interactions.signals.on(eventSignal, onInteractionEvent) - } - // prevent native HTML5 drag on interact.js target elements scope.interactions.docEvents.push({ type: 'dragstart', @@ -151,11 +147,13 @@

packages/core/interactablePreventDefault.ts

}) } -export type Install = typeof install - export default { id: 'core/interactablePreventDefault', install, + listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => { + acc[`interactions:${eventType}`] = onInteractionEvent + return acc + }, {}), }
diff --git a/packages/interactjs/dist/api/packages_interact_interact.ts.html b/packages/interactjs/dist/api/packages_interact_interact.ts.html index 4e8a233b7..9a37a5aad 100644 --- a/packages/interactjs/dist/api/packages_interact_interact.ts.html +++ b/packages/interactjs/dist/api/packages_interact_interact.ts.html @@ -43,12 +43,12 @@

packages/interact/interact.ts

/** @module interact */
 
-import { Options } from '@interactjs/core/defaultOptions'
-import Interactable from '@interactjs/core/Interactable'
-import { Scope } from '@interactjs/core/scope'
-import * as utils from '@interactjs/utils'
-import browser from '@interactjs/utils/browser'
-import events from '@interactjs/utils/events'
+import { Options } from '../core/defaultOptions'
+import Interactable from '../core/Interactable'
+import { Scope } from '../core/scope'
+import browser from '../utils/browser'
+import events from '../utils/events'
+import * as utils from '../utils/index'
 
 declare module '@interactjs/core/scope' {
   interface Scope {
@@ -250,13 +250,6 @@ 

packages/interact/interact.ts

return interact } -/** - * Returns an object which exposes internal data - * @alias module:interact.debug - * - * @return {object} An object with properties that outline the current state - * and expose internal functions and variables - */ interact.debug = debug function debug () { return scope @@ -329,15 +322,17 @@

packages/interact/interact.ts

return scope.interactions.pointerMoveTolerance } -scope.interactables.signals.on('unset', ({ interactable }) => { - scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1) +scope.addListeners({ + 'interactable:unset': ({ interactable }) => { + scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1) - // Stop related interactions when an Interactable is unset - for (const interaction of scope.interactions.list) { - if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) { - interaction.stop() + // Stop related interactions when an Interactable is unset + for (const interaction of scope.interactions.list) { + if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) { + interaction.stop() + } } - } + }, }) interact.addDocument = (doc, options) => scope.addDocument(doc, options) diff --git a/packages/interactjs/dist/api/packages_modifiers_snap_edges.ts.html b/packages/interactjs/dist/api/packages_modifiers_snap_edges.ts.html index e631e23ee..818f8847c 100644 --- a/packages/interactjs/dist/api/packages_modifiers_snap_edges.ts.html +++ b/packages/interactjs/dist/api/packages_modifiers_snap_edges.ts.html @@ -69,8 +69,8 @@

packages/modifiers/snap/edges.ts

* }) */ -import clone from '@interactjs/utils/clone' -import extend from '@interactjs/utils/extend' +import clone from '../../utils/clone' +import extend from '../../utils/extend' import { ModifierArg } from '../base' import { SnapState } from './pointer' import snapSize, { SnapSizeOptions } from './size' diff --git a/packages/interactjs/dist/api/packages_pointer-events_PointerEvent.ts.html b/packages/interactjs/dist/api/packages_pointer-events_PointerEvent.ts.html index 8ad62c98d..3e7e8bce9 100644 --- a/packages/interactjs/dist/api/packages_pointer-events_PointerEvent.ts.html +++ b/packages/interactjs/dist/api/packages_pointer-events_PointerEvent.ts.html @@ -41,13 +41,13 @@

packages/pointer-events/PointerEvent.ts

-
import BaseEvent from '@interactjs/core/BaseEvent'
-import pointerUtils from '@interactjs/utils/pointerUtils'
+            
import BaseEvent from '../core/BaseEvent'
+import pointerUtils from '../utils/pointerUtils'
 
 /** */
 export default class PointerEvent<T extends string> extends BaseEvent {
   type: T
-  originalEvent: Interact.PointerEventType
+  originalEvent: Interact.PointerEventType | PointerEvent<any>
   pointerId: number
   pointerType: string
   double: boolean
@@ -62,7 +62,7 @@ 

packages/pointer-events/PointerEvent.ts

constructor ( type: T, pointer: Interact.PointerType | PointerEvent<any>, - event: Interact.PointerEventType, + event: Interact.PointerEventType | PointerEvent<any>, eventTarget: Interact.EventTarget, interaction: Interact.Interaction, timeStamp: number, diff --git a/packages/interactjs/dist/api/packages_reflow_index.ts.html b/packages/interactjs/dist/api/packages_reflow_index.ts.html index b293a95fb..a537b1efc 100644 --- a/packages/interactjs/dist/api/packages_reflow_index.ts.html +++ b/packages/interactjs/dist/api/packages_reflow_index.ts.html @@ -41,11 +41,11 @@

packages/reflow/index.ts

-
import Interactable from '@interactjs/core/Interactable'
-import { EventPhase } from '@interactjs/core/InteractEvent'
-import { ActionProps, Interaction } from '@interactjs/core/Interaction'
-import { Scope } from '@interactjs/core/scope'
-import { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'
+            
import Interactable from '../core/Interactable'
+import { EventPhase } from '../core/InteractEvent'
+import { ActionProps, Interaction } from '../core/Interaction'
+import { Scope } from '../core/scope'
+import { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '../utils/index'
 
 declare module '@interactjs/core/Interactable' {
   interface Interactable {
@@ -72,7 +72,6 @@ 

packages/reflow/index.ts

export function install (scope: Scope) { const { actions, - interactions, /** @lends Interactable */ // eslint-disable-next-line no-shadow Interactable, @@ -83,17 +82,6 @@

packages/reflow/index.ts

actions.eventTypes.push(`${actionName}reflow`) } - // remove completed reflow interactions - interactions.signals.on('stop', ({ interaction }) => { - if (interaction.pointerType === EventPhase.Reflow) { - if (interaction._reflowResolve) { - interaction._reflowResolve() - } - - arr.remove(scope.interactions.list, interaction) - } - }) - /** * ```js * const interactable = interact(target) @@ -108,7 +96,7 @@

packages/reflow/index.ts

* * @param { Object } action The action to begin * @param { string } action.name The name of the action - * @returns { Promise<Interactable> } + * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended */ Interactable.prototype.reflow = function (action) { return reflow(this, action, scope) @@ -212,6 +200,18 @@

packages/reflow/index.ts

export default { id: 'reflow', install, + listeners: { + // remove completed reflow interactions + 'interactions:stop': ({ interaction }, scope) => { + if (interaction.pointerType === EventPhase.Reflow) { + if (interaction._reflowResolve) { + interaction._reflowResolve() + } + + arr.remove(scope.interactions.list, interaction) + } + }, + }, } as Interact.Plugin
diff --git a/packages/interactjs/dist/docs/DropEvent.html b/packages/interactjs/dist/docs/DropEvent.html deleted file mode 100644 index d5df36aae..000000000 --- a/packages/interactjs/dist/docs/DropEvent.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - DropEvent - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

DropEvent

- - - - - - - -
- -
- -

- DropEvent -

- - -
- -
-
- - -
- - - -

new DropEvent()

- - - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - - -

Methods

- - - -
- - - -

reject()

- - - - - -
-

If this is a dropactivate event, the dropzone element will be -deactivated.

-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- -
- - - - -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/InteractEvent_InteractEvent.html b/packages/interactjs/dist/docs/InteractEvent_InteractEvent.html deleted file mode 100644 index dacfd7444..000000000 --- a/packages/interactjs/dist/docs/InteractEvent_InteractEvent.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - InteractEvent - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

InteractEvent

- - - - - - - -
- -
- -

- InteractEvent -

- - -
- -
-
- - -
- - - -

new InteractEvent()

- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/Interactable.html b/packages/interactjs/dist/docs/Interactable.html deleted file mode 100644 index 9375f13a5..000000000 --- a/packages/interactjs/dist/docs/Interactable.html +++ /dev/null @@ -1,3403 +0,0 @@ - - - - - - Interactable - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

Interactable

- - - - - - - -
- -
- -

- Interactable -

- - -
- -
-
- - -
- - - -

new Interactable()

- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - -

Classes

- -
-
Interactable
-
-
- - - - - - - -

Members

- - - -
-

actionChecker

- - - - -
-
interact('.resize-drag')
-  .resizable(true)
-  .draggable(true)
-  .actionChecker(function (pointer, event, action, interactable, element, interaction) {
-
-  if (interact.matchesSelector(event.target, '.drag-handle') {
-    // force drag with handle target
-    action.name = drag
-  }
-  else {
-    // resize from the top and right edges
-    action.name  = 'resize'
-    action.edges = { top: true, right: true }
-  }
-
-  return action
-})
-
-

Gets or sets the function used to check action to be performed on -pointerDown

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

allowFrom

- - - - - - - - -
- - - - - - - - - - - - - - - - -
Deprecated:
  • A drag/resize/gesture is started only If the target of the `mousedown`, -`pointerdown` or `touchstart` event or any of it's parents match the given -CSS selector or Element. - -Don't use this method. Instead set the `allowFrom` option for each action -or for `pointerEvents`
- - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -
interact(targett)
-  .resizable({
-    allowFrom: '.resize-handle',
-  .pointerEvents({
-    allowFrom: '.handle',,
-  })
- - -
- - - -
-

ignoreFrom

- - - - -
-
interact(element, { ignoreFrom: document.getElementById('no-action') })
-// or
-interact(element).ignoreFrom('input, textarea, a')
-
-
- - - - - -
- - - - - - - - - - - - - - - - -
Deprecated:
  • If the target of the `mousedown`, `pointerdown` or `touchstart` event or any -of it's parents match the given CSS selector or Element, no -drag/resize/gesture is started. - -Don't use this method. Instead set the `ignoreFrom` option for each action -or for `pointerEvents`
- - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -
interact(targett)
-  .draggable({
-    ignoreFrom: 'input, textarea, a[href]'',
-  })
-  .pointerEvents({
-    ignoreFrom: '[no-pointer]',
-  })
- - -
- - - -
-

styleCursor

- - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - - - -

Methods

- - - -
- - - -

context() → {Node}

- - - - - -
-

Gets the selector context Node of the Interactable. The default is -window.document.

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -Node - - -
-
- - -
-

The context Node of this Interactable

-
- - -
- - - -
- - - -
- - - -

deltaSource(newValueopt) → {string|object}

- - - - - -
-

Returns or sets the mouse coordinate types used to calculate the -movement of the pointer.

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
newValue - - -string - - - - - - <optional>
- - - - - -
-

Use 'client' if you will be scrolling while -interacting; Use 'page' if you want autoScroll to work

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -string -| - -object - - -
-
- - -
-

The current deltaSource or this Interactable

-
- - -
- - - -
- - - -
- - - -

draggable(optionsopt) → {boolean|Interactable}

- - - - - -
-
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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
options - - -boolean -| - -object - - - - - - <optional>
- - - - - -
-

true/false or An object with event -listeners to be fired on drag events (object makes the Interactable -draggable)

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -boolean -| - -Interactable - - -
-
- - -
-

boolean indicating if this can be the -target of drag events, or this Interctable

-
- - -
- - - -
- - - -
- - - -

dropCheck()

- - - - - -
-
interact(target)
-.dropChecker(function(dragEvent,         // related dragmove or dragend event
-                      event,             // TouchEvent/PointerEvent/MouseEvent
-                      dropped,           // bool result of the default checker
-                      dropzone,          // dropzone Interactable
-                      dropElement,       // dropzone elemnt
-                      draggable,         // draggable Interactable
-                      draggableElement) {// draggable element
-
-  return dropped && event.target.hasAttribute('allow-drop')
-}
-
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -

dropzone(optionsopt) → {boolean|Interactable}

- - - - - -
-
interact('.drop').dropzone({
-  accept: '.can-drop' || document.getElementById('single-drop'),
-  overlap: 'pointer' || 'center' || zeroToOne
-}
-
-

Returns or sets whether draggables can be dropped onto this target to -trigger drop events

-

Dropzones can receive the following events:

-
    -
  • dropactivate and dropdeactivate when an acceptable drag starts and ends
  • -
  • dragenter and dragleave when a draggable enters and leaves the dropzone
  • -
  • dragmove when a draggable that has entered the dropzone is moved
  • -
  • drop when a draggable is dropped into this dropzone
  • -
-

Use the accept option to allow only elements that match the given CSS -selector or element. The value can be:

-
    -
  • an Element - only that element can be dropped into this dropzone.
  • -
  • a string, - the element being dragged must match it as a CSS selector.
  • -
  • null - accept options is cleared - it accepts any element.
  • -
-

Use the overlap option to set how drops are checked for. The allowed -values are:

-
    -
  • 'pointer', the pointer must be over the dropzone (default)
  • -
  • 'center', the draggable element's center must be over the dropzone
  • -
  • a number from 0-1 which is the (intersection area) / (draggable area). -e.g. 0.5 for drop to happen when half of the area of the draggable is -over the dropzone
  • -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
options - - -boolean -| - -object -| - -null - - - - - - <optional>
- - - - - -
-

The new options to be set.

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -boolean -| - -Interactable - - -
-
- - -
-

The current setting or this Interactable

-
- - -
- - - -
- - - -
- - - -

fire(iEvent) → {Interactable}

- - - - - -
-

Calls listeners for the given InteractEvent type bound globally -and directly to this Interactable

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
iEvent - - -InteractEvent - - - - -

The InteractEvent object to be fired on this -Interactable

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -Interactable - - -
-
- - -
-

this Interactable

-
- - -
- - - -
- - - -
- - - -

gesturable(optionsopt) → {boolean|Interactable}

- - - - - -
-
interact(element).gesturable({
-    onstart: function (event) {},
-    onmove : function (event) {},
-    onend  : function (event) {},
-
-    // limit multiple gestures.
-    // See the explanation in Interactable.draggable example
-    max: Infinity,
-    maxPerElement: 1,
-})
-
-var isGestureable = interact(element).gesturable()
-
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
options - - -boolean -| - -object - - - - - - <optional>
- - - - - -
-

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

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -boolean -| - -Interactable - - -
-
- - -
-

A boolean indicating if this can be the -target of gesture events, or this Interactable

-
- - -
- - - -
- - - -
- - - -

getRect(elementopt) → {object}

- - - - - -
-

The default function to get an Interactables bounding rect. Can be -overridden using Interactable.rectChecker.

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
element - - -Element - - - - - - <optional>
- - - - - -
-

The element to measure.

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -object - - -
-
- - -
-

The object's bounding rectangle.

-
- - -
- - - -
- - - -
- - - -

off(types, listeneropt, optionsopt) → {Interactable}

- - - - - -
-

Removes an InteractEvent, pointerEvent or DOM event listener.

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
types - - -string -| - -array -| - -object - - - - - - - - - - -

The types of events that were -listened for

- -
listener - - -function -| - -array -| - -object - - - - - - <optional>
- - - - - -
-

The event listener function(s)

- -
options - - -object -| - -boolean - - - - - - <optional>
- - - - - -
-

options object or useCapture flag for -removeEventListener

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -Interactable - - -
-
- - -
-

This Interactable

-
- - -
- - - -
- - - -
- - - -

on(types, listeneropt, optionsopt) → {Interactable}

- - - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
types - - -string -| - -array -| - -object - - - - - - - - - - -

The types of events to listen -for

- -
listener - - -function -| - -array -| - -object - - - - - - <optional>
- - - - - -
-

The event listener function(s)

- -
options - - -object -| - -boolean - - - - - - <optional>
- - - - - -
-

options object or useCapture flag for -addEventListener

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -Interactable - - -
-
- - -
-

This Interactable

-
- - -
- - - -
- - - -
- - - -

origin(originopt) → {object}

- - - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
origin - - -Element -| - -object -| - -string - - - - - - <optional>
- - - - - -
-

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

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -object - - -
-
- - -
-

The current origin or this Interactable

-
- - -
- - - -
- - - -
- - - -

rectChecker(checkeropt) → {function|object}

- - - - - -
-

Returns or sets the function used to calculate the interactable's -element's rectangle

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
checker - - -function - - - - - - <optional>
- - - - - -
-

A function which returns this Interactable's -bounding rectangle. See Interactable.getRect

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -function -| - -object - - -
-
- - -
-

The checker function or this Interactable

-
- - -
- - - -
- - - -
- - - -

reflow(action) → {Promise.<Interactable>}

- - - - - -
-
const interactable = interact(target)
-const drag = { name: drag, axis: 'x' }
-const resize = { name: resize, edges: { left: true, bottom: true }
-
-interactable.reflow(drag)
-interactable.reflow(resize)
-
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
action - - -Object - - - - -

The action to begin

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
name - - -string - - - - -

The name of the action

- -
- - -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -Promise.<Interactable> - - -
-
- - - -
- - - -
- - - -
- - - -

resizable(optionsopt) → {boolean|Interactable}

- - - - - -
-
interact(element).resizable({
-  onstart: function (event) {},
-  onmove : function (event) {},
-  onend  : function (event) {},
-
-  edges: {
-    top   : true,       // Use pointer coords to check for resize.
-    left  : false,      // Disable resizing from left edge.
-    bottom: '.resize-s',// Resize if pointer target matches selector
-    right : handleEl    // Resize if pointer target is the given Element
-  },
-
-    // Width and height can be adjusted independently. When `true`, width and
-    // height are adjusted at a 1:1 ratio.
-    square: false,
-
-    // Width and height can be adjusted independently. When `true`, width and
-    // height maintain the aspect ratio they had when resizing started.
-    preserveAspectRatio: false,
-
-  // a value of 'none' will limit the resize rect to a minimum of 0x0
-  // 'negate' will allow the rect to have negative width/height
-  // 'reposition' will keep the width/height positive by swapping
-  // the top and bottom edges and/or swapping the left and right edges
-  invert: 'none' || 'negate' || 'reposition'
-
-  // limit multiple resizes.
-  // See the explanation in the Interactable.draggable example
-  max: Infinity,
-  maxPerElement: 1,
-})
-
-var isResizeable = interact(element).resizable()
-
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
options - - -boolean -| - -object - - - - - - <optional>
- - - - - -
-

true/false or An object with event -listeners to be fired on resize events (object makes the Interactable -resizable)

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -boolean -| - -Interactable - - -
-
- - -
-

A boolean indicating if this can be the -target of resize elements, or this Interactable

-
- - -
- - - -
- - - -
- - - -

set(options) → {object}

- - - - - -
-

Reset the options of this Interactable

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
options - - -object - - - - -

The new settings to apply

- -
- - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -object - - -
-
- - -
-

This Interactable

-
- - -
- - - -
- - - -
- - - -

unset() → {interact}

- - - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
-
Returns:
- - - -
-
- Type: -
-
- -interact - - -
-
- - - -
- - - -
- - - - - - - -
- -
- - - - -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/doclets.json b/packages/interactjs/dist/docs/doclets.json deleted file mode 100644 index 8cfacb4b6..000000000 --- a/packages/interactjs/dist/docs/doclets.json +++ /dev/null @@ -1 +0,0 @@ -[{"comment":"/** @article /home/taye/proj/interact.js/docs/index.md **/","meta":{"filename":"index.md","lineno":1,"columnno":0,"path":"","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":"T000002R004522","___s":true,"attribs":"","id":"index","ancestors":[]},{"comment":"/**\n * Don't call listeners on the remaining targets\n */","meta":{"range":[668,771],"filename":"BaseEvent.ts","lineno":39,"columnno":2,"path":"../packages/core","code":{"id":"astnode100011468","name":"BaseEvent#stopImmediatePropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/BaseEvent.ts"},"description":"

Don't call listeners on the remaining targets

","name":"stopImmediatePropagation","longname":"BaseEvent#stopImmediatePropagation","kind":"function","memberof":"BaseEvent","scope":"instance","params":[],"___id":"T000002R001120","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[541,600],"filename":"BaseEvent.ts","lineno":32,"columnno":2,"path":"../packages/core","code":{"id":"astnode100011458","name":"BaseEvent#stopPropagation","type":"MethodDefinition","paramnames":[]},"vars":{"":null},"shortpath":"packages/core/BaseEvent.ts"},"description":"

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

","name":"stopPropagation","longname":"BaseEvent#stopPropagation","kind":"function","memberof":"BaseEvent","scope":"instance","params":[],"___id":"T000002R001118","___s":true,"attribs":"","id":"stopPropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Class of events fired on dropzones during drags with acceptable targets.\n */","meta":{"range":[297,757],"filename":"DropEvent.ts","lineno":18,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100002467","name":"DropEvent","type":"MethodDefinition","paramnames":["dropState","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":[978,2068],"filename":"DropEvent.ts","lineno":38,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100002551","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":"T000002R000232","___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":[2413,2521],"filename":"interactablePreventDefault.ts","lineno":68,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013969","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":"T000002R001320","___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":43,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100024681","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":"T000002R002394","___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":[5587,5880],"filename":"index.ts","lineno":208,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100003170","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":"T000002R000292","___s":true,"attribs":"(static) ","id":".dynamicDrop","signature":"(newValueopt) → {boolean|interact}","ancestors":["interact."]},{"comment":"/** */","meta":{"range":[717,1017],"filename":"Interactable.ts","lineno":25,"columnno":2,"path":"../packages/core","code":{"id":"astnode100012638","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":[3569,3621],"filename":"InteractableMethods.ts","lineno":96,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011125","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":"T000002R001081","___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":[2282,2509],"filename":"InteractableMethods.ts","lineno":69,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011105","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":"T000002R001080","___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":[5724,5765],"filename":"Interactable.ts","lineno":194,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013175","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":"T000002R001278","___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":[5359,5548],"filename":"Interactable.ts","lineno":176,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013145","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":"T000002R001276","___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":[3218,3790],"filename":"drag.ts","lineno":99,"columnno":6,"path":"../packages/actions","code":{"id":"astnode100001355","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":"T000002R000105","___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":[5031,5247],"filename":"index.ts","lineno":189,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100003145","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":"T000002R000291","___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":[4268,4368],"filename":"index.ts","lineno":145,"columnno":2,"path":"../packages/actions/drop","code":{"id":"astnode100003130","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":"T000002R000290","___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":[7110,7175],"filename":"Interactable.ts","lineno":242,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013328","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":"T000002R001283","___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":[1099,1513],"filename":"gesture.ts","lineno":68,"columnno":2,"path":"../packages/actions","code":{"id":"astnode100005533","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":"T000002R000507","___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":[3423,3665],"filename":"Interactable.ts","lineno":105,"columnno":2,"path":"../packages/core","code":{"id":"astnode100012995","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":"T000002R001266","___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":[1323,1554],"filename":"InteractableMethods.ts","lineno":37,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011085","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":"T000002R001079","___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":[9045,9137],"filename":"Interactable.ts","lineno":301,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013491","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":"T000002R001293","___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":[8542,8632],"filename":"Interactable.ts","lineno":287,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013475","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":"T000002R001292","___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":[4948,5025],"filename":"Interactable.ts","lineno":162,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013133","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":"T000002R001275","___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":[3994,4210],"filename":"Interactable.ts","lineno":124,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013044","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":"T000002R001269","___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":[1432,1527],"filename":"index.ts","lineno":54,"columnno":2,"path":"../packages/reflow","code":{"id":"astnode100035183","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":"T000002R003744","___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":[2698,2801],"filename":"resize.ts","lineno":81,"columnno":2,"path":"../packages/actions","code":{"id":"astnode100006586","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":"T000002R000623","___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":[9298,9916],"filename":"Interactable.ts","lineno":315,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013507","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":"T000002R001294","___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":[3909,3957],"filename":"InteractableMethods.ts","lineno":129,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100011133","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":"T000002R001082","___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":[10084,10898],"filename":"Interactable.ts","lineno":348,"columnno":2,"path":"../packages/core","code":{"id":"astnode100013620","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":"T000002R001302","___s":true,"attribs":"","id":"unset","signature":"() → {interact}","ancestors":["#Interactable#"]},{"comment":"/** */","meta":{"range":[516,2942],"filename":"InteractEvent.ts","lineno":20,"columnno":2,"path":"../packages/core","code":{"id":"astnode100014557","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":[4733,4836],"filename":"InteractEvent.ts","lineno":193,"columnno":2,"path":"../packages/core","code":{"id":"astnode100015403","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":"T000002R001462","___s":true,"attribs":"","id":"stopImmediatePropagation","signature":"()","ancestors":[]},{"comment":"/**\n * Don't call any other listeners (even on the current target)\n */","meta":{"range":[4918,4977],"filename":"InteractEvent.ts","lineno":200,"columnno":2,"path":"../packages/core","code":{"id":"astnode100015417","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":"T000002R001465","___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":[7991,8350],"filename":"Interaction.ts","lineno":308,"columnno":2,"path":"../packages/core","code":{"id":"astnode100018203","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":"T000002R001740","___s":true,"attribs":"","id":"end","signature":"(eventopt)","ancestors":[]},{"comment":"/**\n * @alias Interaction.prototype.move\n */","meta":{"range":[969,1121],"filename":"Interaction.ts","lineno":85,"columnno":2,"path":"../packages/core","code":{"id":"astnode100017408","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":"T000002R001665","___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":[6526,6833],"filename":"Interaction.ts","lineno":247,"columnno":2,"path":"../packages/core","code":{"id":"astnode100018041","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":"T000002R001720","___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":[3756,4353],"filename":"Interaction.ts","lineno":140,"columnno":2,"path":"../packages/core","code":{"id":"astnode100017608","name":"Interaction#start","type":"MethodDefinition","paramnames":["action","interactable","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":"T000002R001695","___s":true,"attribs":"","id":"start","signature":"(action, target, element) → {object}","ancestors":[]},{"comment":"/** */","meta":{"range":[8500,8702],"filename":"Interaction.ts","lineno":329,"columnno":2,"path":"../packages/core","code":{"id":"astnode100018288","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":"T000002R001751","___s":true,"attribs":"","id":"stop","signature":"()","ancestors":[]},{"comment":"/** */","meta":{"range":[184,1167],"filename":"PointerEvent.ts","lineno":7,"columnno":2,"path":"../packages/pointer-events","code":{"id":"astnode100034819","name":"module.exports","type":"MethodDefinition","paramnames":["type","pointer","event","eventTarget","interaction","timeStamp"]},"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":"../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":[4549,4571],"filename":"interact.ts","lineno":210,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100025070","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":"T000002R002417","___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":[1739,1761],"filename":"interact.ts","lineno":95,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100024747","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":"T000002R002401","___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":[2849,2920],"filename":"base.ts","lineno":120,"columnno":2,"path":"../packages/auto-start","code":{"id":"astnode100009653","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":"T000002R000936","___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":[3567,3585],"filename":"interact.ts","lineno":161,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100024918","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":"T000002R002410","___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":[2243,2259],"filename":"interact.ts","lineno":110,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100024773","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":"T000002R002403","___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":[6195,6247],"filename":"interact.ts","lineno":269,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100025213","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":"T000002R002434","___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":[5717,5737],"filename":"interact.ts","lineno":253,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100025187","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":"T000002R002431","___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":[5456,5508],"filename":"interact.ts","lineno":243,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100025174","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":"T000002R002429","___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":[5223,5261],"filename":"interact.ts","lineno":233,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100025161","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":"T000002R002427","___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":[1337,1355],"filename":"interact.ts","lineno":79,"columnno":0,"path":"../packages/interact","code":{"id":"astnode100024727","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":"T000002R002399","___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":"../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":"T000002R003091","___s":true,"attribs":"","id":"modifiers/snapEdges","ancestors":[]}]},{"kind":"package","longname":"package:undefined","files":["/home/taye/proj/interact.js/packages/actions/actions.spec.ts","/home/taye/proj/interact.js/packages/actions/drag.spec.ts","/home/taye/proj/interact.js/packages/actions/drag.ts","/home/taye/proj/interact.js/packages/actions/drop/drop.spec.ts","/home/taye/proj/interact.js/packages/actions/drop/DropEvent.spec.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.spec.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.spec.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/autoStart.spec.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.spec.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/BaseEvent.ts","/home/taye/proj/interact.js/packages/core/defaultOptions.ts","/home/taye/proj/interact.js/packages/core/Eventable.spec.ts","/home/taye/proj/interact.js/packages/core/Eventable.ts","/home/taye/proj/interact.js/packages/core/Interactable.spec.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/InteractableSet.ts","/home/taye/proj/interact.js/packages/core/InteractEvent.ts","/home/taye/proj/interact.js/packages/core/Interaction.spec.ts","/home/taye/proj/interact.js/packages/core/Interaction.ts","/home/taye/proj/interact.js/packages/core/interactionFinder.spec.ts","/home/taye/proj/interact.js/packages/core/interactionFinder.ts","/home/taye/proj/interact.js/packages/core/interactions.spec.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.spec.ts","/home/taye/proj/interact.js/packages/core/scope.ts","/home/taye/proj/interact.js/packages/dev-tools/devTools.spec.ts","/home/taye/proj/interact.js/packages/dev-tools/index.ts","/home/taye/proj/interact.js/packages/inertia/index.ts","/home/taye/proj/interact.js/packages/inertia/inertia.spec.ts","/home/taye/proj/interact.js/packages/interact/index.ts","/home/taye/proj/interact.js/packages/interact/interact.spec.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.spec.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.spec.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.spec.ts","/home/taye/proj/interact.js/packages/modifiers/restrict/size.ts","/home/taye/proj/interact.js/packages/modifiers/snap/edges.spec.ts","/home/taye/proj/interact.js/packages/modifiers/snap/edges.ts","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.spec.ts","/home/taye/proj/interact.js/packages/modifiers/snap/pointer.ts","/home/taye/proj/interact.js/packages/modifiers/snap/size.spec.ts","/home/taye/proj/interact.js/packages/modifiers/snap/size.ts","/home/taye/proj/interact.js/packages/pointer-events/base.spec.ts","/home/taye/proj/interact.js/packages/pointer-events/base.ts","/home/taye/proj/interact.js/packages/pointer-events/holdRepeat.spec.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.spec.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/reflow/reflow.spec.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/types/types.spec.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/is.ts","/home/taye/proj/interact.js/packages/utils/isWindow.ts","/home/taye/proj/interact.js/packages/utils/normalizeListeners.spec.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":"T000002R004523","___s":true,"attribs":"","id":"package:","ancestors":[]},{"comment":"/**\n * Prevent the default behaviour of the original Event\n */","meta":{"range":[1620,1683],"filename":"PointerEvent.ts","lineno":76,"columnno":2,"path":"../packages/pointer-events","code":{"id":"astnode100035060","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":"T000002R003735","___s":true,"attribs":"","id":"preventDefault","signature":"()","ancestors":[]}] \ No newline at end of file diff --git a/packages/interactjs/dist/docs/docs_index.md.html b/packages/interactjs/dist/docs/docs_index.md.html deleted file mode 100644 index 46779aaef..000000000 --- a/packages/interactjs/dist/docs/docs_index.md.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - docs/index.md - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

docs/index.md

- - - - - - - -
-
-
# API Reference
-
-<img
-  style="background-color: #272822; display: block; margin: auto; max-height: 8em; width: 100%"
-  alt="interact.js"
-  src="img/ijs-anim-short.svg">
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.eot deleted file mode 100644 index 5d20d9163..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.svg deleted file mode 100644 index 3ed7be4bc..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.woff deleted file mode 100644 index 1205787b0..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Bold-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.eot deleted file mode 100644 index 1f639a15f..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.svg deleted file mode 100644 index 6a2607b9d..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.woff deleted file mode 100644 index ed760c062..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-BoldItalic-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.eot deleted file mode 100644 index 0c8a0ae06..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.svg deleted file mode 100644 index e1075dcc2..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.woff deleted file mode 100644 index ff652e643..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Italic-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.eot deleted file mode 100644 index 14868406a..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.svg deleted file mode 100644 index 11a472ca8..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.woff deleted file mode 100644 index e78607481..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Light-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.eot deleted file mode 100644 index 8f445929f..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.svg deleted file mode 100644 index 431d7e354..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.svg +++ /dev/null @@ -1,1835 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.woff deleted file mode 100644 index 43e8b9e6c..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-LightItalic-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.eot deleted file mode 100644 index 6bbc3cf58..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.svg deleted file mode 100644 index 25a395234..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.woff deleted file mode 100644 index e231183dc..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Regular-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.eot deleted file mode 100644 index d8375dd0a..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.svg deleted file mode 100644 index eec4db8bd..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.ttf b/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.ttf deleted file mode 100644 index b3290843a..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.ttf and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.woff deleted file mode 100644 index 28d6adee0..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-Semibold-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.eot b/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.eot deleted file mode 100644 index 0ab1db22e..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.eot and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.svg b/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.svg deleted file mode 100644 index 7166ec1b9..000000000 --- a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf b/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf deleted file mode 100644 index d2d6318f6..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf and /dev/null differ diff --git a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.woff b/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.woff deleted file mode 100644 index d4dfca402..000000000 Binary files a/packages/interactjs/dist/docs/fonts/OpenSans-SemiboldItalic-webfont.woff and /dev/null differ diff --git a/packages/interactjs/dist/docs/global.html b/packages/interactjs/dist/docs/global.html deleted file mode 100644 index 01aee71c9..000000000 --- a/packages/interactjs/dist/docs/global.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - Global - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

Global

- - - - - - - -
- -
- -

- -

- - -
- -
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - - - - - - - - -

Members

- - - -
-

(constant) interact

- - - - -
-
interact('#draggable').draggable(true)
-
-var rectables = interact('rect')
-rectables
-  .gesturable(true)
-  .on('gesturemove', function (event) {
-      // ...
-  })
-
-

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

-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - - - -

Methods

- - - -
- - - -

preventDefault()

- - - - - -
-

Prevent the default behaviour of the original Event

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- -
- - - - -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/img/ijs-32.png b/packages/interactjs/dist/docs/img/ijs-32.png deleted file mode 100644 index 63d1259d9..000000000 Binary files a/packages/interactjs/dist/docs/img/ijs-32.png and /dev/null differ diff --git a/packages/interactjs/dist/docs/img/ijs-64.png b/packages/interactjs/dist/docs/img/ijs-64.png deleted file mode 100644 index e6331590f..000000000 Binary files a/packages/interactjs/dist/docs/img/ijs-64.png and /dev/null differ diff --git a/packages/interactjs/dist/docs/img/ijs-anim-short.svg b/packages/interactjs/dist/docs/img/ijs-anim-short.svg deleted file mode 100644 index 56a7ab666..000000000 --- a/packages/interactjs/dist/docs/img/ijs-anim-short.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/interactjs/dist/docs/img/ijs-anim.svg b/packages/interactjs/dist/docs/img/ijs-anim.svg deleted file mode 100644 index 4d2703569..000000000 --- a/packages/interactjs/dist/docs/img/ijs-anim.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/interactjs/dist/docs/img/ijs-icon.svg b/packages/interactjs/dist/docs/img/ijs-icon.svg deleted file mode 100644 index 9a3fb22d6..000000000 --- a/packages/interactjs/dist/docs/img/ijs-icon.svg +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/packages/interactjs/dist/docs/img/ijs.svg b/packages/interactjs/dist/docs/img/ijs.svg deleted file mode 100644 index 37a883ba4..000000000 --- a/packages/interactjs/dist/docs/img/ijs.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/interactjs/dist/docs/index.html b/packages/interactjs/dist/docs/index.html deleted file mode 100644 index 0f124e122..000000000 --- a/packages/interactjs/dist/docs/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - API Reference - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

API Reference

- - -
- -
-

interact.js

-
- -
- -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/module-interact.html b/packages/interactjs/dist/docs/module-interact.html deleted file mode 100644 index 93d103b57..000000000 --- a/packages/interactjs/dist/docs/module-interact.html +++ /dev/null @@ -1,818 +0,0 @@ - - - - - - interact - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

interact

- - - - - - - -
- -
- - - -
- -
-
- - - - - -
- - - - - - - - - - - - -

Members

- - - -
-

(static) debug

- - - - -
-

Returns an object which exposes internal data

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) isSet

- - - - -
-

Check if an element or selector has been set with the interact -function

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) off

- - - - -
-

Removes a global InteractEvent listener or DOM event from document

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) on

- - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) pointerMoveTolerance

- - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) stop

- - - - -
-

Cancels all interactions (end events are not fired)

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) supportsPointerEvent

- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) supportsTouch

- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - -
-

(static) use

- - - - -
-

Use a plugin

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - -
- - - - - -

Methods

- - - -
- - - -

(static) maxInteractions(newValueopt)

- - - - - -
-

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

-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
newValue - - -number - - - - - - <optional>
- - - - - -
-

Any number. newValue <= 0 means no interactions.

- -
- - - - - - - - - - - - - - - - -
- - - - - - - -
- -
- - - - -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/module-modifiers_snapEdges.html b/packages/interactjs/dist/docs/module-modifiers_snapEdges.html deleted file mode 100644 index 2ac1da909..000000000 --- a/packages/interactjs/dist/docs/module-modifiers_snapEdges.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - modifiers/snapEdges - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

modifiers/snapEdges

- - - - - - - -
- -
- - - - - -
- -
-
- - -

This module allows snapping of the edges of targets during resize -interactions.

- - - - -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- -
interact(target).resizable({
-  snapEdges: {
-    targets: [interact.snappers.grid({ x: 100, y: 50 })],
-  },
-})
-
-interact(target).resizable({
-  snapEdges: {
-    targets: [
-      interact.snappers.grid({
-       top: 50,
-       left: 50,
-       bottom: 100,
-       right: 100,
-      }),
-    ],
-  },
-})
- -
- -
- - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/module.exports.html b/packages/interactjs/dist/docs/module.exports.html deleted file mode 100644 index 983a5b37b..000000000 --- a/packages/interactjs/dist/docs/module.exports.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - exports - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

exports

- - - - - - - -
- -
- -

- exports -

- - -
- -
-
- - -
- - - -

new exports()

- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - - - \ No newline at end of file diff --git a/packages/interactjs/dist/docs/packages_actions_drag.ts.html b/packages/interactjs/dist/docs/packages_actions_drag.ts.html deleted file mode 100644 index dd24c228c..000000000 --- a/packages/interactjs/dist/docs/packages_actions_drag.ts.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - packages/actions/drag.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/actions/drag.ts

- - - - - - - -
-
-
import { ActionName, Scope } from '@interactjs/core/scope'
-import * as arr from '@interactjs/utils/arr'
-import * as is from '@interactjs/utils/is'
-
-declare module '@interactjs/core/Interactable' {
-  interface Interactable {
-    draggable: DraggableMethod
-  }
-}
-
-declare module '@interactjs/core/defaultOptions' {
-  interface ActionDefaults {
-    drag: Interact.DraggableOptions
-  }
-}
-
-declare module '@interactjs/core/scope' {
-  interface Actions {
-    [ActionName.Drag]?: typeof drag
-  }
-
-  // eslint-disable-next-line no-shadow
-  enum ActionName {
-    Drag = 'drag'
-  }
-}
-
-(ActionName as any).Drag = 'drag'
-
-export type DragEvent = Interact.InteractEvent<ActionName.Drag>
-
-export type DraggableMethod = Interact.ActionMethod<Interact.DraggableOptions>
-
-function install (scope: Scope) {
-  const {
-    actions,
-    Interactable,
-    interactions,
-    defaults,
-  } = scope
-
-  interactions.signals.on('before-action-move', beforeMove)
-  interactions.signals.on('action-resume', beforeMove)
-
-  // dragmove
-  interactions.signals.on('action-move', move)
-
-  Interactable.prototype.draggable = drag.draggable
-
-  actions[ActionName.Drag] = drag
-  actions.names.push(ActionName.Drag)
-  arr.merge(actions.eventTypes, [
-    'dragstart',
-    'dragmove',
-    'draginertiastart',
-    'dragresume',
-    'dragend',
-  ])
-  actions.methodDict.drag = 'draggable'
-
-  defaults.actions.drag = drag.defaults
-}
-
-function beforeMove ({ interaction }) {
-  if (interaction.prepared.name !== 'drag') { return }
-
-  const axis = interaction.prepared.axis
-
-  if (axis === 'x') {
-    interaction.coords.cur.page.y   = interaction.coords.start.page.y
-    interaction.coords.cur.client.y = interaction.coords.start.client.y
-
-    interaction.coords.velocity.client.y = 0
-    interaction.coords.velocity.page.y   = 0
-  }
-  else if (axis === 'y') {
-    interaction.coords.cur.page.x   = interaction.coords.start.page.x
-    interaction.coords.cur.client.x = interaction.coords.start.client.x
-
-    interaction.coords.velocity.client.x = 0
-    interaction.coords.velocity.page.x   = 0
-  }
-}
-
-function move ({ iEvent, interaction }) {
-  if (interaction.prepared.name !== 'drag') { return }
-
-  const axis = interaction.prepared.axis
-
-  if (axis === 'x' || axis === 'y') {
-    const opposite = axis === 'x' ? 'y' : 'x'
-
-    iEvent.page[opposite]   = interaction.coords.start.page[opposite]
-    iEvent.client[opposite] = interaction.coords.start.client[opposite]
-    iEvent.delta[opposite] = 0
-  }
-}
-
-/**
- * ```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
- */
-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)
-    this.setOnEvents('drag', options)
-
-    if (/^(xy|x|y|start)$/.test(options.lockAxis)) {
-      this.options.drag.lockAxis = options.lockAxis
-    }
-    if (/^(xy|x|y)$/.test(options.startAxis)) {
-      this.options.drag.startAxis = options.startAxis
-    }
-
-    return this
-  }
-
-  if (is.bool(options)) {
-    this.options.drag.enabled = options
-
-    return this
-  }
-
-  return this.options.drag
-}
-
-const drag: Interact.Plugin = {
-  id: 'actions/drag',
-  install,
-  draggable,
-  beforeMove,
-  move,
-  defaults: {
-    startAxis : 'xy',
-    lockAxis  : 'xy',
-  } as Interact.DropzoneOptions,
-
-  checker (_pointer, _event, interactable) {
-    const dragOptions = interactable.options.drag
-
-    return dragOptions.enabled
-      ? {
-        name: 'drag',
-        axis: (dragOptions.lockAxis === 'start'
-          ? dragOptions.startAxis
-          : dragOptions.lockAxis),
-      }
-      : null
-  },
-
-  getCursor () {
-    return 'move'
-  },
-}
-
-export default drag
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_actions_drop_DropEvent.ts.html b/packages/interactjs/dist/docs/packages_actions_drop_DropEvent.ts.html deleted file mode 100644 index dfbc32e58..000000000 --- a/packages/interactjs/dist/docs/packages_actions_drop_DropEvent.ts.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - packages/actions/drop/DropEvent.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/actions/drop/DropEvent.ts

- - - - - - - -
-
-
import BaseEvent from '@interactjs/core/BaseEvent'
-import Interactable from '@interactjs/core/Interactable'
-import InteractEvent from '@interactjs/core/InteractEvent'
-import Interaction from '@interactjs/core/Interaction'
-import { ActionName } from '@interactjs/core/scope'
-import * as arr from '@interactjs/utils/arr'
-
-class DropEvent extends BaseEvent {
-  target: Element
-  dropzone: Interactable
-  dragEvent: InteractEvent<ActionName.Drag>
-  relatedTarget: Element
-  draggable: Interactable
-  timeStamp: number
-  propagationStopped = false
-  immediatePropagationStopped = false
-
-  /**
-   * Class of events fired on dropzones during drags with acceptable targets.
-   */
-  constructor (dropState: Interaction['dropState'], dragEvent: InteractEvent, type: string) {
-    super(dragEvent._interaction)
-
-    const { element, dropzone } = type === 'dragleave'
-      ? dropState.prev
-      : dropState.cur
-
-    this.type          = type
-    this.target        = element
-    this.currentTarget = element
-    this.dropzone      = dropzone
-    this.dragEvent     = dragEvent
-    this.relatedTarget = dragEvent.target
-    this.draggable     = dragEvent.interactable
-    this.timeStamp     = dragEvent.timeStamp
-  }
-
-  /**
-   * If this is a `dropactivate` event, the dropzone element will be
-   * deactivated.
-   *
-   * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the
-   * dropzone element and more.
-   */
-  reject () {
-    const { dropState } = this._interaction
-
-    if (
-      (this.type !== 'dropactivate') && (
-        !this.dropzone ||
-        dropState.cur.dropzone !== this.dropzone ||
-        dropState.cur.element !== this.target)) {
-      return
-    }
-
-    dropState.prev.dropzone = this.dropzone
-    dropState.prev.element = this.target
-
-    dropState.rejected = true
-    dropState.events.enter = null
-
-    this.stopImmediatePropagation()
-
-    if (this.type === 'dropactivate') {
-      const activeDrops = dropState.activeDrops
-      const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>
-        dropzone === this.dropzone && element === this.target)
-
-      dropState.activeDrops = [
-        ...activeDrops.slice(0, index),
-        ...activeDrops.slice(index + 1),
-      ]
-
-      const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')
-
-      deactivateEvent.dropzone = this.dropzone
-      deactivateEvent.target = this.target
-
-      this.dropzone.fire(deactivateEvent)
-    }
-    else {
-      this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))
-    }
-  }
-
-  preventDefault () {}
-
-  stopPropagation () {
-    this.propagationStopped = true
-  }
-
-  stopImmediatePropagation () {
-    this.immediatePropagationStopped = this.propagationStopped = true
-  }
-}
-
-export default DropEvent
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_actions_drop_index.ts.html b/packages/interactjs/dist/docs/packages_actions_drop_index.ts.html deleted file mode 100644 index 92478ae72..000000000 --- a/packages/interactjs/dist/docs/packages_actions_drop_index.ts.html +++ /dev/null @@ -1,614 +0,0 @@ - - - - - - packages/actions/drop/index.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/actions/drop/index.ts

- - - - - - - -
-
-
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 drag from '../drag'
-import DropEvent from './DropEvent'
-
-export interface DropzoneMethod {
-  (options: Interact.DropzoneOptions | boolean): Interact.Interactable
-  (): Interact.DropzoneOptions
-}
-
-declare module '@interactjs/core/Interactable' {
-  interface Interactable {
-    dropzone: DropzoneMethod
-    dropCheck: (
-      dragEvent: InteractEvent,
-      event: Interact.PointerEventType,
-      draggable: Interactable,
-      draggableElement: Element,
-      dropElemen: Element,
-      rect: any
-    ) => boolean
-  }
-}
-
-declare module '@interactjs/core/Interaction' {
-  interface Interaction {
-    dropState?: {
-      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
-      }>,
-    }
-  }
-}
-
-declare module '@interactjs/core/defaultOptions' {
-  interface ActionDefaults {
-    drop: Interact.DropzoneOptions
-  }
-}
-
-declare module '@interactjs/core/scope' {
-  interface Scope {
-    dynamicDrop?: boolean
-  }
-}
-
-declare module '@interactjs/interact/interact' {
-  interface InteractStatic {
-    dynamicDrop: (newValue?: boolean) => boolean | Interact.interact
-  }
-}
-
-function install (scope: Scope) {
-  const {
-    actions,
-    /** @lends module:interact */
-    interact,
-    /** @lends Interactable */
-    Interactable, // eslint-disable-line no-shadow
-    interactions,
-    defaults,
-  } = scope
-
-  scope.usePlugin(drag)
-
-  interactions.signals.on('before-action-start', ({ interaction }) => {
-    if (interaction.prepared.name !== 'drag') { return }
-
-    interaction.dropState = {
-      cur: {
-        dropzone: null,
-        element: null,
-      },
-      prev: {
-        dropzone: null,
-        element: null,
-      },
-      rejected: null,
-      events: null,
-      activeDrops: null,
-    }
-  })
-
-  interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => {
-    if (interaction.prepared.name !== 'drag') { return }
-
-    const { dropState } = interaction
-
-    // reset active dropzones
-    dropState.activeDrops = null
-    dropState.events = null
-    dropState.activeDrops = getActiveDrops(scope, interaction.element)
-    dropState.events = getDropEvents(interaction, event, dragEvent)
-
-    if (dropState.events.activate) {
-      fireActivationEvents(dropState.activeDrops, dropState.events.activate)
-    }
-  })
-
-  // FIXME proper signal types
-  interactions.signals.on('action-move', (arg) => onEventCreated(arg as any, scope))
-  interactions.signals.on('action-end', (arg) => onEventCreated(arg as any, scope))
-
-  interactions.signals.on('after-action-move', ({ interaction }) => {
-    if (interaction.prepared.name !== 'drag') { return }
-
-    fireDropEvents(interaction, interaction.dropState.events)
-    interaction.dropState.events = {}
-  })
-
-  interactions.signals.on('after-action-end', ({ interaction }) => {
-    if (interaction.prepared.name !== 'drag') { return }
-
-    fireDropEvents(interaction, interaction.dropState.events)
-  })
-
-  interactions.signals.on('stop', ({ interaction }) => {
-    if (interaction.prepared.name !== 'drag') { return }
-
-    const { dropState } = interaction
-
-    dropState.activeDrops = null
-    dropState.events = null
-    dropState.cur.dropzone = null
-    dropState.cur.element = null
-    dropState.prev.dropzone = null
-    dropState.prev.element = null
-    dropState.rejected = false
-  })
-
-  /**
-   *
-   * ```js
-   * interact('.drop').dropzone({
-   *   accept: '.can-drop' || document.getElementById('single-drop'),
-   *   overlap: 'pointer' || 'center' || zeroToOne
-   * }
-   * ```
-   *
-   * Returns or sets whether draggables can be dropped onto this target to
-   * trigger drop events
-   *
-   * Dropzones can receive the following events:
-   *  - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends
-   *  - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone
-   *  - `dragmove` when a draggable that has entered the dropzone is moved
-   *  - `drop` when a draggable is dropped into this dropzone
-   *
-   * Use the `accept` option to allow only elements that match the given CSS
-   * selector or element. The value can be:
-   *
-   *  - **an Element** - only that element can be dropped into this dropzone.
-   *  - **a string**, - the element being dragged must match it as a CSS selector.
-   *  - **`null`** - accept options is cleared - it accepts any element.
-   *
-   * Use the `overlap` option to set how drops are checked for. The allowed
-   * values are:
-   *
-   *   - `'pointer'`, the pointer must be over the dropzone (default)
-   *   - `'center'`, the draggable element's center must be over the dropzone
-   *   - a number from 0-1 which is the `(intersection area) / (draggable area)`.
-   *   e.g. `0.5` for drop to happen when half of the area of the draggable is
-   *   over the dropzone
-   *
-   * Use the `checker` option to specify a function to check if a dragged element
-   * is over this Interactable.
-   *
-   * @param {boolean | object | null} [options] The new options to be set.
-   * @return {boolean | Interactable} The current setting or this Interactable
-   */
-  Interactable.prototype.dropzone = function (this: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {
-    return dropzoneMethod(this, options)
-  }
-
-  /**
-   * ```js
-   * interact(target)
-   * .dropChecker(function(dragEvent,         // related dragmove or dragend event
-   *                       event,             // TouchEvent/PointerEvent/MouseEvent
-   *                       dropped,           // bool result of the default checker
-   *                       dropzone,          // dropzone Interactable
-   *                       dropElement,       // dropzone elemnt
-   *                       draggable,         // draggable Interactable
-   *                       draggableElement) {// draggable element
-   *
-   *   return dropped && event.target.hasAttribute('allow-drop')
-   * }
-   * ```
-   */
-  Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {
-    return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)
-  }
-
-  /**
-   * Returns or sets whether the dimensions of dropzone elements are calculated
-   * on every dragmove or only on dragstart for the default dropChecker
-   *
-   * @param {boolean} [newValue] True to check on each move. False to check only
-   * before start
-   * @return {boolean | interact} The current setting or interact
-   */
-  interact.dynamicDrop = function (newValue?: boolean) {
-    if (utils.is.bool(newValue)) {
-      // if (dragging && scope.dynamicDrop !== newValue && !newValue) {
-      //  calcRects(dropzones)
-      // }
-
-      scope.dynamicDrop = newValue
-
-      return interact
-    }
-    return scope.dynamicDrop
-  }
-
-  utils.arr.merge(actions.eventTypes, [
-    'dragenter',
-    'dragleave',
-    'dropactivate',
-    'dropdeactivate',
-    'dropmove',
-    'drop',
-  ])
-  actions.methodDict.drop = 'dropzone'
-
-  scope.dynamicDrop = false
-
-  defaults.actions.drop = drop.defaults
-}
-
-function collectDrops ({ interactables }, draggableElement) {
-  const drops = []
-
-  // collect all dropzones and their elements which qualify for a drop
-  for (const dropzone of interactables.list) {
-    if (!dropzone.options.drop.enabled) { continue }
-
-    const accept = dropzone.options.drop.accept
-
-    // test the draggable draggableElement against the dropzone's accept setting
-    if ((utils.is.element(accept) && accept !== draggableElement) ||
-        (utils.is.string(accept) &&
-        !utils.dom.matchesSelector(draggableElement, accept)) ||
-        (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {
-      continue
-    }
-
-    // query for new elements if necessary
-    const dropElements = utils.is.string(dropzone.target)
-      ? dropzone._context.querySelectorAll(dropzone.target)
-      : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]
-
-    for (const dropzoneElement of dropElements) {
-      if (dropzoneElement !== draggableElement) {
-        drops.push({
-          dropzone,
-          element: dropzoneElement,
-        })
-      }
-    }
-  }
-
-  return drops
-}
-
-function fireActivationEvents (activeDrops, event) {
-  // loop through all active dropzones and trigger event
-  for (const { dropzone, element } of activeDrops) {
-    event.dropzone = dropzone
-
-    // set current element as event target
-    event.target = element
-    dropzone.fire(event)
-    event.propagationStopped = event.immediatePropagationStopped = false
-  }
-}
-
-// return a new array of possible drops. getActiveDrops should always be
-// called when a drag has just started or a drag event happens while
-// dynamicDrop is true
-function getActiveDrops (scope: Scope, dragElement: Element) {
-  // get dropzones and their elements that could receive the draggable
-  const activeDrops = collectDrops(scope, dragElement)
-
-  for (const activeDrop of activeDrops) {
-    activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)
-  }
-
-  return activeDrops
-}
-
-function getDrop ({ dropState, interactable: draggable, element: dragElement }: Partial<Interact.Interaction>, dragEvent, pointerEvent) {
-  const validDrops = []
-
-  // collect all dropzones and their elements which qualify for a drop
-  for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {
-    validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)
-      ? dropzoneElement
-      : null)
-  }
-
-  // get the most appropriate dropzone based on DOM depth and order
-  const dropIndex = utils.dom.indexOfDeepestElement(validDrops)
-
-  return dropState.activeDrops[dropIndex] || null
-}
-
-function getDropEvents (interaction: Interact.Interaction, _pointerEvent, dragEvent) {
-  const { dropState } = interaction
-  const dropEvents = {
-    enter     : null,
-    leave     : null,
-    activate  : null,
-    deactivate: null,
-    move      : null,
-    drop      : null,
-  }
-
-  if (dragEvent.type === 'dragstart') {
-    dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')
-
-    dropEvents.activate.target   = null
-    dropEvents.activate.dropzone = null
-  }
-  if (dragEvent.type === 'dragend') {
-    dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')
-
-    dropEvents.deactivate.target   = null
-    dropEvents.deactivate.dropzone = null
-  }
-
-  if (dropState.rejected) {
-    return dropEvents
-  }
-
-  if (dropState.cur.element !== dropState.prev.element) {
-    // if there was a previous dropzone, create a dragleave event
-    if (dropState.prev.dropzone) {
-      dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')
-
-      dragEvent.dragLeave    = dropEvents.leave.target   = dropState.prev.element
-      dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone
-    }
-    // if dropzone is not null, create a dragenter event
-    if (dropState.cur.dropzone) {
-      dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')
-
-      dragEvent.dragEnter = dropState.cur.element
-      dragEvent.dropzone = dropState.cur.dropzone
-    }
-  }
-
-  if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {
-    dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')
-
-    dragEvent.dropzone = dropState.cur.dropzone
-    dragEvent.relatedTarget = dropState.cur.element
-  }
-  if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {
-    dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')
-
-    dropEvents.move.dragmove = dragEvent
-    dragEvent.dropzone = dropState.cur.dropzone
-  }
-
-  return dropEvents
-}
-
-function fireDropEvents (interaction: Interact.Interaction, events) {
-  const { dropState } = interaction
-  const {
-    activeDrops,
-    cur,
-    prev,
-  } = dropState
-
-  if (events.leave) { prev.dropzone.fire(events.leave) }
-  if (events.move) { cur.dropzone.fire(events.move) }
-  if (events.enter) { cur.dropzone.fire(events.enter) }
-  if (events.drop) { cur.dropzone.fire(events.drop) }
-
-  if (events.deactivate) {
-    fireActivationEvents(activeDrops, events.deactivate)
-  }
-
-  dropState.prev.dropzone  = cur.dropzone
-  dropState.prev.element = cur.element
-}
-
-function onEventCreated ({ interaction, iEvent, event }: Interact.SignalArg, scope) {
-  if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return }
-
-  const { dropState } = interaction
-
-  if (scope.dynamicDrop) {
-    dropState.activeDrops = getActiveDrops(scope, interaction.element)
-  }
-
-  const dragEvent = iEvent
-  const dropResult = getDrop(interaction, dragEvent, event)
-
-  // update rejected status
-  dropState.rejected = dropState.rejected &&
-    !!dropResult &&
-    dropResult.dropzone === dropState.cur.dropzone &&
-    dropResult.element === dropState.cur.element
-
-  dropState.cur.dropzone  = dropResult && dropResult.dropzone
-  dropState.cur.element = dropResult && dropResult.element
-
-  dropState.events = getDropEvents(interaction, event, dragEvent)
-}
-
-function dropzoneMethod (interactable: Interact.Interactable): Interact.DropzoneOptions
-function dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean)
-function dropzoneMethod (interactable: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {
-  if (utils.is.object(options)) {
-    interactable.options.drop.enabled = options.enabled !== false
-
-    if (options.listeners) {
-      const normalized = utils.normalizeListeners(options.listeners)
-      // rename 'drop' to '' as it will be prefixed with 'drop'
-      const corrected = Object.keys(normalized).reduce((acc, type) => {
-        const correctedType = /^(enter|leave)/.test(type)
-          ? `drag${type}`
-          : /^(activate|deactivate|move)/.test(type)
-            ? `drop${type}`
-            : type
-
-        acc[correctedType] = normalized[type]
-
-        return acc
-      }, {})
-
-      interactable.off(interactable.options.drop.listeners)
-      interactable.on(corrected)
-      interactable.options.drop.listeners = corrected
-    }
-
-    if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }
-    if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }
-    if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }
-    if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }
-    if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }
-    if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }
-
-    if (/^(pointer|center)$/.test(options.overlap as string)) {
-      interactable.options.drop.overlap = options.overlap
-    }
-    else if (utils.is.number(options.overlap)) {
-      interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)
-    }
-    if ('accept' in options) {
-      interactable.options.drop.accept = options.accept
-    }
-    if ('checker' in options) {
-      interactable.options.drop.checker = options.checker
-    }
-
-    return interactable
-  }
-
-  if (utils.is.bool(options)) {
-    interactable.options.drop.enabled = options
-
-    return interactable
-  }
-
-  return interactable.options.drop
-}
-
-function dropCheckMethod (
-  interactable: Interact.Interactable,
-  dragEvent: InteractEvent,
-  event: Interact.PointerEventType,
-  draggable: Interact.Interactable,
-  draggableElement: Element,
-  dropElement: Element,
-  rect: any
-) {
-  let dropped = false
-
-  // if the dropzone has no rect (eg. display: none)
-  // call the custom dropChecker or just return false
-  if (!(rect = rect || interactable.getRect(dropElement))) {
-    return (interactable.options.drop.checker
-      ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)
-      : false)
-  }
-
-  const dropOverlap = interactable.options.drop.overlap
-
-  if (dropOverlap === 'pointer') {
-    const origin = utils.getOriginXY(draggable, draggableElement, 'drag')
-    const page = utils.pointer.getPageXY(dragEvent)
-
-    page.x += origin.x
-    page.y += origin.y
-
-    const horizontal = (page.x > rect.left) && (page.x < rect.right)
-    const vertical   = (page.y > rect.top) && (page.y < rect.bottom)
-
-    dropped = horizontal && vertical
-  }
-
-  const dragRect = draggable.getRect(draggableElement)
-
-  if (dragRect && dropOverlap === 'center') {
-    const cx = dragRect.left + dragRect.width  / 2
-    const cy = dragRect.top  + dragRect.height / 2
-
-    dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom
-  }
-
-  if (dragRect && utils.is.number(dropOverlap)) {
-    const overlapArea  = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *
-                          Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))
-
-    const overlapRatio = overlapArea / (dragRect.width * dragRect.height)
-
-    dropped = overlapRatio >= dropOverlap
-  }
-
-  if (interactable.options.drop.checker) {
-    dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)
-  }
-
-  return dropped
-}
-
-const drop = {
-  id: 'actions/drop',
-  install,
-  getActiveDrops,
-  getDrop,
-  getDropEvents,
-  fireDropEvents,
-  defaults: {
-    enabled: false,
-    accept : null,
-    overlap: 'pointer',
-  } as Interact.DropzoneOptions,
-}
-
-export default drop
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_actions_gesture.ts.html b/packages/interactjs/dist/docs/packages_actions_gesture.ts.html deleted file mode 100644 index 4274d037c..000000000 --- a/packages/interactjs/dist/docs/packages_actions_gesture.ts.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - packages/actions/gesture.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/actions/gesture.ts

- - - - - - - -
-
-
import InteractEvent from '@interactjs/core/InteractEvent'
-import { ActionName, Scope } from '@interactjs/core/scope'
-import * as utils from '@interactjs/utils'
-
-export type GesturableMethod = Interact.ActionMethod<Interact.GesturableOptions>
-
-declare module '@interactjs/core/Interaction' {
-  interface Interaction {
-    gesture?: {
-      angle: number,          // angle from first to second touch
-      distance: number,
-      scale: number,          // gesture.distance / gesture.startDistance
-      startAngle: number,     // angle of line joining two touches
-      startDistance: number,  // distance between two touches of touchStart
-    }
-  }
-}
-
-declare module '@interactjs/core/Interactable' {
-  interface Interactable {
-    gesturable: GesturableMethod
-  }
-}
-
-declare module '@interactjs/core/defaultOptions' {
-  interface ActionDefaults {
-    gesture: Interact.GesturableOptions
-  }
-}
-
-declare module '@interactjs/core/scope' {
-  interface Actions {
-    [ActionName.Gesture]?: typeof gesture
-  }
-
-  // eslint-disable-next-line no-shadow
-  enum ActionName {
-    Gesture = 'gesture'
-  }
-}
-
-(ActionName as any).Gesture = '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 {
-    actions,
-    Interactable,
-    interactions,
-    defaults,
-  } = scope
-
-  /**
-   * ```js
-   * interact(element).gesturable({
-   *     onstart: function (event) {},
-   *     onmove : function (event) {},
-   *     onend  : function (event) {},
-   *
-   *     // limit multiple gestures.
-   *     // See the explanation in {@link Interactable.draggable} example
-   *     max: Infinity,
-   *     maxPerElement: 1,
-   * })
-   *
-   * var isGestureable = interact(element).gesturable()
-   * ```
-   *
-   * Gets or sets whether multitouch gestures can be performed on the target
-   *
-   * @param {boolean | object} [options] true/false or An object with event
-   * listeners to be fired on gesture events (makes the Interactable gesturable)
-   * @return {boolean | Interactable} A boolean indicating if this can be the
-   * target of gesture events, or this Interactable
-   */
-  Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {
-    if (utils.is.object(options)) {
-      this.options.gesture.enabled = options.enabled !== false
-      this.setPerAction('gesture', options)
-      this.setOnEvents('gesture', options)
-
-      return this
-    }
-
-    if (utils.is.bool(options)) {
-      this.options.gesture.enabled = options
-
-      return this
-    }
-
-    return this.options.gesture as Interact.Options
-  } as GesturableMethod
-
-  interactions.signals.on('action-start', updateGestureProps)
-  interactions.signals.on('action-move', updateGestureProps)
-  interactions.signals.on('action-end', updateGestureProps)
-
-  interactions.signals.on('new', ({ interaction }) => {
-    interaction.gesture = {
-      angle: 0,
-      distance: 0,
-      scale: 1,
-      startAngle: 0,
-      startDistance: 0,
-    }
-  })
-
-  actions[ActionName.Gesture] = gesture
-  actions.names.push(ActionName.Gesture)
-  utils.arr.merge(actions.eventTypes, [
-    'gesturestart',
-    'gesturemove',
-    'gestureend',
-  ])
-  actions.methodDict.gesture = 'gesturable'
-
-  defaults.actions.gesture = gesture.defaults
-}
-
-const gesture = {
-  id: 'actions/gesture',
-  install,
-  defaults: {
-  },
-
-  checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number; }; }) {
-    if (interaction.pointers.length >= 2) {
-      return { name: 'gesture' }
-    }
-
-    return null
-  },
-
-  getCursor () {
-    return ''
-  },
-}
-
-function updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {
-  if (interaction.prepared.name !== 'gesture') { return }
-
-  const pointers = interaction.pointers.map((p) => p.pointer)
-  const starting = phase === 'start'
-  const ending = phase === 'end'
-  const deltaSource = interaction.interactable.options.deltaSource
-
-  iEvent.touches = [pointers[0], pointers[1]]
-
-  if (starting) {
-    iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)
-    iEvent.box      = utils.pointer.touchBBox(pointers)
-    iEvent.scale    = 1
-    iEvent.ds       = 0
-    iEvent.angle    = utils.pointer.touchAngle(pointers, deltaSource)
-    iEvent.da       = 0
-
-    interaction.gesture.startDistance = iEvent.distance
-    interaction.gesture.startAngle = iEvent.angle
-  }
-  else if (ending || event instanceof InteractEvent) {
-    const prevEvent = interaction.prevEvent as GestureEvent
-
-    iEvent.distance = prevEvent.distance
-    iEvent.box      = prevEvent.box
-    iEvent.scale    = prevEvent.scale
-    iEvent.ds       = 0
-    iEvent.angle    = prevEvent.angle
-    iEvent.da       = 0
-  }
-  else {
-    iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)
-    iEvent.box      = utils.pointer.touchBBox(pointers)
-    iEvent.scale    = iEvent.distance / interaction.gesture.startDistance
-    iEvent.angle    = utils.pointer.touchAngle(pointers, deltaSource)
-
-    iEvent.ds = iEvent.scale - interaction.gesture.scale
-    iEvent.da = iEvent.angle - interaction.gesture.angle
-  }
-
-  interaction.gesture.distance = iEvent.distance
-  interaction.gesture.angle = iEvent.angle
-
-  if (utils.is.number(iEvent.scale) &&
-      iEvent.scale !== Infinity &&
-      !isNaN(iEvent.scale)) {
-    interaction.gesture.scale = iEvent.scale
-  }
-}
-
-export default gesture
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_actions_resize.ts.html b/packages/interactjs/dist/docs/packages_actions_resize.ts.html deleted file mode 100644 index f330dac28..000000000 --- a/packages/interactjs/dist/docs/packages_actions_resize.ts.html +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - packages/actions/resize.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/actions/resize.ts

- - - - - - - -
-
-
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 = Interact.ActionMethod<Interact.ResizableOptions>
-
-declare module '@interactjs/core/Interactable' {
-  interface Interactable {
-    resizable: ResizableMethod
-  }
-}
-
-declare module '@interactjs/core/Interaction' {
-  interface Interaction {
-    resizeAxes: 'x' | 'y' | 'xy'
-    resizeRects: {
-      start: Required<Interact.Rect>
-      current: Interact.Rect
-      inverted: Required<Interact.Rect>
-      previous: Required<Interact.Rect>
-      delta: Required<Interact.Rect>
-    }
-    resizeStartAspectRatio: number
-  }
-
-  interface ActionProps {
-    _linkedEdges?: { [key: string]: boolean }
-  }
-}
-
-declare module '@interactjs/core/defaultOptions' {
-  interface ActionDefaults {
-    resize: Interact.ResizableOptions
-  }
-}
-
-declare module '@interactjs/core/scope' {
-  interface Actions {
-    [ActionName.Resize]?: typeof resize
-  }
-
-  // eslint-disable-next-line no-shadow
-  enum ActionName {
-    Resize = 'resize'
-  }
-}
-
-(ActionName as any).Resize = 'resize'
-
-export interface ResizeEvent extends Interact.InteractEvent<ActionName.Resize> {
-  deltaRect?: Required<Interact.Rect>
-}
-
-function install (scope: Scope) {
-  const {
-    actions,
-    browser,
-    /** @lends Interactable */
-    Interactable, // tslint:disable-line no-shadowed-variable
-    interactions,
-    defaults,
-  } = scope
-
-  // Less Precision with touch input
-
-  interactions.signals.on('new', (interaction) => {
-    interaction.resizeAxes = 'xy'
-  })
-
-  interactions.signals.on('action-start', start)
-  interactions.signals.on('action-move', move)
-
-  interactions.signals.on('action-start', updateEventAxes)
-  interactions.signals.on('action-move', updateEventAxes)
-
-  resize.cursors = initCursors(browser)
-  resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10
-
-  /**
-   * ```js
-   * interact(element).resizable({
-   *   onstart: function (event) {},
-   *   onmove : function (event) {},
-   *   onend  : function (event) {},
-   *
-   *   edges: {
-   *     top   : true,       // Use pointer coords to check for resize.
-   *     left  : false,      // Disable resizing from left edge.
-   *     bottom: '.resize-s',// Resize if pointer target matches selector
-   *     right : handleEl    // Resize if pointer target is the given Element
-   *   },
-   *
-   *     // Width and height can be adjusted independently. When `true`, width and
-   *     // height are adjusted at a 1:1 ratio.
-   *     square: false,
-   *
-   *     // Width and height can be adjusted independently. When `true`, width and
-   *     // height maintain the aspect ratio they had when resizing started.
-   *     preserveAspectRatio: false,
-   *
-   *   // a value of 'none' will limit the resize rect to a minimum of 0x0
-   *   // 'negate' will allow the rect to have negative width/height
-   *   // 'reposition' will keep the width/height positive by swapping
-   *   // the top and bottom edges and/or swapping the left and right edges
-   *   invert: 'none' || 'negate' || 'reposition'
-   *
-   *   // limit multiple resizes.
-   *   // See the explanation in the {@link Interactable.draggable} example
-   *   max: Infinity,
-   *   maxPerElement: 1,
-   * })
-   *
-   * var isResizeable = interact(element).resizable()
-   * ```
-   *
-   * Gets or sets whether resize actions can be performed on the target
-   *
-   * @param {boolean | object} [options] true/false or An object with event
-   * listeners to be fired on resize events (object makes the Interactable
-   * resizable)
-   * @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.ResizableOptions | boolean) {
-    return resizable(this, options, scope)
-  } as ResizableMethod
-
-  actions[ActionName.Resize] = resize
-  actions.names.push(ActionName.Resize)
-  utils.arr.merge(actions.eventTypes, [
-    'resizestart',
-    'resizemove',
-    'resizeinertiastart',
-    'resizeresume',
-    'resizeend',
-  ])
-  actions.methodDict.resize = 'resizable'
-
-  defaults.actions.resize = resize.defaults
-}
-
-const resize = {
-  id: 'actions/resize',
-  install,
-  defaults: {
-    square: false,
-    preserveAspectRatio: false,
-    axis: 'xy',
-
-    // use default margin
-    margin: NaN,
-
-    // object with props left, right, top, bottom which are
-    // true/false values to resize when the pointer is over that edge,
-    // CSS selectors to match the handles for each direction
-    // or the Elements for each handle
-    edges: null,
-
-    // a value of 'none' will limit the resize rect to a minimum of 0x0
-    // 'negate' will alow the rect to have negative width/height
-    // 'reposition' will keep the width/height positive by swapping
-    // the top and bottom edges and/or swapping the left and right edges
-    invert: 'none',
-  } as Interact.ResizableOptions,
-
-  checker (
-    _pointer: Interact.PointerType,
-    _event: Interact.PointerEventType,
-    interactable: Interact.Interactable,
-    element: Element,
-    interaction: Interaction,
-    rect: Interact.Rect
-  ) {
-    if (!rect) { return null }
-
-    const page = utils.extend({}, interaction.coords.cur.page)
-    const options = interactable.options
-
-    if (options.resize.enabled) {
-      const resizeOptions = options.resize
-      const resizeEdges: { [edge: string]: boolean } = { left: false, right: false, top: false, bottom: false }
-
-      // if using resize.edges
-      if (utils.is.object(resizeOptions.edges)) {
-        for (const edge in resizeEdges) {
-          resizeEdges[edge] = checkResizeEdge(edge,
-            resizeOptions.edges[edge],
-            page,
-            interaction._latestPointer.eventTarget,
-            element,
-            rect,
-            resizeOptions.margin || this.defaultMargin)
-        }
-
-        resizeEdges.left = resizeEdges.left && !resizeEdges.right
-        resizeEdges.top  = resizeEdges.top  && !resizeEdges.bottom
-
-        if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {
-          return {
-            name: 'resize',
-            edges: resizeEdges,
-          }
-        }
-      }
-      else {
-        const right  = options.resize.axis !== 'y' && page.x > (rect.right  - this.defaultMargin)
-        const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)
-
-        if (right || bottom) {
-          return {
-            name: 'resize',
-            axes: (right ? 'x' : '') + (bottom ? 'y' : ''),
-          }
-        }
-      }
-    }
-
-    return null
-  },
-
-  cursors: null as unknown as ReturnType<typeof initCursors>,
-
-  getCursor (action: ActionProps) {
-    const cursors = resize.cursors as { [key: string]: string }
-    if (action.axis) {
-      return cursors[action.name + action.axis]
-    }
-    else if (action.edges) {
-      let cursorKey = ''
-      const edgeNames = ['top', 'bottom', 'left', 'right']
-
-      for (let i = 0; i < 4; i++) {
-        if (action.edges[edgeNames[i]]) {
-          cursorKey += edgeNames[i]
-        }
-      }
-
-      return cursors[cursorKey]
-    }
-
-    return null
-  },
-
-  defaultMargin: null as unknown as number,
-}
-
-function resizable (interactable: Interact.Interactable, options: Interact.OrBoolean<Interact.ResizableOptions> | boolean, scope: Scope) {
-  if (utils.is.object(options)) {
-    interactable.options.resize.enabled = options.enabled !== false
-    interactable.setPerAction('resize', options)
-    interactable.setOnEvents('resize', options)
-
-    if (utils.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
-    }
-
-    if (utils.is.bool(options.preserveAspectRatio)) {
-      interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio
-    }
-    else if (utils.is.bool(options.square)) {
-      interactable.options.resize.square = options.square
-    }
-
-    return interactable
-  }
-  if (utils.is.bool(options)) {
-    interactable.options.resize.enabled = options
-
-    return interactable
-  }
-  return interactable.options.resize
-}
-
-function checkResizeEdge (name: string, value: any, page: Interact.Point, element: Node, interactableElement: Element, rect: Interact.Rect, margin: number) {
-  // false, '', undefined, null
-  if (!value) { return false }
-
-  // true value, use pointer coords and element rect
-  if (value === true) {
-    // if dimensions are negative, "switch" edges
-    const width  = utils.is.number(rect.width) ? rect.width  : rect.right  - rect.left
-    const height = utils.is.number(rect.height) ? rect.height : rect.bottom - rect.top
-
-    // don't use margin greater than half the relevent dimension
-    margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2)
-
-    if (width < 0) {
-      if      (name === 'left')  { name = 'right' }
-      else if (name === 'right') { name = 'left'  }
-    }
-    if (height < 0) {
-      if      (name === 'top')    { name = 'bottom' }
-      else if (name === 'bottom') { name = 'top'    }
-    }
-
-    if (name === 'left') { return page.x < ((width  >= 0 ? rect.left : rect.right) + margin) }
-    if (name === 'top') { return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin) }
-
-    if (name === 'right') { return page.x > ((width  >= 0 ? rect.right : rect.left) - margin) }
-    if (name === 'bottom') { return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin) }
-  }
-
-  // the remaining checks require an element
-  if (!utils.is.element(element)) { return false }
-
-  return utils.is.element(value)
-  // the value is an element to use as a resize handle
-    ? value === element
-    // otherwise check if element matches value as selector
-    : utils.dom.matchesUpTo(element, value, interactableElement)
-}
-
-function initCursors (browser: typeof import ('@interactjs/utils/browser').default) {
-  return (browser.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 start ({ iEvent, interaction }: Interact.SignalArg) {
-  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {
-    return
-  }
-
-  const startRect = interaction.rect
-  const resizeOptions = interaction.interactable.options.resize
-
-  /*
-   * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge
-   * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make
-   * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend
-   * on the active edges and the edge being interacted with.
-   */
-  if (resizeOptions.square || resizeOptions.preserveAspectRatio) {
-    const linkedEdges = utils.extend({}, interaction.prepared.edges)
-
-    linkedEdges.top    = linkedEdges.top    || (linkedEdges.left   && !linkedEdges.bottom)
-    linkedEdges.left   = linkedEdges.left   || (linkedEdges.top    && !linkedEdges.right)
-    linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right  && !linkedEdges.top)
-    linkedEdges.right  = linkedEdges.right  || (linkedEdges.bottom && !linkedEdges.left)
-
-    interaction.prepared._linkedEdges = linkedEdges
-  }
-  else {
-    interaction.prepared._linkedEdges = null
-  }
-
-  // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize
-  if (resizeOptions.preserveAspectRatio) {
-    interaction.resizeStartAspectRatio = startRect.width / startRect.height
-  }
-
-  interaction.resizeRects = {
-    start     : startRect,
-    current   : utils.extend({}, startRect),
-    inverted  : utils.extend({}, startRect),
-    previous  : utils.extend({}, startRect),
-    delta     : {
-      left: 0,
-      right : 0,
-      width : 0,
-      top : 0,
-      bottom: 0,
-      height: 0,
-    },
-  }
-
-  iEvent.rect = interaction.resizeRects.inverted
-  ; (iEvent as ResizeEvent).deltaRect = interaction.resizeRects.delta
-}
-
-function move ({ iEvent, interaction }) {
-  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }
-
-  const resizeOptions = interaction.interactable.options.resize
-  const invert = resizeOptions.invert
-  const invertible = invert === 'reposition' || invert === 'negate'
-
-  let edges = interaction.prepared.edges
-
-  // eslint-disable-next-line no-shadow
-  const start      = interaction.resizeRects.start
-  const current    = interaction.resizeRects.current
-  const inverted   = interaction.resizeRects.inverted
-  const deltaRect  = interaction.resizeRects.delta
-  const previous   = utils.extend(interaction.resizeRects.previous, inverted)
-  const originalEdges = edges
-
-  const eventDelta = utils.extend({}, iEvent.delta)
-
-  if (resizeOptions.preserveAspectRatio || resizeOptions.square) {
-    // `resize.preserveAspectRatio` takes precedence over `resize.square`
-    const startAspectRatio = resizeOptions.preserveAspectRatio
-      ? interaction.resizeStartAspectRatio
-      : 1
-
-    edges = interaction.prepared._linkedEdges
-
-    if ((originalEdges.left && originalEdges.bottom) ||
-        (originalEdges.right && originalEdges.top)) {
-      eventDelta.y = -eventDelta.x / startAspectRatio
-    }
-    else if (originalEdges.left || originalEdges.right) { eventDelta.y = eventDelta.x / startAspectRatio }
-    else if (originalEdges.top  || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio }
-  }
-
-  // update the 'current' rect without modifications
-  if (edges.top) { current.top    += eventDelta.y }
-  if (edges.bottom) { current.bottom += eventDelta.y }
-  if (edges.left) { current.left   += eventDelta.x }
-  if (edges.right) { current.right  += eventDelta.x }
-
-  if (invertible) {
-    // if invertible, copy the current rect
-    utils.extend(inverted, current)
-
-    if (invert === 'reposition') {
-      // swap edge values if necessary to keep width/height positive
-      let swap
-
-      if (inverted.top > inverted.bottom) {
-        swap = inverted.top
-
-        inverted.top = inverted.bottom
-        inverted.bottom = swap
-      }
-      if (inverted.left > inverted.right) {
-        swap = inverted.left
-
-        inverted.left = inverted.right
-        inverted.right = swap
-      }
-    }
-  }
-  else {
-    // if not invertible, restrict to minimum of 0x0 rect
-    inverted.top    = Math.min(current.top, start.bottom)
-    inverted.bottom = Math.max(current.bottom, start.top)
-    inverted.left   = Math.min(current.left, start.right)
-    inverted.right  = Math.max(current.right, start.left)
-  }
-
-  inverted.width  = inverted.right  - inverted.left
-  inverted.height = inverted.bottom - inverted.top
-
-  for (const edge in inverted) {
-    deltaRect[edge] = inverted[edge] - previous[edge]
-  }
-
-  iEvent.edges = interaction.prepared.edges
-  iEvent.rect = inverted
-  iEvent.deltaRect = deltaRect
-}
-
-function updateEventAxes ({ interaction, iEvent, action }) {
-  if (action !== 'resize' || !interaction.resizeAxes) { return }
-
-  const options = interaction.interactable.options
-
-  if (options.resize.square) {
-    if (interaction.resizeAxes === 'y') {
-      iEvent.delta.x = iEvent.delta.y
-    }
-    else {
-      iEvent.delta.y = iEvent.delta.x
-    }
-    iEvent.axes = 'xy'
-  }
-  else {
-    iEvent.axes = interaction.resizeAxes
-
-    if (interaction.resizeAxes === 'x') {
-      iEvent.delta.y = 0
-    }
-    else if (interaction.resizeAxes === 'y') {
-      iEvent.delta.x = 0
-    }
-  }
-}
-
-export default resize
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_auto-start_InteractableMethods.ts.html b/packages/interactjs/dist/docs/packages_auto-start_InteractableMethods.ts.html deleted file mode 100644 index 7c155e598..000000000 --- a/packages/interactjs/dist/docs/packages_auto-start_InteractableMethods.ts.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - packages/auto-start/InteractableMethods.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/auto-start/InteractableMethods.ts

- - - - - - - -
-
-
import { warnOnce } from '@interactjs/utils'
-import * as is from '@interactjs/utils/is'
-
-// TODO: there seems to be a @babel/preset-typescript bug causing regular import
-// syntax to remain in js output
-type Scope = import ('@interactjs/core/scope').Scope
-type Actions = import ('@interactjs/core/scope').Actions
-type Interaction = import ('@interactjs/core/Interaction').default
-type Interactable = import ('@interactjs/core/Interactable').default
-
-declare module '@interactjs/core/Interactable' {
-  interface Interactable {
-    getAction: typeof getAction
-    defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any
-    styleCursor: typeof styleCursor
-    actionChecker: typeof actionChecker
-    ignoreFrom: (...args: any) => boolean
-    allowFrom: (...args: any) => boolean
-  }
-}
-
-declare module '@interactjs/core/Interaction' {
-  interface Interaction {
-    pointerIsDown: boolean
-  }
-}
-
-function install (scope: Scope) {
-  const {
-    /** @lends Interactable */
-    Interactable, // tslint:disable-line no-shadowed-variable
-    actions,
-  } = scope
-
-  Interactable.prototype.getAction = getAction
-
-  /**
-   * ```js
-   * interact(element, { ignoreFrom: document.getElementById('no-action') })
-   * // or
-   * interact(element).ignoreFrom('input, textarea, a')
-   * ```
-   * @deprecated
-   * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any
-   * of it's parents match the given CSS selector or Element, no
-   * drag/resize/gesture is started.
-   *
-   * Don't use this method. Instead set the `ignoreFrom` option for each action
-   * or for `pointerEvents`
-   *
-   * @example
-   * interact(targett)
-   *   .draggable({
-   *     ignoreFrom: 'input, textarea, a[href]'',
-   *   })
-   *   .pointerEvents({
-   *     ignoreFrom: '[no-pointer]',
-   *   })
-   *
-   * @param {string | Element | null} [newValue] a CSS selector string, an
-   * Element or `null` to not ignore any elements
-   * @return {string | Element | object} The current ignoreFrom value or this
-   * Interactable
-   */
-  Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {
-    return this._backCompatOption('ignoreFrom', newValue)
-  }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')
-
-  /**
-   * @deprecated
-   *
-   * A drag/resize/gesture is started only If the target of the `mousedown`,
-   * `pointerdown` or `touchstart` event or any of it's parents match the given
-   * CSS selector or Element.
-   *
-   * Don't use this method. Instead set the `allowFrom` option for each action
-   * or for `pointerEvents`
-   *
-   * @example
-   * interact(targett)
-   *   .resizable({
-   *     allowFrom: '.resize-handle',
-   *   .pointerEvents({
-   *     allowFrom: '.handle',,
-   *   })
-   *
-   * @param {string | Element | null} [newValue] a CSS selector string, an
-   * Element or `null` to allow from any element
-   * @return {string | Element | object} The current allowFrom value or this
-   * Interactable
-   */
-  Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {
-    return this._backCompatOption('allowFrom', newValue)
-  }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')
-
-  /**
-   * ```js
-   * interact('.resize-drag')
-   *   .resizable(true)
-   *   .draggable(true)
-   *   .actionChecker(function (pointer, event, action, interactable, element, interaction) {
-   *
-   *   if (interact.matchesSelector(event.target, '.drag-handle') {
-   *     // force drag with handle target
-   *     action.name = drag
-   *   }
-   *   else {
-   *     // resize from the top and right edges
-   *     action.name  = 'resize'
-   *     action.edges = { top: true, right: true }
-   *   }
-   *
-   *   return action
-   * })
-   * ```
-   *
-   * Gets or sets the function used to check action to be performed on
-   * pointerDown
-   *
-   * @param {function | null} [checker] A function which takes a pointer event,
-   * defaultAction string, interactable, element and interaction as parameters
-   * and returns an object with name property 'drag' 'resize' or 'gesture' and
-   * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right
-   * props.
-   * @return {Function | Interactable} The checker function or this Interactable
-   */
-  Interactable.prototype.actionChecker = actionChecker
-
-  /**
-   * Returns or sets whether the the cursor should be changed depending on the
-   * action that would be performed if the mouse were pressed and dragged.
-   *
-   * @param {boolean} [newValue]
-   * @return {boolean | Interactable} The current setting or this Interactable
-   */
-  Interactable.prototype.styleCursor = styleCursor
-
-  Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {
-    return defaultActionChecker(this, pointer, event, interaction, element, actions)
-  }
-}
-
-function getAction (this: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: Element): Interact.ActionProps {
-  const action = this.defaultActionChecker(pointer, event, interaction, element)
-
-  if (this.options.actionChecker) {
-    return this.options.actionChecker(pointer, event, action, this, element, interaction)
-  }
-
-  return action
-}
-
-function defaultActionChecker (interactable: Interactable, pointer: Interact.PointerType, event: Interact.PointerEventType, interaction: Interaction, element: Element, actions: Actions) {
-  const rect = interactable.getRect(element)
-  const buttons = (event as MouseEvent).buttons || ({
-    0: 1,
-    1: 4,
-    3: 8,
-    4: 16,
-  })[(event as MouseEvent).button as 0 | 1 | 3 | 4]
-  let action = null
-
-  for (const actionName of actions.names) {
-    // check mouseButton setting if the pointer is down
-    if (interaction.pointerIsDown &&
-        /mouse|pointer/.test(interaction.pointerType) &&
-      (buttons & interactable.options[actionName].mouseButtons) === 0) {
-      continue
-    }
-
-    action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)
-
-    if (action) {
-      return action
-    }
-  }
-}
-
-function styleCursor (this: Interactable, newValue?: boolean) {
-  if (is.bool(newValue)) {
-    this.options.styleCursor = newValue
-
-    return this
-  }
-
-  if (newValue === null) {
-    delete this.options.styleCursor
-
-    return this
-  }
-
-  return this.options.styleCursor
-}
-
-function actionChecker (this: Interactable, checker: any) {
-  if (is.func(checker)) {
-    this.options.actionChecker = checker
-
-    return this
-  }
-
-  if (checker === null) {
-    delete this.options.actionChecker
-
-    return this
-  }
-
-  return this.options.actionChecker
-}
-
-export default {
-  id: 'auto-start/interactableMethods',
-  install,
-}
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_auto-start_base.ts.html b/packages/interactjs/dist/docs/packages_auto-start_base.ts.html deleted file mode 100644 index c5bcb22af..000000000 --- a/packages/interactjs/dist/docs/packages_auto-start_base.ts.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - - - packages/auto-start/base.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/auto-start/base.ts

- - - - - - - -
-
-
import * as utils from '@interactjs/utils'
-import InteractableMethods from './InteractableMethods'
-
-declare module '@interactjs/interact/interact' {
-  interface InteractStatic {
-    maxInteractions: (newValue: any) => any
-  }
-}
-
-declare module '@interactjs/core/scope' {
-  interface Scope {
-    autoStart: AutoStart
-    maxInteractions: (...args: any) => any
-  }
-}
-
-declare module '@interactjs/core/defaultOptions' {
-  interface BaseDefaults {
-    actionChecker?
-    styleCursor?
-  }
-
-  interface PerActionDefaults {
-    manualStart?: boolean
-    max?: number
-    maxPerElement?: number
-    allowFrom?: string | Element
-    ignoreFrom?: string | Element
-
-    // only allow left button by default
-    // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value
-    mouseButtons?: 0 | 1 | 2 | 4 | 16
-  }
-}
-
-export interface AutoStart {
-  // Allow this many interactions to happen simultaneously
-  maxInteractions: number
-  withinInteractionLimit: typeof withinInteractionLimit
-  cursorElement: HTMLElement
-  signals: utils.Signals
-}
-
-function install (scope: Interact.Scope) {
-  const {
-    interact,
-    interactions,
-    defaults,
-  } = scope
-
-  scope.usePlugin(InteractableMethods)
-
-  // set cursor style on mousedown
-  interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {
-    if (interaction.interacting()) { return }
-
-    const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)
-    prepare(interaction, actionInfo, scope)
-  })
-
-  // set cursor style on mousemove
-  interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {
-    if (interaction.pointerType !== 'mouse' ||
-        interaction.pointerIsDown ||
-        interaction.interacting()) { return }
-
-    const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)
-    prepare(interaction, actionInfo, scope)
-  })
-
-  interactions.signals.on('move', (arg) => {
-    const { interaction } = arg
-
-    if (!interaction.pointerIsDown ||
-        interaction.interacting() ||
-        !interaction.pointerWasMoved ||
-        !interaction.prepared.name) {
-      return
-    }
-
-    scope.autoStart.signals.fire('before-start', arg)
-
-    const { interactable } = interaction
-
-    if (interaction.prepared.name && interactable) {
-      // check manualStart and interaction limit
-      if (interactable.options[interaction.prepared.name].manualStart ||
-          !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {
-        interaction.stop()
-      }
-      else {
-        interaction.start(interaction.prepared, interactable, interaction.element)
-      }
-    }
-  })
-
-  interactions.signals.on('stop', ({ interaction }) => {
-    const { interactable } = interaction
-
-    if (interactable && interactable.options.styleCursor) {
-      setCursor(interaction.element as HTMLElement, '', scope)
-    }
-  })
-
-  defaults.base.actionChecker = null
-  defaults.base.styleCursor = true
-
-  utils.extend(defaults.perAction, {
-    manualStart: false,
-    max: Infinity,
-    maxPerElement: 1,
-    allowFrom:  null,
-    ignoreFrom: null,
-
-    // only allow left button by default
-    // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value
-    mouseButtons: 1,
-  })
-
-  /**
-   * Returns or sets the maximum number of concurrent interactions allowed.  By
-   * default only 1 interaction is allowed at a time (for backwards
-   * compatibility). To allow multiple interactions on the same Interactables and
-   * elements, you need to enable it in the draggable, resizable and gesturable
-   * `'max'` and `'maxPerElement'` options.
-   *
-   * @alias module:interact.maxInteractions
-   *
-   * @param {number} [newValue] Any number. newValue <= 0 means no interactions.
-   */
-  interact.maxInteractions = (newValue) => maxInteractions(newValue, scope)
-
-  scope.autoStart = {
-    // Allow this many interactions to happen simultaneously
-    maxInteractions: Infinity,
-    withinInteractionLimit,
-    cursorElement: null,
-    signals: new utils.Signals(),
-  }
-}
-
-// Check if the current interactable supports the action.
-// If so, return the validated action. Otherwise, return null
-function validateAction (action, interactable, element, eventTarget, scope) {
-  if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&
-      interactable.options[action.name].enabled &&
-      withinInteractionLimit(interactable, element, action, scope)) {
-    return action
-  }
-
-  return null
-}
-
-function validateMatches (interaction: Interact.Interaction, pointer, event, matches: Interact.Interactable[], matchElements: Element[], eventTarget: Element, scope: Interact.Scope) {
-  for (let i = 0, len = matches.length; i < len; i++) {
-    const match = matches[i]
-    const matchElement = matchElements[i]
-    const matchAction = match.getAction(pointer, event, interaction, matchElement)
-
-    if (!matchAction) { continue }
-
-    const action = validateAction(
-      matchAction,
-      match,
-      matchElement,
-      eventTarget,
-      scope)
-
-    if (action) {
-      return {
-        action,
-        interactable: match,
-        element: matchElement,
-      }
-    }
-  }
-
-  return { action: null, interactable: null, element: null }
-}
-
-function getActionInfo (interaction: Interact.Interaction, pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Element, scope: Interact.Scope) {
-  let matches = []
-  let matchElements = []
-
-  let element = eventTarget
-
-  function pushMatches (interactable) {
-    matches.push(interactable)
-    matchElements.push(element)
-  }
-
-  while (utils.is.element(element)) {
-    matches = []
-    matchElements = []
-
-    scope.interactables.forEachMatch(element, pushMatches)
-
-    const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)
-
-    if (actionInfo.action &&
-      !actionInfo.interactable.options[actionInfo.action.name].manualStart) {
-      return actionInfo
-    }
-
-    element = utils.dom.parentNode(element)
-  }
-
-  return { action: null, interactable: null, element: null }
-}
-
-function prepare (interaction: Interact.Interaction, { action, interactable, element }, scope: Interact.Scope) {
-  action = action || {}
-
-  if (interaction.interactable && interaction.interactable.options.styleCursor) {
-    setCursor(interaction.element as HTMLElement, '', scope)
-  }
-
-  interaction.interactable = interactable
-  interaction.element = element
-  utils.copyAction(interaction.prepared, action)
-
-  interaction.rect = interactable && action.name
-    ? interactable.getRect(element)
-    : null
-
-  if (interactable && interactable.options.styleCursor) {
-    const cursor = action ? scope.actions[action.name].getCursor(action) : ''
-    setCursor(interaction.element as HTMLElement, cursor, scope)
-  }
-
-  scope.autoStart.signals.fire('prepared', { interaction })
-}
-
-function withinInteractionLimit (interactable: Interact.Interactable, element: Element, action, scope: Interact.Scope) {
-  const options = interactable.options
-  const maxActions = options[action.name].max
-  const maxPerElement = options[action.name].maxPerElement
-  const autoStartMax = scope.autoStart.maxInteractions
-  let activeInteractions = 0
-  let interactableCount = 0
-  let elementCount = 0
-
-  // no actions if any of these values == 0
-  if (!(maxActions && maxPerElement && autoStartMax)) { return false }
-
-  for (const interaction of scope.interactions.list) {
-    const otherAction = interaction.prepared.name
-
-    if (!interaction.interacting()) { continue }
-
-    activeInteractions++
-
-    if (activeInteractions >= autoStartMax) {
-      return false
-    }
-
-    if (interaction.interactable !== interactable) { continue }
-
-    interactableCount += otherAction === action.name ? 1 : 0
-
-    if (interactableCount >= maxActions) {
-      return false
-    }
-
-    if (interaction.element === element) {
-      elementCount++
-
-      if (otherAction === action.name && elementCount >= maxPerElement) {
-        return false
-      }
-    }
-  }
-
-  return autoStartMax > 0
-}
-
-function maxInteractions (newValue, scope: Interact.Scope) {
-  if (utils.is.number(newValue)) {
-    scope.autoStart.maxInteractions = newValue
-
-    return this
-  }
-
-  return scope.autoStart.maxInteractions
-}
-
-function setCursor (element: HTMLElement, cursor, scope: Interact.Scope) {
-  if (scope.autoStart.cursorElement) {
-    scope.autoStart.cursorElement.style.cursor = ''
-  }
-
-  element.ownerDocument.documentElement.style.cursor = cursor
-  element.style.cursor = cursor
-  scope.autoStart.cursorElement = cursor ? element : null
-}
-
-export default {
-  id: 'auto-start/base',
-  install,
-  maxInteractions,
-  withinInteractionLimit,
-  validateAction,
-} as Interact.Plugin
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_core_BaseEvent.ts.html b/packages/interactjs/dist/docs/packages_core_BaseEvent.ts.html deleted file mode 100644 index 68d1c1ec2..000000000 --- a/packages/interactjs/dist/docs/packages_core_BaseEvent.ts.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - packages/core/BaseEvent.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/core/BaseEvent.ts

- - - - - - - -
-
-
import Interactable from './Interactable'
-import Interaction from './Interaction'
-import { ActionName } from './scope'
-
-export enum EventPhase {
-  Start = 'start',
-  Move = 'move',
-  End = 'end',
-  _NONE = '',
-}
-
-export class BaseEvent<T extends ActionName = any> {
-  type: string
-  target: EventTarget
-  currentTarget: EventTarget
-  interactable: Interactable
-  _interaction: Interaction<T>
-  timeStamp: any
-  immediatePropagationStopped = false
-  propagationStopped = false
-
-  get interaction () {
-    return this._interaction._proxy
-  }
-
-  constructor (interaction) {
-    this._interaction = interaction
-  }
-
-  preventDefault () {}
-
-  /**
-   * Don't call any other listeners (even on the current target)
-   */
-  stopPropagation () {
-    this.propagationStopped = true
-  }
-
-  /**
-   * Don't call listeners on the remaining targets
-   */
-  stopImmediatePropagation () {
-    this.immediatePropagationStopped = this.propagationStopped = true
-  }
-}
-
-export default BaseEvent
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_core_InteractEvent.ts.html b/packages/interactjs/dist/docs/packages_core_InteractEvent.ts.html deleted file mode 100644 index 99ae2dfef..000000000 --- a/packages/interactjs/dist/docs/packages_core_InteractEvent.ts.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - packages/core/InteractEvent.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/core/InteractEvent.ts

- - - - - - - -
-
-
import extend from '@interactjs/utils/extend'
-import getOriginXY from '@interactjs/utils/getOriginXY'
-import hypot from '@interactjs/utils/hypot'
-import BaseEvent from './BaseEvent'
-import defaults from './defaultOptions'
-import Interaction from './Interaction'
-import { ActionName } from './scope'
-
-export enum EventPhase {
-  Start = 'start',
-  Move = 'move',
-  End = 'end',
-  _NONE = '',
-}
-
-export class InteractEvent<
-  T extends ActionName = any,
-  P extends EventPhase = EventPhase._NONE,
-> extends BaseEvent<T> {
-  target: Element
-  currentTarget: Element
-  relatedTarget: Element
-  screenX?: number
-  screenY?: number
-  button: number
-  buttons: number
-  ctrlKey: boolean
-  shiftKey: boolean
-  altKey: boolean
-  metaKey: boolean
-  page: Interact.Point
-  client: Interact.Point
-  delta: Interact.Point
-  rect: Required<Interact.Rect>
-  x0: number
-  y0: number
-  t0: number
-  dt: number
-  duration: number
-  clientX0: number
-  clientY0: number
-  velocity: Interact.Point
-  speed: number
-  swipe: ReturnType<InteractEvent<T>['getSwipe']>
-  timeStamp: any
-  // drag
-  dragEnter?: Element
-  dragLeave?: Element
-  // resize
-  axes?: Interact.Point
-  preEnd?: boolean
-
-  /** */
-  constructor (
-    interaction: Interaction,
-    event: Interact.PointerEventType,
-    actionName: T,
-    phase: P,
-    element: Element,
-    related?: Element,
-    preEnd?: boolean,
-    type?: string,
-  ) {
-    super(interaction)
-
-    element = element || interaction.element
-
-    const target      = interaction.interactable
-    // FIXME: add deltaSource to defaults
-    const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'
-    const origin      = getOriginXY(target, element, actionName)
-    const starting    = phase === 'start'
-    const ending      = phase === 'end'
-    const prevEvent   = starting ? this : interaction.prevEvent
-    const coords      = starting
-      ? interaction.coords.start
-      : ending
-        ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }
-        : interaction.coords.cur
-
-    this.page      = extend({}, coords.page)
-    this.client    = extend({}, coords.client)
-    this.rect      = extend({}, interaction.rect)
-    this.timeStamp = coords.timeStamp
-
-    if (!ending) {
-      this.page.x -= origin.x
-      this.page.y -= origin.y
-
-      this.client.x -= origin.x
-      this.client.y -= origin.y
-    }
-
-    this.ctrlKey       = event.ctrlKey
-    this.altKey        = event.altKey
-    this.shiftKey      = event.shiftKey
-    this.metaKey       = event.metaKey
-    this.button        = (event as MouseEvent).button
-    this.buttons       = (event as MouseEvent).buttons
-    this.target        = element
-    this.currentTarget = element
-    this.relatedTarget = related || null
-    this.preEnd        = preEnd
-    this.type          = type || (actionName + (phase || ''))
-    this.interactable  = target
-
-    this.t0 = starting
-      ? interaction.pointers[interaction.pointers.length - 1].downTime
-      : prevEvent.t0
-
-    this.x0       = interaction.coords.start.page.x - origin.x
-    this.y0       = interaction.coords.start.page.y - origin.y
-    this.clientX0 = interaction.coords.start.client.x - origin.x
-    this.clientY0 = interaction.coords.start.client.y - origin.y
-
-    if (starting || ending) {
-      this.delta = { x: 0, y: 0 }
-    }
-    else {
-      this.delta = {
-        x: this[deltaSource].x - prevEvent[deltaSource].x,
-        y: this[deltaSource].y - prevEvent[deltaSource].y,
-      }
-    }
-
-    this.dt        = interaction.coords.delta.timeStamp
-    this.duration  = this.timeStamp - this.t0
-
-    // velocity and speed in pixels per second
-    this.velocity = extend({}, interaction.coords.velocity[deltaSource])
-    this.speed = hypot(this.velocity.x, this.velocity.y)
-
-    this.swipe = (ending || phase === 'inertiastart') ? this.getSwipe() : null
-  }
-
-  get pageX () { return this.page.x }
-  set pageX (value) { this.page.x = value }
-  get pageY () { return this.page.y }
-  set pageY (value) { this.page.y = value }
-
-  get clientX () { return this.client.x }
-  set clientX (value) { this.client.x = value }
-  get clientY () { return this.client.y }
-  set clientY (value) { this.client.y = value }
-
-  get dx () { return this.delta.x }
-  set dx (value) { this.delta.x = value }
-  get dy () { return this.delta.y }
-  set dy (value) { this.delta.y = value }
-
-  get velocityX () { return this.velocity.x }
-  set velocityX (value) { this.velocity.x = value }
-  get velocityY () { return this.velocity.y }
-  set velocityY (value) { this.velocity.y = value }
-
-  getSwipe () {
-    const interaction = this._interaction
-
-    if (interaction.prevEvent.speed < 600 ||
-        this.timeStamp - interaction.prevEvent.timeStamp > 150) {
-      return null
-    }
-
-    let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI
-    const overlap = 22.5
-
-    if (angle < 0) {
-      angle += 360
-    }
-
-    const left = 135 - overlap <= angle && angle < 225 + overlap
-    const up   = 225 - overlap <= angle && angle < 315 + overlap
-
-    const right = !left && (315 - overlap <= angle || angle <  45 + overlap)
-    const down  = !up   &&   45 - overlap <= angle && angle < 135 + overlap
-
-    return {
-      up,
-      down,
-      left,
-      right,
-      angle,
-      speed: interaction.prevEvent.speed,
-      velocity: {
-        x: interaction.prevEvent.velocityX,
-        y: interaction.prevEvent.velocityY,
-      },
-    }
-  }
-
-  preventDefault () {}
-
-  /**
-   * Don't call listeners on the remaining targets
-   */
-  stopImmediatePropagation () {
-    this.immediatePropagationStopped = this.propagationStopped = true
-  }
-
-  /**
-   * Don't call any other listeners (even on the current target)
-   */
-  stopPropagation () {
-    this.propagationStopped = true
-  }
-}
-
-export default InteractEvent
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_core_Interactable.ts.html b/packages/interactjs/dist/docs/packages_core_Interactable.ts.html deleted file mode 100644 index 55bca1963..000000000 --- a/packages/interactjs/dist/docs/packages_core_Interactable.ts.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - packages/core/Interactable.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/core/Interactable.ts

- - - - - - - -
-
-
import * as arr from '@interactjs/utils/arr'
-import browser from '@interactjs/utils/browser'
-import clone from '@interactjs/utils/clone'
-import { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'
-import events from '@interactjs/utils/events'
-import extend from '@interactjs/utils/extend'
-import * as is from '@interactjs/utils/is'
-import normalizeListeners from '@interactjs/utils/normalizeListeners'
-import { getWindow } from '@interactjs/utils/window'
-import { ActionDefaults, Defaults, Options } from './defaultOptions'
-import Eventable from './Eventable'
-import { Actions } from './scope'
-
-type IgnoreValue = string | Element | boolean
-
-/** */
-export class Interactable implements Partial<Eventable> {
-  protected get _defaults (): Defaults {
-    return {
-      base: {},
-      perAction: {},
-      actions: {} as ActionDefaults,
-    }
-  }
-
-  readonly options!: Required<Options>
-  readonly _actions: Actions
-  readonly target: Interact.Target
-  readonly events = new Eventable()
-  readonly _context: Document | Element
-  readonly _win: Window
-  readonly _doc: Document
-
-  /** */
-  constructor (target: Interact.Target, options: any, defaultContext: Document | Element) {
-    this._actions = options.actions
-    this.target   = target
-    this._context = options.context || defaultContext
-    this._win     = getWindow(trySelector(target) ? this._context : target)
-    this._doc     = this._win.document
-
-    this.set(options)
-  }
-
-  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) }
-    if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }
-
-    return this
-  }
-
-  updatePerActionListeners (actionName, prev, cur) {
-    if (is.array(prev) || is.object(prev)) {
-      this.off(actionName, prev)
-    }
-
-    if (is.array(cur) || is.object(cur)) {
-      this.on(actionName, cur)
-    }
-  }
-
-  setPerAction (actionName, options: Interact.OrBoolean<Options>) {
-    const defaults = this._defaults
-
-    // for all the default per-action options
-    for (const optionName in options) {
-      const actionOptions = this.options[actionName]
-      const optionValue = options[optionName]
-      const isArray = is.array(optionValue)
-
-      // remove old event listeners and add new ones
-      if (optionName === 'listeners') {
-        this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)
-      }
-
-      // if the option value is an array
-      if (isArray) {
-        actionOptions[optionName] = arr.from(optionValue)
-      }
-      // if the option value is an object
-      else if (!isArray && is.plainObject(optionValue)) {
-        // copy the object
-        actionOptions[optionName] = extend(
-          actionOptions[optionName] || {},
-          clone(optionValue))
-
-        // set anabled field to true if it exists in the defaults
-        if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {
-          actionOptions[optionName].enabled = optionValue.enabled !== false
-        }
-      }
-      // if the option value is a boolean and the default is an object
-      else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {
-        actionOptions[optionName].enabled = optionValue
-      }
-      // if it's anything else, do a plain assignment
-      else {
-        actionOptions[optionName] = optionValue
-      }
-    }
-  }
-
-  /**
-   * The default function to get an Interactables bounding rect. Can be
-   * overridden using {@link Interactable.rectChecker}.
-   *
-   * @param {Element} [element] The element to measure.
-   * @return {object} The object's bounding rectangle.
-   */
-  getRect (element: Element) {
-    element = element || (is.element(this.target)
-      ? this.target
-      : null)
-
-    if (is.string(this.target)) {
-      element = element || this._context.querySelector(this.target)
-    }
-
-    return getElementRect(element)
-  }
-
-  /**
-   * Returns or sets the function used to calculate the interactable's
-   * element's rectangle
-   *
-   * @param {function} [checker] A function which returns this Interactable's
-   * bounding rectangle. See {@link Interactable.getRect}
-   * @return {function | object} The checker function or this Interactable
-   */
-  rectChecker (checker: (element: Element) => any) {
-    if (is.func(checker)) {
-      this.getRect = checker
-
-      return this
-    }
-
-    if (checker === null) {
-      delete this.getRect
-
-      return this
-    }
-
-    return this.getRect
-  }
-
-  _backCompatOption (optionName, newValue) {
-    if (trySelector(newValue) || is.object(newValue)) {
-      this.options[optionName] = newValue
-
-      for (const action of this._actions.names) {
-        this.options[action][optionName] = newValue
-      }
-
-      return this
-    }
-
-    return this.options[optionName]
-  }
-
-  /**
-   * Gets or sets the origin of the Interactable's element.  The x and y
-   * of the origin will be subtracted from action event coordinates.
-   *
-   * @param {Element | object | string} [origin] An HTML or SVG Element whose
-   * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'
-   * or any CSS selector
-   *
-   * @return {object} The current origin or this Interactable
-   */
-  origin (newValue) {
-    return this._backCompatOption('origin', newValue)
-  }
-
-  /**
-   * Returns or sets the mouse coordinate types used to calculate the
-   * movement of the pointer.
-   *
-   * @param {string} [newValue] Use 'client' if you will be scrolling while
-   * interacting; Use 'page' if you want autoScroll to work
-   * @return {string | object} The current deltaSource or this Interactable
-   */
-  deltaSource (newValue) {
-    if (newValue === 'page' || newValue === 'client') {
-      this.options.deltaSource = newValue
-
-      return this
-    }
-
-    return this.options.deltaSource
-  }
-
-  /**
-   * Gets the selector context Node of the Interactable. The default is
-   * `window.document`.
-   *
-   * @return {Node} The context Node of this Interactable
-   */
-  context () {
-    return this._context
-  }
-
-  inContext (element) {
-    return (this._context === element.ownerDocument ||
-            nodeContains(this._context, element))
-  }
-
-  testIgnoreAllow (this: Interactable, options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue }, interactableElement: Element, eventTarget: Element) {
-    return (!this.testIgnore(options.ignoreFrom, interactableElement, eventTarget) &&
-            this.testAllow(options.allowFrom, interactableElement, eventTarget))
-  }
-
-  testAllow (this: Interactable, allowFrom: IgnoreValue, interactableElement: Element, element: Element) {
-    if (!allowFrom) { return true }
-
-    if (!is.element(element)) { return false }
-
-    if (is.string(allowFrom)) {
-      return matchesUpTo(element, allowFrom, interactableElement)
-    }
-    else if (is.element(allowFrom)) {
-      return nodeContains(allowFrom, element)
-    }
-
-    return false
-  }
-
-  testIgnore (this: Interactable, ignoreFrom: IgnoreValue, interactableElement: Element, element: Element) {
-    if (!ignoreFrom || !is.element(element)) { return false }
-
-    if (is.string(ignoreFrom)) {
-      return matchesUpTo(element, ignoreFrom, interactableElement)
-    }
-    else if (is.element(ignoreFrom)) {
-      return nodeContains(ignoreFrom, element)
-    }
-
-    return false
-  }
-
-  /**
-   * Calls listeners for the given InteractEvent type bound globally
-   * and directly to this Interactable
-   *
-   * @param {InteractEvent} iEvent The InteractEvent object to be fired on this
-   * Interactable
-   * @return {Interactable} this Interactable
-   */
-  fire (iEvent) {
-    this.events.fire(iEvent)
-
-    return this
-  }
-
-  _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {
-    if (is.object(typeArg) && !is.array(typeArg)) {
-      options = listenerArg
-      listenerArg = null
-    }
-
-    const addRemove = method === 'on' ? 'add' : 'remove'
-    const listeners = normalizeListeners(typeArg, listenerArg)
-
-    for (let type in listeners) {
-      if (type === 'wheel') { type = browser.wheelEvent }
-
-      for (const listener of listeners[type]) {
-        // if it is an action event type
-        if (arr.contains(this._actions.eventTypes, type)) {
-          this.events[method](type, listener)
-        }
-        // delegated event
-        else if (is.string(this.target)) {
-          events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)
-        }
-        // remove listener from this Interatable's element
-        else {
-          (events[addRemove] as typeof events.remove)(this.target, type, listener, options)
-        }
-      }
-    }
-
-    return this
-  }
-
-  /**
-   * Binds a listener for an InteractEvent, pointerEvent or DOM event.
-   *
-   * @param {string | array | object} types The types of events to listen
-   * for
-   * @param {function | array | object} [listener] The event listener function(s)
-   * @param {object | boolean} [options] options object or useCapture flag for
-   * addEventListener
-   * @return {Interactable} This Interactable
-   */
-  on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {
-    return this._onOff('on', types, listener, options)
-  }
-
-  /**
-   * Removes an InteractEvent, pointerEvent or DOM event listener.
-   *
-   * @param {string | array | object} types The types of events that were
-   * listened for
-   * @param {function | array | object} [listener] The event listener function(s)
-   * @param {object | boolean} [options] options object or useCapture flag for
-   * removeEventListener
-   * @return {Interactable} This Interactable
-   */
-  off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {
-    return this._onOff('off', types, listener, options)
-  }
-
-  /**
-   * Reset the options of this Interactable
-   *
-   * @param {object} options The new settings to apply
-   * @return {object} This Interactable
-   */
-  set (options: Interact.OptionsArg) {
-    const defaults = this._defaults
-
-    if (!is.object(options)) {
-      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]
-
-      this.options[actionName] = {}
-      this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))
-
-      this[methodName](options[actionName])
-    }
-
-    for (const setting in options) {
-      if (is.func(this[setting])) {
-        this[setting](options[setting])
-      }
-    }
-
-    return this
-  }
-
-  /**
-   * Remove this interactable from the list of interactables and remove it's
-   * action capabilities and event listeners
-   *
-   * @return {interact}
-   */
-  unset () {
-    events.remove(this.target as Node, 'all')
-
-    if (is.string(this.target)) {
-      // remove delegated events
-      for (const type in events.delegatedEvents) {
-        const delegated = events.delegatedEvents[type]
-
-        if (delegated.selectors[0] === this.target &&
-            delegated.contexts[0] === this._context) {
-          delegated.selectors.splice(0, 1)
-          delegated.contexts.splice(0, 1)
-          delegated.listeners.splice(0, 1)
-
-          // remove the arrays if they are empty
-          if (!delegated.selectors.length) {
-            delegated[type] = null
-          }
-        }
-
-        events.remove(this._context, type, events.delegateListener)
-        events.remove(this._context, type, events.delegateUseCapture, true)
-      }
-    }
-    else {
-      events.remove(this.target as Node, 'all')
-    }
-  }
-}
-
-export default Interactable
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_core_Interaction.ts.html b/packages/interactjs/dist/docs/packages_core_Interaction.ts.html deleted file mode 100644 index 0a4557c41..000000000 --- a/packages/interactjs/dist/docs/packages_core_Interaction.ts.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - - - packages/core/Interaction.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/core/Interaction.ts

- - - - - - - -
-
-
import * as utils from '@interactjs/utils'
-import Interactable from './Interactable'
-import InteractEvent, { EventPhase } from './InteractEvent'
-import PointerInfo from './PointerInfo'
-import { ActionName } from './scope'
-
-export interface ActionProps<T extends ActionName = any> {
-  name: T
-  axis?: 'x' | 'y' | 'xy'
-  edges?: {
-    [edge in keyof Interact.Rect]?: boolean
-  }
-}
-
-export interface StartAction extends ActionProps {
-  name: ActionName | string
-}
-
-export type InteractionProxy = Pick<Interaction,
-  'pointerIsDown' |
-  'pointerWasMoved' |
-  'start' |
-  'move' |
-  'end' |
-  'stop' |
-  'interacting' |
-  '_proxy'
->
-
-export class Interaction<T extends ActionName = any> {
-  // current interactable being interacted with
-  interactable: Interactable = null
-
-  // the target element of the interactable
-  element: Element = null
-  rect: Interact.Rect & Interact.Size
-  edges: {
-    [P in keyof Interact.Rect]?: boolean
-  }
-
-  _signals: utils.Signals
-
-  // action that's ready to be fired on next move event
-  prepared: ActionProps<T> = {
-    name : null,
-    axis : null,
-    edges: null,
-  }
-
-  pointerType: string
-
-  // keep track of added pointers
-  pointers: PointerInfo[] = []
-
-  // pointerdown/mousedown/touchstart event
-  downEvent: Interact.PointerEventType = null
-
-  downPointer: Interact.PointerType = {} as Interact.PointerType
-
-  _latestPointer: {
-    pointer: Interact.EventTarget
-    event: Interact.PointerEventType
-    eventTarget: Node,
-  } = {
-    pointer: null,
-    event: null,
-    eventTarget: null,
-  }
-
-  // previous action event
-  prevEvent: InteractEvent<T> = null
-
-  pointerIsDown = false
-  pointerWasMoved = false
-  _interacting = false
-  _ending = false
-  _proxy: InteractionProxy = null
-
-  simulation = null
-
-  get pointerMoveTolerance () {
-    return 1
-  }
-
-  /**
-   * @alias Interaction.prototype.move
-   */
-  doMove = utils.warnOnce(
-    function (this: Interaction, signalArg: any) {
-      this.move(signalArg)
-    },
-    'The interaction.doMove() method has been renamed to interaction.move()')
-
-  coords = {
-    // Starting InteractEvent pointer coordinates
-    start: utils.pointer.newCoords(),
-    // Previous native pointer move event coordinates
-    prev: utils.pointer.newCoords(),
-    // current native pointer move event coordinates
-    cur: utils.pointer.newCoords(),
-    // Change in coordinates and time of the pointer
-    delta: utils.pointer.newCoords(),
-    // pointer velocity
-    velocity: utils.pointer.newCoords(),
-  }
-
-  /** */
-  constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) {
-    this._signals = signals
-    this.pointerType = pointerType
-
-    const that = this
-
-    this._proxy = {
-      get pointerIsDown () { return that.pointerIsDown },
-      get pointerWasMoved () { return that.pointerWasMoved },
-      start (action, i, e) { return that.start(action, i, e) },
-      move (arg) { return that.move(arg) },
-      end (event) { return that.end(event) },
-      stop () { return that.stop() },
-      interacting () { return that.interacting() },
-      get _proxy () { return this },
-    }
-
-    this._signals.fire('new', { interaction: this })
-  }
-
-  pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: EventTarget) {
-    const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)
-
-    this._signals.fire('down', {
-      pointer,
-      event,
-      eventTarget,
-      pointerIndex,
-      interaction: this,
-    })
-  }
-
-  /**
-   * ```js
-   * interact(target)
-   *   .draggable({
-   *     // disable the default drag start by down->move
-   *     manualStart: true
-   *   })
-   *   // start dragging after the user holds the pointer down
-   *   .on('hold', function (event) {
-   *     var interaction = event.interaction
-   *
-   *     if (!interaction.interacting()) {
-   *       interaction.start({ name: 'drag' },
-   *                         event.interactable,
-   *                         event.currentTarget)
-   *     }
-   * })
-   * ```
-   *
-   * Start an action with the given Interactable and Element as tartgets. The
-   * action must be enabled for the target Interactable and an appropriate
-   * number of pointers must be held down - 1 for drag/resize, 2 for gesture.
-   *
-   * Use it with `interactable.<action>able({ manualStart: false })` to always
-   * [start actions manually](https://github.com/taye/interact.js/issues/114)
-   *
-   * @param {object} action   The action to be performed - drag, resize, etc.
-   * @param {Interactable} target  The Interactable to target
-   * @param {Element} element The DOM Element to target
-   * @return {object} interact
-   */
-  start (action: StartAction, interactable: Interactable, element: Element) {
-    if (this.interacting() ||
-        !this.pointerIsDown ||
-        this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) ||
-        !interactable.options[action.name].enabled) {
-      return false
-    }
-
-    utils.copyAction(this.prepared, action)
-
-    this.interactable = interactable
-    this.element      = element
-    this.rect         = interactable.getRect(element)
-    this.edges        = this.prepared.edges
-    this._interacting = this._doPhase({
-      interaction: this,
-      event: this.downEvent,
-      phase: EventPhase.Start,
-    })
-
-    return this._interacting
-  }
-
-  pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: EventTarget) {
-    if (!this.simulation) {
-      this.updatePointer(pointer, event, eventTarget, false)
-      utils.pointer.setCoords(this.coords.cur, this.pointers.map((p) => p.pointer), this._now())
-    }
-
-    const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x &&
-                           this.coords.cur.page.y === this.coords.prev.page.y &&
-                           this.coords.cur.client.x === this.coords.prev.client.x &&
-                           this.coords.cur.client.y === this.coords.prev.client.y)
-
-    let dx
-    let dy
-
-    // register movement greater than pointerMoveTolerance
-    if (this.pointerIsDown && !this.pointerWasMoved) {
-      dx = this.coords.cur.client.x - this.coords.start.client.x
-      dy = this.coords.cur.client.y - this.coords.start.client.y
-
-      this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance
-    }
-
-    const signalArg = {
-      pointer,
-      pointerIndex: this.getPointerIndex(pointer),
-      event,
-      eventTarget,
-      dx,
-      dy,
-      duplicate: duplicateMove,
-      interaction: this,
-    }
-
-    if (!duplicateMove) {
-      // set pointer coordinate, time changes and velocity
-      utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)
-      utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta)
-    }
-
-    this._signals.fire('move', signalArg)
-
-    if (!duplicateMove) {
-      // if interacting, fire an 'action-move' signal etc
-      if (this.interacting()) {
-        this.move(signalArg)
-      }
-
-      if (this.pointerWasMoved) {
-        utils.pointer.copyCoords(this.coords.prev, this.coords.cur)
-      }
-    }
-  }
-
-  /**
-   * ```js
-   * interact(target)
-   *   .draggable(true)
-   *   .on('dragmove', function (event) {
-   *     if (someCondition) {
-   *       // change the snap settings
-   *       event.interactable.draggable({ snap: { targets: [] }})
-   *       // fire another move event with re-calculated snap
-   *       event.interaction.move()
-   *     }
-   *   })
-   * ```
-   *
-   * Force a move of the current action at the same coordinates. Useful if
-   * snap/restrict has been changed and you want a movement with the new
-   * settings.
-   */
-  move (signalArg?) {
-    signalArg = utils.extend({
-      pointer: this._latestPointer.pointer,
-      event: this._latestPointer.event,
-      eventTarget: this._latestPointer.eventTarget,
-      interaction: this,
-    }, signalArg || {})
-
-    signalArg.phase = EventPhase.Move
-
-    this._doPhase(signalArg)
-  }
-
-  // End interact move events and stop auto-scroll unless simulation is running
-  pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: EventTarget, curEventTarget: EventTarget) {
-    let pointerIndex = this.getPointerIndex(pointer)
-
-    if (pointerIndex === -1) {
-      pointerIndex = this.updatePointer(pointer, event, eventTarget, false)
-    }
-
-    this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {
-      pointer,
-      pointerIndex,
-      event,
-      eventTarget,
-      curEventTarget,
-      interaction: this,
-    })
-
-    if (!this.simulation) {
-      this.end(event)
-    }
-
-    this.pointerIsDown = false
-    this.removePointer(pointer, event)
-  }
-
-  documentBlur (event) {
-    this.end(event)
-    this._signals.fire('blur', { event, interaction: this })
-  }
-
-  /**
-   * ```js
-   * interact(target)
-   *   .draggable(true)
-   *   .on('move', function (event) {
-   *     if (event.pageX > 1000) {
-   *       // end the current action
-   *       event.interaction.end()
-   *       // stop all further listeners from being called
-   *       event.stopImmediatePropagation()
-   *     }
-   *   })
-   * ```
-   *
-   * @param {PointerEvent} [event]
-   */
-  end (event?: Interact.PointerEventType) {
-    this._ending = true
-    event = event || this._latestPointer.event
-    let endPhaseResult
-
-    if (this.interacting()) {
-      endPhaseResult = this._doPhase({
-        event,
-        interaction: this,
-        phase: EventPhase.End,
-      })
-    }
-
-    this._ending = false
-
-    if (endPhaseResult === true) {
-      this.stop()
-    }
-  }
-
-  currentAction () {
-    return this._interacting ? this.prepared.name : null
-  }
-
-  interacting () {
-    return this._interacting
-  }
-
-  /** */
-  stop () {
-    this._signals.fire('stop', { interaction: this })
-
-    this.interactable = this.element = null
-
-    this._interacting = false
-    this.prepared.name = this.prevEvent = null
-  }
-
-  getPointerIndex (pointer) {
-    const pointerId = utils.pointer.getPointerId(pointer)
-
-    // mouse and pen interactions may have only one pointer
-    return (this.pointerType === 'mouse' || this.pointerType === 'pen')
-      ? this.pointers.length - 1
-      : utils.arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)
-  }
-
-  getPointerInfo (pointer) {
-    return this.pointers[this.getPointerIndex(pointer)]
-  }
-
-  updatePointer (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: EventTarget, down?: boolean) {
-    const id = utils.pointer.getPointerId(pointer)
-    let pointerIndex = this.getPointerIndex(pointer)
-    let pointerInfo = this.pointers[pointerIndex]
-
-    down = down === false
-      ? false
-      : down || /(down|start)$/i.test(event.type)
-
-    if (!pointerInfo) {
-      pointerInfo = new PointerInfo(
-        id,
-        pointer,
-        event,
-        null,
-        null,
-      )
-
-      pointerIndex = this.pointers.length
-      this.pointers.push(pointerInfo)
-    }
-    else {
-      pointerInfo.pointer = pointer
-    }
-
-    if (down) {
-      this.pointerIsDown = true
-
-      if (!this.interacting()) {
-        utils.pointer.setCoords(this.coords.start, this.pointers.map((p) => p.pointer), this._now())
-
-        utils.pointer.copyCoords(this.coords.cur, this.coords.start)
-        utils.pointer.copyCoords(this.coords.prev, this.coords.start)
-        utils.pointer.pointerExtend(this.downPointer, pointer)
-
-        this.downEvent = event
-        pointerInfo.downTime = this.coords.cur.timeStamp
-        pointerInfo.downTarget = eventTarget
-
-        this.pointerWasMoved = false
-      }
-    }
-
-    this._updateLatestPointer(pointer, event, eventTarget)
-
-    this._signals.fire('update-pointer', {
-      pointer,
-      event,
-      eventTarget,
-      down,
-      pointerInfo,
-      pointerIndex,
-      interaction: this,
-    })
-
-    return pointerIndex
-  }
-
-  removePointer (pointer, event) {
-    const pointerIndex = this.getPointerIndex(pointer)
-
-    if (pointerIndex === -1) { return }
-
-    const pointerInfo = this.pointers[pointerIndex]
-
-    this._signals.fire('remove-pointer', {
-      pointer,
-      event,
-      pointerIndex,
-      pointerInfo,
-      interaction: this,
-    })
-
-    this.pointers.splice(pointerIndex, 1)
-  }
-
-  _updateLatestPointer (pointer, event, eventTarget) {
-    this._latestPointer.pointer = pointer
-    this._latestPointer.event = event
-    this._latestPointer.eventTarget = eventTarget
-  }
-
-  _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {
-    const actionName = this.prepared.name
-
-    return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)
-  }
-
-  _fireEvent (iEvent) {
-    this.interactable.fire(iEvent)
-
-    if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {
-      this.prevEvent = iEvent
-    }
-  }
-
-  _doPhase (signalArg: Partial<Interact.SignalArg>) {
-    const { event, phase, preEnd, type } = signalArg
-    const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg)
-
-    if (beforeResult === false) {
-      return false
-    }
-
-    const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type)
-    const { rect } = this
-
-    if (rect) {
-      // update the rect modifications
-      const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }
-
-      if (edges.top)    { rect.top    += iEvent.delta.y }
-      if (edges.bottom) { rect.bottom += iEvent.delta.y }
-      if (edges.left)   { rect.left   += iEvent.delta.x }
-      if (edges.right)  { rect.right  += iEvent.delta.x }
-
-      rect.width = rect.right - rect.left
-      rect.height = rect.bottom - rect.top
-    }
-
-    this._signals.fire(`action-${phase}`, signalArg)
-
-    this._fireEvent(iEvent)
-
-    this._signals.fire(`after-action-${phase}`, signalArg)
-
-    return true
-  }
-
-  _now () { return Date.now() }
-}
-
-export default Interaction
-export { PointerInfo }
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_core_interactablePreventDefault.ts.html b/packages/interactjs/dist/docs/packages_core_interactablePreventDefault.ts.html deleted file mode 100644 index 6f7e2982d..000000000 --- a/packages/interactjs/dist/docs/packages_core_interactablePreventDefault.ts.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - packages/core/interactablePreventDefault.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/core/interactablePreventDefault.ts

- - - - - - - -
-
-
import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'
-import events from '@interactjs/utils/events'
-import * as is from '@interactjs/utils/is'
-import { getWindow } from '@interactjs/utils/window'
-
-function preventDefault (interactable, newValue) {
-  if (/^(always|never|auto)$/.test(newValue)) {
-    interactable.options.preventDefault = newValue
-    return interactable
-  }
-
-  if (is.bool(newValue)) {
-    interactable.options.preventDefault = newValue ? 'always' : 'never'
-    return interactable
-  }
-
-  return interactable.options.preventDefault
-}
-
-function checkAndPreventDefault (interactable, scope, event) {
-  const setting = interactable.options.preventDefault
-
-  if (setting === 'never') { return }
-
-  if (setting === 'always') {
-    event.preventDefault()
-    return
-  }
-
-  // setting === 'auto'
-
-  // if the browser supports passive event listeners and isn't running on iOS,
-  // don't preventDefault of touch{start,move} events. CSS touch-action and
-  // user-select should be used instead of calling event.preventDefault().
-  if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {
-    const doc = getWindow(event.target).document
-    const docOptions = scope.getDocOptions(doc)
-
-    if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {
-      return
-    }
-  }
-
-  // don't preventDefault of pointerdown events
-  if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {
-    return
-  }
-
-  // don't preventDefault on editable elements
-  if (is.element(event.target) &&
-      matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {
-    return
-  }
-
-  event.preventDefault()
-}
-
-function onInteractionEvent ({ interaction, event }) {
-  if (interaction.interactable) {
-    interaction.interactable.checkAndPreventDefault(event)
-  }
-}
-
-export function install (scope) {
-  /** @lends Interactable */
-  const Interactable = scope.Interactable
-
-  /**
-   * Returns or sets whether to prevent the browser's default behaviour in
-   * response to pointer events. Can be set to:
-   *  - `'always'` to always prevent
-   *  - `'never'` to never prevent
-   *  - `'auto'` to let interact.js try to determine what would be best
-   *
-   * @param {string} [newValue] `'always'`, `'never'` or `'auto'`
-   * @return {string | Interactable} The current setting or this Interactable
-   */
-  Interactable.prototype.preventDefault = function (newValue) {
-    return preventDefault(this, newValue)
-  }
-
-  Interactable.prototype.checkAndPreventDefault = function (event) {
-    return checkAndPreventDefault(this, scope, event)
-  }
-
-  for (const eventSignal of ['down', 'move', 'up', 'cancel']) {
-    scope.interactions.signals.on(eventSignal, onInteractionEvent)
-  }
-
-  // prevent native HTML5 drag on interact.js target elements
-  scope.interactions.eventMap.dragstart = function preventNativeDrag (event) {
-    for (const interaction of scope.interactions.list) {
-      if (interaction.element &&
-        (interaction.element === event.target ||
-          nodeContains(interaction.element, event.target))) {
-        interaction.interactable.checkAndPreventDefault(event)
-        return
-      }
-    }
-  }
-}
-
-export type Install = typeof install
-
-export default {
-  id: 'core/interactablePreventDefault',
-  install,
-}
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_interact_interact.ts.html b/packages/interactjs/dist/docs/packages_interact_interact.ts.html deleted file mode 100644 index 42d012359..000000000 --- a/packages/interactjs/dist/docs/packages_interact_interact.ts.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - packages/interact/interact.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/interact/interact.ts

- - - - - - - -
-
-
/** @module interact */
-
-import { Options } from '@interactjs/core/defaultOptions'
-import Interactable from '@interactjs/core/Interactable'
-import { Scope } from '@interactjs/core/scope'
-import * as utils from '@interactjs/utils'
-import browser from '@interactjs/utils/browser'
-import events from '@interactjs/utils/events'
-
-declare module '@interactjs/core/scope' {
-  interface Scope {
-    interact: InteractStatic
-  }
-}
-
-export interface InteractStatic {
-  (target: Interact.Target, options?: Options): Interactable
-  on: typeof on
-  pointerMoveTolerance: typeof pointerMoveTolerance
-  stop: typeof stop
-  supportsPointerEvent: typeof supportsPointerEvent
-  supportsTouch: typeof supportsTouch
-  debug: typeof debug
-  off: typeof off
-  isSet: typeof isSet
-  use: typeof use
-  getPointerAverage: typeof utils.pointer.pointerAverage
-  getTouchBBox: typeof utils.pointer.touchBBox
-  getTouchDistance: typeof utils.pointer.touchDistance
-  getTouchAngle: typeof utils.pointer.touchAngle
-  getElementRect: typeof utils.dom.getElementRect
-  getElementClientRect: typeof utils.dom.getElementClientRect
-  matchesSelector: typeof utils.dom.matchesSelector
-  closest: typeof utils.dom.closest
-  addDocument: typeof scope.addDocument
-  removeDocument: typeof scope.removeDocument
-  version: string
-}
-
-const globalEvents: any = {}
-const scope = new Scope()
-
-/**
- * ```js
- * interact('#draggable').draggable(true)
- *
- * var rectables = interact('rect')
- * rectables
- *   .gesturable(true)
- *   .on('gesturemove', function (event) {
- *       // ...
- *   })
- * ```
- *
- * The methods of this variable can be used to set elements as interactables
- * and also to change various default settings.
- *
- * Calling it as a function and passing an element or a valid CSS selector
- * string returns an Interactable object which has various methods to configure
- * it.
- *
- * @global
- *
- * @param {Element | string} target The HTML or SVG Element to interact with
- * or CSS selector
- * @return {Interactable}
- */
-export const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {
-  let interactable = scope.interactables.get(target, options)
-
-  if (!interactable) {
-    interactable = scope.interactables.new(target, options)
-    interactable.events.global = globalEvents
-  }
-
-  return interactable
-} as InteractStatic
-
-/**
- * Use a plugin
- *
- * @alias module:interact.use
- *
- * @param {Object} plugin
- * @param {function} plugin.install
- * @return {interact}
- */
-interact.use = use
-function use (plugin: Interact.Plugin, options?: { [key: string]: any }) {
-  scope.usePlugin(plugin, options)
-
-  return interact
-}
-
-/**
- * Check if an element or selector has been set with the {@link interact}
- * function
- *
- * @alias module:interact.isSet
- *
- * @param {Element} element The Element being searched for
- * @return {boolean} Indicates if the element or CSS selector was previously
- * passed to interact
- */
-interact.isSet = isSet
-function isSet (target: Element, options?: any) {
-  return !!scope.interactables.get(target, options && options.context)
-}
-
-/**
- * Add a global listener for an InteractEvent or adds a DOM event to `document`
- *
- * @alias module:interact.on
- *
- * @param {string | array | object} type The types of events to listen for
- * @param {function} listener The function event (s)
- * @param {object | boolean} [options] object or useCapture flag for
- * addEventListener
- * @return {object} interact
- */
-interact.on = on
-function on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {
-  if (utils.is.string(type) && type.search(' ') !== -1) {
-    type = type.trim().split(/ +/)
-  }
-
-  if (utils.is.array(type)) {
-    for (const eventType of (type as any[])) {
-      interact.on(eventType, listener, options)
-    }
-
-    return interact
-  }
-
-  if (utils.is.object(type)) {
-    for (const prop in type) {
-      interact.on(prop, (type as Interact.EventTypes)[prop], listener)
-    }
-
-    return interact
-  }
-
-  // if it is an InteractEvent type, add listener to globalEvents
-  if (utils.arr.contains(scope.actions.eventTypes, type)) {
-    // if this type of event was never bound
-    if (!globalEvents[type]) {
-      globalEvents[type] = [listener]
-    }
-    else {
-      globalEvents[type].push(listener)
-    }
-  }
-  // If non InteractEvent type, addEventListener to document
-  else {
-    events.add(scope.document, type, listener as Interact.Listener, { options })
-  }
-
-  return interact
-}
-
-/**
- * Removes a global InteractEvent listener or DOM event from `document`
- *
- * @alias module:interact.off
- *
- * @param {string | array | object} type The types of events that were listened
- * for
- * @param {function} listener The listener function to be removed
- * @param {object | boolean} options [options] object or useCapture flag for
- * removeEventListener
- * @return {object} interact
- */
-interact.off = off
-function off (type, listener, options) {
-  if (utils.is.string(type) && type.search(' ') !== -1) {
-    type = type.trim().split(/ +/)
-  }
-
-  if (utils.is.array(type)) {
-    for (const eventType of type) {
-      interact.off(eventType, listener, options)
-    }
-
-    return interact
-  }
-
-  if (utils.is.object(type)) {
-    for (const prop in type) {
-      interact.off(prop, type[prop], listener)
-    }
-
-    return interact
-  }
-
-  if (!utils.arr.contains(scope.actions.eventTypes, type)) {
-    events.remove(scope.document, type, listener, options)
-  }
-  else {
-    let index
-
-    if (type in globalEvents &&
-        (index = globalEvents[type].indexOf(listener)) !== -1) {
-      globalEvents[type].splice(index, 1)
-    }
-  }
-
-  return interact
-}
-
-/**
- * Returns an object which exposes internal data
- * @alias module:interact.debug
- *
- * @return {object} An object with properties that outline the current state
- * and expose internal functions and variables
- */
-interact.debug = debug
-function debug () {
-  return scope
-}
-
-// expose the functions used to calculate multi-touch properties
-interact.getPointerAverage  = utils.pointer.pointerAverage
-interact.getTouchBBox       = utils.pointer.touchBBox
-interact.getTouchDistance   = utils.pointer.touchDistance
-interact.getTouchAngle      = utils.pointer.touchAngle
-
-interact.getElementRect       = utils.dom.getElementRect
-interact.getElementClientRect = utils.dom.getElementClientRect
-interact.matchesSelector      = utils.dom.matchesSelector
-interact.closest              = utils.dom.closest
-
-/**
- * @alias module:interact.supportsTouch
- *
- * @return {boolean} Whether or not the browser supports touch input
- */
-interact.supportsTouch = supportsTouch
-function supportsTouch () {
-  return browser.supportsTouch
-}
-
-/**
- * @alias module:interact.supportsPointerEvent
- *
- * @return {boolean} Whether or not the browser supports PointerEvents
- */
-interact.supportsPointerEvent = supportsPointerEvent
-function supportsPointerEvent () {
-  return browser.supportsPointerEvent
-}
-
-/**
- * Cancels all interactions (end events are not fired)
- *
- * @alias module:interact.stop
- *
- * @return {object} interact
- */
-interact.stop = stop
-function stop () {
-  for (const interaction of scope.interactions.list) {
-    interaction.stop()
-  }
-
-  return interact
-}
-
-/**
- * Returns or sets the distance the pointer must be moved before an action
- * sequence occurs. This also affects tolerance for tap events.
- *
- * @alias module:interact.pointerMoveTolerance
- *
- * @param {number} [newValue] The movement from the start position must be greater than this value
- * @return {interact | number}
- */
-interact.pointerMoveTolerance = pointerMoveTolerance
-function pointerMoveTolerance (newValue) {
-  if (utils.is.number(newValue)) {
-    scope.interactions.pointerMoveTolerance = newValue
-
-    return interact
-  }
-
-  return scope.interactions.pointerMoveTolerance
-}
-
-scope.interactables.signals.on('unset', ({ interactable }) => {
-  scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)
-
-  // Stop related interactions when an Interactable is unset
-  for (const interaction of scope.interactions.list) {
-    if (interaction.interactable === interactable && interaction.interacting() && interaction._ending) {
-      interaction.stop()
-    }
-  }
-})
-
-interact.addDocument = (doc, options) => scope.addDocument(doc, options)
-interact.removeDocument = (doc) => scope.removeDocument(doc)
-
-scope.interact = interact
-
-export { scope }
-export default interact
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_modifiers_snap_edges.ts.html b/packages/interactjs/dist/docs/packages_modifiers_snap_edges.ts.html deleted file mode 100644 index 5e3139863..000000000 --- a/packages/interactjs/dist/docs/packages_modifiers_snap_edges.ts.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - packages/modifiers/snap/edges.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/modifiers/snap/edges.ts

- - - - - - - -
-
-
/**
- * @module modifiers/snapEdges
- *
- * @description
- * This module allows snapping of the edges of targets during resize
- * interactions.
- *
- * @example
- * interact(target).resizable({
- *   snapEdges: {
- *     targets: [interact.snappers.grid({ x: 100, y: 50 })],
- *   },
- * })
- *
- * interact(target).resizable({
- *   snapEdges: {
- *     targets: [
- *       interact.snappers.grid({
- *        top: 50,
- *        left: 50,
- *        bottom: 100,
- *        right: 100,
- *       }),
- *     ],
- *   },
- * })
- */
-
-import clone from '@interactjs/utils/clone'
-import extend from '@interactjs/utils/extend'
-import snapSize from './size'
-
-function start (arg) {
-  const edges = arg.interaction.prepared.edges
-
-  if (!edges) { return null }
-
-  arg.state.targetFields = arg.state.targetFields || [
-    [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],
-  ]
-
-  return snapSize.start(arg)
-}
-
-function set (arg) {
-  return snapSize.set(arg)
-}
-
-const snapEdges = {
-  start,
-  set,
-  defaults: extend(clone(snapSize.defaults), {
-    offset: { x: 0, y: 0 },
-  }),
-}
-
-export default snapEdges
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_pointer-events_PointerEvent.ts.html b/packages/interactjs/dist/docs/packages_pointer-events_PointerEvent.ts.html deleted file mode 100644 index 68f85532f..000000000 --- a/packages/interactjs/dist/docs/packages_pointer-events_PointerEvent.ts.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - packages/pointer-events/PointerEvent.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/pointer-events/PointerEvent.ts

- - - - - - - -
-
-
import BaseEvent from '@interactjs/core/BaseEvent'
-import pointerUtils from '@interactjs/utils/pointerUtils'
-
-/** */
-export default class PointerEvent<T extends string> extends BaseEvent {
-  type: T
-  originalEvent: Interact.PointerEventType
-  pointerId: number
-  pointerType: string
-  double: boolean
-  pageX: number
-  pageY: number
-  clientX: number
-  clientY: number
-  dt: number
-  eventable: any
-
-  /** */
-  constructor (
-    type: T,
-    pointer: Interact.PointerType | PointerEvent<any>,
-    event: Interact.PointerEventType,
-    eventTarget: Interact.EventTarget,
-    interaction: Interact.Interaction,
-    timeStamp: number,
-  ) {
-    super(interaction)
-    pointerUtils.pointerExtend(this, event)
-
-    if (event !== pointer) {
-      pointerUtils.pointerExtend(this, pointer)
-    }
-
-    this.timeStamp     = timeStamp
-    this.originalEvent = event
-    this.type          = type
-    this.pointerId     = pointerUtils.getPointerId(pointer)
-    this.pointerType   = pointerUtils.getPointerType(pointer)
-    this.target        = eventTarget
-    this.currentTarget = null
-
-    if (type === 'tap') {
-      const pointerIndex = interaction.getPointerIndex(pointer)
-      this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime
-
-      const interval = this.timeStamp - interaction.tapTime
-
-      this.double = !!(interaction.prevTap &&
-        interaction.prevTap.type !== 'doubletap' &&
-        interaction.prevTap.target === this.target &&
-        interval < 500)
-    }
-    else if (type === 'doubletap') {
-      this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime
-    }
-  }
-
-  _subtractOrigin ({ x: originX, y: originY }) {
-    this.pageX   -= originX
-    this.pageY   -= originY
-    this.clientX -= originX
-    this.clientY -= originY
-
-    return this
-  }
-
-  _addOrigin ({ x: originX, y: originY }) {
-    this.pageX   += originX
-    this.pageY   += originY
-    this.clientX += originX
-    this.clientY += originY
-
-    return this
-  }
-
-  /**
-   * Prevent the default behaviour of the original Event
-   */
-  preventDefault () {
-    this.originalEvent.preventDefault()
-  }
-}
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/packages_reflow_index.ts.html b/packages/interactjs/dist/docs/packages_reflow_index.ts.html deleted file mode 100644 index 5a7e9078c..000000000 --- a/packages/interactjs/dist/docs/packages_reflow_index.ts.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - packages/reflow/index.ts - Documentation - - - - - - - - - - - - - - - - - -
- -
- -

packages/reflow/index.ts

- - - - - - - -
-
-
import Interactable from '@interactjs/core/Interactable'
-import { EventPhase } from '@interactjs/core/InteractEvent'
-import { ActionProps, Interaction } from '@interactjs/core/Interaction'
-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: ActionProps) => ReturnType<typeof reflow>
-  }
-}
-
-declare module '@interactjs/core/Interaction' {
-  interface Interaction {
-    _reflowPromise: Promise<void>
-    _reflowResolve: () => void
-  }
-}
-
-declare module '@interactjs/core/InteractEvent' {
-  // eslint-disable-next-line no-shadow
-  enum EventPhase {
-    Reflow = 'reflow',
-  }
-}
-
-(EventPhase as any).Reflow = 'reflow'
-
-export function install (scope: Scope) {
-  const {
-    actions,
-    interactions,
-    /** @lends Interactable */
-    // eslint-disable-next-line no-shadow
-    Interactable,
-  } = scope
-
-  // add action reflow event types
-  for (const actionName of actions.names) {
-    actions.eventTypes.push(`${actionName}reflow`)
-  }
-
-  // remove completed reflow interactions
-  interactions.signals.on('stop', ({ interaction }) => {
-    if (interaction.pointerType === EventPhase.Reflow) {
-      if (interaction._reflowResolve) {
-        interaction._reflowResolve()
-      }
-
-      arr.remove(scope.interactions.list, interaction)
-    }
-  })
-
-  /**
-   * ```js
-   * const interactable = interact(target)
-   * const drag = { name: drag, axis: 'x' }
-   * const resize = { name: resize, edges: { left: true, bottom: true }
-   *
-   * interactable.reflow(drag)
-   * interactable.reflow(resize)
-   * ```
-   *
-   * Start an action sequence to re-apply modifiers, check drops, etc.
-   *
-   * @param { Object } action The action to begin
-   * @param { string } action.name The name of the action
-   * @returns { Promise<Interactable> }
-   */
-  Interactable.prototype.reflow = function (action) {
-    return reflow(this, action, scope)
-  }
-}
-
-function reflow (interactable: Interactable, action: ActionProps, scope: Scope): Promise<Interactable> {
-  const elements = is.string(interactable.target)
-    ? arr.from(interactable._context.querySelectorAll(interactable.target))
-    : [interactable.target]
-
-  // tslint:disable-next-line variable-name
-  const Promise = (win.window as any).Promise
-  const promises: Array<Promise<null>> | null = Promise ? [] : null
-
-  for (const element of elements) {
-    const rect = interactable.getRect(element)
-
-    if (!rect) { break }
-
-    const runningInteraction = arr.find(
-      scope.interactions.list,
-      (interaction: Interaction) => {
-        return interaction.interacting() &&
-          interaction.interactable === interactable &&
-          interaction.element === element &&
-          interaction.prepared.name === action.name
-      })
-    let reflowPromise: Promise<null>
-
-    if (runningInteraction) {
-      runningInteraction.move()
-
-      if (promises) {
-        reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {
-          runningInteraction._reflowResolve = resolve
-        })
-      }
-    }
-    else {
-      const xywh = rectUtils.tlbrToXywh(rect)
-      const coords = {
-        page     : { x: xywh.x, y: xywh.y },
-        client   : { x: xywh.x, y: xywh.y },
-        timeStamp: scope.now(),
-      }
-
-      const event = pointerUtils.coordsToEvent(coords)
-      reflowPromise = startReflow(scope, interactable, element, action, event)
-    }
-
-    if (promises) {
-      promises.push(reflowPromise)
-    }
-  }
-
-  return promises && Promise.all(promises).then(() => interactable)
-}
-
-function startReflow (scope: Scope, interactable: Interactable, element: Element, action: ActionProps, event: any) {
-  const interaction = scope.interactions.new({ pointerType: 'reflow' })
-  const signalArg = {
-    interaction,
-    event,
-    pointer: event,
-    eventTarget: element,
-    phase: EventPhase.Reflow,
-  }
-
-  interaction.interactable = interactable
-  interaction.element = element
-  interaction.prepared = extend({}, action)
-  interaction.prevEvent = event
-  interaction.updatePointer(event, event, element, true)
-
-  interaction._doPhase(signalArg)
-
-  const reflowPromise = (win.window as unknown as any).Promise
-    ? new (win.window as unknown as any).Promise((resolve: any) => {
-      interaction._reflowResolve = resolve
-    })
-    : null
-
-  interaction._reflowPromise = reflowPromise
-  interaction.start(action, interactable, element)
-
-  if (interaction._interacting) {
-    interaction.move(signalArg)
-    interaction.end(event)
-  }
-  else {
-    interaction.stop()
-  }
-
-  interaction.removePointer(event, event)
-  interaction.pointerIsDown = false
-
-  return reflowPromise
-}
-
-export default {
-  id: 'reflow',
-  install,
-} as Interact.Plugin
-
-
-
- - - - -
- - - - - diff --git a/packages/interactjs/dist/docs/scripts/linenumber.js b/packages/interactjs/dist/docs/scripts/linenumber.js deleted file mode 100644 index 8d52f7eaf..000000000 --- a/packages/interactjs/dist/docs/scripts/linenumber.js +++ /dev/null @@ -1,25 +0,0 @@ -/*global document */ -(function() { - var source = document.getElementsByClassName('prettyprint source linenums'); - var i = 0; - var lineNumber = 0; - var lineId; - var lines; - var totalLines; - var anchorHash; - - if (source && source[0]) { - anchorHash = document.location.hash.substring(1); - lines = source[0].getElementsByTagName('li'); - totalLines = lines.length; - - for (; i < totalLines; i++) { - lineNumber++; - lineId = 'line' + lineNumber; - lines[i].id = lineId; - if (lineId === anchorHash) { - lines[i].className += ' selected'; - } - } - } -})(); diff --git a/packages/interactjs/dist/docs/scripts/prettify/Apache-License-2.0.txt b/packages/interactjs/dist/docs/scripts/prettify/Apache-License-2.0.txt deleted file mode 100644 index d64569567..000000000 --- a/packages/interactjs/dist/docs/scripts/prettify/Apache-License-2.0.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/interactjs/dist/docs/scripts/prettify/lang-css.js b/packages/interactjs/dist/docs/scripts/prettify/lang-css.js deleted file mode 100644 index 041e1f590..000000000 --- a/packages/interactjs/dist/docs/scripts/prettify/lang-css.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", -/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/packages/interactjs/dist/docs/scripts/prettify/prettify.js b/packages/interactjs/dist/docs/scripts/prettify/prettify.js deleted file mode 100644 index eef5ad7e6..000000000 --- a/packages/interactjs/dist/docs/scripts/prettify/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p * , #main .article > * { - padding-left: 8px; - padding-right: 8px; } - -header { - display: block; } - -section { - display: block; - background-color: #fff; - padding: 0; } - -.variation { - display: none; } - -.signature-attributes { - font-size: 60%; - color: #aaa; - font-style: italic; - font-weight: lighter; } - -/** Readme * */ -.readme { - font-size: 16px; } - .readme h1, .readme h2, .readme h3, .readme h4, .readme h5 { - margin-top: 1em; - margin-bottom: 16px; - font-weight: bold; - padding: 0; } - .readme h1 { - font-size: 2em; - padding-bottom: 0.3em; } - .readme h2 { - font-size: 1.75em; - padding-bottom: 0.3em; } - .readme h3 { - font-size: 1.5em; - background-color: transparent; } - .readme h4 { - font-size: 1.25em; } - .readme h5 { - font-size: 1em; } - .readme img { - max-width: 100%; } - .readme ul, .readme ol { - padding-left: 2em; } - .readme pre > code { - font-size: 0.85em; } - .readme table { - margin-bottom: 1em; - border-collapse: collapse; - border-spacing: 0; } - .readme table tr { - background-color: #fff; - border-top: 1px solid #ccc; } - .readme table th, .readme table td { - padding: 6px 13px; - border: 1px solid #ddd; } - .readme table tr:nth-child(2n) { - background-color: #f8f8f8; } - -/** Nav * */ -nav { - float: left; - display: block; - width: 240px; - background: #333; - color: #eee; - overflow: auto; - position: fixed; - height: 100%; - padding: 10px; - /* box-shadow: 0 0 3px rgba(0,0,0,0.1); */ } - nav li { - list-style: none; - padding: 0; - margin: 0; } - -.nav-heading { - margin-top: 10px; - font-weight: bold; } - .nav-heading a { - color: #eee; - font-size: 14px; - display: inline-block; } - -.nav-item-type { - /* margin-left: 5px; */ - width: 18px; - height: 18px; - display: inline-block; - text-align: center; - border-radius: 0.2em; - margin-right: 5px; - font-weight: bold; - line-height: 20px; - font-size: 13px; } - .nav-item-type.type-article { - display: none; } - -.nav-item { - margin-left: 12px; } - -.nav-item-name a, .nav-item-name a:visited, .nav-item-name a:hover { - color: #eee; } - -.type-function { - background: #B3E5FC; - color: #0288D1; } - -.type-class { - background: #D1C4E9; - color: #4527A0; } - -.type-member { - background: #C8E6C9; - color: #388E3C; } - -.type-module { - background: #E1BEE7; - color: #7B1FA2; } - -/** Footer * */ -footer { - color: #474747; - margin-left: 240px; - display: block; - padding: 30px; - font-style: italic; - font-size: 90%; - border-top: 1px solid #eee; } - -.ancestors { - color: #999; } - .ancestors a { - color: #999 !important; - text-decoration: none; } - -.clear { - clear: both; } - -.important { - font-weight: bold; - color: #950B02; } - -.yes-def { - text-indent: -1000px; } - -.type-signature { - color: #aaa; } - -.name, .signature { - font-family: Consolas, Monaco, "Andale Mono", monospace; } - -.details { - margin-top: 14px; - border-left: 2px solid #DDD; - line-height: 30px; } - .details dt { - width: 120px; - float: left; - padding-left: 10px; } - .details dd { - margin-left: 70px; } - .details ul { - margin: 0; - list-style-type: none; } - .details li { - margin-left: 30px; } - .details pre.prettyprint { - margin: 0; } - .details .object-value { - padding-top: 0; } - -.description { - margin-bottom: 1em; - margin-top: 1em; } - -.code-caption { - font-style: italic; - font-size: 107%; - margin: 0; } - -.prettyprint { - font-size: 13px; - border: 1px solid #ddd; - border-radius: 3px; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); - overflow: auto; } - .prettyprint.source { - width: inherit; } - .prettyprint code { - font-size: 12px; - line-height: 18px; - display: block; - color: #4D4E53; } - .prettyprint code:empty:before { - content: ''; } - .prettyprint > code { - padding: 15px; } - .prettyprint .linenums code { - padding: 0 15px; } - .prettyprint .linenums li:first-of-type code { - padding-top: 15px; } - .prettyprint code span.line { - display: inline-block; } - .prettyprint.linenums { - padding-left: 70px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - .prettyprint.linenums ol { - padding-left: 0; } - .prettyprint.linenums li { - border-left: 2px #444 solid; } - .prettyprint.linenums li.selected { - background-color: #555; } - .prettyprint.linenums li * { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; } - -.params, .props { - border-spacing: 0; - border: 1px solid #ddd; - border-collapse: collapse; - border-radius: 3px; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - width: 100%; - font-size: 14px; - /* margin-left: 15px; */ } - -.params .name, .props .name, .name code { - color: #4D4E53; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 100%; } - -.params td, .params th { - margin: 0px; - text-align: left; - vertical-align: top; - padding: 10px; - display: table-cell; } - -.props td, .props th { - margin: 0px; - text-align: left; - vertical-align: top; - padding: 10px; - display: table-cell; } - -.params td { - border-top: 1px solid #eee; } - -.params thead tr { - background-color: #fff; - font-weight: bold; } - -.props thead tr, .params .params thead tr, .props .props thead tr { - background-color: #fff; - font-weight: bold; } - -.params param-description > p:first-child, .props param-description > p:first-child { - margin-top: 0; - padding-top: 0; } - -.params param-description > p:last-child, .props param-description > p:last-child { - margin-bottom: 0; - padding-bottom: 0; } - -dl.param-type { - /* border-bottom: 1px solid hsl(0, 0%, 87%); */ - margin: 0; - padding: 0; - font-size: 16px; } - -.param-type dt { - display: inline-block; } - -.param-type dd { - display: inline-block; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - display: inline-block; - padding: 0; - margin: 0; - font-size: 14px; } - -.disabled { - color: #454545; } - -/* navicon button */ -.navicon-button { - display: none; - position: relative; - padding: 2.0625rem 1.5rem; - cursor: pointer; - user-select: none; - opacity: .8; } - .navicon-button .navicon:before, .navicon-button .navicon:after { - transition: 0.25s; } - .navicon-button:hover { - transition: 0.5s; - opacity: 1; } - .navicon-button:hover .navicon:before, .navicon-button:hover .navicon:after { - transition: 0.25s; } - .navicon-button:hover .navicon:before { - top: .825rem; } - .navicon-button:hover .navicon:after { - top: -.825rem; } - -/* navicon */ -.navicon { - position: relative; - width: 2.5em; - height: .3125rem; - background: #000; - transition: 0.3s; - border-radius: 2.5rem; } - .navicon:before, .navicon:after { - display: block; - content: ""; - height: .3125rem; - width: 2.5rem; - background: #000; - position: absolute; - z-index: -1; - transition: 0.3s 0.25s; - border-radius: 1rem; } - .navicon:before { - top: .625rem; } - .navicon:after { - top: -.625rem; } - -/* open */ -.nav-trigger { - position: fixed; - top: 0; - clip: rect(0, 0, 0, 0); } - .nav-trigger:checked + label { - transform: scale(0.75); } - .nav-trigger:checked + label:not(.steps) .navicon:before, .nav-trigger:checked + label:not(.steps) .navicon:after { - top: 0 !important; } - .nav-trigger:checked + label .navicon:before, .nav-trigger:checked + label .navicon:after { - transition: 0.5s; } - .nav-trigger:checked + label.plus .navicon, .nav-trigger:checked + label.x .navicon { - background: transparent; } - .nav-trigger:checked + label.plus .navicon:before, .nav-trigger:checked + label.x .navicon:before { - transform: rotate(-45deg); - background: #FFF; } - .nav-trigger:checked + label.plus .navicon:after, .nav-trigger:checked + label.x .navicon:after { - transform: rotate(45deg); - background: #FFF; } - .nav-trigger:checked + label.plus { - transform: scale(0.75) rotate(45deg); } - .nav-trigger:checked ~ nav { - transform: none !important; } - .nav-trigger:checked ~ .overlay { - display: block; } - -/* Minus */ -/* × and + */ -.overlay { - display: none; - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.5); - z-index: 1; } - -.section-method { - margin-bottom: 30px; - padding-bottom: 30px; - border-bottom: 1px solid #eee; } - -@media only screen and (max-width: 700px) { - body { - overflow-x: hidden; } - nav { - width: 240px; - height: 100%; - transform: translateX(-240px); - z-index: 3; - padding: 0 10px; - transition: transform 0.2s; } - .navicon-button { - display: inline-block; - position: fixed; - top: 1.5em; - right: 0; - z-index: 2; } - #main { - width: 100%; - min-width: 360px; } - #main h1.page-title { - margin: 1em 0; } - #main section { - padding: 0; } - footer { - margin-left: 0; } } - -@media only print { - nav { - display: none; } - #main { - float: none; - width: 100%; } } - -section > header, -.subsection-title, -.section-method > *:not(.params):not(.description):not(.prettyprint):not(ol):not(ul), -.description > *:not(.prettyprint):not(ol):not(ul), -footer { - padding-left: 8px; - padding-right: 8px; - margin: 0; } - -table.params { - width: auto; - margin: 0 10px; } - -.prettyprint.source, #main blockquote { - width: 100%; } - -.prettyprint { - position: relative; - border: none; - border-radius: 0; - width: 100%; - background-color: #292929; - color: #c5c8c6; - border-radius: 0; } - .prettyprint code { - position: relative; - border: none; - border-radius: 0; - width: 100%; - background-color: transparent; - color: #c5c8c6; - border-radius: 0; } - -#main blockquote { - position: relative; - border: none; - border-radius: 0; - background-color: #292929; - color: #c5c8c6; - border-radius: 0; } - -@media only screen and (min-width: 1001px) { - #main > *:not(section), #main .prettyprint:not(.source), .subsection-title, - .section-examples, - .section-method > *:not(.params):not(.description), - .description > *, - .article > *, - footer { - width: calc(50% - 8px); - margin-right: calc(50% + 8px); } - #main .description .prettyprint.source, #main .description blockquote, #main .article > .prettyprint.source, #main .article > blockquote { - width: 50%; - margin: 0 0 10px; - float: right; - clear: right; } - #main > section { - background-color: transparent; } - table.params { - margin: 0 calc(50% + 10px) 0 10px; - min-width: 200px; } - .section-method > h1, .section-method > h2 { - clear: both; } - .prettyprint > code { - white-space: pre-wrap; } - .code-col-bg { - position: fixed; - right: 0; - width: calc(50% - 240px / 2); - height: 100%; - background-color: #333; } - footer { - position: relative; - margin-left: 240px; - margin-right: calc(50% - 240px / 2); - border: none; - clear: right; } } - -/* make comments more legible */ -.prettyprint .com { - color: #7699b2; } diff --git a/packages/interactjs/dist/docs/styles/prettify-jsdoc.css b/packages/interactjs/dist/docs/styles/prettify-jsdoc.css deleted file mode 100644 index 834a866d4..000000000 --- a/packages/interactjs/dist/docs/styles/prettify-jsdoc.css +++ /dev/null @@ -1,111 +0,0 @@ -/* JSDoc prettify.js theme */ - -/* plain text */ -.pln { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* string content */ -.str { - color: hsl(104, 100%, 24%); - font-weight: normal; - font-style: normal; -} - -/* a keyword */ -.kwd { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a comment */ -.com { - font-weight: normal; - font-style: italic; -} - -/* a type name */ -.typ { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a literal value */ -.lit { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* punctuation */ -.pun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp open bracket */ -.opn { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp close bracket */ -.clo { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a markup tag name */ -.tag { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute name */ -.atn { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute value */ -.atv { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a declaration */ -.dec { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a variable name */ -.var { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a function name */ -.fun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; -} diff --git a/packages/interactjs/dist/docs/styles/prettify.css b/packages/interactjs/dist/docs/styles/prettify.css deleted file mode 100644 index c9b714eb2..000000000 --- a/packages/interactjs/dist/docs/styles/prettify.css +++ /dev/null @@ -1,119 +0,0 @@ -/*! Color themes for Google Code Prettify | MIT License | github.com/jmblog/color-themes-for-google-code-prettify */ -.prettyprint { - background: #2f3640; - font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace; - border: 0 !important; -} - -.pln { - color: #e6e9ed; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; - color: #656d78; -} - -li.L0, -li.L1, -li.L2, -li.L3, -li.L4, -li.L5, -li.L6, -li.L7, -li.L8, -li.L9 { - padding-left: 1em; - background-color: #2f3640; - list-style-type: decimal; -} - -@media screen { - - /* string content */ - - .str { - color: #ffce54; - } - - /* keyword */ - - .kwd { - color: #4fc1e9; - } - - /* comment */ - - .com { - color: #656d78; - } - - /* type name */ - - .typ { - color: #4fc1e9; - } - - /* literal value */ - - .lit { - color: #ac92ec; - } - - /* punctuation */ - - .pun { - color: #e6e9ed; - } - - /* lisp open bracket */ - - .opn { - color: #e6e9ed; - } - - /* lisp close bracket */ - - .clo { - color: #e6e9ed; - } - - /* markup tag name */ - - .tag { - color: #ed5565; - } - - /* markup attribute name */ - - .atn { - color: #a0d468; - } - - /* markup attribute value */ - - .atv { - color: #ffce54; - } - - /* declaration */ - - .dec { - color: #ac92ec; - } - - /* variable name */ - - .var { - color: #e6e9ed; - } - - /* function name */ - - .fun { - color: #e6e9ed; - } -} diff --git a/packages/interactjs/dist/interact.js b/packages/interactjs/dist/interact.js index 3c4a9a03f..2f1252139 100644 --- a/packages/interactjs/dist/interact.js +++ b/packages/interactjs/dist/interact.js @@ -1,5 +1,5 @@ /** - * interact.js 1.6.3 + * interact.js 1.7.0 * * Copyright (c) 2012-2019 Taye Adeyemi * Released under the MIT License. @@ -17,9 +17,9 @@ Object.defineProperty(exports, "__esModule", { /* common-shake removed: exports.initScope = */ void initScope; exports.Scope = exports.ActionName = void 0; -var utils = _interopRequireWildcard(_$utils_56); +var _domObjects = _interopRequireDefault(_$domObjects_49); -var _domObjects = _interopRequireDefault(_$domObjects_50); +var utils = _interopRequireWildcard(_$utils_55); var _defaultOptions = _interopRequireDefault(_$defaultOptions_20); @@ -33,11 +33,11 @@ var _InteractEvent = _interopRequireDefault(_$InteractEvent_15); var _interactions = _interopRequireDefault(_$interactions_23({})); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(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); } @@ -61,10 +61,24 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + var win = utils.win, browser = utils.browser, raf = utils.raf, - Signals = utils.Signals, events = utils.events; var ActionName; exports.ActionName = ActionName; @@ -78,33 +92,57 @@ function createScope() { var Scope = /*#__PURE__*/ function () { + // main window + // main document + // main window + // all documents being listened to function Scope() { var _this = this; _classCallCheck(this, Scope); - this.id = "__interact_scope_".concat(Math.floor(Math.random() * 100)); - this.signals = new Signals(); - this.browser = browser; - this.events = events; - this.utils = utils; - this.defaults = utils.clone(_defaultOptions["default"]); - this.Eventable = _Eventable["default"]; - this.actions = { + _defineProperty(this, "id", "__interact_scope_".concat(Math.floor(Math.random() * 100))); + + _defineProperty(this, "listenerMaps", []); + + _defineProperty(this, "browser", browser); + + _defineProperty(this, "events", events); + + _defineProperty(this, "utils", utils); + + _defineProperty(this, "defaults", utils.clone(_defaultOptions["default"])); + + _defineProperty(this, "Eventable", _Eventable["default"]); + + _defineProperty(this, "actions", { names: [], methodDict: {}, eventTypes: [] - }; - this.InteractEvent = _InteractEvent["default"]; - this.interactables = new _InteractableSet["default"](this); // all documents being listened to + }); + + _defineProperty(this, "InteractEvent", _InteractEvent["default"]); + + _defineProperty(this, "Interactable", void 0); + + _defineProperty(this, "interactables", new _InteractableSet["default"](this)); + + _defineProperty(this, "_win", void 0); + + _defineProperty(this, "document", void 0); - this.documents = []; - this._plugins = []; - this._pluginMap = {}; + _defineProperty(this, "window", void 0); - this.onWindowUnload = function (event) { + _defineProperty(this, "documents", []); + + _defineProperty(this, "_plugins", { + list: [], + map: {} + }); + + _defineProperty(this, "onWindowUnload", function (event) { return _this.removeDocument(event.target); - }; + }); var scope = this; @@ -124,7 +162,7 @@ function () { value: function set(options) { _get(_getPrototypeOf(Interactable.prototype), "set", this).call(this, options); - scope.interactables.signals.fire('set', { + scope.fire('interactable:set', { options: options, interactable: this }); @@ -140,7 +178,7 @@ function () { if (interaction.interactable === this) { interaction.stop(); - scope.interactions.signals.fire('destroy', { + scope.fire('interactions:destroy', { interaction: interaction }); interaction.destroy(); @@ -151,7 +189,7 @@ function () { } } - scope.interactables.signals.fire('unset', { + scope.fire('interactable:unset', { interactable: this }); } @@ -167,6 +205,29 @@ function () { } _createClass(Scope, [{ + key: "addListeners", + value: function addListeners(map, id) { + this.listenerMaps.push({ + id: id, + map: map + }); + } + }, { + key: "fire", + value: function fire(name, arg) { + for (var _i = 0; _i < this.listenerMaps.length; _i++) { + var _ref; + + _ref = this.listenerMaps[_i]; + var _ref2 = _ref, + listener = _ref2.map[name]; + + if (!!listener && listener(arg, this, name) === false) { + return false; + } + } + } + }, { key: "init", value: function init(window) { return initScope(this, window); @@ -174,7 +235,7 @@ function () { }, { key: "pluginIsInstalled", value: function pluginIsInstalled(plugin) { - return this._pluginMap[plugin.id] || this._plugins.indexOf(plugin) !== -1; + return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1; } }, { key: "usePlugin", @@ -184,12 +245,36 @@ function () { } if (plugin.id) { - this._pluginMap[plugin.id] = plugin; + this._plugins.map[plugin.id] = plugin; + } + + this._plugins.list.push(plugin); + + if (plugin.install) { + plugin.install(this, options); } - plugin.install(this, options); + if (plugin.listeners && plugin.before) { + var index = 0; + + for (; index < this.listenerMaps.length; index++) { + var otherId = this.listenerMaps[index].id; + + if (otherId === plugin.before) { + break; + } + } - this._plugins.push(plugin); + this.listenerMaps.splice(index, 0, { + id: plugin.id, + map: plugin.listeners + }); + } else if (plugin.listeners) { + this.listenerMaps.push({ + id: plugin.id, + map: plugin.listeners + }); + } return this; } @@ -214,7 +299,7 @@ function () { events.add(window, 'unload', this.onWindowUnload); } - this.signals.fire('add-document', { + this.fire('scope:add-document', { doc: doc, window: window, scope: this, @@ -230,7 +315,7 @@ function () { events.remove(window, 'unload', this.onWindowUnload); this.documents.splice(index, 1); events.documents.splice(index, 1); - this.signals.fire('remove-document', { + this.fire('scope:remove-document', { doc: doc, window: window, scope: this, @@ -289,17 +374,15 @@ Object.defineProperty(exports, "__esModule", { }); exports["default"] = void 0; -var _browser = _interopRequireDefault(_$browser_48); +var _browser = _interopRequireDefault(_$browser_47); -var _domObjects = _interopRequireDefault(_$domObjects_50); +var _domObjects = _interopRequireDefault(_$domObjects_49); -/* removed: var _$domUtils_51 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_50 = require("../utils/domUtils.js"); */; -var _events = _interopRequireDefault(_$events_52); +var _events = _interopRequireDefault(_$events_51); -var _pointerUtils = _interopRequireDefault(_$pointerUtils_61); - -var _Signals = _interopRequireDefault(_$Signals_46); +var _pointerUtils = _interopRequireDefault(_$pointerUtils_60); var _Interaction = _interopRequireDefault(_$Interaction_18({})); @@ -336,7 +419,6 @@ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || func var methodNames = ['pointerDown', 'pointerMove', 'pointerUp', 'updatePointer', 'removePointer', 'windowBlur']; function install(scope) { - var signals = new _Signals["default"](); var listeners = {}; for (var _i = 0; _i < methodNames.length; _i++) { @@ -406,9 +488,7 @@ function install(scope) { interaction.documentBlur(event); } } - }); - scope.signals.on('add-document', onDocSignal); - scope.signals.on('remove-document', onDocSignal); // for ignoring browser's simulated mouse events + }); // for ignoring browser's simulated mouse events scope.prevTouchTime = 0; @@ -442,11 +522,13 @@ function install(scope) { }(_Interaction["default"]); scope.interactions = { - signals: signals, // all active and idle interactions list: [], "new": function _new(options) { - options.signals = signals; + options.scopeFire = function (name, arg) { + return scope.fire(name, arg); + }; + var interaction = new scope.Interaction(options); scope.interactions.list.push(interaction); return interaction; @@ -475,7 +557,7 @@ function install(scope) { if (!scope.documents.some(function (_ref5) { var doc = _ref5.doc; - return (0, _$domUtils_51.nodeContains)(doc, pointer.downTarget); + return (0, _$domUtils_50.nodeContains)(doc, pointer.downTarget); })) { // remove the pointer from the interaction interaction.removePointer(pointer.pointer, pointer.event); @@ -583,18 +665,18 @@ function getInteraction(searchDetails) { interaction: foundInteraction, searchDetails: searchDetails }; - scope.interactions.signals.fire('find', signalArg); + scope.fire('interactions:find', signalArg); return signalArg.interaction || scope.interactions["new"]({ pointerType: pointerType }); } -function onDocSignal(_ref7, signalName) { +function onDocSignal(_ref7, eventMethodName) { var doc = _ref7.doc, scope = _ref7.scope, options = _ref7.options; var docEvents = scope.interactions.docEvents; - var eventMethod = signalName.indexOf('add') === 0 ? _events["default"].add : _events["default"].remove; + var eventMethod = _events["default"][eventMethodName]; if (scope.browser.isIOS && !options.events) { options.events = { @@ -624,6 +706,14 @@ function onDocSignal(_ref7, signalName) { var _default = { id: 'core/interactions', install: install, + listeners: { + 'scope:add-document': function scopeAddDocument(arg) { + return onDocSignal(arg, 'add'); + }, + 'scope:remove-document': function scopeRemoveDocument(arg) { + return onDocSignal(arg, 'remove'); + } + }, onDocSignal: onDocSignal, doOnInteractions: doOnInteractions, methodNames: methodNames @@ -634,6 +724,8 @@ exports["default"] = _default; var _$Interaction_18 = createModuleFactory(function (module, exports) { "use strict"; +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); } + Object.defineProperty(exports, "__esModule", { value: true }); @@ -645,7 +737,7 @@ Object.defineProperty(exports, "PointerInfo", { }); exports["default"] = exports.Interaction = exports._ProxyMethods = exports._ProxyValues = void 0; -var utils = _interopRequireWildcard(_$utils_56); +var utils = _interopRequireWildcard(_$utils_55); var _InteractEvent = _interopRequireWildcard(_$InteractEvent_15); @@ -657,7 +749,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -665,6 +757,21 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + var _ProxyValues; exports._ProxyValues = _ProxyValues; @@ -693,52 +800,84 @@ exports._ProxyMethods = _ProxyMethods; var Interaction = /*#__PURE__*/ function () { - /** */ + _createClass(Interaction, [{ + key: "pointerMoveTolerance", + // current interactable being interacted with + // the target element of the interactable + // action that's ready to be fired on next move event + // keep track of added pointers + // pointerdown/mousedown/touchstart event + // previous action event + get: function get() { + return 1; + } + /** + * @alias Interaction.prototype.move + */ + + /** */ + + }]); + function Interaction(_ref) { var _this = this; var pointerType = _ref.pointerType, - signals = _ref.signals; + scopeFire = _ref.scopeFire; _classCallCheck(this, Interaction); - // current interactable being interacted with - this.interactable = null; // the target element of the interactable + _defineProperty(this, "interactable", null); + + _defineProperty(this, "element", null); - this.element = null; // action that's ready to be fired on next move event + _defineProperty(this, "rect", void 0); - this.prepared = { + _defineProperty(this, "edges", void 0); + + _defineProperty(this, "_scopeFire", void 0); + + _defineProperty(this, "prepared", { name: null, axis: null, edges: null - }; // keep track of added pointers + }); + + _defineProperty(this, "pointerType", void 0); - this.pointers = []; // pointerdown/mousedown/touchstart event + _defineProperty(this, "pointers", []); - this.downEvent = null; - this.downPointer = {}; - this._latestPointer = { + _defineProperty(this, "downEvent", null); + + _defineProperty(this, "downPointer", {}); + + _defineProperty(this, "_latestPointer", { pointer: null, event: null, eventTarget: null - }; // previous action event - - this.prevEvent = null; - this.pointerIsDown = false; - this.pointerWasMoved = false; - this._interacting = false; - this._ending = false; - this._stopped = true; - this._proxy = null; - this.simulation = null; - /** - * @alias Interaction.prototype.move - */ + }); + + _defineProperty(this, "prevEvent", null); + + _defineProperty(this, "pointerIsDown", false); - this.doMove = utils.warnOnce(function (signalArg) { + _defineProperty(this, "pointerWasMoved", false); + + _defineProperty(this, "_interacting", false); + + _defineProperty(this, "_ending", false); + + _defineProperty(this, "_stopped", true); + + _defineProperty(this, "_proxy", null); + + _defineProperty(this, "simulation", null); + + _defineProperty(this, "doMove", utils.warnOnce(function (signalArg) { this.move(signalArg); - }, 'The interaction.doMove() method has been renamed to interaction.move()'); - this.coords = { + }, 'The interaction.doMove() method has been renamed to interaction.move()')); + + _defineProperty(this, "coords", { // Starting InteractEvent pointer coordinates start: utils.pointer.newCoords(), // Previous native pointer move event coordinates @@ -749,8 +888,9 @@ function () { delta: utils.pointer.newCoords(), // pointer velocity velocity: utils.pointer.newCoords() - }; - this._signals = signals; + }); + + this._scopeFire = scopeFire; this.pointerType = pointerType; var that = this; this._proxy = {}; @@ -779,7 +919,7 @@ function () { _loop2(_key); } - this._signals.fire('new', { + this._scopeFire('interactions:new', { interaction: this }); } @@ -789,11 +929,12 @@ function () { value: function pointerDown(pointer, event, eventTarget) { var pointerIndex = this.updatePointer(pointer, event, eventTarget, true); - this._signals.fire('down', { + this._scopeFire('interactions:down', { pointer: pointer, event: event, eventTarget: eventTarget, pointerIndex: pointerIndex, + type: 'down', interaction: this }); } @@ -873,6 +1014,7 @@ function () { pointer: pointer, pointerIndex: this.getPointerIndex(pointer), event: event, + type: 'move', eventTarget: eventTarget, dx: dx, dy: dy, @@ -886,11 +1028,12 @@ function () { utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta); } - this._signals.fire('move', signalArg); + this._scopeFire('interactions:move', signalArg); if (!duplicateMove) { // if interacting, fire an 'action-move' signal etc if (this.interacting()) { + signalArg.type = null; this.move(signalArg); } @@ -941,11 +1084,14 @@ function () { pointerIndex = this.updatePointer(pointer, event, eventTarget, false); } - this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', { + var type = /cancel$/i.test(event.type) ? 'cancel' : 'up'; + + this._scopeFire("interactions:".concat(type), { pointer: pointer, pointerIndex: pointerIndex, event: event, eventTarget: eventTarget, + type: type, curEventTarget: curEventTarget, interaction: this }); @@ -962,8 +1108,9 @@ function () { value: function documentBlur(event) { this.end(event); - this._signals.fire('blur', { + this._scopeFire('interactions:blur', { event: event, + type: 'blur', interaction: this }); } @@ -1020,7 +1167,7 @@ function () { }, { key: "stop", value: function stop() { - this._signals.fire('stop', { + this._scopeFire('interactions:stop', { interaction: this }); @@ -1078,7 +1225,7 @@ function () { this._updateLatestPointer(pointer, event, eventTarget); - this._signals.fire('update-pointer', { + this._scopeFire('interactions:update-pointer', { pointer: pointer, event: event, eventTarget: eventTarget, @@ -1101,9 +1248,10 @@ function () { var pointerInfo = this.pointers[pointerIndex]; - this._signals.fire('remove-pointer', { + this._scopeFire('interactions:remove-pointer', { pointer: pointer, event: event, + eventTarget: null, pointerIndex: pointerIndex, pointerInfo: pointerInfo, interaction: this @@ -1148,7 +1296,7 @@ function () { preEnd = signalArg.preEnd, type = signalArg.type; - var beforeResult = this._signals.fire("before-action-".concat(phase), signalArg); + var beforeResult = this._scopeFire("interactions:before-action-".concat(phase), signalArg); if (beforeResult === false) { return false; @@ -1187,11 +1335,11 @@ function () { rect.height = rect.bottom - rect.top; } - this._signals.fire("action-".concat(phase), signalArg); + this._scopeFire("interactions:action-".concat(phase), signalArg); this._fireEvent(iEvent); - this._signals.fire("after-action-".concat(phase), signalArg); + this._scopeFire("interactions:after-action-".concat(phase), signalArg); return true; } @@ -1200,11 +1348,6 @@ function () { value: function _now() { return Date.now(); } - }, { - key: "pointerMoveTolerance", - get: function get() { - return 1; - } }]); return Interaction; @@ -1215,18 +1358,59 @@ var _default = Interaction; exports["default"] = _default; }); -var _$arr_47 = {}; +var _$domObjects_49 = {}; +"use strict"; + +Object.defineProperty(_$domObjects_49, "__esModule", { + value: true +}); +_$domObjects_49["default"] = void 0; +var domObjects = { + init: init, + document: null, + DocumentFragment: null, + SVGElement: null, + SVGSVGElement: null, + // eslint-disable-next-line no-undef + SVGElementInstance: null, + Element: null, + HTMLElement: null, + Event: null, + Touch: null, + PointerEvent: null +}; + +function blank() {} + +var _default = domObjects; +_$domObjects_49["default"] = _default; + +function init(window) { + var win = window; + domObjects.document = win.document; + domObjects.DocumentFragment = win.DocumentFragment || blank; + domObjects.SVGElement = win.SVGElement || blank; + domObjects.SVGSVGElement = win.SVGSVGElement || blank; + domObjects.SVGElementInstance = win.SVGElementInstance || blank; + domObjects.Element = win.Element || blank; + domObjects.HTMLElement = win.HTMLElement || domObjects.Element; + domObjects.Event = win.Event; + domObjects.Touch = win.Touch || blank; + domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent; +} + +var _$arr_46 = {}; "use strict"; -Object.defineProperty(_$arr_47, "__esModule", { +Object.defineProperty(_$arr_46, "__esModule", { value: true }); -_$arr_47.contains = contains; -_$arr_47.remove = remove; -_$arr_47.merge = merge; -_$arr_47.from = from; -_$arr_47.findIndex = findIndex; -_$arr_47.find = find; +_$arr_46.contains = contains; +_$arr_46.remove = remove; +_$arr_46.merge = merge; +_$arr_46.from = from; +_$arr_46.findIndex = findIndex; +_$arr_46.find = find; function contains(array, target) { return array.indexOf(target) !== -1; @@ -1266,72 +1450,31 @@ function find(array, func) { return array[findIndex(array, func)]; } -var _$domObjects_50 = {}; -"use strict"; - -Object.defineProperty(_$domObjects_50, "__esModule", { - value: true -}); -_$domObjects_50["default"] = void 0; -var domObjects = { - init: init, - document: null, - DocumentFragment: null, - SVGElement: null, - SVGSVGElement: null, - // eslint-disable-next-line no-undef - SVGElementInstance: null, - Element: null, - HTMLElement: null, - Event: null, - Touch: null, - PointerEvent: null -}; - -function blank() {} - -var _default = domObjects; -_$domObjects_50["default"] = _default; - -function init(window) { - var win = window; - domObjects.document = win.document; - domObjects.DocumentFragment = win.DocumentFragment || blank; - domObjects.SVGElement = win.SVGElement || blank; - domObjects.SVGSVGElement = win.SVGSVGElement || blank; - domObjects.SVGElementInstance = win.SVGElementInstance || blank; - domObjects.Element = win.Element || blank; - domObjects.HTMLElement = win.HTMLElement || domObjects.Element; - domObjects.Event = win.Event; - domObjects.Touch = win.Touch || blank; - domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent; -} - -var _$isWindow_58 = {}; +var _$isWindow_57 = {}; "use strict"; -Object.defineProperty(_$isWindow_58, "__esModule", { +Object.defineProperty(_$isWindow_57, "__esModule", { value: true }); -_$isWindow_58["default"] = void 0; +_$isWindow_57["default"] = void 0; -var ___default_58 = function _default(thing) { +var ___default_57 = function _default(thing) { return !!(thing && thing.Window) && thing instanceof thing.Window; }; -_$isWindow_58["default"] = ___default_58; +_$isWindow_57["default"] = ___default_57; -var _$window_66 = {}; +var _$window_65 = {}; "use strict"; -Object.defineProperty(_$window_66, "__esModule", { +Object.defineProperty(_$window_65, "__esModule", { value: true }); -_$window_66.init = __init_66; -_$window_66.getWindow = getWindow; -_$window_66["default"] = void 0; +_$window_65.init = __init_65; +_$window_65.getWindow = getWindow; +_$window_65["default"] = void 0; -var _isWindow = _interopRequireDefault(_$isWindow_58); +var _isWindow = _interopRequireDefault(_$isWindow_57); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -1339,10 +1482,10 @@ var win = { realWindow: undefined, window: undefined, getWindow: getWindow, - init: __init_66 + init: __init_65 }; -function __init_66(window) { +function __init_65(window) { // get wrapped window if using Shadow DOM polyfill win.realWindow = window; // create a TextNode @@ -1360,7 +1503,7 @@ if (typeof window === 'undefined') { win.window = undefined; win.realWindow = undefined; } else { - __init_66(window); + __init_65(window); } function getWindow(node) { @@ -1372,67 +1515,67 @@ function getWindow(node) { return rootNode.defaultView || win.window; } -win.init = __init_66; -var ___default_66 = win; -_$window_66["default"] = ___default_66; +win.init = __init_65; +var ___default_65 = win; +_$window_65["default"] = ___default_65; -var _$is_57 = {}; +var _$is_56 = {}; "use strict"; -Object.defineProperty(_$is_57, "__esModule", { +Object.defineProperty(_$is_56, "__esModule", { value: true }); -_$is_57.array = _$is_57.plainObject = _$is_57.element = _$is_57.string = _$is_57.bool = _$is_57.number = _$is_57.func = _$is_57.object = _$is_57.docFrag = _$is_57.window = void 0; +_$is_56.array = _$is_56.plainObject = _$is_56.element = _$is_56.string = _$is_56.bool = _$is_56.number = _$is_56.func = _$is_56.object = _$is_56.docFrag = _$is_56.window = void 0; -var ___isWindow_57 = ___interopRequireDefault_57(_$isWindow_58); +var ___isWindow_56 = ___interopRequireDefault_56(_$isWindow_57); -var _window2 = ___interopRequireDefault_57(_$window_66); +var _window2 = ___interopRequireDefault_56(_$window_65); -function ___interopRequireDefault_57(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_56(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_57 = function window(thing) { - return thing === _window2["default"].window || (0, ___isWindow_57["default"])(thing); +var __window_56 = function window(thing) { + return thing === _window2["default"].window || (0, ___isWindow_56["default"])(thing); }; -_$is_57.window = __window_57; +_$is_56.window = __window_56; var docFrag = function docFrag(thing) { return object(thing) && thing.nodeType === 11; }; -_$is_57.docFrag = docFrag; +_$is_56.docFrag = docFrag; var object = function object(thing) { return !!thing && _typeof(thing) === 'object'; }; -_$is_57.object = object; +_$is_56.object = object; var func = function func(thing) { return typeof thing === 'function'; }; -_$is_57.func = func; +_$is_56.func = func; var number = function number(thing) { return typeof thing === 'number'; }; -_$is_57.number = number; +_$is_56.number = number; var bool = function bool(thing) { return typeof thing === 'boolean'; }; -_$is_57.bool = bool; +_$is_56.bool = bool; var string = function string(thing) { return typeof thing === 'string'; }; -_$is_57.string = string; +_$is_56.string = string; var element = function element(thing) { if (!thing || _typeof(thing) !== 'object') { @@ -1445,42 +1588,44 @@ var element = function element(thing) { : thing.nodeType === 1 && typeof thing.nodeName === 'string'; }; -_$is_57.element = element; +_$is_56.element = element; var plainObject = function plainObject(thing) { return object(thing) && !!thing.constructor && /function Object\b/.test(thing.constructor.toString()); }; -_$is_57.plainObject = plainObject; +_$is_56.plainObject = plainObject; var array = function array(thing) { return object(thing) && typeof thing.length !== 'undefined' && func(thing.splice); }; -_$is_57.array = array; +_$is_56.array = array; -var _$browser_48 = {}; +var _$browser_47 = {}; "use strict"; -Object.defineProperty(_$browser_48, "__esModule", { +function ___typeof_47(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_47 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_47 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_47(obj); } + +Object.defineProperty(_$browser_47, "__esModule", { value: true }); -_$browser_48["default"] = void 0; +_$browser_47["default"] = void 0; -var _domObjects = ___interopRequireDefault_48(_$domObjects_50); +var _domObjects = ___interopRequireDefault_47(_$domObjects_49); -var is = _interopRequireWildcard(_$is_57); +var is = _interopRequireWildcard(_$is_56); -var _window = ___interopRequireDefault_48(_$window_66); +var _window = ___interopRequireDefault_47(_$window_65); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_47(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function ___interopRequireDefault_48(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_47(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var browser = { - init: __init_48, + init: __init_47, supportsTouch: null, supportsPointerEvent: null, isIOS7: null, @@ -1492,7 +1637,7 @@ var browser = { wheelEvent: null }; -function __init_48(window) { +function __init_47(window) { var Element = _domObjects["default"].Element; var navigator = _window["default"].window.navigator; // Does the browser support touch input? @@ -1526,41 +1671,43 @@ function __init_48(window) { browser.wheelEvent = 'onmousewheel' in _domObjects["default"].document ? 'mousewheel' : 'wheel'; } -var ___default_48 = browser; -_$browser_48["default"] = ___default_48; +var ___default_47 = browser; +_$browser_47["default"] = ___default_47; -var _$domUtils_51 = {}; +var _$domUtils_50 = {}; "use strict"; -Object.defineProperty(_$domUtils_51, "__esModule", { +function ___typeof_50(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_50 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_50 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_50(obj); } + +Object.defineProperty(_$domUtils_50, "__esModule", { value: true }); -_$domUtils_51.nodeContains = nodeContains; -_$domUtils_51.closest = closest; -_$domUtils_51.parentNode = parentNode; -_$domUtils_51.matchesSelector = matchesSelector; -_$domUtils_51.indexOfDeepestElement = indexOfDeepestElement; -_$domUtils_51.matchesUpTo = matchesUpTo; -_$domUtils_51.getActualElement = getActualElement; -_$domUtils_51.getScrollXY = getScrollXY; -_$domUtils_51.getElementClientRect = getElementClientRect; -_$domUtils_51.getElementRect = getElementRect; -_$domUtils_51.getPath = getPath; -_$domUtils_51.trySelector = trySelector; +_$domUtils_50.nodeContains = nodeContains; +_$domUtils_50.closest = closest; +_$domUtils_50.parentNode = parentNode; +_$domUtils_50.matchesSelector = matchesSelector; +_$domUtils_50.indexOfDeepestElement = indexOfDeepestElement; +_$domUtils_50.matchesUpTo = matchesUpTo; +_$domUtils_50.getActualElement = getActualElement; +_$domUtils_50.getScrollXY = getScrollXY; +_$domUtils_50.getElementClientRect = getElementClientRect; +_$domUtils_50.getElementRect = getElementRect; +_$domUtils_50.getPath = getPath; +_$domUtils_50.trySelector = trySelector; -var _browser = ___interopRequireDefault_51(_$browser_48); +var _browser = ___interopRequireDefault_50(_$browser_47); -var ___domObjects_51 = ___interopRequireDefault_51(_$domObjects_50); +var ___domObjects_50 = ___interopRequireDefault_50(_$domObjects_49); -var __is_51 = ___interopRequireWildcard_51(_$is_57); +var __is_50 = ___interopRequireWildcard_50(_$is_56); -var ___window_51 = ___interopRequireWildcard_51(_$window_66); +var ___window_50 = ___interopRequireWildcard_50(_$window_65); -function ___getRequireWildcardCache_51() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_51 = function _getRequireWildcardCache() { return cache; }; return cache; } +function ___getRequireWildcardCache_50() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_50 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_51(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_51(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_50(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_50(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_50(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function ___interopRequireDefault_51(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_50(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function nodeContains(parent, child) { while (child) { @@ -1575,7 +1722,7 @@ function nodeContains(parent, child) { } function closest(element, selector) { - while (__is_51.element(element)) { + while (__is_50.element(element)) { if (matchesSelector(element, selector)) { return element; } @@ -1589,10 +1736,10 @@ function closest(element, selector) { function parentNode(node) { var parent = node.parentNode; - if (__is_51.docFrag(parent)) { + if (__is_50.docFrag(parent)) { // skip past #shado-root fragments // tslint:disable-next-line - while ((parent = parent.host) && __is_51.docFrag(parent)) { + while ((parent = parent.host) && __is_50.docFrag(parent)) { continue; } @@ -1604,7 +1751,7 @@ function parentNode(node) { function matchesSelector(element, selector) { // remove /deep/ from selectors if shadowDOM polyfill is used - if (___window_51["default"].window !== ___window_51["default"].realWindow) { + if (___window_50["default"].window !== ___window_50["default"].realWindow) { selector = selector.replace(/\/deep\//g, ' '); } @@ -1649,8 +1796,8 @@ function indexOfDeepestElement(elements) { if (dropzone.parentNode === deepestZone.parentNode) { - var deepestZIndex = parseInt((0, ___window_51.getWindow)(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0; - var dropzoneZIndex = parseInt((0, ___window_51.getWindow)(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0; + var deepestZIndex = parseInt((0, ___window_50.getWindow)(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0; + var dropzoneZIndex = parseInt((0, ___window_50.getWindow)(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0; if (dropzoneZIndex >= deepestZIndex) { deepestZone = dropzone; @@ -1674,7 +1821,7 @@ function indexOfDeepestElement(elements) { var parent = void 0; // if this element is an svg element and the current deepest is an // HTMLElement - if (deepestZone instanceof ___domObjects_51["default"].HTMLElement && dropzone instanceof ___domObjects_51["default"].SVGElement && !(dropzone instanceof ___domObjects_51["default"].SVGSVGElement)) { + if (deepestZone instanceof ___domObjects_50["default"].HTMLElement && dropzone instanceof ___domObjects_50["default"].SVGElement && !(dropzone instanceof ___domObjects_50["default"].SVGSVGElement)) { if (dropzone === deepestZone.parentNode) { continue; } @@ -1718,7 +1865,7 @@ function indexOfDeepestElement(elements) { } function matchesUpTo(element, selector, limit) { - while (__is_51.element(element)) { + while (__is_50.element(element)) { if (matchesSelector(element, selector)) { return true; } @@ -1734,11 +1881,11 @@ function matchesUpTo(element, selector, limit) { } function getActualElement(element) { - return element instanceof ___domObjects_51["default"].SVGElementInstance ? element.correspondingUseElement : element; + return element instanceof ___domObjects_50["default"].SVGElementInstance ? element.correspondingUseElement : element; } function getScrollXY(relevantWindow) { - relevantWindow = relevantWindow || ___window_51["default"].window; + relevantWindow = relevantWindow || ___window_50["default"].window; return { x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft, y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop @@ -1746,7 +1893,7 @@ function getScrollXY(relevantWindow) { } function getElementClientRect(element) { - var clientRect = element instanceof ___domObjects_51["default"].SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]; + var clientRect = element instanceof ___domObjects_50["default"].SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]; return clientRect && { left: clientRect.left, right: clientRect.right, @@ -1761,7 +1908,7 @@ function getElementRect(element) { var clientRect = getElementClientRect(element); if (!_browser["default"].isIOS7 && clientRect) { - var scroll = getScrollXY(___window_51["default"].getWindow(element)); + var scroll = getScrollXY(___window_50["default"].getWindow(element)); clientRect.left += scroll.x; clientRect.right += scroll.x; clientRect.top += scroll.y; @@ -1783,31 +1930,33 @@ function getPath(node) { } function trySelector(value) { - if (!__is_51.string(value)) { + if (!__is_50.string(value)) { return false; } // an exception will be raised if it is invalid - ___domObjects_51["default"].document.querySelector(value); + ___domObjects_50["default"].document.querySelector(value); return true; } -var _$clone_49 = {}; +var _$clone_48 = {}; "use strict"; -Object.defineProperty(_$clone_49, "__esModule", { +function ___typeof_48(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_48 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_48 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_48(obj); } + +Object.defineProperty(_$clone_48, "__esModule", { value: true }); -_$clone_49["default"] = clone; +_$clone_48["default"] = clone; -var arr = ___interopRequireWildcard_49(_$arr_47); +var arr = ___interopRequireWildcard_48(_$arr_46); -var __is_49 = ___interopRequireWildcard_49(_$is_57); +var __is_48 = ___interopRequireWildcard_48(_$is_56); -function ___getRequireWildcardCache_49() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_49 = function _getRequireWildcardCache() { return cache; }; return cache; } +function ___getRequireWildcardCache_48() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_48 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_49(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_49(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_48(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_48(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_48(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function clone(source) { var dest = {}; @@ -1815,9 +1964,9 @@ function clone(source) { for (var prop in source) { var value = source[prop]; - if (__is_49.plainObject(value)) { + if (__is_48.plainObject(value)) { dest[prop] = clone(value); - } else if (__is_49.array(value)) { + } else if (__is_48.array(value)) { dest[prop] = arr.from(value); } else { dest[prop] = value; @@ -1827,13 +1976,13 @@ function clone(source) { return dest; } -var _$pointerExtend_60 = {}; +var _$pointerExtend_59 = {}; "use strict"; -Object.defineProperty(_$pointerExtend_60, "__esModule", { +Object.defineProperty(_$pointerExtend_59, "__esModule", { value: true }); -_$pointerExtend_60["default"] = void 0; +_$pointerExtend_59["default"] = void 0; function pointerExtend(dest, source) { for (var prop in source) { @@ -1859,48 +2008,50 @@ pointerExtend.prefixedPropREs = { webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/, moz: /(Pressure)$/ }; -var ___default_60 = pointerExtend; -_$pointerExtend_60["default"] = ___default_60; +var ___default_59 = pointerExtend; +_$pointerExtend_59["default"] = ___default_59; -var _$hypot_55 = {}; +var _$hypot_54 = {}; "use strict"; -Object.defineProperty(_$hypot_55, "__esModule", { +Object.defineProperty(_$hypot_54, "__esModule", { value: true }); -_$hypot_55["default"] = void 0; +_$hypot_54["default"] = void 0; -var ___default_55 = function _default(x, y) { +var ___default_54 = function _default(x, y) { return Math.sqrt(x * x + y * y); }; -_$hypot_55["default"] = ___default_55; +_$hypot_54["default"] = ___default_54; -var _$pointerUtils_61 = {}; +var _$pointerUtils_60 = {}; "use strict"; -Object.defineProperty(_$pointerUtils_61, "__esModule", { +function ___typeof_60(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_60 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_60 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_60(obj); } + +Object.defineProperty(_$pointerUtils_60, "__esModule", { value: true }); -_$pointerUtils_61["default"] = void 0; +_$pointerUtils_60["default"] = void 0; -var ___browser_61 = ___interopRequireDefault_61(_$browser_48); +var ___browser_60 = ___interopRequireDefault_60(_$browser_47); -var ___domObjects_61 = ___interopRequireDefault_61(_$domObjects_50); +var ___domObjects_60 = ___interopRequireDefault_60(_$domObjects_49); -var domUtils = ___interopRequireWildcard_61(_$domUtils_51); +var domUtils = ___interopRequireWildcard_60(_$domUtils_50); -var _hypot = ___interopRequireDefault_61(_$hypot_55); +var _hypot = ___interopRequireDefault_60(_$hypot_54); -var __is_61 = ___interopRequireWildcard_61(_$is_57); +var __is_60 = ___interopRequireWildcard_60(_$is_56); -var _pointerExtend = ___interopRequireDefault_61(_$pointerExtend_60); +var _pointerExtend = ___interopRequireDefault_60(_$pointerExtend_59); -function ___getRequireWildcardCache_61() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_61 = function _getRequireWildcardCache() { return cache; }; return cache; } +function ___getRequireWildcardCache_60() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_60 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_61(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_61(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_60(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_60(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_60(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function ___interopRequireDefault_61(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_60(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var pointerUtils = { copyCoords: function copyCoords(dest, src) { @@ -1928,7 +2079,7 @@ var pointerUtils = { targetObj.timeStamp = dt; }, isNativePointer: function isNativePointer(pointer) { - return pointer instanceof ___domObjects_61["default"].Event || pointer instanceof ___domObjects_61["default"].Touch; + return pointer instanceof ___domObjects_60["default"].Event || pointer instanceof ___domObjects_60["default"].Touch; }, // Get specified X/Y coords for mouse or event.touches[0] getXY: function getXY(type, pointer, xy) { @@ -1944,7 +2095,7 @@ var pointerUtils = { y: 0 }; // Opera Mobile handles the viewport and scrolling oddly - if (___browser_61["default"].isOperaMobile && pointerUtils.isNativePointer(pointer)) { + if (___browser_60["default"].isOperaMobile && pointerUtils.isNativePointer(pointer)) { pointerUtils.getXY('screen', pointer, page); page.x += window.scrollX; page.y += window.scrollY; @@ -1957,7 +2108,7 @@ var pointerUtils = { getClientXY: function getClientXY(pointer, client) { client = client || {}; - if (___browser_61["default"].isOperaMobile && pointerUtils.isNativePointer(pointer)) { + if (___browser_60["default"].isOperaMobile && pointerUtils.isNativePointer(pointer)) { // Opera Mobile handles the viewport and scrolling oddly pointerUtils.getXY('screen', pointer, client); } else { @@ -1967,7 +2118,7 @@ var pointerUtils = { return client; }, getPointerId: function getPointerId(pointer) { - return __is_61.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; + return __is_60.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; }, setCoords: function setCoords(targetObj, pointers, timeStamp) { var pointer = pointers.length > 1 ? pointerUtils.pointerAverage(pointers) : pointers[0]; @@ -1984,7 +2135,7 @@ var pointerUtils = { getTouchPair: function getTouchPair(event) { var touches = []; // array of touches is supplied - if (__is_61.array(event)) { + if (__is_60.array(event)) { touches[0] = event[0]; touches[1] = event[1]; } // an event @@ -2071,13 +2222,13 @@ var pointerUtils = { return angle; }, getPointerType: function getPointerType(pointer) { - return __is_61.string(pointer.pointerType) ? pointer.pointerType : __is_61.number(pointer.pointerType) ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType] // if the PointerEvent API isn't available, then the "pointer" must + return __is_60.string(pointer.pointerType) ? pointer.pointerType : __is_60.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_61["default"].Touch ? 'touch' : 'mouse'; + : /touch/.test(pointer.type) || pointer instanceof ___domObjects_60["default"].Touch ? 'touch' : 'mouse'; }, // [ event.target, event.currentTarget ] getEventTargets: function getEventTargets(event) { - var path = __is_61.func(event.composedPath) ? event.composedPath() : event.path; + var path = __is_60.func(event.composedPath) ? event.composedPath() : event.path; return [domUtils.getActualElement(path ? path[0] : event.target), domUtils.getActualElement(event.currentTarget)]; }, newCoords: function newCoords() { @@ -2149,32 +2300,34 @@ var pointerUtils = { return event; } }; -var ___default_61 = pointerUtils; -_$pointerUtils_61["default"] = ___default_61; +var ___default_60 = pointerUtils; +_$pointerUtils_60["default"] = ___default_60; -var _$events_52 = {}; +var _$events_51 = {}; "use strict"; -Object.defineProperty(_$events_52, "__esModule", { +function ___typeof_51(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_51 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_51 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_51(obj); } + +Object.defineProperty(_$events_51, "__esModule", { value: true }); -_$events_52["default"] = _$events_52.FakeEvent = void 0; +_$events_51["default"] = _$events_51.FakeEvent = void 0; -/* removed: var _$arr_47 = require("./arr"); */; +/* removed: var _$arr_46 = require("./arr.js"); */; -var __domUtils_52 = ___interopRequireWildcard_52(_$domUtils_51); +var __domUtils_51 = ___interopRequireWildcard_51(_$domUtils_50); -var __is_52 = ___interopRequireWildcard_52(_$is_57); +var __is_51 = ___interopRequireWildcard_51(_$is_56); -var ___pointerExtend_52 = ___interopRequireDefault_52(_$pointerExtend_60); +var ___pointerExtend_51 = ___interopRequireDefault_51(_$pointerExtend_59); -var _pointerUtils = ___interopRequireDefault_52(_$pointerUtils_61); +var _pointerUtils = ___interopRequireDefault_51(_$pointerUtils_60); -function ___interopRequireDefault_52(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_51(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function ___getRequireWildcardCache_52() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_52 = function _getRequireWildcardCache() { return cache; }; return cache; } +function ___getRequireWildcardCache_51() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_51 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_52(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_52(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_51(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_51(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_51(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -2190,6 +2343,21 @@ function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + var elements = []; var targets = []; var delegatedEvents = {}; @@ -2214,13 +2382,13 @@ function add(element, type, listener, optionalArg) { target.typeCount++; } - if (!(0, _$arr_47.contains)(target.events[type], listener)) { + if (!(0, _$arr_46.contains)(target.events[type], listener)) { element.addEventListener(type, listener, events.supportsOptions ? options : !!options.capture); target.events[type].push(listener); } } -function __remove_52(element, type, listener, optionalArg) { +function __remove_51(element, type, listener, optionalArg) { var options = getOptions(optionalArg); var elementIndex = elements.indexOf(element); var target = targets[elementIndex]; @@ -2232,7 +2400,7 @@ function __remove_52(element, type, listener, optionalArg) { if (type === 'all') { for (type in target.events) { if (target.events.hasOwnProperty(type)) { - __remove_52(element, type, 'all'); + __remove_51(element, type, 'all'); } } @@ -2244,7 +2412,7 @@ function __remove_52(element, type, listener, optionalArg) { if (listener === 'all') { for (var i = 0; i < len; i++) { - __remove_52(element, type, target.events[type][i], options); + __remove_51(element, type, target.events[type][i], options); } return; @@ -2343,8 +2511,8 @@ function removeDelegate(selector, context, type, listener, optionalArg) { delegated.contexts.splice(index, 1); delegated.listeners.splice(index, 1); // remove delegate function from context - __remove_52(context, type, delegateListener); - __remove_52(context, type, delegateUseCapture, true); // remove the arrays if they are empty + __remove_51(context, type, delegateListener); + __remove_51(context, type, delegateUseCapture, true); // remove the arrays if they are empty if (!delegated.selectors.length) { delegatedEvents[type] = null; @@ -2377,12 +2545,12 @@ function delegateListener(event, optionalArg) { var element = eventTarget; // climb up document tree looking for selector matches - while (__is_52.element(element)) { + while (__is_51.element(element)) { for (var i = 0; i < delegated.selectors.length; i++) { var selector = delegated.selectors[i]; var context = delegated.contexts[i]; - if (__domUtils_52.matchesSelector(element, selector) && __domUtils_52.nodeContains(context, eventTarget) && __domUtils_52.nodeContains(context, element)) { + if (__domUtils_51.matchesSelector(element, selector) && __domUtils_51.nodeContains(context, eventTarget) && __domUtils_51.nodeContains(context, element)) { var listeners = delegated.listeners[i]; fakeEvent.currentTarget = element; @@ -2404,7 +2572,7 @@ function delegateListener(event, optionalArg) { } } - element = __domUtils_52.parentNode(element); + element = __domUtils_51.parentNode(element); } } @@ -2413,7 +2581,7 @@ function delegateUseCapture(event) { } function getOptions(param) { - return __is_52.object(param) ? param : { + return __is_51.object(param) ? param : { capture: param }; } @@ -2424,9 +2592,12 @@ function () { function FakeEvent(originalEvent) { _classCallCheck(this, FakeEvent); - this.originalEvent = originalEvent; // duplicate the event so that currentTarget can be changed + this.originalEvent = originalEvent; + + _defineProperty(this, "currentTarget", void 0); // duplicate the event so that currentTarget can be changed - (0, ___pointerExtend_52["default"])(this, originalEvent); + + (0, ___pointerExtend_51["default"])(this, originalEvent); } _createClass(FakeEvent, [{ @@ -2449,10 +2620,10 @@ function () { return FakeEvent; }(); -_$events_52.FakeEvent = FakeEvent; +_$events_51.FakeEvent = FakeEvent; var events = { add: add, - remove: __remove_52, + remove: __remove_51, addDelegate: addDelegate, removeDelegate: removeDelegate, delegateListener: delegateListener, @@ -2476,49 +2647,52 @@ var events = { }); } }; -var ___default_52 = events; -_$events_52["default"] = ___default_52; +var ___default_51 = events; +_$events_51["default"] = ___default_51; -var _$extend_53 = {}; +var _$extend_52 = {}; "use strict"; -Object.defineProperty(_$extend_53, "__esModule", { +Object.defineProperty(_$extend_52, "__esModule", { value: true }); -_$extend_53["default"] = extend; +_$extend_52["default"] = extend; function extend(dest, source) { for (var prop in source) { dest[prop] = source[prop]; } - return dest; + var ret = dest; + return ret; } -var _$rect_63 = {}; +var _$rect_62 = {}; "use strict"; -Object.defineProperty(_$rect_63, "__esModule", { +function ___typeof_62(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_62 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_62 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_62(obj); } + +Object.defineProperty(_$rect_62, "__esModule", { value: true }); -_$rect_63.getStringOptionResult = getStringOptionResult; -_$rect_63.resolveRectLike = resolveRectLike; -_$rect_63.rectToXY = rectToXY; -_$rect_63.xywhToTlbr = xywhToTlbr; -_$rect_63.tlbrToXywh = tlbrToXywh; -_$rect_63["default"] = void 0; +_$rect_62.getStringOptionResult = getStringOptionResult; +_$rect_62.resolveRectLike = resolveRectLike; +_$rect_62.rectToXY = rectToXY; +_$rect_62.xywhToTlbr = xywhToTlbr; +_$rect_62.tlbrToXywh = tlbrToXywh; +_$rect_62["default"] = void 0; -/* removed: var _$domUtils_51 = require("./domUtils"); */; +/* removed: var _$domUtils_50 = require("./domUtils.js"); */; -var _extend = ___interopRequireDefault_63(_$extend_53); +var _extend = ___interopRequireDefault_62(_$extend_52); -var __is_63 = ___interopRequireWildcard_63(_$is_57); +var __is_62 = ___interopRequireWildcard_62(_$is_56); -function ___getRequireWildcardCache_63() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_63 = function _getRequireWildcardCache() { return cache; }; return cache; } +function ___getRequireWildcardCache_62() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_62 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_63(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_63(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_62(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_62(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_62(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function ___interopRequireDefault_63(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_62(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } @@ -2530,25 +2704,25 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr function getStringOptionResult(value, target, element) { if (value === 'parent') { - return (0, _$domUtils_51.parentNode)(element); + return (0, _$domUtils_50.parentNode)(element); } if (value === 'self') { return target.getRect(element); } - return (0, _$domUtils_51.closest)(element, value); + return (0, _$domUtils_50.closest)(element, value); } function resolveRectLike(value, target, element, functionArgs) { - if (__is_63.string(value)) { + if (__is_62.string(value)) { value = getStringOptionResult(value, target, element); - } else if (__is_63.func(value)) { + } else if (__is_62.func(value)) { value = value.apply(void 0, _toConsumableArray(functionArgs)); } - if (__is_63.element(value)) { - value = (0, _$domUtils_51.getElementRect)(value); + if (__is_62.element(value)) { + value = (0, _$domUtils_50.getElementRect)(value); } return value; @@ -2585,77 +2759,79 @@ function tlbrToXywh(rect) { return rect; } -var ___default_63 = { +var ___default_62 = { getStringOptionResult: getStringOptionResult, resolveRectLike: resolveRectLike, rectToXY: rectToXY, xywhToTlbr: xywhToTlbr, tlbrToXywh: tlbrToXywh }; -_$rect_63["default"] = ___default_63; +_$rect_62["default"] = ___default_62; -var _$getOriginXY_54 = {}; +var _$getOriginXY_53 = {}; "use strict"; -Object.defineProperty(_$getOriginXY_54, "__esModule", { +Object.defineProperty(_$getOriginXY_53, "__esModule", { value: true }); -_$getOriginXY_54["default"] = ___default_54; +_$getOriginXY_53["default"] = ___default_53; -/* removed: var _$rect_63 = require("./rect"); */; +/* removed: var _$rect_62 = require("./rect.js"); */; -function ___default_54(target, element, action) { +function ___default_53(target, element, action) { var actionOptions = target.options[action]; var actionOrigin = actionOptions && actionOptions.origin; var origin = actionOrigin || target.options.origin; - var originRect = (0, _$rect_63.resolveRectLike)(origin, target, element, [target && element]); - return (0, _$rect_63.rectToXY)(originRect) || { + var originRect = (0, _$rect_62.resolveRectLike)(origin, target, element, [target && element]); + return (0, _$rect_62.rectToXY)(originRect) || { x: 0, y: 0 }; } -var _$normalizeListeners_59 = {}; +var _$normalizeListeners_58 = {}; "use strict"; -Object.defineProperty(_$normalizeListeners_59, "__esModule", { +function ___typeof_58(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_58 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_58 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_58(obj); } + +Object.defineProperty(_$normalizeListeners_58, "__esModule", { value: true }); -_$normalizeListeners_59["default"] = normalize; +_$normalizeListeners_58["default"] = normalize; -var ___extend_59 = ___interopRequireDefault_59(_$extend_53); +var ___extend_58 = ___interopRequireDefault_58(_$extend_52); -var __is_59 = ___interopRequireWildcard_59(_$is_57); +var __is_58 = ___interopRequireWildcard_58(_$is_56); -function ___getRequireWildcardCache_59() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_59 = function _getRequireWildcardCache() { return cache; }; return cache; } +function ___getRequireWildcardCache_58() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_58 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_59(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_59(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_58(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_58(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_58(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function ___interopRequireDefault_59(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_58(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function normalize(type, listeners, result) { result = result || {}; - if (__is_59.string(type) && type.search(' ') !== -1) { + if (__is_58.string(type) && type.search(' ') !== -1) { type = split(type); } - if (__is_59.array(type)) { + if (__is_58.array(type)) { return type.reduce(function (acc, t) { - return (0, ___extend_59["default"])(acc, normalize(t, listeners, result)); + return (0, ___extend_58["default"])(acc, normalize(t, listeners, result)); }, result); } // ({ type: fn }) -> ('', { type: fn }) - if (__is_59.object(type)) { + if (__is_58.object(type)) { listeners = type; type = ''; } - if (__is_59.func(listeners)) { + if (__is_58.func(listeners)) { result[type] = result[type] || []; result[type].push(listeners); - } else if (__is_59.array(listeners)) { + } else if (__is_58.array(listeners)) { for (var _i = 0; _i < listeners.length; _i++) { var _ref; @@ -2663,7 +2839,7 @@ function normalize(type, listeners, result) { var l = _ref; normalize(type, l, result); } - } else if (__is_59.object(listeners)) { + } else if (__is_58.object(listeners)) { for (var prefix in listeners) { var combinedTypes = split(prefix).map(function (p) { return "".concat(type).concat(p); @@ -2679,20 +2855,20 @@ function split(type) { return type.trim().split(/ +/); } -var _$raf_62 = {}; +var _$raf_61 = {}; "use strict"; -Object.defineProperty(_$raf_62, "__esModule", { +Object.defineProperty(_$raf_61, "__esModule", { value: true }); -_$raf_62["default"] = void 0; +_$raf_61["default"] = void 0; var lastTime = 0; var _request; var _cancel; -function __init_62(window) { +function __init_61(window) { _request = window.requestAnimationFrame; _cancel = window.cancelAnimationFrame; @@ -2724,224 +2900,144 @@ function __init_62(window) { } } -var ___default_62 = { +var ___default_61 = { request: function request(callback) { return _request(callback); }, cancel: function cancel(token) { return _cancel(token); }, - init: __init_62 + init: __init_61 }; -_$raf_62["default"] = ___default_62; +_$raf_61["default"] = ___default_61; -var _$Signals_46 = {}; +var _$utils_55 = {}; "use strict"; -Object.defineProperty(_$Signals_46, "__esModule", { - value: true -}); -_$Signals_46["default"] = void 0; - -function ___classCallCheck_46(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 ___createClass_46(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_46(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_46(Constructor, staticProps); return Constructor; } - -var Signals = -/*#__PURE__*/ -function () { - function Signals() { - ___classCallCheck_46(this, Signals); - - this.listeners = {}; - } - - ___createClass_46(Signals, [{ - key: "on", - value: function on(name, listener) { - if (!this.listeners[name]) { - this.listeners[name] = [listener]; - return; - } - - this.listeners[name].push(listener); - } - }, { - key: "off", - value: function off(name, listener) { - if (!this.listeners[name]) { - return; - } - - var index = this.listeners[name].indexOf(listener); - - if (index !== -1) { - this.listeners[name].splice(index, 1); - } - } - }, { - key: "fire", - value: function fire(name, arg) { - var targetListeners = this.listeners[name]; - - if (!targetListeners) { - return; - } - - for (var _i = 0; _i < targetListeners.length; _i++) { - var _ref; - - _ref = targetListeners[_i]; - var listener = _ref; - - if (listener(arg, name) === false) { - return false; - } - } - } - }]); - - return Signals; -}(); - -var ___default_46 = Signals; -_$Signals_46["default"] = ___default_46; - -var _$utils_56 = {}; -"use strict"; +function ___typeof_55(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_55 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_55 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_55(obj); } -Object.defineProperty(_$utils_56, "__esModule", { +Object.defineProperty(_$utils_55, "__esModule", { value: true }); -_$utils_56.warnOnce = warnOnce; -_$utils_56._getQBezierValue = _getQBezierValue; -_$utils_56.getQuadraticCurvePoint = getQuadraticCurvePoint; -_$utils_56.easeOutQuad = easeOutQuad; -_$utils_56.copyAction = copyAction; -Object.defineProperty(_$utils_56, "win", { +_$utils_55.warnOnce = warnOnce; +_$utils_55._getQBezierValue = _getQBezierValue; +_$utils_55.getQuadraticCurvePoint = getQuadraticCurvePoint; +_$utils_55.easeOutQuad = easeOutQuad; +_$utils_55.copyAction = copyAction; +Object.defineProperty(_$utils_55, "win", { enumerable: true, get: function get() { - return ___window_56["default"]; + return ___window_55["default"]; } }); -Object.defineProperty(_$utils_56, "browser", { +Object.defineProperty(_$utils_55, "browser", { enumerable: true, get: function get() { - return ___browser_56["default"]; + return ___browser_55["default"]; } }); -Object.defineProperty(_$utils_56, "clone", { +Object.defineProperty(_$utils_55, "clone", { enumerable: true, get: function get() { return _clone["default"]; } }); -Object.defineProperty(_$utils_56, "events", { +Object.defineProperty(_$utils_55, "events", { enumerable: true, get: function get() { return _events["default"]; } }); -Object.defineProperty(_$utils_56, "extend", { +Object.defineProperty(_$utils_55, "extend", { enumerable: true, get: function get() { - return ___extend_56["default"]; + return ___extend_55["default"]; } }); -Object.defineProperty(_$utils_56, "getOriginXY", { +Object.defineProperty(_$utils_55, "getOriginXY", { enumerable: true, get: function get() { return _getOriginXY["default"]; } }); -Object.defineProperty(_$utils_56, "hypot", { +Object.defineProperty(_$utils_55, "hypot", { enumerable: true, get: function get() { - return ___hypot_56["default"]; + return ___hypot_55["default"]; } }); -Object.defineProperty(_$utils_56, "normalizeListeners", { +Object.defineProperty(_$utils_55, "normalizeListeners", { enumerable: true, get: function get() { return _normalizeListeners["default"]; } }); -Object.defineProperty(_$utils_56, "pointer", { +Object.defineProperty(_$utils_55, "pointer", { enumerable: true, get: function get() { - return ___pointerUtils_56["default"]; + return ___pointerUtils_55["default"]; } }); -Object.defineProperty(_$utils_56, "raf", { +Object.defineProperty(_$utils_55, "raf", { enumerable: true, get: function get() { return _raf["default"]; } }); -Object.defineProperty(_$utils_56, "rect", { +Object.defineProperty(_$utils_55, "rect", { enumerable: true, get: function get() { - return ___rect_56["default"]; + return ___rect_55["default"]; } }); -Object.defineProperty(_$utils_56, "Signals", { - enumerable: true, - get: function get() { - return _Signals["default"]; - } -}); -_$utils_56.is = _$utils_56.dom = _$utils_56.arr = void 0; +_$utils_55.is = _$utils_55.dom = _$utils_55.arr = void 0; -var __arr_56 = ___interopRequireWildcard_56(_$arr_47); +var __arr_55 = ___interopRequireWildcard_55(_$arr_46); -_$utils_56.arr = __arr_56; +_$utils_55.arr = __arr_55; -var dom = ___interopRequireWildcard_56(_$domUtils_51); +var dom = ___interopRequireWildcard_55(_$domUtils_50); -_$utils_56.dom = dom; +_$utils_55.dom = dom; -var __is_56 = ___interopRequireWildcard_56(_$is_57); +var __is_55 = ___interopRequireWildcard_55(_$is_56); -_$utils_56.is = __is_56; +_$utils_55.is = __is_55; -var ___window_56 = ___interopRequireDefault_56(_$window_66); +var ___window_55 = ___interopRequireDefault_55(_$window_65); -var ___browser_56 = ___interopRequireDefault_56(_$browser_48); +var ___browser_55 = ___interopRequireDefault_55(_$browser_47); -var _clone = ___interopRequireDefault_56(_$clone_49); +var _clone = ___interopRequireDefault_55(_$clone_48); -var _events = ___interopRequireDefault_56(_$events_52); +var _events = ___interopRequireDefault_55(_$events_51); -var ___extend_56 = ___interopRequireDefault_56(_$extend_53); +var ___extend_55 = ___interopRequireDefault_55(_$extend_52); -var _getOriginXY = ___interopRequireDefault_56(_$getOriginXY_54); +var _getOriginXY = ___interopRequireDefault_55(_$getOriginXY_53); -var ___hypot_56 = ___interopRequireDefault_56(_$hypot_55); +var ___hypot_55 = ___interopRequireDefault_55(_$hypot_54); -var _normalizeListeners = ___interopRequireDefault_56(_$normalizeListeners_59); +var _normalizeListeners = ___interopRequireDefault_55(_$normalizeListeners_58); -var ___pointerUtils_56 = ___interopRequireDefault_56(_$pointerUtils_61); +var ___pointerUtils_55 = ___interopRequireDefault_55(_$pointerUtils_60); -var _raf = ___interopRequireDefault_56(_$raf_62); +var _raf = ___interopRequireDefault_55(_$raf_61); -var ___rect_56 = ___interopRequireDefault_56(_$rect_63); +var ___rect_55 = ___interopRequireDefault_55(_$rect_62); -var _Signals = ___interopRequireDefault_56(_$Signals_46); +function ___interopRequireDefault_55(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function ___interopRequireDefault_56(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function ___getRequireWildcardCache_56() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_56 = function _getRequireWildcardCache() { return cache; }; return cache; } +function ___getRequireWildcardCache_55() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_55 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_56(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_56(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_55(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_55(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_55(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function warnOnce(method, message) { var warned = false; // eslint-disable-next-line no-shadow return function () { if (!warned) { - ___window_56["default"].window.console.warn(message); + ___window_55["default"].window.console.warn(message); warned = true; } @@ -2984,6 +3080,8 @@ Object.defineProperty(_$defaultOptions_20, "__esModule", { }); _$defaultOptions_20["default"] = _$defaultOptions_20.defaults = void 0; // tslint:disable no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-interface +// export interface Options extends BaseDefaults, PerActionDefaults {} var defaults = { base: { preventDefault: 'auto', @@ -3005,22 +3103,24 @@ _$defaultOptions_20["default"] = ___default_20; var _$Eventable_14 = {}; "use strict"; +function ___typeof_14(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_14 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_14 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_14(obj); } + Object.defineProperty(_$Eventable_14, "__esModule", { value: true }); _$Eventable_14["default"] = void 0; -var __arr_14 = ___interopRequireWildcard_14(_$arr_47); +var __arr_14 = ___interopRequireWildcard_14(_$arr_46); -var ___extend_14 = ___interopRequireDefault_14(_$extend_53); +var ___extend_14 = ___interopRequireDefault_14(_$extend_52); -var ___normalizeListeners_14 = ___interopRequireDefault_14(_$normalizeListeners_59); +var ___normalizeListeners_14 = ___interopRequireDefault_14(_$normalizeListeners_58); function ___interopRequireDefault_14(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ___getRequireWildcardCache_14() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_14 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_14(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_14(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_14(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_14(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_14(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___classCallCheck_14(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3028,6 +3128,21 @@ function ___defineProperties_14(target, props) { for (var i = 0; i < props.lengt function ___createClass_14(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_14(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_14(Constructor, staticProps); return Constructor; } +function ___defineProperty_14(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + function fireUntilImmediateStopped(event, listeners) { for (var _i = 0; _i < listeners.length; _i++) { var _ref; @@ -3049,9 +3164,16 @@ function () { function Eventable(options) { ___classCallCheck_14(this, Eventable); - this.types = {}; - this.propagationStopped = false; - this.immediatePropagationStopped = false; + ___defineProperty_14(this, "options", void 0); + + ___defineProperty_14(this, "types", {}); + + ___defineProperty_14(this, "propagationStopped", false); + + ___defineProperty_14(this, "immediatePropagationStopped", false); + + ___defineProperty_14(this, "global", void 0); + this.options = (0, ___extend_14["default"])({}, options || {}); } @@ -3121,28 +3243,30 @@ _$Eventable_14["default"] = ___default_14; var _$Interactable_16 = {}; "use strict"; +function ___typeof_16(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_16 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_16 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_16(obj); } + Object.defineProperty(_$Interactable_16, "__esModule", { value: true }); _$Interactable_16["default"] = _$Interactable_16.Interactable = void 0; -var __arr_16 = ___interopRequireWildcard_16(_$arr_47); +var __arr_16 = ___interopRequireWildcard_16(_$arr_46); -var ___browser_16 = ___interopRequireDefault_16(_$browser_48); +var ___browser_16 = ___interopRequireDefault_16(_$browser_47); -var ___clone_16 = ___interopRequireDefault_16(_$clone_49); +var ___clone_16 = ___interopRequireDefault_16(_$clone_48); -/* removed: var _$domUtils_51 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_50 = require("../utils/domUtils.js"); */; -var ___events_16 = ___interopRequireDefault_16(_$events_52); +var ___events_16 = ___interopRequireDefault_16(_$events_51); -var ___extend_16 = ___interopRequireDefault_16(_$extend_53); +var ___extend_16 = ___interopRequireDefault_16(_$extend_52); -var __is_16 = ___interopRequireWildcard_16(_$is_57); +var __is_16 = ___interopRequireWildcard_16(_$is_56); -var ___normalizeListeners_16 = ___interopRequireDefault_16(_$normalizeListeners_59); +var ___normalizeListeners_16 = ___interopRequireDefault_16(_$normalizeListeners_58); -/* removed: var _$window_66 = require("@interactjs/utils/window"); */; +/* removed: var _$window_65 = require("../utils/window.js"); */; var _Eventable = ___interopRequireDefault_16(_$Eventable_14); @@ -3150,7 +3274,7 @@ function ___interopRequireDefault_16(obj) { return obj && obj.__esModule ? obj : function ___getRequireWildcardCache_16() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_16 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_16(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_16(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_16(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_16(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_16(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___classCallCheck_16(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3158,19 +3282,59 @@ function ___defineProperties_16(target, props) { for (var i = 0; i < props.lengt function ___createClass_16(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_16(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_16(Constructor, staticProps); return Constructor; } +function ___defineProperty_16(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + /** */ var Interactable = /*#__PURE__*/ function () { - /** */ + ___createClass_16(Interactable, [{ + key: "_defaults", + get: function get() { + return { + base: {}, + perAction: {}, + actions: {} + }; + } + /** */ + + }]); + function Interactable(target, options, defaultContext) { ___classCallCheck_16(this, Interactable); - this.events = new _Eventable["default"](); + ___defineProperty_16(this, "options", void 0); + + ___defineProperty_16(this, "_actions", void 0); + + ___defineProperty_16(this, "target", void 0); + + ___defineProperty_16(this, "events", new _Eventable["default"]()); + + ___defineProperty_16(this, "_context", void 0); + + ___defineProperty_16(this, "_win", void 0); + + ___defineProperty_16(this, "_doc", void 0); + this._actions = options.actions; this.target = target; this._context = options.context || defaultContext; - this._win = (0, _$window_66.getWindow)((0, _$domUtils_51.trySelector)(target) ? this._context : target); + this._win = (0, _$window_65.getWindow)((0, _$domUtils_50.trySelector)(target) ? this._context : target); this._doc = this._win.document; this.set(options); } @@ -3258,7 +3422,7 @@ function () { element = element || this._context.querySelector(this.target); } - return (0, _$domUtils_51.getElementRect)(element); + return (0, _$domUtils_50.getElementRect)(element); } /** * Returns or sets the function used to calculate the interactable's @@ -3287,7 +3451,7 @@ function () { }, { key: "_backCompatOption", value: function _backCompatOption(optionName, newValue) { - if ((0, _$domUtils_51.trySelector)(newValue) || __is_16.object(newValue)) { + if ((0, _$domUtils_50.trySelector)(newValue) || __is_16.object(newValue)) { this.options[optionName] = newValue; for (var _i = 0; _i < this._actions.names.length; _i++) { @@ -3353,7 +3517,7 @@ function () { }, { key: "inContext", value: function inContext(element) { - return this._context === element.ownerDocument || (0, _$domUtils_51.nodeContains)(this._context, element); + return this._context === element.ownerDocument || (0, _$domUtils_50.nodeContains)(this._context, element); } }, { key: "testIgnoreAllow", @@ -3372,9 +3536,9 @@ function () { } if (__is_16.string(allowFrom)) { - return (0, _$domUtils_51.matchesUpTo)(element, allowFrom, targetNode); + return (0, _$domUtils_50.matchesUpTo)(element, allowFrom, targetNode); } else if (__is_16.element(allowFrom)) { - return (0, _$domUtils_51.nodeContains)(allowFrom, element); + return (0, _$domUtils_50.nodeContains)(allowFrom, element); } return false; @@ -3387,9 +3551,9 @@ function () { } if (__is_16.string(ignoreFrom)) { - return (0, _$domUtils_51.matchesUpTo)(element, ignoreFrom, targetNode); + return (0, _$domUtils_50.matchesUpTo)(element, ignoreFrom, targetNode); } else if (__is_16.element(ignoreFrom)) { - return (0, _$domUtils_51.nodeContains)(ignoreFrom, element); + return (0, _$domUtils_50.nodeContains)(ignoreFrom, element); } return false; @@ -3546,15 +3710,6 @@ function () { ___events_16["default"].remove(this.target, 'all'); } } - }, { - key: "_defaults", - get: function get() { - return { - base: {}, - perAction: {}, - actions: {} - }; - } }]); return Interactable; @@ -3567,26 +3722,26 @@ _$Interactable_16["default"] = ___default_16; var _$InteractableSet_17 = {}; "use strict"; +function ___typeof_17(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_17 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_17 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_17(obj); } + Object.defineProperty(_$InteractableSet_17, "__esModule", { value: true }); _$InteractableSet_17["default"] = void 0; -var __arr_17 = ___interopRequireWildcard_17(_$arr_47); +var __arr_17 = ___interopRequireWildcard_17(_$arr_46); -var __domUtils_17 = ___interopRequireWildcard_17(_$domUtils_51); +var __domUtils_17 = ___interopRequireWildcard_17(_$domUtils_50); -var ___extend_17 = ___interopRequireDefault_17(_$extend_53); +var ___extend_17 = ___interopRequireDefault_17(_$extend_52); -var __is_17 = ___interopRequireWildcard_17(_$is_57); - -var ___Signals_17 = ___interopRequireDefault_17(_$Signals_46); +var __is_17 = ___interopRequireWildcard_17(_$is_56); function ___interopRequireDefault_17(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ___getRequireWildcardCache_17() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_17 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_17(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_17(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_17(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_17(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_17(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___classCallCheck_17(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -3594,35 +3749,54 @@ function ___defineProperties_17(target, props) { for (var i = 0; i < props.lengt function ___createClass_17(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_17(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_17(Constructor, staticProps); return Constructor; } +function ___defineProperty_17(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + var InteractableSet = /*#__PURE__*/ function () { + // all set interactables function InteractableSet(scope) { var _this = this; ___classCallCheck_17(this, InteractableSet); this.scope = scope; - this.signals = new ___Signals_17["default"](); // all set interactables - - this.list = []; - this.selectorMap = {}; - this.signals.on('unset', function (_ref) { - var interactable = _ref.interactable; - var target = interactable.target, - context = interactable._context; - var targetMappings = __is_17.string(target) ? _this.selectorMap[target] : target[_this.scope.id]; - var targetIndex = targetMappings.findIndex(function (m) { - return m.context === context; - }); - if (targetMappings[targetIndex]) { - // Destroying mappingInfo's context and interactable - targetMappings[targetIndex].context = null; - targetMappings[targetIndex].interactable = null; - } + ___defineProperty_17(this, "list", []); - targetMappings.splice(targetIndex, 1); + ___defineProperty_17(this, "selectorMap", {}); + + scope.addListeners({ + 'interactable:unset': function interactableUnset(_ref) { + var interactable = _ref.interactable; + var target = interactable.target, + context = interactable._context; + var targetMappings = __is_17.string(target) ? _this.selectorMap[target] : target[_this.scope.id]; + var targetIndex = targetMappings.findIndex(function (m) { + return m.context === context; + }); + + if (targetMappings[targetIndex]) { + // Destroying mappingInfo's context and interactable + targetMappings[targetIndex].context = null; + targetMappings[targetIndex].interactable = null; + } + + targetMappings.splice(targetIndex, 1); + } }); } @@ -3657,7 +3831,7 @@ function () { target[this.scope.id].push(mappingInfo); } - this.signals.fire('new', { + this.scope.fire('interactable:new', { target: target, options: options, interactable: interactable, @@ -3724,6 +3898,21 @@ function ___defineProperties_13(target, props) { for (var i = 0; i < props.lengt function ___createClass_13(Constructor, protoProps, staticProps) { if (protoProps) ___defineProperties_13(Constructor.prototype, protoProps); if (staticProps) ___defineProperties_13(Constructor, staticProps); return Constructor; } +function ___defineProperty_13(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + var EventPhase; _$BaseEvent_13.EventPhase = EventPhase; @@ -3737,11 +3926,32 @@ _$BaseEvent_13.EventPhase = EventPhase; var BaseEvent = /*#__PURE__*/ function () { + ___createClass_13(BaseEvent, [{ + key: "interaction", + get: function get() { + return this._interaction._proxy; + } + }]); + function BaseEvent(interaction) { ___classCallCheck_13(this, BaseEvent); - this.immediatePropagationStopped = false; - this.propagationStopped = false; + ___defineProperty_13(this, "type", void 0); + + ___defineProperty_13(this, "target", void 0); + + ___defineProperty_13(this, "currentTarget", void 0); + + ___defineProperty_13(this, "interactable", void 0); + + ___defineProperty_13(this, "_interaction", void 0); + + ___defineProperty_13(this, "timeStamp", void 0); + + ___defineProperty_13(this, "immediatePropagationStopped", false); + + ___defineProperty_13(this, "propagationStopped", false); + this._interaction = interaction; } @@ -3766,11 +3976,6 @@ function () { value: function stopImmediatePropagation() { this.immediatePropagationStopped = this.propagationStopped = true; } - }, { - key: "interaction", - get: function get() { - return this._interaction._proxy; - } }]); return BaseEvent; @@ -3788,11 +3993,11 @@ Object.defineProperty(_$InteractEvent_15, "__esModule", { }); _$InteractEvent_15["default"] = _$InteractEvent_15.InteractEvent = _$InteractEvent_15.EventPhase = void 0; -var ___extend_15 = ___interopRequireDefault_15(_$extend_53); +var ___extend_15 = ___interopRequireDefault_15(_$extend_52); -var ___getOriginXY_15 = ___interopRequireDefault_15(_$getOriginXY_54); +var ___getOriginXY_15 = ___interopRequireDefault_15(_$getOriginXY_53); -var ___hypot_15 = ___interopRequireDefault_15(_$hypot_55); +var ___hypot_15 = ___interopRequireDefault_15(_$hypot_54); var _BaseEvent2 = ___interopRequireDefault_15(_$BaseEvent_13); @@ -3818,6 +4023,21 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function ___defineProperty_15(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + var __EventPhase_15; _$InteractEvent_15.EventPhase = __EventPhase_15; @@ -3833,6 +4053,9 @@ var InteractEvent = function (_BaseEvent) { _inherits(InteractEvent, _BaseEvent); + // drag + // resize + /** */ function InteractEvent(interaction, event, actionName, phase, element, related, preEnd, type) { var _this; @@ -3840,6 +4063,67 @@ function (_BaseEvent) { ___classCallCheck_15(this, InteractEvent); _this = _possibleConstructorReturn(this, _getPrototypeOf(InteractEvent).call(this, interaction)); + + ___defineProperty_15(_assertThisInitialized(_this), "target", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "currentTarget", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "relatedTarget", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "screenX", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "screenY", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "button", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "buttons", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "ctrlKey", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "shiftKey", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "altKey", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "metaKey", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "page", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "client", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "delta", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "rect", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "x0", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "y0", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "t0", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "dt", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "duration", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "clientX0", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "clientY0", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "velocity", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "speed", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "swipe", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "timeStamp", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "dragEnter", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "dragLeave", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "axes", void 0); + + ___defineProperty_15(_assertThisInitialized(_this), "preEnd", void 0); + element = element || interaction.element; var target = interaction.interactable; var deltaSource = (target && target.options || _defaultOptions["default"]).deltaSource; @@ -4058,16 +4342,18 @@ _$PointerInfo_19["default"] = ___default_19; var _$interactionFinder_22 = {}; "use strict"; +function ___typeof_22(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_22 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_22 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_22(obj); } + Object.defineProperty(_$interactionFinder_22, "__esModule", { value: true }); _$interactionFinder_22["default"] = void 0; -var __dom_22 = ___interopRequireWildcard_22(_$domUtils_51); +var __dom_22 = ___interopRequireWildcard_22(_$domUtils_50); function ___getRequireWildcardCache_22() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_22 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_22(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_22(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_22(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_22(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_22(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var finder = { methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'], @@ -4237,6 +4523,8 @@ _$interactionFinder_22["default"] = ___default_22; var _$drag_1 = {}; "use strict"; +function ___typeof_1(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_1 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_1 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_1(obj); } + Object.defineProperty(_$drag_1, "__esModule", { value: true }); @@ -4244,25 +4532,26 @@ _$drag_1["default"] = void 0; var ___scope_1 = _$scope_24({}); -var __arr_1 = ___interopRequireWildcard_1(_$arr_47); +var __arr_1 = ___interopRequireWildcard_1(_$arr_46); -var __is_1 = ___interopRequireWildcard_1(_$is_57); +var __is_1 = ___interopRequireWildcard_1(_$is_56); function ___getRequireWildcardCache_1() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_1 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_1(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_1(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_1(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_1(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_1(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } ___scope_1.ActionName.Drag = 'drag'; function __install_1(scope) { var actions = scope.actions, Interactable = scope.Interactable, - interactions = scope.interactions, defaults = scope.defaults; - interactions.signals.on('before-action-move', beforeMove); - interactions.signals.on('action-resume', beforeMove); // dragmove - - interactions.signals.on('action-move', move); + scope.addListeners({ + 'interactions:before-action-move': beforeMove, + 'interactions:action-resume': beforeMove, + // dragmove + 'interactions:action-move': move + }); Interactable.prototype.draggable = drag.draggable; actions[___scope_1.ActionName.Drag] = drag; actions.names.push(___scope_1.ActionName.Drag); @@ -4410,11 +4699,11 @@ _$DropEvent_2["default"] = void 0; var ___BaseEvent2_2 = ___interopRequireDefault_2(_$BaseEvent_13); -var __arr_2 = ___interopRequireWildcard_2(_$arr_47); +var __arr_2 = ___interopRequireWildcard_2(_$arr_46); function ___getRequireWildcardCache_2() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_2 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_2(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_2(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_2(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_2(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_2(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___interopRequireDefault_2(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -4436,14 +4725,29 @@ function ___createClass_2(Constructor, protoProps, staticProps) { if (protoProps function ___possibleConstructorReturn_2(self, call) { if (call && (___typeof_2(call) === "object" || typeof call === "function")) { return call; } return ___assertThisInitialized_2(self); } -function ___assertThisInitialized_2(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - function ___getPrototypeOf_2(o) { ___getPrototypeOf_2 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ___getPrototypeOf_2(o); } +function ___assertThisInitialized_2(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + function ___inherits_2(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ___setPrototypeOf_2(subClass, superClass); } function ___setPrototypeOf_2(o, p) { ___setPrototypeOf_2 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ___setPrototypeOf_2(o, p); } +function ___defineProperty_2(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + var DropEvent = /*#__PURE__*/ function (_BaseEvent) { @@ -4458,8 +4762,22 @@ function (_BaseEvent) { ___classCallCheck_2(this, DropEvent); _this = ___possibleConstructorReturn_2(this, ___getPrototypeOf_2(DropEvent).call(this, dragEvent._interaction)); - _this.propagationStopped = false; - _this.immediatePropagationStopped = false; + + ___defineProperty_2(___assertThisInitialized_2(_this), "target", void 0); + + ___defineProperty_2(___assertThisInitialized_2(_this), "dropzone", void 0); + + ___defineProperty_2(___assertThisInitialized_2(_this), "dragEvent", void 0); + + ___defineProperty_2(___assertThisInitialized_2(_this), "relatedTarget", void 0); + + ___defineProperty_2(___assertThisInitialized_2(_this), "draggable", void 0); + + ___defineProperty_2(___assertThisInitialized_2(_this), "timeStamp", void 0); + + ___defineProperty_2(___assertThisInitialized_2(_this), "propagationStopped", false); + + ___defineProperty_2(___assertThisInitialized_2(_this), "immediatePropagationStopped", false); var _ref = type === 'dragleave' ? dropState.prev : dropState.cur, element = _ref.element, @@ -4541,12 +4859,14 @@ _$DropEvent_2["default"] = ___default_2; var _$drop_3 = {}; "use strict"; +function ___typeof_3(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_3 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_3 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_3(obj); } + Object.defineProperty(_$drop_3, "__esModule", { value: true }); _$drop_3["default"] = void 0; -var __utils_3 = ___interopRequireWildcard_3(_$utils_56); +var __utils_3 = ___interopRequireWildcard_3(_$utils_55); var _drag = ___interopRequireDefault_3(_$drag_1); @@ -4556,101 +4876,14 @@ function ___interopRequireDefault_3(obj) { return obj && obj.__esModule ? obj : function ___getRequireWildcardCache_3() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_3 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_3(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_3(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_3(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_3(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function __install_3(scope) { var actions = scope.actions, interact = scope.interact, Interactable = scope.Interactable, - interactions = scope.interactions, defaults = scope.defaults; scope.usePlugin(_drag["default"]); - interactions.signals.on('before-action-start', function (_ref) { - var interaction = _ref.interaction; - - if (interaction.prepared.name !== 'drag') { - return; - } - - interaction.dropState = { - cur: { - dropzone: null, - element: null - }, - prev: { - dropzone: null, - element: null - }, - rejected: null, - events: null, - activeDrops: null - }; - }); - interactions.signals.on('after-action-start', function (_ref2) { - var interaction = _ref2.interaction, - event = _ref2.event, - dragEvent = _ref2.iEvent; - - if (interaction.prepared.name !== 'drag') { - return; - } - - var dropState = interaction.dropState; // reset active dropzones - - dropState.activeDrops = null; - dropState.events = null; - dropState.activeDrops = getActiveDrops(scope, interaction.element); - dropState.events = getDropEvents(interaction, event, dragEvent); - - if (dropState.events.activate) { - fireActivationEvents(dropState.activeDrops, dropState.events.activate); - } - }); // FIXME proper signal types - - interactions.signals.on('action-move', function (arg) { - return onEventCreated(arg, scope); - }); - interactions.signals.on('action-end', function (arg) { - return onEventCreated(arg, scope); - }); - interactions.signals.on('after-action-move', function (_ref3) { - var interaction = _ref3.interaction; - - if (interaction.prepared.name !== 'drag') { - return; - } - - fireDropEvents(interaction, interaction.dropState.events); - interaction.dropState.events = {}; - }); - interactions.signals.on('after-action-end', function (_ref4) { - var interaction = _ref4.interaction; - - if (interaction.prepared.name !== 'drag') { - return; - } - - fireDropEvents(interaction, interaction.dropState.events); - }); - interactions.signals.on('stop', function (_ref5) { - var interaction = _ref5.interaction; - - if (interaction.prepared.name !== 'drag') { - return; - } - - var dropState = interaction.dropState; - - if (dropState) { - dropState.activeDrops = null; - dropState.events = null; - dropState.cur.dropzone = null; - dropState.cur.element = null; - dropState.prev.dropzone = null; - dropState.prev.element = null; - dropState.rejected = false; - } - }); /** * * ```js @@ -4743,15 +4976,15 @@ function __install_3(scope) { defaults.actions.drop = drop.defaults; } -function collectDrops(_ref6, draggableElement) { - var interactables = _ref6.interactables; +function collectDrops(_ref, draggableElement) { + var interactables = _ref.interactables; var drops = []; // collect all dropzones and their elements which qualify for a drop for (var _i = 0; _i < interactables.list.length; _i++) { - var _ref7; + var _ref2; - _ref7 = interactables.list[_i]; - var dropzone = _ref7; + _ref2 = interactables.list[_i]; + var dropzone = _ref2; if (!dropzone.options.drop.enabled) { continue; @@ -4770,10 +5003,10 @@ function collectDrops(_ref6, draggableElement) { var dropElements = __utils_3.is.string(dropzone.target) ? dropzone._context.querySelectorAll(dropzone.target) : __utils_3.is.array(dropzone.target) ? dropzone.target : [dropzone.target]; for (var _i2 = 0; _i2 < dropElements.length; _i2++) { - var _ref8; + var _ref3; - _ref8 = dropElements[_i2]; - var dropzoneElement = _ref8; + _ref3 = dropElements[_i2]; + var dropzoneElement = _ref3; if (dropzoneElement !== draggableElement) { drops.push({ @@ -4790,12 +5023,12 @@ function collectDrops(_ref6, draggableElement) { function fireActivationEvents(activeDrops, event) { // loop through all active dropzones and trigger event for (var _i3 = 0; _i3 < activeDrops.length; _i3++) { - var _ref9; + var _ref4; - _ref9 = activeDrops[_i3]; - var _ref10 = _ref9, - dropzone = _ref10.dropzone, - element = _ref10.element; + _ref4 = activeDrops[_i3]; + var _ref5 = _ref4, + dropzone = _ref5.dropzone, + element = _ref5.element; event.dropzone = dropzone; // set current element as event target event.target = element; @@ -4812,30 +5045,30 @@ function getActiveDrops(scope, dragElement) { var activeDrops = collectDrops(scope, dragElement); for (var _i4 = 0; _i4 < activeDrops.length; _i4++) { - var _ref11; + var _ref6; - _ref11 = activeDrops[_i4]; - var activeDrop = _ref11; + _ref6 = activeDrops[_i4]; + var activeDrop = _ref6; activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element); } return activeDrops; } -function getDrop(_ref12, dragEvent, pointerEvent) { - var dropState = _ref12.dropState, - draggable = _ref12.interactable, - dragElement = _ref12.element; +function getDrop(_ref7, dragEvent, pointerEvent) { + var dropState = _ref7.dropState, + draggable = _ref7.interactable, + dragElement = _ref7.element; var validDrops = []; // collect all dropzones and their elements which qualify for a drop for (var _i5 = 0; _i5 < dropState.activeDrops.length; _i5++) { - var _ref13; + var _ref8; - _ref13 = dropState.activeDrops[_i5]; - var _ref14 = _ref13, - dropzone = _ref14.dropzone, - dropzoneElement = _ref14.element, - rect = _ref14.rect; + _ref8 = dropState.activeDrops[_i5]; + var _ref9 = _ref8, + dropzone = _ref9.dropzone, + dropzoneElement = _ref9.element, + rect = _ref9.rect; validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect) ? dropzoneElement : null); } // get the most appropriate dropzone based on DOM depth and order @@ -4932,10 +5165,10 @@ function fireDropEvents(interaction, events) { dropState.prev.element = cur.element; } -function onEventCreated(_ref15, scope) { - var interaction = _ref15.interaction, - iEvent = _ref15.iEvent, - event = _ref15.event; +function onEventCreated(_ref10, scope) { + var interaction = _ref10.interaction, + iEvent = _ref10.iEvent, + event = _ref10.event; if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return; @@ -5066,6 +5299,90 @@ function dropCheckMethod(interactable, dragEvent, event, draggable, draggableEle var drop = { id: 'actions/drop', install: __install_3, + listeners: { + 'interactions:before-action-start': function interactionsBeforeActionStart(_ref11) { + var interaction = _ref11.interaction; + + if (interaction.prepared.name !== 'drag') { + return; + } + + interaction.dropState = { + cur: { + dropzone: null, + element: null + }, + prev: { + dropzone: null, + element: null + }, + rejected: null, + events: null, + activeDrops: null + }; + }, + 'interactions:after-action-start': function interactionsAfterActionStart(_ref12, scope) { + var interaction = _ref12.interaction, + event = _ref12.event, + dragEvent = _ref12.iEvent; + + if (interaction.prepared.name !== 'drag') { + return; + } + + var dropState = interaction.dropState; // reset active dropzones + + dropState.activeDrops = null; + dropState.events = null; + dropState.activeDrops = getActiveDrops(scope, interaction.element); + dropState.events = getDropEvents(interaction, event, dragEvent); + + if (dropState.events.activate) { + fireActivationEvents(dropState.activeDrops, dropState.events.activate); + } + }, + // FIXME proper signal types + 'interactions:action-move': onEventCreated, + 'interactions:action-end': onEventCreated, + 'interactions:after-action-move': function fireDropAfterMove(_ref13) { + var interaction = _ref13.interaction; + + if (interaction.prepared.name !== 'drag') { + return; + } + + fireDropEvents(interaction, interaction.dropState.events); + interaction.dropState.events = {}; + }, + 'interactions:after-action-end': function interactionsAfterActionEnd(_ref14) { + var interaction = _ref14.interaction; + + if (interaction.prepared.name !== 'drag') { + return; + } + + fireDropEvents(interaction, interaction.dropState.events); + }, + 'interactions:stop': function interactionsStop(_ref15) { + var interaction = _ref15.interaction; + + if (interaction.prepared.name !== 'drag') { + return; + } + + var dropState = interaction.dropState; + + if (dropState) { + dropState.activeDrops = null; + dropState.events = null; + dropState.cur.dropzone = null; + dropState.cur.element = null; + dropState.prev.dropzone = null; + dropState.prev.element = null; + dropState.rejected = false; + } + } + }, getActiveDrops: getActiveDrops, getDrop: getDrop, getDropEvents: getDropEvents, @@ -5082,6 +5399,8 @@ _$drop_3["default"] = ___default_3; var _$gesture_4 = {}; "use strict"; +function ___typeof_4(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_4 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_4 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_4(obj); } + Object.defineProperty(_$gesture_4, "__esModule", { value: true }); @@ -5091,11 +5410,11 @@ var ___InteractEvent_4 = ___interopRequireDefault_4(_$InteractEvent_15); var ___scope_4 = _$scope_24({}); -var __utils_4 = ___interopRequireWildcard_4(_$utils_56); +var __utils_4 = ___interopRequireWildcard_4(_$utils_55); function ___getRequireWildcardCache_4() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_4 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_4(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_4(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_4(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_4(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_4(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___interopRequireDefault_4(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -5104,7 +5423,6 @@ ___scope_4.ActionName.Gesture = 'gesture'; function __install_4(scope) { var actions = scope.actions, Interactable = scope.Interactable, - interactions = scope.interactions, defaults = scope.defaults; /** * ```js @@ -5146,19 +5464,6 @@ function __install_4(scope) { return this.options.gesture; }; - interactions.signals.on('action-start', updateGestureProps); - interactions.signals.on('action-move', updateGestureProps); - interactions.signals.on('action-end', updateGestureProps); - interactions.signals.on('new', function (_ref) { - var interaction = _ref.interaction; - interaction.gesture = { - angle: 0, - distance: 0, - scale: 1, - startAngle: 0, - startDistance: 0 - }; - }); actions[___scope_4.ActionName.Gesture] = gesture; actions.names.push(___scope_4.ActionName.Gesture); __utils_4.arr.merge(actions.eventTypes, ['gesturestart', 'gesturemove', 'gestureend']); @@ -5169,6 +5474,21 @@ function __install_4(scope) { var gesture = { id: 'actions/gesture', install: __install_4, + listeners: { + 'interactions:action-start': updateGestureProps, + 'interactions:action-move': updateGestureProps, + 'interactions:action-end': updateGestureProps, + 'interactions:new': function interactionsNew(_ref) { + var interaction = _ref.interaction; + interaction.gesture = { + angle: 0, + distance: 0, + scale: 1, + startAngle: 0, + startDistance: 0 + }; + } + }, defaults: {}, checker: function checker(_pointer, _event, _interactable, _element, interaction) { if (interaction.pointers.length >= 2) { @@ -5242,6 +5562,8 @@ _$gesture_4["default"] = ___default_4; var _$resize_6 = {}; "use strict"; +function ___typeof_6(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_6 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_6 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_6(obj); } + Object.defineProperty(_$resize_6, "__esModule", { value: true }); @@ -5249,19 +5571,19 @@ _$resize_6["default"] = void 0; var ___scope_6 = _$scope_24({}); -var __arr_6 = ___interopRequireWildcard_6(_$arr_47); +var __arr_6 = ___interopRequireWildcard_6(_$arr_46); -var __dom_6 = ___interopRequireWildcard_6(_$domUtils_51); +var __dom_6 = ___interopRequireWildcard_6(_$domUtils_50); -var ___extend_6 = ___interopRequireDefault_6(_$extend_53); +var ___extend_6 = ___interopRequireDefault_6(_$extend_52); -var __is_6 = ___interopRequireWildcard_6(_$is_57); +var __is_6 = ___interopRequireWildcard_6(_$is_56); function ___interopRequireDefault_6(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ___getRequireWildcardCache_6() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_6 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_6(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_6(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_6(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_6(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_6(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } ___scope_6.ActionName.Resize = 'resize'; @@ -5269,17 +5591,8 @@ function __install_6(scope) { var actions = scope.actions, browser = scope.browser, Interactable = scope.Interactable, - interactions = scope.interactions, defaults = scope.defaults; // Less Precision with touch input - interactions.signals.on('new', function (interaction) { - interaction.resizeAxes = 'xy'; - }); - interactions.signals.on('action-start', start); - interactions.signals.on('action-move', __move_6); - interactions.signals.on('action-end', end); - interactions.signals.on('action-start', updateEventAxes); - interactions.signals.on('action-move', updateEventAxes); resize.cursors = initCursors(browser); resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10; /** @@ -5342,6 +5655,21 @@ function __install_6(scope) { var resize = { id: 'actions/resize', install: __install_6, + listeners: { + 'interactions:new': function interactionsNew(_ref) { + var interaction = _ref.interaction; + interaction.resizeAxes = 'xy'; + }, + 'interactions:action-start': function interactionsActionStart(arg) { + start(arg); + updateEventAxes(arg); + }, + 'interactions:action-move': function interactionsActionMove(arg) { + __move_6(arg); + updateEventAxes(arg); + }, + 'interactions:action-end': end + }, defaults: { square: false, preserveAspectRatio: false, @@ -5406,10 +5734,10 @@ var resize = { return null; }, cursors: null, - getCursor: function getCursor(_ref) { - var edges = _ref.edges, - axis = _ref.axis, - name = _ref.name; + getCursor: function getCursor(_ref2) { + var edges = _ref2.edges, + axis = _ref2.axis, + name = _ref2.name; var cursors = resize.cursors; var result = null; @@ -5549,9 +5877,9 @@ function initCursors(browser) { }; } -function start(_ref2) { - var iEvent = _ref2.iEvent, - interaction = _ref2.interaction; +function start(_ref3) { + var iEvent = _ref3.iEvent, + interaction = _ref3.interaction; if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return; @@ -5606,9 +5934,9 @@ function start(_ref2) { iEvent.deltaRect = interaction.resizeRects.delta; } -function __move_6(_ref3) { - var iEvent = _ref3.iEvent, - interaction = _ref3.interaction; +function __move_6(_ref4) { + var iEvent = _ref4.iEvent, + interaction = _ref4.interaction; if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return; @@ -5698,9 +6026,9 @@ function __move_6(_ref3) { iEvent.deltaRect = deltaRect; } -function end(_ref4) { - var iEvent = _ref4.iEvent, - interaction = _ref4.interaction; +function end(_ref5) { + var iEvent = _ref5.iEvent, + interaction = _ref5.interaction; if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return; @@ -5711,12 +6039,11 @@ function end(_ref4) { iEvent.deltaRect = interaction.resizeRects.delta; } -function updateEventAxes(_ref5) { - var iEvent = _ref5.iEvent, - interaction = _ref5.interaction, - action = _ref5.action; +function updateEventAxes(_ref6) { + var iEvent = _ref6.iEvent, + interaction = _ref6.interaction; - if (action !== ___scope_6.ActionName.Resize || !interaction.resizeAxes) { + if (interaction.prepared.name !== ___scope_6.ActionName.Resize || !interaction.resizeAxes) { return; } @@ -5760,7 +6087,7 @@ Object.defineProperty(_$actions_5, "drag", { Object.defineProperty(_$actions_5, "drop", { enumerable: true, get: function get() { - return _drop["default"]; + return _index["default"]; } }); Object.defineProperty(_$actions_5, "gesture", { @@ -5779,7 +6106,7 @@ _$actions_5.id = void 0; var ___drag_5 = ___interopRequireDefault_5(_$drag_1); -var _drop = ___interopRequireDefault_5(_$drop_3); +var _index = ___interopRequireDefault_5(_$drop_3); var _gesture = ___interopRequireDefault_5(_$gesture_4); @@ -5791,7 +6118,7 @@ function __install_5(scope) { scope.usePlugin(_gesture["default"]); scope.usePlugin(_resize["default"]); scope.usePlugin(___drag_5["default"]); - scope.usePlugin(_drop["default"]); + scope.usePlugin(_index["default"]); } var id = 'actions'; @@ -5800,6 +6127,8 @@ _$actions_5.id = id; var _$autoScroll_7 = {}; "use strict"; +function ___typeof_7(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_7 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_7 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_7(obj); } + Object.defineProperty(_$autoScroll_7, "__esModule", { value: true }); @@ -5809,25 +6138,24 @@ _$autoScroll_7.getScrollSize = getScrollSize; _$autoScroll_7.getScrollSizeDelta = getScrollSizeDelta; _$autoScroll_7["default"] = void 0; -var __domUtils_7 = ___interopRequireWildcard_7(_$domUtils_51); +var __domUtils_7 = ___interopRequireWildcard_7(_$domUtils_50); -var __is_7 = ___interopRequireWildcard_7(_$is_57); +var __is_7 = ___interopRequireWildcard_7(_$is_56); -var ___raf_7 = ___interopRequireDefault_7(_$raf_62); +var ___raf_7 = ___interopRequireDefault_7(_$raf_61); -/* removed: var _$rect_63 = require("@interactjs/utils/rect"); */; +/* removed: var _$rect_62 = require("../utils/rect.js"); */; -/* removed: var _$window_66 = require("@interactjs/utils/window"); */; +/* removed: var _$window_65 = require("../utils/window.js"); */; function ___interopRequireDefault_7(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ___getRequireWildcardCache_7() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_7 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_7(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_7(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_7(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_7(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_7(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function __install_7(scope) { - var interactions = scope.interactions, - defaults = scope.defaults, + var defaults = scope.defaults, actions = scope.actions; scope.autoScroll = autoScroll; @@ -5835,23 +6163,6 @@ function __install_7(scope) { return scope.now(); }; - interactions.signals.on('new', function (_ref) { - var interaction = _ref.interaction; - interaction.autoScroll = null; - }); - interactions.signals.on('destroy', function (_ref2) { - var interaction = _ref2.interaction; - interaction.autoScroll = null; - autoScroll.stop(); - - if (autoScroll.interaction) { - autoScroll.interaction = null; - } - }); - interactions.signals.on('stop', autoScroll.stop); - interactions.signals.on('action-move', function (arg) { - return autoScroll.onInteractionMove(arg); - }); actions.eventTypes.push('autoscroll'); defaults.perAction.autoScroll = autoScroll.defaults; } @@ -5868,8 +6179,10 @@ var autoScroll = { now: Date.now, interaction: null, i: null, + // the handle returned by window.setInterval x: 0, y: 0, + // Direction each pulse is to scroll in isScrolling: false, prevTime: 0, margin: 0, @@ -5953,9 +6266,9 @@ var autoScroll = { var options = interactable.options; return options[actionName].autoScroll && options[actionName].autoScroll.enabled; }, - onInteractionMove: function onInteractionMove(_ref3) { - var interaction = _ref3.interaction, - pointer = _ref3.pointer; + onInteractionMove: function onInteractionMove(_ref) { + var interaction = _ref.interaction, + pointer = _ref.pointer; if (!(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))) { return; @@ -6001,7 +6314,7 @@ var autoScroll = { }; function getContainer(value, interactable, element) { - return (__is_7.string(value) ? (0, _$rect_63.getStringOptionResult)(value, interactable, element) : value) || (0, _$window_66.getWindow)(element); + return (__is_7.string(value) ? (0, _$rect_62.getStringOptionResult)(value, interactable, element) : value) || (0, _$window_65.getWindow)(element); } function getScroll(container) { @@ -6026,9 +6339,9 @@ function getScrollSize(container) { }; } -function getScrollSizeDelta(_ref4, func) { - var interaction = _ref4.interaction, - element = _ref4.element; +function getScrollSizeDelta(_ref2, func) { + var interaction = _ref2.interaction, + element = _ref2.element; var scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll; if (!scrollOptions || !scrollOptions.enabled) { @@ -6051,26 +6364,49 @@ function getScrollSizeDelta(_ref4, func) { var ___default_7 = { id: 'auto-scroll', - install: __install_7 + install: __install_7, + listeners: { + 'interactions:new': function interactionsNew(_ref3) { + var interaction = _ref3.interaction; + interaction.autoScroll = null; + }, + 'interactions:destroy': function interactionsDestroy(_ref4) { + var interaction = _ref4.interaction; + interaction.autoScroll = null; + autoScroll.stop(); + + if (autoScroll.interaction) { + autoScroll.interaction = null; + } + }, + 'interactions:stop': autoScroll.stop, + 'interactions:action-move': function interactionsActionMove(arg) { + return autoScroll.onInteractionMove(arg); + } + } }; _$autoScroll_7["default"] = ___default_7; var _$InteractableMethods_8 = {}; "use strict"; +function ___typeof_8(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_8 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_8 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_8(obj); } + Object.defineProperty(_$InteractableMethods_8, "__esModule", { value: true }); _$InteractableMethods_8["default"] = void 0; -/* removed: var _$utils_56 = require("@interactjs/utils"); */; +/* removed: var _$utils_55 = require("../utils/index.js"); */; -var __is_8 = ___interopRequireWildcard_8(_$is_57); +var __is_8 = ___interopRequireWildcard_8(_$is_56); function ___getRequireWildcardCache_8() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_8 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_8(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_8(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_8(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_8(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_8(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +// TODO: there seems to be a @babel/preset-typescript bug causing regular import +// syntax to remain in js output function __install_8(scope) { var Interactable = scope.Interactable, actions = scope.actions; @@ -6104,7 +6440,7 @@ function __install_8(scope) { * Interactable */ - Interactable.prototype.ignoreFrom = (0, _$utils_56.warnOnce)(function (newValue) { + Interactable.prototype.ignoreFrom = (0, _$utils_55.warnOnce)(function (newValue) { return this._backCompatOption('ignoreFrom', newValue); }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).'); /** @@ -6131,7 +6467,7 @@ function __install_8(scope) { * Interactable */ - Interactable.prototype.allowFrom = (0, _$utils_56.warnOnce)(function (newValue) { + Interactable.prototype.allowFrom = (0, _$utils_55.warnOnce)(function (newValue) { return this._backCompatOption('allowFrom', newValue); }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).'); /** @@ -6258,12 +6594,14 @@ _$InteractableMethods_8["default"] = ___default_8; var _$base_9 = {}; "use strict"; +function ___typeof_9(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_9 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_9 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_9(obj); } + Object.defineProperty(_$base_9, "__esModule", { value: true }); _$base_9["default"] = void 0; -var __utils_9 = ___interopRequireWildcard_9(_$utils_56); +var __utils_9 = ___interopRequireWildcard_9(_$utils_55); var _InteractableMethods = ___interopRequireDefault_9(_$InteractableMethods_8); @@ -6271,69 +6609,12 @@ function ___interopRequireDefault_9(obj) { return obj && obj.__esModule ? obj : function ___getRequireWildcardCache_9() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_9 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_9(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_9(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_9(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_9(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_9(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function __install_9(scope) { var interact = scope.interact, - interactions = scope.interactions, defaults = scope.defaults; - scope.usePlugin(_InteractableMethods["default"]); // set cursor style on mousedown - - interactions.signals.on('down', function (_ref) { - var interaction = _ref.interaction, - pointer = _ref.pointer, - event = _ref.event, - eventTarget = _ref.eventTarget; - - if (interaction.interacting()) { - return; - } - - var actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); - prepare(interaction, actionInfo, scope); - }); // set cursor style on mousemove - - interactions.signals.on('move', function (_ref2) { - var interaction = _ref2.interaction, - pointer = _ref2.pointer, - event = _ref2.event, - eventTarget = _ref2.eventTarget; - - if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) { - return; - } - - var actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); - prepare(interaction, actionInfo, scope); - }); - interactions.signals.on('move', function (arg) { - var interaction = arg.interaction; - - if (!interaction.pointerIsDown || interaction.interacting() || !interaction.pointerWasMoved || !interaction.prepared.name) { - return; - } - - scope.autoStart.signals.fire('before-start', arg); - var interactable = interaction.interactable; - - if (interaction.prepared.name && interactable) { - // check manualStart and interaction limit - if (interactable.options[interaction.prepared.name].manualStart || !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { - interaction.stop(); - } else { - interaction.start(interaction.prepared, interactable, interaction.element); - setInteractionCursor(interaction, scope); - } - } - }); - interactions.signals.on('stop', function (_ref3) { - var interaction = _ref3.interaction; - var interactable = interaction.interactable; - - if (interactable && interactable.options.styleCursor) { - setCursor(interaction.element, '', scope); - } - }); + scope.usePlugin(_InteractableMethods["default"]); defaults.base.actionChecker = null; defaults.base.styleCursor = true; __utils_9.extend(defaults.perAction, { @@ -6366,9 +6647,66 @@ function __install_9(scope) { // Allow this many interactions to happen simultaneously maxInteractions: Infinity, withinInteractionLimit: withinInteractionLimit, - cursorElement: null, - signals: new __utils_9.Signals() + cursorElement: null }; +} + +function prepareOnDown(_ref, scope) { + var interaction = _ref.interaction, + pointer = _ref.pointer, + event = _ref.event, + eventTarget = _ref.eventTarget; + + if (interaction.interacting()) { + return; + } + + var actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); +} + +function prepareOnMove(_ref2, scope) { + var interaction = _ref2.interaction, + pointer = _ref2.pointer, + event = _ref2.event, + eventTarget = _ref2.eventTarget; + + if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) { + return; + } + + var actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); +} + +function startOnMove(arg, scope) { + var interaction = arg.interaction; + + if (!interaction.pointerIsDown || interaction.interacting() || !interaction.pointerWasMoved || !interaction.prepared.name) { + return; + } + + scope.fire('autoStart:before-start', arg); + var interactable = interaction.interactable; + + if (interaction.prepared.name && interactable) { + // check manualStart and interaction limit + if (interactable.options[interaction.prepared.name].manualStart || !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { + interaction.stop(); + } else { + interaction.start(interaction.prepared, interactable, interaction.element); + setInteractionCursor(interaction, scope); + } + } +} + +function clearCursorOnStop(_ref3, scope) { + var interaction = _ref3.interaction; + var interactable = interaction.interactable; + + if (interactable && interactable.options.styleCursor) { + setCursor(interaction.element, '', scope); + } } // Check if the current interactable supports the action. // If so, return the validated action. Otherwise, return null @@ -6456,7 +6794,7 @@ function prepare(interaction, _ref4, scope) { __utils_9.copyAction(interaction.prepared, action); interaction.rect = interactable && action.name ? interactable.getRect(element) : null; setInteractionCursor(interaction, scope); - scope.autoStart.signals.fire('prepared', { + scope.fire('autoStart:prepared', { interaction: interaction }); } @@ -6559,6 +6897,15 @@ function setInteractionCursor(interaction, scope) { var ___default_9 = { id: 'auto-start/base', install: __install_9, + listeners: { + 'interactions:down': prepareOnDown, + 'interactions:move': function interactionsMove(arg, scope) { + prepareOnMove(arg, scope); + startOnMove(arg, scope); + }, + 'interactions:stop': clearCursorOnStop + }, + before: 'ations', maxInteractions: maxInteractions, withinInteractionLimit: withinInteractionLimit, validateAction: validateAction @@ -6568,6 +6915,8 @@ _$base_9["default"] = ___default_9; var _$dragAxis_10 = {}; "use strict"; +function ___typeof_10(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_10 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_10 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_10(obj); } + Object.defineProperty(_$dragAxis_10, "__esModule", { value: true }); @@ -6575,9 +6924,9 @@ _$dragAxis_10["default"] = void 0; var ___scope_10 = _$scope_24({}); -/* removed: var _$domUtils_51 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_50 = require("../utils/domUtils.js"); */; -var __is_10 = ___interopRequireWildcard_10(_$is_57); +var __is_10 = ___interopRequireWildcard_10(_$is_56); var _base = ___interopRequireDefault_10(_$base_9); @@ -6585,79 +6934,79 @@ function ___interopRequireDefault_10(obj) { return obj && obj.__esModule ? obj : function ___getRequireWildcardCache_10() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_10 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_10(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_10(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_10(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_10(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_10(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function __install_10(scope) { - scope.autoStart.signals.on('before-start', function (_ref) { - var interaction = _ref.interaction, - eventTarget = _ref.eventTarget, - dx = _ref.dx, - dy = _ref.dy; +function beforeStart(_ref, scope) { + var interaction = _ref.interaction, + eventTarget = _ref.eventTarget, + dx = _ref.dx, + dy = _ref.dy; - if (interaction.prepared.name !== 'drag') { - return; - } // check if a drag is in the correct axis + if (interaction.prepared.name !== 'drag') { + return; + } // check if a drag is in the correct axis - var absX = Math.abs(dx); - var absY = Math.abs(dy); - var targetOptions = interaction.interactable.options.drag; - var startAxis = targetOptions.startAxis; - var currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'; - interaction.prepared.axis = targetOptions.lockAxis === 'start' ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy' - : targetOptions.lockAxis; // if the movement isn't in the startAxis of the interactable + var absX = Math.abs(dx); + var absY = Math.abs(dy); + var targetOptions = interaction.interactable.options.drag; + var startAxis = targetOptions.startAxis; + var currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'; + interaction.prepared.axis = targetOptions.lockAxis === 'start' ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy' + : targetOptions.lockAxis; // if the movement isn't in the startAxis of the interactable - if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) { - // cancel the prepared action - interaction.prepared.name = null; // then try to get a drag from another ineractable + if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) { + // cancel the prepared action + interaction.prepared.name = null; // then try to get a drag from another ineractable - var element = eventTarget; + var element = eventTarget; - var getDraggable = function getDraggable(interactable) { - if (interactable === interaction.interactable) { - return; - } + var getDraggable = function getDraggable(interactable) { + if (interactable === interaction.interactable) { + return; + } - var options = interaction.interactable.options.drag; + var options = interaction.interactable.options.drag; - if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) { - var action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element); + if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) { + var action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element); - if (action && action.name === ___scope_10.ActionName.Drag && checkStartAxis(currentAxis, interactable) && _base["default"].validateAction(action, interactable, element, eventTarget, scope)) { - return interactable; - } + if (action && action.name === ___scope_10.ActionName.Drag && checkStartAxis(currentAxis, interactable) && _base["default"].validateAction(action, interactable, element, eventTarget, scope)) { + return interactable; } - }; // check all interactables - + } + }; // check all interactables - while (__is_10.element(element)) { - var interactable = scope.interactables.forEachMatch(element, getDraggable); - if (interactable) { - interaction.prepared.name = ___scope_10.ActionName.Drag; - interaction.interactable = interactable; - interaction.element = element; - break; - } + while (__is_10.element(element)) { + var interactable = scope.interactables.forEachMatch(element, getDraggable); - element = (0, _$domUtils_51.parentNode)(element); + if (interactable) { + interaction.prepared.name = ___scope_10.ActionName.Drag; + interaction.interactable = interactable; + interaction.element = element; + break; } - } - }); - function checkStartAxis(startAxis, interactable) { - if (!interactable) { - return false; + element = (0, _$domUtils_50.parentNode)(element); } + } +} - var thisAxis = interactable.options[___scope_10.ActionName.Drag].startAxis; - return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis; +function checkStartAxis(startAxis, interactable) { + if (!interactable) { + return false; } + + var thisAxis = interactable.options[___scope_10.ActionName.Drag].startAxis; + return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis; } var ___default_10 = { id: 'auto-start/dragAxis', - install: __install_10 + listeners: { + 'autoStart:before-start': beforeStart + } }; _$dragAxis_10["default"] = ___default_10; @@ -6674,42 +7023,10 @@ var ___base_11 = ___interopRequireDefault_11(_$base_9); function ___interopRequireDefault_11(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function __install_11(scope) { - var autoStart = scope.autoStart, - interactions = scope.interactions, - defaults = scope.defaults; + var defaults = scope.defaults; scope.usePlugin(___base_11["default"]); defaults.perAction.hold = 0; defaults.perAction.delay = 0; - interactions.signals.on('new', function (interaction) { - interaction.autoStartHoldTimer = null; - }); - autoStart.signals.on('prepared', function (_ref) { - var interaction = _ref.interaction; - var hold = getHoldDuration(interaction); - - if (hold > 0) { - interaction.autoStartHoldTimer = setTimeout(function () { - interaction.start(interaction.prepared, interaction.interactable, interaction.element); - }, hold); - } - }); - interactions.signals.on('move', function (_ref2) { - var interaction = _ref2.interaction, - duplicate = _ref2.duplicate; - - if (interaction.pointerWasMoved && !duplicate) { - clearTimeout(interaction.autoStartHoldTimer); - } - }); // prevent regular down->move autoStart - - autoStart.signals.on('before-start', function (_ref3) { - var interaction = _ref3.interaction; - var hold = getHoldDuration(interaction); - - if (hold > 0) { - interaction.prepared.name = null; - } - }); } function getHoldDuration(interaction) { @@ -6726,6 +7043,39 @@ function getHoldDuration(interaction) { var ___default_11 = { id: 'auto-start/hold', install: __install_11, + listeners: { + 'interactions:new': function interactionsNew(_ref) { + var interaction = _ref.interaction; + interaction.autoStartHoldTimer = null; + }, + 'autoStart:prepared': function autoStartPrepared(_ref2) { + var interaction = _ref2.interaction; + var hold = getHoldDuration(interaction); + + if (hold > 0) { + interaction.autoStartHoldTimer = setTimeout(function () { + interaction.start(interaction.prepared, interaction.interactable, interaction.element); + }, hold); + } + }, + 'interactions:move': function interactionsMove(_ref3) { + var interaction = _ref3.interaction, + duplicate = _ref3.duplicate; + + if (interaction.pointerWasMoved && !duplicate) { + clearTimeout(interaction.autoStartHoldTimer); + } + }, + // prevent regular down->move autoStart + 'autoStart:before-start': function autoStartBeforeStart(_ref4) { + var interaction = _ref4.interaction; + var hold = getHoldDuration(interaction); + + if (hold > 0) { + interaction.prepared.name = null; + } + } + }, getHoldDuration: getHoldDuration }; _$hold_11["default"] = ___default_11; @@ -6777,23 +7127,25 @@ _$autoStart_12.id = __id_12; var _$interactablePreventDefault_21 = {}; "use strict"; +function ___typeof_21(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_21 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_21 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_21(obj); } + Object.defineProperty(_$interactablePreventDefault_21, "__esModule", { value: true }); _$interactablePreventDefault_21.install = __install_21; _$interactablePreventDefault_21["default"] = void 0; -/* removed: var _$domUtils_51 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_50 = require("../utils/domUtils.js"); */; -var ___events_21 = ___interopRequireDefault_21(_$events_52); +var ___events_21 = ___interopRequireDefault_21(_$events_51); -var __is_21 = ___interopRequireWildcard_21(_$is_57); +var __is_21 = ___interopRequireWildcard_21(_$is_56); -/* removed: var _$window_66 = require("@interactjs/utils/window"); */; +/* removed: var _$window_65 = require("../utils/window.js"); */; function ___getRequireWildcardCache_21() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_21 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_21(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_21(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_21(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_21(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_21(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___interopRequireDefault_21(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -6828,7 +7180,7 @@ function checkAndPreventDefault(interactable, scope, event) { if (___events_21["default"].supportsPassive && /^touch(start|move)$/.test(event.type)) { - var doc = (0, _$window_66.getWindow)(event.target).document; + var doc = (0, _$window_65.getWindow)(event.target).document; var docOptions = scope.getDocOptions(doc); if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) { @@ -6842,7 +7194,7 @@ function checkAndPreventDefault(interactable, scope, event) { } // don't preventDefault on editable elements - if (__is_21.element(event.target) && (0, _$domUtils_51.matchesSelector)(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { + if (__is_21.element(event.target) && (0, _$domUtils_50.matchesSelector)(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { return; } @@ -6876,26 +7228,19 @@ function __install_21(scope) { Interactable.prototype.checkAndPreventDefault = function (event) { return checkAndPreventDefault(this, scope, event); - }; - - var _arr = ['down', 'move', 'up', 'cancel']; - - for (var _i = 0; _i < _arr.length; _i++) { - var eventSignal = _arr[_i]; - scope.interactions.signals.on(eventSignal, onInteractionEvent); - } // prevent native HTML5 drag on interact.js target elements + }; // prevent native HTML5 drag on interact.js target elements scope.interactions.docEvents.push({ type: 'dragstart', listener: function listener(event) { - for (var _i2 = 0; _i2 < scope.interactions.list.length; _i2++) { + for (var _i = 0; _i < scope.interactions.list.length; _i++) { var _ref2; - _ref2 = scope.interactions.list[_i2]; + _ref2 = scope.interactions.list[_i]; var interaction = _ref2; - if (interaction.element && (interaction.element === event.target || (0, _$domUtils_51.nodeContains)(interaction.element, event.target))) { + if (interaction.element && (interaction.element === event.target || (0, _$domUtils_50.nodeContains)(interaction.element, event.target))) { interaction.interactable.checkAndPreventDefault(event); return; } @@ -6906,31 +7251,37 @@ function __install_21(scope) { var ___default_21 = { id: 'core/interactablePreventDefault', - install: __install_21 + install: __install_21, + listeners: ['down', 'move', 'up', 'cancel'].reduce(function (acc, eventType) { + acc["interactions:".concat(eventType)] = onInteractionEvent; + return acc; + }, {}) }; _$interactablePreventDefault_21["default"] = ___default_21; var _$devTools_25 = {}; "use strict"; +function ___typeof_25(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_25 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_25 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_25(obj); } + Object.defineProperty(_$devTools_25, "__esModule", { value: true }); _$devTools_25["default"] = void 0; -var ___domObjects_25 = ___interopRequireDefault_25(_$domObjects_50); +var ___domObjects_25 = ___interopRequireDefault_25(_$domObjects_49); -/* removed: var _$domUtils_51 = require("@interactjs/utils/domUtils"); */; +/* removed: var _$domUtils_50 = require("../utils/domUtils.js"); */; -var ___extend_25 = ___interopRequireDefault_25(_$extend_53); +var ___extend_25 = ___interopRequireDefault_25(_$extend_52); -var __is_25 = ___interopRequireWildcard_25(_$is_57); +var __is_25 = ___interopRequireWildcard_25(_$is_56); -var ___window_25 = ___interopRequireDefault_25(_$window_66); +var ___window_25 = ___interopRequireDefault_25(_$window_65); function ___getRequireWildcardCache_25() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_25 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_25(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_25(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_25(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_25(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_25(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___interopRequireDefault_25(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -6955,33 +7306,15 @@ var links = { touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action', boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing' }; -var isProduction = "production" === 'production'; // eslint-disable-next-line no-restricted-syntax +var isProduction = undefined === 'production'; // eslint-disable-next-line no-restricted-syntax function __install_25(scope) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - logger = _ref.logger; - - var interactions = scope.interactions, - Interactable = scope.Interactable, - defaults = scope.defaults; - logger = logger || console; - interactions.signals.on('action-start', function (_ref2) { - var interaction = _ref2.interaction; - - for (var _i = 0; _i < checks.length; _i++) { - var _ref3; - - _ref3 = checks[_i]; - var check = _ref3; - var options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]; - - if (!(options && options.devTools && options.devTools.ignore[check.name]) && check.perform(interaction)) { - var _logger; + logger = _ref.logger; - (_logger = logger).warn.apply(_logger, [prefix + check.text].concat(___toConsumableArray_25(check.getInfo(interaction)))); - } - } - }); + var Interactable = scope.Interactable, + defaults = scope.defaults; + scope.logger = logger || console; defaults.base.devTools = { ignore: {} }; @@ -6998,12 +7331,12 @@ function __install_25(scope) { var checks = [{ name: 'touchAction', - perform: function perform(_ref4) { - var element = _ref4.element; + perform: function perform(_ref2) { + var element = _ref2.element; return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/); }, - getInfo: function getInfo(_ref5) { - var element = _ref5.element; + getInfo: function getInfo(_ref3) { + var element = _ref3.element; return [element, links.touchAction]; }, text: 'Consider adding CSS "touch-action: none" to this element\n' @@ -7014,8 +7347,8 @@ var checks = [{ return interaction.prepared.name === 'resize' && element instanceof ___domObjects_25["default"].HTMLElement && !hasStyle(element, 'boxSizing', /border-box/); }, text: 'Consider adding CSS "box-sizing: border-box" to this resizable element', - getInfo: function getInfo(_ref6) { - var element = _ref6.element; + getInfo: function getInfo(_ref4) { + var element = _ref4.element; return [element, links.boxSizing]; } }, { @@ -7043,7 +7376,7 @@ function parentHasStyle(element, prop, styleRe) { return true; } - parent = (0, _$domUtils_51.parentNode)(parent); + parent = (0, _$domUtils_50.parentNode)(parent); } return false; @@ -7056,6 +7389,25 @@ var defaultExport = isProduction ? { } : { id: __id_25, install: __install_25, + listeners: { + 'interactions:action-start': function interactionsActionStart(_ref5, scope) { + var interaction = _ref5.interaction; + + for (var _i = 0; _i < checks.length; _i++) { + var _ref6; + + _ref6 = checks[_i]; + var check = _ref6; + var options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]; + + if (!(options && options.devTools && options.devTools.ignore[check.name]) && check.perform(interaction)) { + var _scope$logger; + + (_scope$logger = scope.logger).warn.apply(_scope$logger, [prefix + check.text].concat(___toConsumableArray_25(check.getInfo(interaction)))); + } + } + } + }, checks: checks, CheckName: CheckName, links: links, @@ -7078,7 +7430,7 @@ _$base_30.restoreCoords = restoreCoords; _$base_30.makeModifier = makeModifier; _$base_30["default"] = void 0; -var ___extend_30 = ___interopRequireDefault_30(_$extend_53); +var ___extend_30 = ___interopRequireDefault_30(_$extend_52); function ___interopRequireDefault_30(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -7090,44 +7442,9 @@ function ___iterableToArrayLimit_30(arr, i) { if (!(Symbol.iterator in Object(ar function ___arrayWithHoles_30(arr) { if (Array.isArray(arr)) return arr; } -function __install_30(scope) { - var interactions = scope.interactions; - scope.defaults.perAction.modifiers = []; - interactions.signals.on('new', function (_ref) { - var interaction = _ref.interaction; - interaction.modifiers = { - startOffset: { - left: 0, - right: 0, - top: 0, - bottom: 0 - }, - offsets: {}, - states: null, - result: null, - endPrevented: false, - startDelta: null - }; - }); - interactions.signals.on('before-action-start', function (arg) { - __start_30(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page); - }); - interactions.signals.on('action-resume', function (arg) { - stop(arg); - __start_30(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords); - __beforeMove_30(arg); - }); - interactions.signals.on('after-action-move', restoreCoords); - interactions.signals.on('before-action-move', __beforeMove_30); - interactions.signals.on('before-action-start', setCoords); - interactions.signals.on('after-action-start', restoreCoords); - interactions.signals.on('before-action-end', beforeEnd); - interactions.signals.on('stop', stop); -} - -function __start_30(_ref2, pageCoords, prevCoords) { - var interaction = _ref2.interaction, - phase = _ref2.phase; +function __start_30(_ref, pageCoords, prevCoords) { + var interaction = _ref.interaction, + phase = _ref.phase; var interactable = interaction.interactable, element = interaction.element; var modifierList = getModifierList(interaction); @@ -7172,10 +7489,10 @@ function startAll(arg) { var states = arg.states; for (var _i = 0; _i < states.length; _i++) { - var _ref3; + var _ref2; - _ref3 = states[_i]; - var state = _ref3; + _ref2 = states[_i]; + var state = _ref2; if (state.methods.start) { arg.state = state; @@ -7209,10 +7526,10 @@ function setAll(arg) { }; for (var _i2 = 0; _i2 < states.length; _i2++) { - var _ref4; + var _ref3; - _ref4 = states[_i2]; - var state = _ref4; + _ref3 = states[_i2]; + var state = _ref3; var options = state.options; if (!state.methods.set || !shouldDo(options, preEnd, requireEndOnly, phase)) { @@ -7295,10 +7612,10 @@ function beforeEnd(arg) { var didPreEnd = false; for (var _i3 = 0; _i3 < states.length; _i3++) { - var _ref5; + var _ref4; - _ref5 = states[_i3]; - var state = _ref5; + _ref4 = states[_i3]; + var state = _ref4; arg.state = state; var options = state.options, methods = state.methods; @@ -7337,10 +7654,10 @@ function stop(arg) { }, arg); for (var _i4 = 0; _i4 < states.length; _i4++) { - var _ref6; + var _ref5; - _ref6 = states[_i4]; - var state = _ref6; + _ref5 = states[_i4]; + var state = _ref5; modifierArg.state = state; if (state.methods.stop) { @@ -7349,7 +7666,7 @@ function stop(arg) { } arg.interaction.modifiers.states = null; - arg.interaction.modifiers.endPrevented = false; + arg.interaction.modifiers.endPrevented = null; } function getModifierList(interaction) { @@ -7434,11 +7751,11 @@ function setCoords(arg) { rect.height = rect.bottom - rect.top; } -function restoreCoords(_ref7) { - var _ref7$interaction = _ref7.interaction, - coords = _ref7$interaction.coords, - rect = _ref7$interaction.rect, - modifiers = _ref7$interaction.modifiers; +function restoreCoords(_ref6) { + var _ref6$interaction = _ref6.interaction, + coords = _ref6$interaction.coords, + rect = _ref6$interaction.rect, + modifiers = _ref6$interaction.modifiers; if (!modifiers.result) { return; @@ -7523,7 +7840,42 @@ function makeModifier(module, name) { var ___default_30 = { id: 'modifiers/base', - install: __install_30, + install: function install(scope) { + scope.defaults.perAction.modifiers = []; + }, + listeners: { + 'interactions:new': function interactionsNew(_ref7) { + var interaction = _ref7.interaction; + interaction.modifiers = { + startOffset: { + left: 0, + right: 0, + top: 0, + bottom: 0 + }, + offsets: {}, + states: null, + result: null, + endPrevented: false, + startDelta: null + }; + }, + 'interactions:before-action-start': function interactionsBeforeActionStart(arg) { + __start_30(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page); + setCoords(arg); + }, + 'interactions:action-resume': function interactionsActionResume(arg) { + stop(arg); + __start_30(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords); + __beforeMove_30(arg); + }, + 'interactions:after-action-move': restoreCoords, + 'interactions:before-action-move': __beforeMove_30, + 'interactions:after-action-start': restoreCoords, + 'interactions:before-action-end': beforeEnd, + 'interactions:stop': stop + }, + before: 'ations', startAll: startAll, setAll: setAll, prepareStates: prepareStates, @@ -7541,64 +7893,53 @@ _$base_30["default"] = ___default_30; var _$inertia_26 = {}; "use strict"; +function ___typeof_26(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_26 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_26 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_26(obj); } + Object.defineProperty(_$inertia_26, "__esModule", { value: true }); _$inertia_26["default"] = void 0; -/* removed: var _$InteractEvent_15 = require("@interactjs/core/InteractEvent"); */; +/* removed: var _$InteractEvent_15 = require("../core/InteractEvent.js"); */; var ___base_26 = ___interopRequireWildcard_26(_$base_30); -var __utils_26 = ___interopRequireWildcard_26(_$utils_56); +var __utils_26 = ___interopRequireWildcard_26(_$utils_55); -var ___raf_26 = ___interopRequireDefault_26(_$raf_62); +var ___raf_26 = ___interopRequireDefault_26(_$raf_61); function ___interopRequireDefault_26(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ___getRequireWildcardCache_26() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_26 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_26(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_26(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_26(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_26(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_26(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } _$InteractEvent_15.EventPhase.Resume = 'resume'; _$InteractEvent_15.EventPhase.InertiaStart = 'inertiastart'; function __install_26(scope) { - var interactions = scope.interactions, - defaults = scope.defaults; - interactions.signals.on('new', function (_ref) { - var interaction = _ref.interaction; - interaction.inertia = { - active: false, - smoothEnd: false, - allowResume: false, - upCoords: {}, - timeout: null - }; - }); - interactions.signals.on('before-action-end', function (arg) { - return release(arg, scope); - }); - interactions.signals.on('down', function (arg) { - return resume(arg, scope); - }); - interactions.signals.on('stop', __stop_26); + var defaults = scope.defaults; + scope.usePlugin(___base_26["default"]); defaults.perAction.inertia = { enabled: false, resistance: 10, + // the lambda in exponential decay minSpeed: 100, + // target speed must be above this for inertia to start endSpeed: 10, + // the speed at which inertia is slow enough to stop allowResume: true, - smoothEndDuration: 300 + // allow resuming an action in inertia phase + smoothEndDuration: 300 // animate to snap/restrict endOnly if there's no inertia + }; - scope.usePlugin(___base_26["default"]); } -function resume(_ref2, scope) { - var interaction = _ref2.interaction, - event = _ref2.event, - pointer = _ref2.pointer, - eventTarget = _ref2.eventTarget; +function resume(_ref, scope) { + var interaction = _ref.interaction, + event = _ref.event, + pointer = _ref.pointer, + eventTarget = _ref.eventTarget; var state = interaction.inertia; // Check if the down event hits the current inertia target if (state.active) { @@ -7622,7 +7963,7 @@ function resume(_ref2, scope) { interaction: interaction, phase: _$InteractEvent_15.EventPhase.Resume }; - scope.interactions.signals.fire('action-resume', signalArg); // fire a reume event + scope.fire('interactions:action-resume', signalArg); // fire a reume event var resumeEvent = new scope.InteractEvent(interaction, event, interaction.prepared.name, _$InteractEvent_15.EventPhase.Resume, interaction.element); @@ -7637,10 +7978,10 @@ function resume(_ref2, scope) { } } -function release(_ref3, scope) { - var interaction = _ref3.interaction, - event = _ref3.event, - noPreEnd = _ref3.noPreEnd; +function release(_ref2, scope) { + var interaction = _ref2.interaction, + event = _ref2.event, + noPreEnd = _ref2.noPreEnd; var state = interaction.inertia; if (!interaction.interacting() || interaction.simulation && interaction.simulation.active || noPreEnd) { @@ -7660,6 +8001,9 @@ function release(_ref3, scope) { var inertia = inertiaPossible && now - interaction.coords.cur.timeStamp < 50 && pointerSpeed > options.minSpeed && pointerSpeed > options.endSpeed; var modifierArg = { interaction: interaction, + interactable: interaction.interactable, + element: interaction.element, + rect: interaction.rect, pageCoords: interaction.coords.cur.page, states: inertiaPossible && interaction.modifiers.states.map(function (modifierStatus) { return __utils_26.extend({}, modifierStatus); @@ -7724,8 +8068,8 @@ function release(_ref3, scope) { return false; } -function __stop_26(_ref4) { - var interaction = _ref4.interaction; +function __stop_26(_ref3) { + var interaction = _ref3.interaction; var state = interaction.inertia; if (state.active) { @@ -7830,15 +8174,31 @@ function updateInertiaCoords(interaction) { }], interaction._now()); } -function __getOptions_26(_ref5) { - var interactable = _ref5.interactable, - prepared = _ref5.prepared; +function __getOptions_26(_ref4) { + var interactable = _ref4.interactable, + prepared = _ref4.prepared; return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia; } var ___default_26 = { id: 'inertia', install: __install_26, + listeners: { + 'interactions:new': function interactionsNew(_ref5) { + var interaction = _ref5.interaction; + interaction.inertia = { + active: false, + smoothEnd: false, + allowResume: false, + upCoords: {}, + timeout: null + }; + }, + 'interactions:before-action-end': release, + 'interactions:down': resume, + 'interactions:stop': __stop_26 + }, + before: 'modifiers/base', calcInertia: calcInertia, inertiaTick: inertiaTick, smothEndTick: smothEndTick, @@ -7849,20 +8209,23 @@ _$inertia_26["default"] = ___default_26; var _$pointer_33 = {}; "use strict"; +function ___typeof_33(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_33 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_33 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_33(obj); } + Object.defineProperty(_$pointer_33, "__esModule", { value: true }); +_$pointer_33.getRestrictionRect = getRestrictionRect; _$pointer_33["default"] = void 0; -var ___extend_33 = ___interopRequireDefault_33(_$extend_53); +var ___extend_33 = ___interopRequireDefault_33(_$extend_52); -var __is_33 = ___interopRequireWildcard_33(_$is_57); +var __is_33 = ___interopRequireWildcard_33(_$is_56); -var ___rect_33 = ___interopRequireDefault_33(_$rect_63); +var ___rect_33 = ___interopRequireDefault_33(_$rect_62); function ___getRequireWildcardCache_33() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_33 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_33(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_33(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_33(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_33(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_33(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___interopRequireDefault_33(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -7944,7 +8307,6 @@ var __defaults_33 = { var restrict = { start: __start_33, set: set, - getRestrictionRect: getRestrictionRect, defaults: __defaults_33 }; var ___default_33 = restrict; @@ -7958,11 +8320,11 @@ Object.defineProperty(_$edges_32, "__esModule", { }); _$edges_32["default"] = void 0; -var ___extend_32 = ___interopRequireDefault_32(_$extend_53); +var ___extend_32 = ___interopRequireDefault_32(_$extend_52); -var ___rect_32 = ___interopRequireDefault_32(_$rect_63); +var ___rect_32 = ___interopRequireDefault_32(_$rect_62); -var _pointer = ___interopRequireDefault_32(_$pointer_33); +/* removed: var _$pointer_33 = require("./pointer.js"); */; function ___interopRequireDefault_32(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -7976,7 +8338,6 @@ function ___interopRequireDefault_32(obj) { return obj && obj.__esModule ? obj : // outer: { top: 0, left: 0, right: 600, bottom: 600 }, // }, // }) -var __getRestrictionRect_32 = _pointer["default"].getRestrictionRect; var noInner = { top: +Infinity, left: +Infinity, @@ -7998,7 +8359,7 @@ function __start_32(_ref) { var offset; if (options) { - var offsetRect = __getRestrictionRect_32(options.offset, interaction, interaction.coords.start.page); + var offsetRect = (0, _$pointer_33.getRestrictionRect)(options.offset, interaction, interaction.coords.start.page); offset = ___rect_32["default"].rectToXY(offsetRect); } @@ -8027,8 +8388,8 @@ function __set_32(_ref2) { } var page = (0, ___extend_32["default"])({}, coords); - var inner = __getRestrictionRect_32(options.inner, interaction, page) || {}; - var outer = __getRestrictionRect_32(options.outer, interaction, page) || {}; + var inner = (0, _$pointer_33.getRestrictionRect)(options.inner, interaction, page) || {}; + var outer = (0, _$pointer_33.getRestrictionRect)(options.outer, interaction, page) || {}; fixRect(inner, noInner); fixRect(outer, noOuter); @@ -8069,7 +8430,6 @@ var __defaults_32 = { var restrictEdges = { noInner: noInner, noOuter: noOuter, - getRestrictionRect: __getRestrictionRect_32, start: __start_32, set: __set_32, defaults: __defaults_32 @@ -8085,7 +8445,7 @@ Object.defineProperty(_$rect_34, "__esModule", { }); _$rect_34["default"] = void 0; -var ___extend_34 = ___interopRequireDefault_34(_$extend_53); +var ___extend_34 = ___interopRequireDefault_34(_$extend_52); var ___pointer_34 = ___interopRequireDefault_34(_$pointer_33); @@ -8120,12 +8480,14 @@ Object.defineProperty(_$size_35, "__esModule", { }); _$size_35["default"] = void 0; -var ___extend_35 = ___interopRequireDefault_35(_$extend_53); +var ___extend_35 = ___interopRequireDefault_35(_$extend_52); -var ___rect_35 = ___interopRequireDefault_35(_$rect_63); +var ___rect_35 = ___interopRequireDefault_35(_$rect_62); var _edges = ___interopRequireDefault_35(_$edges_32); +/* removed: var _$pointer_33 = require("./pointer.js"); */; + function ___interopRequireDefault_35(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var noMin = { @@ -8153,8 +8515,8 @@ function __set_35(arg) { var rect = ___rect_35["default"].xywhToTlbr(interaction.resizeRects.inverted); - var minSize = ___rect_35["default"].tlbrToXywh(_edges["default"].getRestrictionRect(options.min, interaction, arg.coords)) || noMin; - var maxSize = ___rect_35["default"].tlbrToXywh(_edges["default"].getRestrictionRect(options.max, interaction, arg.coords)) || noMax; + var minSize = ___rect_35["default"].tlbrToXywh((0, _$pointer_33.getRestrictionRect)(options.min, interaction, arg.coords)) || noMin; + var maxSize = ___rect_35["default"].tlbrToXywh((0, _$pointer_33.getRestrictionRect)(options.max, interaction, arg.coords)) || noMax; state.options = { endOnly: options.endOnly, inner: (0, ___extend_35["default"])({}, _edges["default"].noInner), @@ -8199,16 +8561,18 @@ _$size_35["default"] = ___default_35; var _$pointer_37 = {}; "use strict"; +function ___typeof_37(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_37 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_37 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_37(obj); } + Object.defineProperty(_$pointer_37, "__esModule", { value: true }); _$pointer_37["default"] = void 0; -var __utils_37 = ___interopRequireWildcard_37(_$utils_56); +var __utils_37 = ___interopRequireWildcard_37(_$utils_55); function ___getRequireWildcardCache_37() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_37 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_37(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_37(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_37(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_37(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_37(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function __start_37(arg) { var interaction = arg.interaction, @@ -8384,20 +8748,22 @@ _$pointer_37["default"] = ___default_37; var _$size_38 = {}; "use strict"; +function ___typeof_38(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_38 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_38 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_38(obj); } + Object.defineProperty(_$size_38, "__esModule", { value: true }); _$size_38["default"] = void 0; -var ___extend_38 = ___interopRequireDefault_38(_$extend_53); +var ___extend_38 = ___interopRequireDefault_38(_$extend_52); -var __is_38 = ___interopRequireWildcard_38(_$is_57); +var __is_38 = ___interopRequireWildcard_38(_$is_56); var ___pointer_38 = ___interopRequireDefault_38(_$pointer_37); function ___getRequireWildcardCache_38() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_38 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_38(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_38(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_38(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_38(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_38(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___interopRequireDefault_38(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -8520,9 +8886,9 @@ Object.defineProperty(_$edges_36, "__esModule", { }); _$edges_36["default"] = void 0; -var ___clone_36 = ___interopRequireDefault_36(_$clone_49); +var ___clone_36 = ___interopRequireDefault_36(_$clone_48); -var ___extend_36 = ___interopRequireDefault_36(_$extend_53); +var ___extend_36 = ___interopRequireDefault_36(_$extend_52); var _size = ___interopRequireDefault_36(_$size_38); @@ -8635,7 +9001,7 @@ _$PointerEvent_39["default"] = void 0; var ___BaseEvent2_39 = ___interopRequireDefault_39(_$BaseEvent_13); -var ___pointerUtils_39 = ___interopRequireDefault_39(_$pointerUtils_61); +var ___pointerUtils_39 = ___interopRequireDefault_39(_$pointerUtils_60); function ___interopRequireDefault_39(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } @@ -8657,6 +9023,21 @@ function ___inherits_39(subClass, superClass) { if (typeof superClass !== "funct function ___setPrototypeOf_39(o, p) { ___setPrototypeOf_39 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ___setPrototypeOf_39(o, p); } +function ___defineProperty_39(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + /** */ var PointerEvent = /*#__PURE__*/ @@ -8671,6 +9052,28 @@ function (_BaseEvent) { _this = ___possibleConstructorReturn_39(this, ___getPrototypeOf_39(PointerEvent).call(this, interaction)); + ___defineProperty_39(___assertThisInitialized_39(_this), "type", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "originalEvent", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "pointerId", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "pointerType", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "double", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "pageX", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "pageY", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "clientX", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "clientY", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "dt", void 0); + + ___defineProperty_39(___assertThisInitialized_39(_this), "eventable", void 0); + ___pointerUtils_39["default"].pointerExtend(___assertThisInitialized_39(_this), event); if (event !== pointer) { @@ -8738,12 +9141,14 @@ _$PointerEvent_39["default"] = PointerEvent; var _$base_40 = {}; "use strict"; +function ___typeof_40(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_40 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_40 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_40(obj); } + Object.defineProperty(_$base_40, "__esModule", { value: true }); _$base_40["default"] = void 0; -var __utils_40 = ___interopRequireWildcard_40(_$utils_56); +var __utils_40 = ___interopRequireWildcard_40(_$utils_55); var _PointerEvent = ___interopRequireDefault_40(_$PointerEvent_39); @@ -8751,11 +9156,8 @@ function ___interopRequireDefault_40(obj) { return obj && obj.__esModule ? obj : function ___getRequireWildcardCache_40() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_40 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_40(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_40(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_40(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_40(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_40(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -var signals = new __utils_40.Signals(); -var simpleSignals = ['down', 'up', 'cancel']; -var simpleEvents = ['down', 'up', 'cancel']; var __defaults_40 = { holdDuration: 600, ignoreFrom: null, @@ -8768,11 +9170,27 @@ var __defaults_40 = { var pointerEvents = { id: 'pointer-events/base', install: __install_40, - signals: signals, + listeners: { + 'interactions:new': addInteractionProps, + 'interactions:update-pointer': addHoldInfo, + 'interactions:move': moveAndClearHold, + 'interactions:down': function interactionsDown(arg, scope) { + downAndStartHold(arg, scope); + fire(arg, scope); + }, + 'interactions:up': function interactionsUp(arg, scope) { + clearHold(arg); + fire(arg, scope); + tapAfterUp(arg, scope); + }, + 'interactions:cancel': function interactionsCancel(arg, scope) { + clearHold(arg); + fire(arg, scope); + } + }, PointerEvent: _PointerEvent["default"], fire: fire, collectEventTargets: collectEventTargets, - createSignalListener: createSignalListener, defaults: __defaults_40, types: ['down', 'move', 'up', 'cancel', 'tap', 'doubletap', 'hold'] }; @@ -8782,12 +9200,13 @@ function fire(arg, scope) { pointer = arg.pointer, event = arg.event, eventTarget = arg.eventTarget, - _arg$type = arg.type, - type = _arg$type === void 0 ? arg.pointerEvent.type : _arg$type, + type = arg.type, _arg$targets = arg.targets, - targets = _arg$targets === void 0 ? collectEventTargets(arg) : _arg$targets; - var _arg$pointerEvent = arg.pointerEvent, - pointerEvent = _arg$pointerEvent === void 0 ? new _PointerEvent["default"](type, pointer, event, eventTarget, interaction, scope.now()) : _arg$pointerEvent; + targets = _arg$targets === void 0 ? collectEventTargets(arg, scope) : _arg$targets; + var pointerEvent = new _PointerEvent["default"](type, pointer, event, eventTarget, interaction, scope.now()); + scope.fire('pointerEvents:new', { + pointerEvent: pointerEvent + }); var signalArg = { interaction: interaction, pointer: pointer, @@ -8820,7 +9239,7 @@ function fire(arg, scope) { } } - signals.fire('fired', signalArg); + scope.fire('pointerEvents:fired', signalArg); if (type === 'tap') { // if pointerEvent should make a double tap, create and fire a doubletap @@ -8839,7 +9258,7 @@ function fire(arg, scope) { return pointerEvent; } -function collectEventTargets(_ref) { +function collectEventTargets(_ref, scope) { var interaction = _ref.interaction, pointer = _ref.pointer, event = _ref.event, @@ -8871,7 +9290,7 @@ function collectEventTargets(_ref) { _ref2 = path[_i]; var node = _ref2; signalArg.node = node; - signals.fire('collect-targets', signalArg); + scope.fire('pointerEvents:collect-targets', signalArg); } if (type === 'hold') { @@ -8883,158 +9302,137 @@ function collectEventTargets(_ref) { return signalArg.targets; } -function __install_40(scope) { - var interactions = scope.interactions; - scope.pointerEvents = pointerEvents; - scope.defaults.actions.pointerEvents = pointerEvents.defaults; - interactions.signals.on('new', function (_ref3) { - var interaction = _ref3.interaction; - interaction.prevTap = null; // the most recent tap event on this interaction +function addInteractionProps(_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 (_ref4) { - var down = _ref4.down, - pointerInfo = _ref4.pointerInfo; + interaction.tapTime = 0; // time of the most recent tap event +} - if (!down && pointerInfo.hold) { - return; - } +function addHoldInfo(_ref4) { + var down = _ref4.down, + pointerInfo = _ref4.pointerInfo; - pointerInfo.hold = { - duration: Infinity, - timeout: null - }; - }); - 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)) { - if (interaction.pointerIsDown) { - clearTimeout(interaction.pointers[pointerIndex].hold.timeout); - } + if (!down && pointerInfo.hold) { + return; + } - fire({ - interaction: interaction, - pointer: pointer, - event: event, - eventTarget: eventTarget, - type: 'move' - }, scope); + pointerInfo.hold = { + duration: Infinity, + timeout: null + }; +} + +function clearHold(_ref5) { + var interaction = _ref5.interaction, + pointerIndex = _ref5.pointerIndex; + + if (interaction.pointers[pointerIndex].hold) { + clearTimeout(interaction.pointers[pointerIndex].hold.timeout); + } +} + +function moveAndClearHold(_ref6, scope) { + var interaction = _ref6.interaction, + pointer = _ref6.pointer, + event = _ref6.event, + eventTarget = _ref6.eventTarget, + duplicate = _ref6.duplicate; + var pointerIndex = interaction.getPointerIndex(pointer); + + if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) { + if (interaction.pointerIsDown) { + clearTimeout(interaction.pointers[pointerIndex].hold.timeout); } - }); - 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_40.dom.getPath(eventTarget); - var signalArg = { + + fire({ interaction: interaction, pointer: pointer, event: event, eventTarget: eventTarget, - type: 'hold', - targets: [], - path: path, - node: null - }; - - for (var _i2 = 0; _i2 < path.length; _i2++) { - var _ref7; - - _ref7 = path[_i2]; - var node = _ref7; - signalArg.node = node; - signals.fire('collect-targets', signalArg); - } - - if (!signalArg.targets.length) { - return; - } + type: 'move' + }, scope); + } +} - var minDuration = Infinity; +function downAndStartHold(_ref7, scope) { + var interaction = _ref7.interaction, + pointer = _ref7.pointer, + event = _ref7.event, + eventTarget = _ref7.eventTarget, + pointerIndex = _ref7.pointerIndex; + var timer = interaction.pointers[pointerIndex].hold; + var path = __utils_40.dom.getPath(eventTarget); + var signalArg = { + interaction: interaction, + pointer: pointer, + event: event, + eventTarget: eventTarget, + type: 'hold', + targets: [], + path: path, + node: null + }; - for (var _i3 = 0; _i3 < signalArg.targets.length; _i3++) { - var _ref8; + for (var _i2 = 0; _i2 < path.length; _i2++) { + var _ref8; - _ref8 = signalArg.targets[_i3]; - var target = _ref8; - var holdDuration = target.eventable.options.holdDuration; + _ref8 = path[_i2]; + var node = _ref8; + signalArg.node = node; + scope.fire('pointerEvents:collect-targets', signalArg); + } - if (holdDuration < minDuration) { - minDuration = holdDuration; - } - } + if (!signalArg.targets.length) { + return; + } - timer.duration = minDuration; - timer.timeout = setTimeout(function () { - fire({ - interaction: interaction, - eventTarget: eventTarget, - pointer: pointer, - event: event, - type: 'hold' - }, scope); - }, minDuration); - }); - var _arr = ['up', 'cancel']; + var minDuration = Infinity; - for (var _i4 = 0; _i4 < _arr.length; _i4++) { - var signalName = _arr[_i4]; - interactions.signals.on(signalName, function (_ref10) { - var interaction = _ref10.interaction, - pointerIndex = _ref10.pointerIndex; + for (var _i3 = 0; _i3 < signalArg.targets.length; _i3++) { + var _ref9; - if (interaction.pointers[pointerIndex].hold) { - clearTimeout(interaction.pointers[pointerIndex].hold.timeout); - } - }); - } + _ref9 = signalArg.targets[_i3]; + var target = _ref9; + var holdDuration = target.eventable.options.holdDuration; - for (var i = 0; i < simpleSignals.length; i++) { - interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i], scope)); + if (holdDuration < minDuration) { + minDuration = holdDuration; + } } - interactions.signals.on('up', function (_ref9) { - var interaction = _ref9.interaction, - pointer = _ref9.pointer, - event = _ref9.event, - eventTarget = _ref9.eventTarget; - - if (!interaction.pointerWasMoved) { - fire({ - interaction: interaction, - eventTarget: eventTarget, - pointer: pointer, - event: event, - type: 'tap' - }, scope); - } - }); + timer.duration = minDuration; + timer.timeout = setTimeout(function () { + fire({ + interaction: interaction, + eventTarget: eventTarget, + pointer: pointer, + event: event, + type: 'hold' + }, scope); + }, minDuration); } -function createSignalListener(type, scope) { - return function (_ref11) { - var interaction = _ref11.interaction, - pointer = _ref11.pointer, - event = _ref11.event, - eventTarget = _ref11.eventTarget; +function tapAfterUp(_ref10, scope) { + var interaction = _ref10.interaction, + pointer = _ref10.pointer, + event = _ref10.event, + eventTarget = _ref10.eventTarget; + + if (!interaction.pointerWasMoved) { fire({ interaction: interaction, eventTarget: eventTarget, pointer: pointer, event: event, - type: type + type: 'tap' }, scope); - }; + } +} + +function __install_40(scope) { + scope.pointerEvents = pointerEvents; + scope.defaults.actions.pointerEvents = pointerEvents.defaults; } var ___default_40 = pointerEvents; @@ -9053,20 +9451,8 @@ var ___base_41 = ___interopRequireDefault_41(_$base_40); function ___interopRequireDefault_41(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function __install_41(scope) { - var pointerEvents = scope.pointerEvents, - interactions = scope.interactions; scope.usePlugin(___base_41["default"]); - pointerEvents.signals.on('new', onNew); - pointerEvents.signals.on('fired', function (arg) { - return onFired(arg, scope); - }); - var _arr = ['move', 'up', 'cancel', 'endall']; - - for (var _i = 0; _i < _arr.length; _i++) { - var signal = _arr[_i]; - interactions.signals.on(signal, endHoldRepeat); - } // don't repeat by default - + var pointerEvents = scope.pointerEvents; // don't repeat by default pointerEvents.defaults.holdRepeatInterval = 0; pointerEvents.types.push('holdrepeat'); @@ -9124,7 +9510,14 @@ function endHoldRepeat(_ref3) { var ___default_41 = { id: 'pointer-events/holdRepeat', - install: __install_41 + install: __install_41, + listeners: ['move', 'up', 'cancel', 'endall'].reduce(function (acc, enderTypes) { + acc["pointerEvents:".concat(enderTypes)] = endHoldRepeat; + return acc; + }, { + 'pointerEvents:new': onNew, + 'pointerEvents:fired': onFired + }) }; _$holdRepeat_41["default"] = ___default_41; @@ -9136,51 +9529,17 @@ Object.defineProperty(_$interactableTargets_43, "__esModule", { }); _$interactableTargets_43["default"] = void 0; -/* removed: var _$arr_47 = require("@interactjs/utils/arr"); */; +/* removed: var _$arr_46 = require("../utils/arr.js"); */; -var ___extend_43 = ___interopRequireDefault_43(_$extend_53); +var ___extend_43 = ___interopRequireDefault_43(_$extend_52); function ___interopRequireDefault_43(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function __install_43(scope) { var pointerEvents = scope.pointerEvents, actions = scope.actions, - Interactable = scope.Interactable, - interactables = scope.interactables; - pointerEvents.signals.on('collect-targets', function (_ref) { - var targets = _ref.targets, - node = _ref.node, - type = _ref.type, - eventTarget = _ref.eventTarget; - scope.interactables.forEachMatch(node, function (interactable) { - var eventable = interactable.events; - var options = eventable.options; - - if (eventable.types[type] && eventable.types[type].length && interactable.testIgnoreAllow(options, node, eventTarget)) { - targets.push({ - node: node, - eventable: eventable, - props: { - interactable: interactable - } - }); - } - }); - }); - interactables.signals.on('new', function (_ref2) { - var interactable = _ref2.interactable; - - interactable.events.getRect = function (element) { - return interactable.getRect(element); - }; - }); - interactables.signals.on('set', function (_ref3) { - var interactable = _ref3.interactable, - options = _ref3.options; - (0, ___extend_43["default"])(interactable.events.options, pointerEvents.defaults); - (0, ___extend_43["default"])(interactable.events.options, options.pointerEvents || {}); - }); - (0, _$arr_47.merge)(actions.eventTypes, pointerEvents.types); + Interactable = scope.Interactable; + (0, _$arr_46.merge)(actions.eventTypes, pointerEvents.types); Interactable.prototype.pointerEvents = pointerEventsMethod; var __backCompatOption = Interactable.prototype._backCompatOption; @@ -9200,10 +9559,46 @@ function pointerEventsMethod(options) { return this; } -var ___default_43 = { +var plugin = { id: 'pointer-events/interactableTargets', - install: __install_43 + install: __install_43, + listeners: { + 'pointerEvents:collect-targets': function pointerEventsCollectTargets(_ref, scope) { + var targets = _ref.targets, + node = _ref.node, + type = _ref.type, + eventTarget = _ref.eventTarget; + scope.interactables.forEachMatch(node, function (interactable) { + var eventable = interactable.events; + var options = eventable.options; + + if (eventable.types[type] && eventable.types[type].length && interactable.testIgnoreAllow(options, node, eventTarget)) { + targets.push({ + node: node, + eventable: eventable, + props: { + interactable: interactable + } + }); + } + }); + }, + 'interactable:new': function interactableNew(_ref2) { + var interactable = _ref2.interactable; + + interactable.events.getRect = function (element) { + return interactable.getRect(element); + }; + }, + 'interactable:set': function interactableSet(_ref3, scope) { + var interactable = _ref3.interactable, + options = _ref3.options; + (0, ___extend_43["default"])(interactable.events.options, scope.pointerEvents.defaults); + (0, ___extend_43["default"])(interactable.events.options, options.pointerEvents || {}); + } + } }; +var ___default_43 = plugin; _$interactableTargets_43["default"] = ___default_43; var _$pointerEvents_42 = {}; @@ -9259,15 +9654,14 @@ Object.defineProperty(_$reflow_44, "__esModule", { _$reflow_44.install = __install_44; _$reflow_44["default"] = void 0; -/* removed: var _$InteractEvent_15 = require("@interactjs/core/InteractEvent"); */; +/* removed: var _$InteractEvent_15 = require("../core/InteractEvent.js"); */; -/* removed: var _$utils_56 = require("@interactjs/utils"); */; +/* removed: var _$utils_55 = require("../utils/index.js"); */; _$InteractEvent_15.EventPhase.Reflow = 'reflow'; function __install_44(scope) { var actions = scope.actions, - interactions = scope.interactions, Interactable = scope.Interactable; // add action reflow event types for (var _i = 0; _i < actions.names.length; _i++) { @@ -9276,20 +9670,7 @@ function __install_44(scope) { _ref = actions.names[_i]; var actionName = _ref; actions.eventTypes.push("".concat(actionName, "reflow")); - } // remove completed reflow interactions - - - interactions.signals.on('stop', function (_ref2) { - var interaction = _ref2.interaction; - - if (interaction.pointerType === _$InteractEvent_15.EventPhase.Reflow) { - if (interaction._reflowResolve) { - interaction._reflowResolve(); - } - - _$utils_56.arr.remove(scope.interactions.list, interaction); - } - }); + } /** * ```js * const interactable = interact(target) @@ -9304,30 +9685,31 @@ function __install_44(scope) { * * @param { Object } action The action to begin * @param { string } action.name The name of the action - * @returns { Promise } + * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended */ + Interactable.prototype.reflow = function (action) { return reflow(this, action, scope); }; } function reflow(interactable, action, scope) { - var elements = _$utils_56.is.string(interactable.target) ? _$utils_56.arr.from(interactable._context.querySelectorAll(interactable.target)) : [interactable.target]; // tslint:disable-next-line variable-name + var elements = _$utils_55.is.string(interactable.target) ? _$utils_55.arr.from(interactable._context.querySelectorAll(interactable.target)) : [interactable.target]; // tslint:disable-next-line variable-name - var Promise = _$utils_56.win.window.Promise; + var Promise = _$utils_55.win.window.Promise; var promises = Promise ? [] : null; var _loop = function _loop() { - _ref3 = elements[_i2]; - var element = _ref3; + _ref2 = elements[_i2]; + var element = _ref2; var rect = interactable.getRect(element); if (!rect) { return "break"; } - var runningInteraction = _$utils_56.arr.find(scope.interactions.list, function (interaction) { + var runningInteraction = _$utils_55.arr.find(scope.interactions.list, function (interaction) { return interaction.interacting() && interaction.interactable === interactable && interaction.element === element && interaction.prepared.name === action.name; }); @@ -9342,7 +9724,7 @@ function reflow(interactable, action, scope) { }); } } else { - var xywh = _$utils_56.rect.tlbrToXywh(rect); + var xywh = _$utils_55.rect.tlbrToXywh(rect); var coords = { page: { @@ -9356,7 +9738,7 @@ function reflow(interactable, action, scope) { timeStamp: scope.now() }; - var event = _$utils_56.pointer.coordsToEvent(coords); + var event = _$utils_55.pointer.coordsToEvent(coords); reflowPromise = startReflow(scope, interactable, element, action, event); } @@ -9367,7 +9749,7 @@ function reflow(interactable, action, scope) { }; for (var _i2 = 0; _i2 < elements.length; _i2++) { - var _ref3; + var _ref2; var _ret = _loop(); @@ -9392,13 +9774,13 @@ function startReflow(scope, interactable, element, action, event) { }; interaction.interactable = interactable; interaction.element = element; - interaction.prepared = (0, _$utils_56.extend)({}, action); + interaction.prepared = (0, _$utils_55.extend)({}, action); interaction.prevEvent = event; interaction.updatePointer(event, event, element, true); interaction._doPhase(signalArg); - var reflowPromise = _$utils_56.win.window.Promise ? new _$utils_56.win.window.Promise(function (resolve) { + var reflowPromise = _$utils_55.win.window.Promise ? new _$utils_55.win.window.Promise(function (resolve) { interaction._reflowResolve = resolve; }) : null; interaction._reflowPromise = reflowPromise; @@ -9418,13 +9800,29 @@ function startReflow(scope, interactable, element, action, event) { var ___default_44 = { id: 'reflow', - install: __install_44 + install: __install_44, + listeners: { + // remove completed reflow interactions + 'interactions:stop': function interactionsStop(_ref3, scope) { + var interaction = _ref3.interaction; + + if (interaction.pointerType === _$InteractEvent_15.EventPhase.Reflow) { + if (interaction._reflowResolve) { + interaction._reflowResolve(); + } + + _$utils_55.arr.remove(scope.interactions.list, interaction); + } + } + } }; _$reflow_44["default"] = ___default_44; var _$interact_28 = {}; "use strict"; +function ___typeof_28(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_28 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_28 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_28(obj); } + Object.defineProperty(_$interact_28, "__esModule", { value: true }); @@ -9432,17 +9830,17 @@ _$interact_28["default"] = _$interact_28.scope = _$interact_28.interact = void 0 var ___scope_28 = _$scope_24({}); -var __utils_28 = ___interopRequireWildcard_28(_$utils_56); - -var ___browser_28 = ___interopRequireDefault_28(_$browser_48); +var ___browser_28 = ___interopRequireDefault_28(_$browser_47); -var ___events_28 = ___interopRequireDefault_28(_$events_52); +var ___events_28 = ___interopRequireDefault_28(_$events_51); -function ___interopRequireDefault_28(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +var __utils_28 = ___interopRequireWildcard_28(_$utils_55); function ___getRequireWildcardCache_28() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_28 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_28(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_28(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_28(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_28(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_28(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function ___interopRequireDefault_28(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /** @module interact */ var globalEvents = {}; @@ -9630,14 +10028,6 @@ function off(type, listener, options) { return interact; } -/** - * Returns an object which exposes internal data - * @alias module:interact.debug - * - * @return {object} An object with properties that outline the current state - * and expose internal functions and variables - */ - interact.debug = debug; @@ -9721,18 +10111,20 @@ function pointerMoveTolerance(newValue) { return scope.interactions.pointerMoveTolerance; } -scope.interactables.signals.on('unset', function (_ref4) { - var interactable = _ref4.interactable; - scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1); // Stop related interactions when an Interactable is unset +scope.addListeners({ + 'interactable:unset': function interactableUnset(_ref4) { + var interactable = _ref4.interactable; + scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1); // Stop related interactions when an Interactable is unset - for (var _i4 = 0; _i4 < scope.interactions.list.length; _i4++) { - var _ref5; + for (var _i4 = 0; _i4 < scope.interactions.list.length; _i4++) { + var _ref5; - _ref5 = scope.interactions.list[_i4]; - var interaction = _ref5; + _ref5 = scope.interactions.list[_i4]; + var interaction = _ref5; - if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) { - interaction.stop(); + if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) { + interaction.stop(); + } } } }); @@ -9752,6 +10144,8 @@ _$interact_28["default"] = ___default_28; var _$interact_27 = {}; "use strict"; +function ___typeof_27(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_27 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_27 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_27(obj); } + Object.defineProperty(_$interact_27, "__esModule", { value: true }); @@ -9759,7 +10153,7 @@ _$interact_27.init = __init_27; Object.defineProperty(_$interact_27, "autoScroll", { enumerable: true, get: function get() { - return _autoScroll["default"]; + return _index2["default"]; } }); Object.defineProperty(_$interact_27, "interactablePreventDefault", { @@ -9771,7 +10165,7 @@ Object.defineProperty(_$interact_27, "interactablePreventDefault", { Object.defineProperty(_$interact_27, "inertia", { enumerable: true, get: function get() { - return _inertia["default"]; + return _index5["default"]; } }); Object.defineProperty(_$interact_27, "modifiers", { @@ -9783,7 +10177,7 @@ Object.defineProperty(_$interact_27, "modifiers", { Object.defineProperty(_$interact_27, "reflow", { enumerable: true, get: function get() { - return _reflow["default"]; + return _index8["default"]; } }); Object.defineProperty(_$interact_27, "interact", { @@ -9798,25 +10192,25 @@ var actions = ___interopRequireWildcard_27(_$actions_5); _$interact_27.actions = actions; -var _autoScroll = ___interopRequireDefault_27(_$autoScroll_7); +var _index2 = ___interopRequireDefault_27(_$autoScroll_7); var autoStart = ___interopRequireWildcard_27(_$autoStart_12); var _interactablePreventDefault = ___interopRequireDefault_27(_$interactablePreventDefault_21); -var _devTools = ___interopRequireDefault_27(_$devTools_25); +var _index4 = ___interopRequireDefault_27(_$devTools_25); -var _inertia = ___interopRequireDefault_27(_$inertia_26); - -var modifiers = ___interopRequireWildcard_27(_$modifiers_31); +var _index5 = ___interopRequireDefault_27(_$inertia_26); var ___base_27 = ___interopRequireDefault_27(_$base_30); +var modifiers = ___interopRequireWildcard_27(_$modifiers_31); + var __pointerEvents_27 = ___interopRequireWildcard_27(_$pointerEvents_42); _$interact_27.pointerEvents = __pointerEvents_27; -var _reflow = ___interopRequireDefault_27(_$reflow_44); +var _index8 = ___interopRequireDefault_27(_$reflow_44); var _interact = ___interopRequireWildcard_27(_$interact_28); @@ -9824,7 +10218,7 @@ function ___interopRequireDefault_27(obj) { return obj && obj.__esModule ? obj : function ___getRequireWildcardCache_27() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_27 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_27(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_27(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_27(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_27(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_27(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function __init_27(window) { _interact.scope.init(window); @@ -9835,16 +10229,16 @@ function __init_27(window) { _interact["default"].use(__pointerEvents_27); // inertia - _interact["default"].use(_inertia["default"]); // autoStart, hold + _interact["default"].use(_index5["default"]); // snap, resize, etc. - _interact["default"].use(autoStart); // drag and drop, resize, gesture + _interact["default"].use(___base_27["default"]); // autoStart, hold - _interact["default"].use(actions); // snap, resize, etc. + _interact["default"].use(autoStart); // drag and drop, resize, gesture - _interact["default"].use(___base_27["default"]); // for backwrads compatibility + _interact["default"].use(actions); // for backwrads compatibility for (var type in modifiers) { @@ -9856,21 +10250,21 @@ function __init_27(window) { } // autoScroll - _interact["default"].use(_autoScroll["default"]); // reflow + _interact["default"].use(_index2["default"]); // reflow - _interact["default"].use(_reflow["default"]); // eslint-disable-next-line no-undef + _interact["default"].use(_index8["default"]); // eslint-disable-next-line no-undef - if ("production" !== 'production') { - _interact["default"].use(_devTools["default"]); + if (undefined !== 'production') { + _interact["default"].use(_index4["default"]); } return _interact["default"]; } // eslint-disable-next-line no-undef -_interact["default"].version = "1.6.3"; +_interact["default"].version = "1.7.0"; var ___default_27 = _interact["default"]; _$interact_27["default"] = ___default_27; @@ -9878,31 +10272,32 @@ var _$types_45 = {}; /// "use strict"; -var _$grid_64 = {}; +var _$grid_63 = {}; "use strict"; -Object.defineProperty(_$grid_64, "__esModule", { +Object.defineProperty(_$grid_63, "__esModule", { value: true }); -_$grid_64["default"] = void 0; +_$grid_63["default"] = void 0; -function ___slicedToArray_64(arr, i) { return ___arrayWithHoles_64(arr) || ___iterableToArrayLimit_64(arr, i) || ___nonIterableRest_64(); } +function ___slicedToArray_63(arr, i) { return ___arrayWithHoles_63(arr) || ___iterableToArrayLimit_63(arr, i) || ___nonIterableRest_63(); } -function ___nonIterableRest_64() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } +function ___nonIterableRest_63() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } -function ___iterableToArrayLimit_64(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } 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_63(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } 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_64(arr) { if (Array.isArray(arr)) return arr; } +function ___arrayWithHoles_63(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_64(_ref, 2), + var _ref2 = ___slicedToArray_63(_ref, 2), xField = _ref2[0], yField = _ref2[1]; return xField in grid || yField in grid; }); - return function (x, y) { + + var gridFunc = function snapGrid(x, y) { var range = grid.range, _grid$limits = grid.limits, limits = _grid$limits === void 0 ? { @@ -9926,7 +10321,7 @@ function createGrid(grid) { _ref3 = coordFields[_i2]; var _ref4 = _ref3, - _ref5 = ___slicedToArray_64(_ref4, 2), + _ref5 = ___slicedToArray_63(_ref4, 2), xField = _ref5[0], yField = _ref5[1]; @@ -9938,27 +10333,32 @@ function createGrid(grid) { return result; }; + + gridFunc._isSnapGrid = true; + gridFunc.grid = grid; + gridFunc.coordFields = coordFields; + return gridFunc; } -var ___default_64 = createGrid; -_$grid_64["default"] = ___default_64; +var ___default_63 = createGrid; +_$grid_63["default"] = ___default_63; -var _$snappers_65 = {}; +var _$snappers_64 = {}; "use strict"; -Object.defineProperty(_$snappers_65, "__esModule", { +Object.defineProperty(_$snappers_64, "__esModule", { value: true }); -Object.defineProperty(_$snappers_65, "grid", { +Object.defineProperty(_$snappers_64, "grid", { enumerable: true, get: function get() { return _grid["default"]; } }); -var _grid = ___interopRequireDefault_65(_$grid_64); +var _grid = ___interopRequireDefault_64(_$grid_63); -function ___interopRequireDefault_65(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function ___interopRequireDefault_64(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var _$index_29 = { exports: {} }; "use strict"; @@ -9969,21 +10369,21 @@ Object.defineProperty(_$index_29.exports, "__esModule", { _$index_29.exports.init = __init_29; _$index_29.exports["default"] = void 0; -var ___interact_29 = ___interopRequireWildcard_29(_$interact_27); +var ___index_29 = ___interopRequireWildcard_29(_$interact_27); var __modifiers_29 = ___interopRequireWildcard_29(_$modifiers_31); _$types_45; -var ___extend_29 = ___interopRequireDefault_29(_$extend_53); +var ___extend_29 = ___interopRequireDefault_29(_$extend_52); -var snappers = ___interopRequireWildcard_29(_$snappers_65); +var snappers = ___interopRequireWildcard_29(_$snappers_64); function ___interopRequireDefault_29(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ___getRequireWildcardCache_29() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); ___getRequireWildcardCache_29 = function _getRequireWildcardCache() { return cache; }; return cache; } -function ___interopRequireWildcard_29(obj) { if (obj && obj.__esModule) { return obj; } var cache = ___getRequireWildcardCache_29(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } +function ___interopRequireWildcard_29(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || ___typeof_29(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = ___getRequireWildcardCache_29(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ___typeof_29(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ___typeof_29 = function _typeof(obj) { return typeof obj; }; } else { ___typeof_29 = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ___typeof_29(obj); } @@ -9992,25 +10392,25 @@ if ((typeof window === "undefined" ? "undefined" : ___typeof_29(window)) === 'ob } function __init_29(win) { - (0, ___interact_29.init)(win); - return ___interact_29["default"].use({ + (0, ___index_29.init)(win); + return ___index_29["default"].use({ id: 'interactjs', install: function install() { - ___interact_29["default"].modifiers = (0, ___extend_29["default"])({}, __modifiers_29); - ___interact_29["default"].snappers = snappers; - ___interact_29["default"].createSnapGrid = ___interact_29["default"].snappers.grid; + ___index_29["default"].modifiers = (0, ___extend_29["default"])({}, __modifiers_29); + ___index_29["default"].snappers = snappers; + ___index_29["default"].createSnapGrid = ___index_29["default"].snappers.grid; } }); } -var ___default_29 = ___interact_29["default"]; +var ___default_29 = ___index_29["default"]; _$index_29.exports["default"] = ___default_29; -___interact_29["default"]["default"] = ___interact_29["default"] // tslint:disable-line no-string-literal +___index_29["default"]["default"] = ___index_29["default"] // tslint:disable-line no-string-literal ; -___interact_29["default"].init = __init_29; // tslint:disable-line no-string-literal +___index_29["default"].init = __init_29; // tslint:disable-line no-string-literal if (("object" === "undefined" ? "undefined" : ___typeof_29(_$index_29)) === 'object' && !!_$index_29) { - _$index_29.exports = ___interact_29["default"]; + _$index_29.exports = ___index_29["default"]; } _$index_29 = _$index_29.exports diff --git a/packages/interactjs/dist/interact.js.map b/packages/interactjs/dist/interact.js.map index a4d331335..7cc6f7847 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","../core/scope.ts","../core/interactions.ts","../core/Interaction.ts","../utils/arr.ts","../utils/domObjects.ts","../utils/isWindow.ts","../utils/window.ts","../utils/is.ts","../utils/browser.ts","../utils/domUtils.ts","../utils/clone.ts","../utils/pointerExtend.ts","../utils/hypot.ts","../utils/pointerUtils.ts","../utils/events.ts","../utils/extend.ts","../utils/rect.ts","../utils/getOriginXY.ts","../utils/normalizeListeners.ts","../utils/raf.ts","../utils/Signals.ts","../utils/index.ts","../core/defaultOptions.ts","../core/Eventable.ts","../core/Interactable.ts","../core/InteractableSet.ts","../core/BaseEvent.ts","../core/InteractEvent.ts","../core/PointerInfo.ts","../core/interactionFinder.ts","../actions/drag.ts","../actions/drop/DropEvent.ts","../actions/drop/index.ts","../actions/gesture.ts","../actions/resize.ts","../actions/index.ts","../auto-scroll/index.ts","../auto-start/InteractableMethods.ts","../auto-start/base.ts","../auto-start/dragAxis.ts","../auto-start/hold.ts","../auto-start/index.ts","../core/interactablePreventDefault.ts","../dev-tools/index.ts","../modifiers/base.ts","../inertia/index.ts","../modifiers/restrict/pointer.ts","../modifiers/restrict/edges.ts","../modifiers/restrict/rect.ts","../modifiers/restrict/size.ts","../modifiers/snap/pointer.ts","../modifiers/snap/size.ts","../modifiers/snap/edges.ts","../modifiers/index.ts","../pointer-events/PointerEvent.ts","../pointer-events/base.ts","../pointer-events/holdRepeat.ts","../pointer-events/interactableTargets.ts","../pointer-events/index.ts","../reflow/index.ts","../interact/interact.ts","../interact/index.ts","../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 1.6.3\n *\n * Copyright (c) 2012-2019 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\nvar createModuleFactory = function createModuleFactory(t){var e;return function(r){return e||t(e={exports:{},parent:r},e.exports),e.exports}};\n","import * as utils from '@interactjs/utils'\nimport domObjects from '@interactjs/utils/domObjects'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractableSet from './InteractableSet'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport interface Plugin {\n id?: string\n install (scope: Scope, options?: any): void\n [key: string]: any\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n signals = new Signals()\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n _plugins: Plugin[] = []\n _pluginMap: { [id: string]: Plugin } = {}\n\n constructor () {\n const scope = this as Scope\n\n ;(this as { Interactable: typeof InteractableBase }).Interactable = class Interactable extends InteractableBase implements InteractableBase {\n get _defaults () { return scope.defaults }\n\n set (options: any) {\n super.set(options)\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable === this) {\n interaction.stop()\n scope.interactions.signals.fire('destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n }\n\n scope.interactables.signals.fire('unset', { interactable: this })\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._pluginMap[plugin.id] || this._plugins.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) { this._pluginMap[plugin.id] = plugin }\n\n plugin.install(this, options)\n this._plugins.push(plugin)\n\n return this\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { return false }\n\n const window = win.getWindow(doc)\n\n options = options ? utils.extend({}, options) : {}\n\n this.documents.push({ doc, options })\n events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.signals.fire('add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.signals.fire('remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now () {\n return ((this.window as any).Date as typeof Date || Date).now()\n }\n}\n\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n scope.usePlugin(interactions)\n scope.document = window.document\n scope.window = window\n\n return scope\n}\n","import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\nimport Signals from '@interactjs/utils/Signals'\nimport InteractionBase from './Interaction'\nimport finder, { SearchDetails } from './interactionFinder'\nimport { Scope } from './scope'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n signals: Signals\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n docEvents: Array<{ type: string, listener: Interact.Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const signals = new Signals()\n\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n }\n else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n scope.signals.on('add-document', onDocSignal)\n scope.signals.on('remove-document', onDocSignal)\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () { return scope.now() }\n }\n\n scope.interactions = {\n signals,\n // all active and idle interactions\n list: [],\n new (options: { pointerType?: string, signals?: Signals }) {\n options.signals = signals\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls () {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown ||\n interaction.pointerType !== 'touch' ||\n interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n}\n\nfunction doOnInteractions (method, scope) {\n return function (event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer ||\n (scope.now() - scope.prevTouchTime < 500) ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction (searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.interactions.signals.fire('find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal ({ doc, scope, options }, signalName) {\n const { docEvents } = scope.interactions\n const eventMethod = signalName.indexOf('add') === 0\n ? events.add : events.remove\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nexport default {\n id: 'core/interactions',\n install,\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n","import * as utils from '@interactjs/utils'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n}\n\nexport interface StartAction extends ActionProps {\n name: ActionName | string\n}\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = ''\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = ''\n}\n\nexport type _InteractionProxy = Pick<\nInteraction,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nexport class Interaction {\n // current interactable being interacted with\n interactable: Interactable = null\n\n // the target element of the interactable\n element: Interact.Element = null\n rect: Interact.Rect & Interact.Size\n edges: {\n [P in keyof Interact.Rect]?: boolean\n }\n\n _signals: utils.Signals\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: Interact.EventTarget\n event: Interact.PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: _InteractionProxy = null\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) {\n this._signals = signals\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as _InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () { return that[key] },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args) => that[key](...args),\n })\n }\n\n this._signals.fire('new', { interaction: this })\n }\n\n pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n\n this._signals.fire('down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n interaction: this,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action: StartAction, interactable: Interactable, element: Interact.Element) {\n if (this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) ||\n !interactable.options[action.name].enabled) {\n return false\n }\n\n utils.copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n this._stopped = false\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: EventPhase.Start,\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) {\n this.updatePointer(pointer, event, eventTarget, false)\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now())\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y)\n\n let dx\n let dy\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._signals.fire('move', signalArg)\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg?) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n }, signalArg || {})\n\n signalArg.phase = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.pointerIsDown = false\n this.removePointer(pointer, event)\n }\n\n documentBlur (event) {\n this.end(event)\n this._signals.fire('blur', { event, interaction: this })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event?: Interact.PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: EventPhase.End,\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction () {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting () {\n return this._interacting\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n getPointerIndex (pointer) {\n const pointerId = utils.pointer.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return (this.pointerType === 'mouse' || this.pointerType === 'pen')\n ? this.pointers.length - 1\n : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now())\n\n utils.pointer.copyCoords(this.coords.cur, this.coords.start)\n utils.pointer.copyCoords(this.coords.prev, this.coords.start)\n utils.pointer.pointerExtend(this.downPointer, pointer)\n\n this.downEvent = event\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._signals.fire('update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: Interact.PointerType, event: Interact.PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) { return }\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._signals.fire('remove-pointer', {\n pointer,\n event,\n pointerIndex,\n pointerInfo,\n interaction: this,\n })\n\n this.pointers.splice(pointerIndex, 1)\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy () {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.interactable.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Partial) {\n const { event, phase, preEnd, type } = signalArg\n const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type)\n const { rect } = this\n\n if (rect) {\n // update the rect modifications\n const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }\n\n if (edges.top) { rect.top += iEvent.delta.y }\n if (edges.bottom) { rect.bottom += iEvent.delta.y }\n if (edges.left) { rect.left += iEvent.delta.x }\n if (edges.right) { rect.right += iEvent.delta.x }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n this._signals.fire(`action-${phase}`, signalArg)\n\n this._fireEvent(iEvent)\n\n this._signals.fire(`after-action-${phase}`, signalArg)\n\n return true\n }\n\n _now () { return Date.now() }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","export function contains (array, target) {\n return array.indexOf(target) !== -1\n}\n\nexport function remove (array, target) {\n return array.splice(array.indexOf(target), 1)\n}\n\nexport function merge (target, source) {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport function from (source) {\n return merge([], source)\n}\n\nexport function findIndex (array, func) {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport function find (array, func) {\n return array[findIndex(array, func)]\n}\n","const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","export default thing => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined as Window,\n window: undefined as Window,\n getWindow,\n init,\n}\n\nexport function init (window: Window & { wrap?: (...args) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document &&\n typeof window.wrap === 'function' &&\n window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win.window = window\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined\n win.realWindow = undefined\n}\nelse {\n init(window)\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = (node.ownerDocument || node)\n\n return rootNode.defaultView || win.window\n}\n\nwin.init = init\n\nexport default win\n","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Interact.Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n /Presto/.test(navigator.userAgent))\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n\n browser.pEventTypes = (browser.supportsPointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null)\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win, { getWindow } from './window'\n\nexport function nodeContains (parent: Node, child: Node) {\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = child.parentNode\n }\n\n return false\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = el => el.parentNode ? el.parentNode : el.host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Interact.Element[] | NodeListOf) {\n let deepestZoneParents = []\n let deepestZone = elements[0]\n let index = deepestZone ? 0 : -1\n let i\n let n\n\n for (i = 1; i < elements.length; i++) {\n const dropzone = elements[i]\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue\n }\n\n if (!deepestZone) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // compare zIndex of siblings\n if (dropzone.parentNode === deepestZone.parentNode) {\n const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0\n const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0\n\n if (dropzoneZIndex >= deepestZIndex) {\n deepestZone = dropzone\n index = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest dropzone\n if (!deepestZoneParents.length) {\n let parent = deepestZone\n let parentParent\n\n while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent)\n parent = parentParent\n }\n }\n\n let parent\n\n // if this element is an svg element and the current deepest is an\n // HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement &&\n dropzone instanceof domObjects.SVGElement &&\n !(dropzone instanceof domObjects.SVGSVGElement)) {\n if (dropzone === deepestZone.parentNode) {\n continue\n }\n\n parent = dropzone.ownerSVGElement\n }\n else {\n parent = dropzone\n }\n\n const dropzoneParents = []\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent)\n parent = getParent(parent)\n }\n\n n = 0\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ]\n\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone\n index = i\n deepestZoneParents = dropzoneParents\n\n break\n }\n else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n\n return index\n}\n\nexport function matchesUpTo (element: Interact.Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element)\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element)\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0])\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nfunction pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs\n let deprecated = false\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true\n break\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop]\n }\n }\n return dest\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n moz: /(Pressure)$/,\n}\n\nexport default pointerExtend\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = timeStamp\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () { return this.coords.page },\n get client () { return this.coords.client },\n get timeStamp () { return this.coords.timeStamp },\n get pageX () { return this.coords.page.x },\n get pageY () { return this.coords.page.y },\n get clientX () { return this.coords.client.x },\n get clientY () { return this.coords.client.y },\n get pointerId () { return this.coords.pointerId },\n get target () { return this.coords.target },\n get type () { return this.coords.type },\n get pointerType () { return this.coords.pointerType },\n get buttons () { return this.coords.buttons },\n }\n\n return event as typeof event & Interact.PointerType & Interact.PointerEventType\n },\n}\n\nexport default pointerUtils\n\nexport interface MockCoords {\n page: Interact.Point\n client: Interact.Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n","import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] }\n typeCount: number\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[]\n contexts: Node[]\n listeners: Array>\n }\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","export default function extend> (dest: U, source: T) {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n return dest as T & U\n}\n","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\n\nexport function getStringOptionResult (value: any, target: Interact.HasGetRect, element) {\n if (value === 'parent') { return parentNode(element) }\n\n if (value === 'self') { return target.getRect(element) }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike (\n value: Interact.RectResolvable,\n target?: Interact.HasGetRect,\n element?: Interact.Element,\n functionArgs?: T\n) {\n if (is.string(value)) {\n value = getStringOptionResult(value, target, element)\n }\n else if (is.func(value)) {\n value = value(...functionArgs)\n }\n\n if (is.element(value)) {\n value = getElementRect(value)\n }\n\n return value as Interact.Rect\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || (rect.left + rect.width)\n rect.bottom = rect.bottom || (rect.top + rect.height)\n }\n\n return rect\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right - rect.x)\n rect.height = rect.height || (rect.bottom - rect.y)\n }\n\n return rect\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n}\n","import { HasGetRect } from '@interactjs/types/types'\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target: HasGetRect & { options: Interact.PerActionDefaults }, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","let lastTime = 0\nlet request\nlet cancel\n\nfunction init (window) {\n request = window.requestAnimationFrame\n cancel = window.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`]\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = token => clearTimeout(token)\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n}\n","export type SignalListener = (signalArg: PartialSignalArg, sinalName?: string) => (void | boolean)\n\nexport interface SignalArg {\n interaction: Interact.Interaction\n interactable: Interact.Interactable\n iEvent: Interact.InteractEvent\n element: Interact.EventTarget\n coords: Interact.Point\n event: Interact.PointerEventType\n phase: Interact.EventPhase\n [index: string]: any\n}\n\nexport type PartialSignalArg = Partial\n\nclass Signals {\n listeners: {\n [signalName: string]: SignalListener[]\n } = {}\n\n on (name: string, listener: SignalListener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener]\n return\n }\n\n this.listeners[name].push(listener)\n }\n\n off (name: string, listener: SignalListener) {\n if (!this.listeners[name]) { return }\n\n const index = this.listeners[name].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1)\n }\n }\n\n fire (name: string, arg: Partial): void | false {\n const targetListeners = this.listeners[name]\n\n if (!targetListeners) { return }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false\n }\n }\n }\n}\n\nexport default Signals\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: Interact.ActionProps, src: Interact.ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { default as Signals } from './Signals'\nexport { win, arr, dom, is }\n","// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Interact.EventTarget\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Interact.Element\n listeners?: Interact.Listeners\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport normalize, { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\n T extends ActionName,\n P extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect (_element: Interact.Element) {\n return null\n }\n}\n\nexport default Eventable\n","import * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\ntype IgnoreValue = string | Interact.Element | boolean\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Interact.Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Interact.Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev) || is.object(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Interact.Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Interact.Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue },\n targetNode: Node,\n eventTarget: Interact.Element,\n ) {\n return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget))\n }\n\n testAllow (\n this: Interactable,\n allowFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.Element,\n ) {\n if (!allowFrom) { return true }\n\n if (!is.element(element)) { return false }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n }\n else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (\n this: Interactable,\n ignoreFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.Element,\n ) {\n if (!ignoreFrom || !is.element(element)) { return false }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n }\n else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interactable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n (this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport Signals from '@interactjs/utils/Signals'\n\nexport default class InteractableSet {\n signals = new Signals()\n\n // all set interactables\n list: Interact.Interactable[] = []\n\n selectorMap: {\n [selector: string]: Array<{ context: Document | Interact.Element, interactable: Interact.Interactable }>\n } = {}\n\n constructor (protected scope: Interact.Scope) {\n this.signals.on('unset', ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings = is.string(target)\n ? this.selectorMap[target]\n : target[this.scope.id]\n\n const targetIndex = targetMappings.findIndex(m => m.context === context)\n if (targetMappings[targetIndex]) {\n // Destroying mappingInfo's context and interactable\n targetMappings[targetIndex].context = null\n targetMappings[targetIndex].interactable = null\n }\n targetMappings.splice(targetIndex, 1)\n })\n }\n\n new (target: Interact.Target, options?: any): Interact.Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n const mappingInfo = { context: interactable._context, interactable }\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) { this.selectorMap[target] = [] }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!interactable.target[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n target[this.scope.id].push(mappingInfo)\n }\n\n this.signals.fire('new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Interact.Target, options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings = isSelector\n ? this.selectorMap[target as string]\n : target[this.scope.id]\n\n if (!targetMappings) { return null }\n\n const found = arr.find(\n targetMappings,\n m => m.context === context &&\n (isSelector || m.interactable.inContext(target)))\n\n return found && found.interactable\n }\n\n forEachMatch (node: Node, callback: (interactable: Interact.Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret\n\n if ((is.string(interactable.target)\n // target is a selector and the element matches\n ? (is.element(node) && domUtils.matchesSelector(node, interactable.target))\n // target is the element\n : node === interactable.target) &&\n // the element is in context\n (interactable.inContext(node))) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class BaseEvent {\n type: string\n target: EventTarget\n currentTarget: EventTarget\n interactable: Interactable\n _interaction: Interaction\n timeStamp: any\n immediatePropagationStopped = false\n propagationStopped = false\n\n get interaction () {\n return this._interaction._proxy\n }\n\n constructor (interaction) {\n this._interaction = interaction\n }\n\n preventDefault () {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default BaseEvent\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport BaseEvent from './BaseEvent'\nimport defaults from './defaultOptions'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> extends BaseEvent {\n target: Interact.Element\n currentTarget: Interact.Element\n relatedTarget: Interact.Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n rect: Interact.FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Interact.Element\n dragLeave?: Interact.Element\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Interact.Element,\n related?: Interact.Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.interactable = target\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = (ending || phase === 'inertiastart') ? this.getSwipe() : null\n }\n\n get pageX () { return this.page.x }\n set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","/* eslint-disable @typescript-eslint/no-parameter-properties */\nexport class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: Node,\n ) {}\n}\n\nexport default PointerInfo\n","import * as dom from '@interactjs/utils/domUtils'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Interact.EventTarget\n curEventTarget: Interact.EventTarget\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && (pointerType === interaction.pointerType)) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId (interaction: Interact.Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drag: Interact.DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Drag]?: typeof drag\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Drag = 'drag'\n }\n}\n\n(ActionName as any).Drag = 'drag'\n\nexport type DragEvent = Interact.InteractEvent\n\nexport type DraggableMethod = Interact.ActionMethod\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('before-action-move', beforeMove)\n interactions.signals.on('action-resume', beforeMove)\n\n // dragmove\n interactions.signals.on('action-move', move)\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag: Interact.Plugin = {\n id: 'actions/drag',\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import BaseEvent from '@interactjs/core/BaseEvent'\nimport Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport Interaction from '@interactjs/core/Interaction'\nimport { ActionName } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\n\nclass DropEvent extends BaseEvent {\n target: Interact.Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Interact.Element\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: Interaction['dropState'], dragEvent: InteractEvent, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave'\n ? dropState.prev\n : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject () {\n const { dropState } = this._interaction\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropState.cur.dropzone !== this.dropzone ||\n dropState.cur.element !== this.target)) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target)\n\n dropState.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ]\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n }\n else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default DropEvent\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport drag from '../drag'\nimport DropEvent from './DropEvent'\n\nexport interface DropzoneMethod {\n (options: Interact.DropzoneOptions | boolean): Interact.Interactable\n (): Interact.DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Interact.Element,\n dropElemen: Interact.Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: {\n cur: {\n dropzone: Interactable // the dropzone a drag target might be dropped into\n element: Interact.Element // the element at the time of checking\n }\n prev: {\n dropzone: Interactable // the dropzone that was recently dragged away from\n element: Interact.Element // the element at the time of checking\n }\n rejected: boolean // wheather the potential drop was rejected from a listener\n events: any // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n element: Interact.Element\n rect: Interact.Rect\n }>\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(drag)\n\n interactions.signals.on('before-action-start', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n })\n\n interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n // reset active dropzones\n dropState.activeDrops = null\n dropState.events = null\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n }\n })\n\n // FIXME proper signal types\n interactions.signals.on('action-move', arg => onEventCreated(arg as any, scope))\n interactions.signals.on('action-end', arg => onEventCreated(arg as any, scope))\n\n interactions.signals.on('after-action-move', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n interaction.dropState.events = {}\n })\n\n interactions.signals.on('after-action-end', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null\n dropState.events = null\n dropState.cur.dropzone = null\n dropState.cur.element = null\n dropState.prev.dropzone = null\n dropState.prev.element = null\n dropState.rejected = false\n }\n })\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Interact.Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ dropState, interactable: draggable, element: dragElement }: Partial, dragEvent, pointerEvent) {\n const validDrops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interact.Interaction, _pointerEvent, dragEvent) {\n const { dropState } = interaction\n const dropEvents = {\n enter : null,\n leave : null,\n activate : null,\n deactivate: null,\n move : null,\n drop : null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null\n dropEvents.activate.dropzone = null\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null\n dropEvents.deactivate.dropzone = null\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dropEvents.move.dragmove = dragEvent\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\nfunction fireDropEvents (interaction: Interact.Interaction, events) {\n const { dropState } = interaction\n const {\n activeDrops,\n cur,\n prev,\n } = dropState\n\n if (events.leave) { prev.dropzone.fire(events.leave) }\n if (events.move) { cur.dropzone.fire(events.move) }\n if (events.enter) { cur.dropzone.fire(events.enter) }\n if (events.drop) { cur.dropzone.fire(events.drop) }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }: Interact.SignalArg, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return }\n\n const { dropState } = interaction\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected = dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod (interactable: Interact.Interactable): Interact.DropzoneOptions\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean)\nfunction dropzoneMethod (interactable: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Interact.Element,\n dropElement: Interact.Element,\n rect: any\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n id: 'actions/drop',\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n } as Interact.DropzoneOptions,\n}\n\nexport default drop\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.SignalArg {\n iEvent: GestureEvent\n interaction: Interact.Interaction\n event: Interact.PointerEventType | GestureEvent\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Interact.Options\n } as GesturableMethod\n\n interactions.signals.on('action-start', updateGestureProps)\n interactions.signals.on('action-move', updateGestureProps)\n interactions.signals.on('action-end', updateGestureProps)\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n })\n\n actions[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n id: 'actions/gesture',\n install,\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number } }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map(p => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (utils.is.number(iEvent.scale) &&\n iEvent.scale !== Infinity &&\n !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nexport default gesture\n","import { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.FullRect\n current: Interact.Rect\n inverted: Interact.FullRect\n previous: Interact.FullRect\n delta: Interact.FullRect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n edges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n _linkedEdges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.FullRect\n edges?: Interact.ActionProps['edges']\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n interactions,\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n interactions.signals.on('new', interaction => {\n interaction.resizeAxes = 'xy'\n })\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n interactions.signals.on('action-end', end)\n\n interactions.signals.on('action-start', updateEventAxes)\n interactions.signals.on('action-move', updateEventAxes)\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n id: 'actions/resize',\n install,\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Interact.Element,\n interaction: Interaction,\n rect: Interact.Rect\n ) {\n if (!rect) { return null }\n\n const page = extend({}, interaction.coords.cur.page)\n const options = interactable.options\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize\n const resizeEdges: { [edge: string]: boolean } = { left: false, right: false, top: false, bottom: false }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as ReturnType,\n\n getCursor ({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n }\n else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n defaultMargin: null as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (\n name: string,\n value: any,\n page: Interact.Point,\n element: Node,\n interactableElement: Interact.Element,\n rect: Interact.Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) { return false }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2)\n\n if (width < 0) {\n if (name === 'left') { name = 'right' }\n else if (name === 'right') { name = 'left' }\n }\n if (height < 0) {\n if (name === 'top') { name = 'bottom' }\n else if (name === 'bottom') { name = 'top' }\n }\n\n if (name === 'left') { return page.x < ((width >= 0 ? rect.left : rect.right) + margin) }\n if (name === 'top') { return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin) }\n\n if (name === 'right') { return page.x > ((width >= 0 ? rect.right : rect.left) - margin) }\n if (name === 'bottom') { return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin) }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) { return false }\n\n return is.element(value)\n // the value is an element to use as a resize handle\n ? value === element\n // otherwise check if element matches value as selector\n : dom.matchesUpTo(element, value, interactableElement)\n}\n\nfunction initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const startRect = extend({}, interaction.rect)\n const resizeOptions = interaction.interactable.options.resize\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = extend({}, interaction.prepared.edges)\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom)\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right)\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top)\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left)\n\n interaction.prepared._linkedEdges = linkedEdges\n }\n else {\n interaction.prepared._linkedEdges = null\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : {\n left: startRect.left,\n right: startRect.right,\n top: startRect.top,\n bottom: startRect.bottom,\n },\n inverted : extend({}, startRect),\n previous : extend({}, startRect),\n delta : {\n left: 0,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n let edges = interaction.prepared.edges\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start\n const current = interaction.resizeRects.current\n const inverted = interaction.resizeRects.inverted\n const deltaRect = interaction.resizeRects.delta\n const previous = extend(interaction.resizeRects.previous, inverted)\n const originalEdges = edges\n\n const eventDelta = extend({}, iEvent.delta)\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1\n\n edges = interaction.prepared._linkedEdges\n\n if ((originalEdges.left && originalEdges.bottom) ||\n (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio\n }\n else if (originalEdges.left || originalEdges.right) { eventDelta.y = eventDelta.x / startAspectRatio }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio }\n }\n\n // update the 'current' rect without modifications\n if (edges.top) { current.top += eventDelta.y }\n if (edges.bottom) { current.bottom += eventDelta.y }\n if (edges.left) { current.left += eventDelta.x }\n if (edges.right) { current.right += eventDelta.x }\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(inverted, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top\n\n inverted.top = inverted.bottom\n inverted.bottom = swap\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left\n\n inverted.left = inverted.right\n inverted.right = swap\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom)\n inverted.bottom = Math.max(current.bottom, start.top)\n inverted.left = Math.min(current.left, start.right)\n inverted.right = Math.max(current.right, start.left)\n }\n\n inverted.width = inverted.right - inverted.left\n inverted.height = inverted.bottom - inverted.top\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge]\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = inverted\n iEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction updateEventAxes ({ iEvent, interaction, action }: { iEvent: ResizeEvent, interaction: Interaction, action: ActionName }) {\n if (action !== ActionName.Resize || !interaction.resizeAxes) { return }\n\n const options = interaction.interactable.options\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y\n }\n else {\n iEvent.delta.y = iEvent.delta.x\n }\n iEvent.axes = 'xy'\n }\n else {\n iEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0\n }\n }\n}\n\nexport default resize\n","import { Scope } from '@interactjs/core/scope'\nimport drag, { DragEvent } from './drag'\nimport drop from './drop'\nimport gesture, { GestureEvent } from './gesture'\nimport resize, { ResizeEvent } from './resize'\n\nfunction install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n}\n\nconst id = 'actions'\n\nexport {\n id,\n install,\n gesture,\n GestureEvent,\n resize,\n ResizeEvent,\n drag,\n DragEvent,\n drop,\n}\n","import * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement\n margin?: number\n distance?: number\n interval?: number\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.autoScroll = null\n })\n\n interactions.signals.on('destroy', ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n })\n\n interactions.signals.on('stop', autoScroll.stop)\n\n interactions.signals.on('action-move', (arg: any) => autoScroll.onInteractionMove(arg))\n\n actions.eventTypes.push('autoscroll')\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed : 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n }\n else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.interactable, interaction.prepared.name))) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top\n let right\n let bottom\n let left\n\n const { interactable, element } = interaction\n const options = interactable.options[interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n }\n else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = (right ? 1 : left ? -1 : 0)\n autoScroll.y = (bottom ? 1 : top ? -1 : 0)\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.interactable,\n element\n )\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nexport default {\n id: 'auto-scroll',\n install,\n}\n","import { warnOnce } from '@interactjs/utils'\nimport * as is from '@interactjs/utils/is'\n\n// TODO: there seems to be a @babel/preset-typescript bug causing regular import\n// syntax to remain in js output\ntype Scope = import ('@interactjs/core/scope').Scope\ntype Actions = import ('@interactjs/core/scope').Actions\ntype Interaction = import ('@interactjs/core/Interaction').default\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n actions,\n } = scope\n\n Interactable.prototype.getAction = getAction\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') })\n * // or\n * interact(element).ignoreFrom('input, textarea, a')\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */\n Interactable.prototype.actionChecker = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (\n this: Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interaction,\n element: Interact.Element,\n): Interact.ActionProps {\n const action = this.defaultActionChecker(pointer, event, interaction, element)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n}\n\nfunction defaultActionChecker (\n interactable: Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interaction,\n element: Interact.Element,\n actions: Actions,\n) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n","import * as utils from '@interactjs/utils'\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Interact.Element\n signals: utils.Signals\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n interact,\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(InteractableMethods)\n\n // set cursor style on mousedown\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n // set cursor style on mousemove\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n interactions.signals.on('move', arg => {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.autoStart.signals.fire('before-start', arg)\n\n const { interactable } = interaction\n\n if (interaction.prepared.name && interactable) {\n // check manualStart and interaction limit\n if (interactable.options[interaction.prepared.name].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n interaction.stop()\n }\n else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n })\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new utils.Signals(),\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: Interact.ActionProps,\n interactable: Interact.Interactable,\n element: Interact.Element,\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interact.Interaction,\n pointer,\n event,\n matches: Interact.Interactable[],\n matchElements: Interact.Element[],\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) { continue }\n\n const action = validateAction(\n matchAction,\n match,\n matchElement,\n eventTarget,\n scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interact.Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n let matches = []\n let matchElements = []\n\n let element = eventTarget\n\n function pushMatches (interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (utils.is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)\n\n if (actionInfo.action &&\n !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = utils.dom.parentNode(element)\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interact.Interaction,\n { action, interactable, element }: {\n action: Interact.ActionProps\n interactable: Interact.Interactable\n element: Interact.Element\n },\n scope: Interact.Scope,\n) {\n action = action || { name: null }\n\n // clear previous target element cursor\n if (interaction.interactable && interaction.interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n\n interaction.interactable = interactable\n interaction.element = element\n utils.copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name\n ? interactable.getRect(element)\n : null\n\n setInteractionCursor(interaction, scope)\n\n scope.autoStart.signals.fire('prepared', { interaction })\n}\n\nfunction withinInteractionLimit (interactable: Interact.Interactable, element: Interact.Element, action, scope: Interact.Scope) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) { continue }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue, scope: Interact.Scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Interact.Element, cursor, scope: Interact.Scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interact.Interaction, scope: Interact.Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker: Interact.CursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (utils.is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n }\n else {\n cursor = scope.actions[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nexport default {\n id: 'auto-start/base',\n install,\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n} as Interact.Plugin\n","import { ActionName } from '@interactjs/core/scope'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport autoStart from './base'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\nfunction install (scope: Scope) {\n scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy')\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.interactable) { return }\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === ActionName.Drag &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element)\n }\n }\n })\n\n function checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false }\n\n const thisAxis = interactable.options[ActionName.Drag].startAxis\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis)\n }\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n install,\n}\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n autoStart,\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n\n interactions.signals.on('new', interaction => {\n interaction.autoStartHoldTimer = null\n })\n\n autoStart.signals.on('prepared', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n })\n\n interactions.signals.on('move', ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n })\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n })\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nexport default {\n id: 'auto-start/hold',\n install,\n getHoldDuration,\n}\n","import autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nfunction install (scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n}\n\nconst id = 'auto-start'\n\nexport {\n id,\n install,\n autoStart,\n hold,\n dragAxis,\n}\n","import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport * as is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault: typeof preventDefault\n checkAndPreventDefault: (event: Event) => void\n }\n}\n\nfunction preventDefault (this: Interact.Interactable, newValue?: 'always' | 'never' | 'auto') {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n}\n\nfunction checkAndPreventDefault (interactable: Interact.Interactable, scope: Interact.Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') { return }\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: Interact.SignalArg) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Interact.Scope) {\n /** @lends Interactable */\n const Interactable = scope.Interactable\n\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n * @return {string | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n for (const eventSignal of ['down', 'move', 'up', 'cancel']) {\n scope.interactions.signals.on(eventSignal, onInteractionEvent)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport type Install = typeof install\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n}\n","/* eslint-disable no-console */\n/* global process */\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport win from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools?: Interact.OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: string\n text: string\n perform: (interaction: Interact.Interaction) => boolean\n getInfo: (interaction: Interact.Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = '',\n boxSizing = '',\n noListeners = '',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\n// eslint-disable-next-line no-restricted-syntax\nfunction install (scope: Interact.Scope, { logger }: { logger?: Logger } = {}) {\n const {\n interactions,\n Interactable,\n defaults,\n } = scope\n logger = logger || console\n\n interactions.signals.on('action-start', ({ interaction }) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n })\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n}\n\nconst checks: Check[] = [\n {\n name: 'touchAction',\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [\n element,\n links.touchAction,\n ]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: 'boxSizing',\n perform (interaction) {\n const { element } = interaction\n\n return interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [\n element,\n links.boxSizing,\n ]\n },\n },\n\n {\n name: 'noListeners',\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [\n interaction.prepared.name,\n interaction.interactable,\n ]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop])\n}\n\nfunction parentHasStyle (element: Interact.Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent)\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n","import { Scope } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: {\n states: ModifierState[]\n offsets: any\n startOffset: any\n startDelta: Interact.Point\n result?: {\n delta: {\n x: number\n y: number\n }\n rectDelta: {\n left: number\n right: number\n top: number\n bottom: number\n }\n coords: Interact.Point\n changed: boolean\n }\n endPrevented: boolean\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport interface Modifier<\n Defaults = any,\n State extends ModifierState = any,\n Name extends string = any\n> {\n options?: Defaults\n methods: {\n start?: (arg: ModifierArg) => void\n set: (arg: ModifierArg) => void\n beforeEnd?: (arg: ModifierArg) => boolean\n stop?: (arg: ModifierArg) => void\n }\n name?: Name\n}\n\nexport type ModifierState<\n Defaults = {},\n StateProps extends { [prop: string]: any } = {},\n Name extends string = any\n> = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg extends Pick {\n states?: State[]\n state?: State\n element: Interact.Element\n pageCoords?: Interact.Point\n prevCoords?: Interact.Point\n coords?: Interact.Point\n startOffset?: Interact.Rect\n preEnd?: boolean\n requireEndOnly?: boolean\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.defaults.perAction.modifiers = []\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets: {},\n states: null,\n result: null,\n endPrevented: false,\n startDelta: null,\n }\n })\n\n interactions.signals.on('before-action-start', (arg: Interact.SignalArg) => {\n start(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page)\n })\n\n interactions.signals.on('action-resume', (arg: Interact.SignalArg) => {\n stop(arg)\n start(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords)\n beforeMove(arg)\n })\n\n interactions.signals.on('after-action-move', restoreCoords as any)\n interactions.signals.on('before-action-move', beforeMove)\n\n interactions.signals.on('before-action-start', setCoords)\n interactions.signals.on('after-action-start', restoreCoords as any)\n\n interactions.signals.on('before-action-end', beforeEnd)\n interactions.signals.on('stop', stop)\n}\n\nfunction start (\n { interaction, phase }: Interact.SignalArg,\n pageCoords: Interact.Point,\n prevCoords: Interact.Point,\n) {\n const { interactable, element } = interaction\n const modifierList = getModifierList(interaction)\n const states = prepareStates(modifierList)\n\n const rect = extend({}, interaction.rect)\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: ModifierArg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n prevCoords: prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page),\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nexport function startAll (arg: ModifierArg) {\n const states: ModifierState[] = arg.states\n\n for (const state of states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg)\n }\n }\n}\n\nexport function setAll (arg: Partial) {\n const {\n prevCoords,\n phase,\n preEnd,\n requireEndOnly,\n rect,\n states,\n } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, rect)\n\n const result = {\n delta: { x: 0, y: 0 },\n rectDelta: {\n left : 0,\n right : 0,\n top : 0,\n bottom: 0,\n },\n coords: arg.coords,\n changed: true,\n }\n\n for (const state of states) {\n const { options } = state\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue }\n\n arg.state = state\n state.methods.set(arg)\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x\n result.delta.y = arg.coords.y - arg.pageCoords.y\n\n let rectChanged = false\n\n if (rect) {\n result.rectDelta.left = arg.rect.left - rect.left\n result.rectDelta.right = arg.rect.right - rect.right\n result.rectDelta.top = arg.rect.top - rect.top\n result.rectDelta.bottom = arg.rect.bottom - rect.bottom\n\n rectChanged = result.rectDelta.left !== 0 ||\n result.rectDelta.right !== 0 ||\n result.rectDelta.top !== 0 ||\n result.rectDelta.bottom !== 0\n }\n\n result.changed = !prevCoords || prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y ||\n rectChanged\n\n return result\n}\n\nfunction beforeMove (arg: Interact.SignalArg): void | false {\n const { interaction, phase, preEnd, skipModifiers } = arg\n const { interactable, element } = interaction\n\n const states = skipModifiers\n ? interaction.modifiers.states.slice(skipModifiers)\n : interaction.modifiers.states\n const prevCoords = arg.prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page)\n\n const modifierResult = setAll({\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n prevCoords,\n rect: interaction.rect,\n states,\n requireEndOnly: false,\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 if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n modifierResult.coords.x += adjustment.x\n modifierResult.coords.y += adjustment.y\n modifierResult.delta.x += adjustment.x\n modifierResult.delta.y += adjustment.y\n }\n setCoords(arg)\n}\n\nfunction beforeEnd (arg: Interact.SignalArg): void | false {\n const { interaction, event, noPreEnd } = arg\n const states = interaction.modifiers.states\n\n if (noPreEnd || !states || !states.length) {\n return\n }\n\n let didPreEnd = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n if (endResult === false) {\n interaction.modifiers.endPrevented = true\n return false\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true })\n didPreEnd = true\n }\n }\n}\n\nfunction stop (arg: Interact.SignalArg) {\n const { interaction } = arg\n const states = interaction.modifiers.states\n\n if (!states || !states.length) {\n return\n }\n\n const modifierArg: ModifierArg = extend({\n states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n }, arg)\n\n for (const state of states) {\n modifierArg.state = state\n\n if (state.methods.stop) { state.methods.stop(modifierArg) }\n }\n\n arg.interaction.modifiers.states = null\n arg.interaction.modifiers.endPrevented = false\n}\n\nfunction getModifierList (interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.filter(\n modifier => !modifier.options || modifier.options.enabled !== false\n )\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type]\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n }\n })\n .filter(m => !!m)\n}\n\nexport function prepareStates (modifierList: Modifier[]) {\n const states: ModifierState[] = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return states\n}\n\nexport function setCoords (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase, rect?: Interact.Rect }) {\n const { interaction, phase } = arg\n const curCoords = interaction.coords.cur\n const 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]] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = interaction.modifiers.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n\nexport function restoreCoords ({ interaction: { coords, rect, modifiers } }: { interaction: Interact.Interaction }) {\n if (!modifiers.result) { return }\n\n const { startDelta } = modifiers\n const { delta: curDelta, rectDelta } = modifiers.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n}\n\nfunction shouldDo (options, preEnd?: boolean, requireEndOnly?: boolean, phase?: string) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly || options.alwaysOnEnd) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string\n> (\n module: { defaults?: Defaults, [key: string]: any },\n name?: Name\n) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options: Defaults = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = { options, methods, name }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport default {\n id: 'modifiers/base',\n install,\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n}\n","import { EventPhase } from '@interactjs/core/InteractEvent'\nimport modifiers, { restoreCoords, setCoords } from '@interactjs/modifiers/base'\nimport * as utils from '@interactjs/utils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: {\n active: boolean\n smoothEnd: boolean\n allowResume: boolean\n\n startEvent?: Interact.InteractEvent\n upCoords: {\n page: Interact.Point\n client: Interact.Point\n timeStamp: number\n }\n\n xe?: number\n ye?: number\n sx?: number\n sy?: number\n\n t0?: number\n te?: number\n v0?: number\n vx0?: number\n vy0?: number\n duration?: number\n modifiedXe?: number\n modifiedYe?: number\n\n lambda_v0?: number // eslint-disable-line camelcase\n one_ve_v0?: number // eslint-disable-line camelcase\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\n(EventPhase as any).Resume = 'resume'\n;(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Interact.Scope) {\n const {\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n upCoords : {} as any,\n timeout : null,\n }\n })\n\n interactions.signals.on('before-action-end', (arg: Interact.SignalArg) => release(arg, scope))\n interactions.signals.on('down', (arg: Interact.SignalArg) => resume(arg, scope))\n interactions.signals.on('stop', stop)\n\n defaults.perAction.inertia = {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n\n scope.usePlugin(modifiers)\n}\n\nfunction resume (\n { interaction, event, pointer, eventTarget }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n const state = interaction.inertia\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer, event, eventTarget, true)\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer),\n interaction._now()\n )\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n phase: EventPhase.Resume,\n }\n\n scope.interactions.signals.fire('action-resume', signalArg)\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release (\n { interaction, event, noPreEnd }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = interaction._now()\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y)\n\n let smoothEnd = false\n let modifierResult: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n pageCoords: interaction.coords.cur.page,\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n prevCoords: null,\n requireEndOnly: null,\n phase: EventPhase.InertiaStart,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierArg.prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.prevEvent.page\n modifierArg.requireEndOnly = false\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n setCoords(modifierArg)\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 restoreCoords(modifierArg)\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.interactable.fire(state.startEvent)\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x\n state.vy0 = interaction.coords.velocity.client.y\n state.v0 = pointerSpeed\n\n calcInertia(interaction, state)\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page)\n\n modifierArg.pageCoords.x += state.xe\n modifierArg.pageCoords.y += state.ye\n modifierArg.prevCoords = null\n modifierArg.requireEndOnly = true\n\n modifierResult = modifiers.setAll(modifierArg)\n\n state.modifiedXe += modifierResult.delta.x\n state.modifiedYe += modifierResult.delta.y\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.smoothEnd = true\n state.xe = modifierResult.delta.x\n state.ye = modifierResult.delta.y\n\n state.sx = state.sy = 0\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n\n return false\n}\n\nfunction stop ({ interaction }: Interact.SignalArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = interaction._now() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.sx = state.modifiedXe\n state.sy = state.modifiedYe\n\n interaction.move()\n interaction.end(state.startEvent)\n state.active = false\n interaction.simulation = null\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n}\n\nfunction smothEndTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n\n const state = interaction.inertia\n const t = interaction._now() - state.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration)\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration)\n\n interaction.move()\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n else {\n state.sx = state.xe\n state.sy = state.ye\n\n interaction.move()\n interaction.end(state.startEvent)\n\n state.smoothEnd =\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction updateInertiaCoords (interaction: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [{\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n }], interaction._now())\n}\n\nfunction getOptions ({ interactable, prepared }: Interact.Interaction) {\n return interactable &&\n interactable.options &&\n prepared.name &&\n interactable.options[prepared.name].inertia\n}\n\nexport default {\n id: 'inertia',\n install,\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n}\n","import extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: Interact.RectResolvable<[number, number, Interact.Interaction]>\n // what part of self is allowed to drag over\n elementRect: Interact.Rect\n offset: Interact.Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Interact.Rect = extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }, options.offset || {})\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = (restriction.right - restriction.left) - rect.width\n const heightDiff = (restriction.bottom - restriction.top) - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - (rect.width * elementRect.left)\n offset.top += startOffset.top - (rect.height * elementRect.top)\n\n offset.right += startOffset.right - (rect.width * (1 - elementRect.right))\n offset.bottom += startOffset.bottom - (rect.height * (1 - elementRect.bottom))\n }\n\n state.offset = offset\n}\n\nfunction set ({ coords, interaction, state }) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) { return }\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nfunction getRestrictionRect (value, interaction, coords?: Interact.Point) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict = {\n start,\n set,\n getRestrictionRect,\n defaults,\n}\n\nexport default restrict\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrict, { RestrictOptions } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState\n\nconst { getRestrictionRect } = restrict\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, state }: ModifierArg) {\n const { options } = state\n const startOffset = interaction.modifiers.startOffset\n let offset\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { offset, options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || {} as Interact.Rect\n const outer = getRestrictionRect(options.outer, interaction, page) || {} as Interact.Rect\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n getRestrictionRect,\n start,\n set,\n defaults,\n}\n\nexport default restrictEdges\n","import extend from '@interactjs/utils/extend'\nimport restrictPointer from './pointer'\n\nconst defaults = extend({\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n}, restrictPointer.defaults)\n\nconst restrictRect = {\n start: restrictPointer.start,\n set: restrictPointer.set,\n defaults,\n}\n\nexport default restrictRect\n","import extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrictEdges, { RestrictEdgesState } from './edges'\nimport { RestrictOptions } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n max?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState =\n RestrictEdgesState & ModifierState\n\nfunction set (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted)\n\n const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction, arg.coords)) || noMin\n const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default restrictSize\n","import * as utils from '@interactjs/utils'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface SnapPosition {\n x: number\n y: number\n range?: number\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: Interact.Interaction,\n offset: Interact.Point,\n index: number\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[]\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Interact.Point[]\n // startCoords = offset snapping from drag start page position\n offset: Interact.Point | Interact.RectResolvable<[Interact.Interaction]> | 'startCoords'\n offsetWithOrigin?: boolean\n origin: Interact.RectResolvable<[Interact.Element]> | Interact.Point\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const offsets = []\n const origin = options.offsetWithOrigin\n ? getOrigin(arg)\n : { x: 0, y: 0 }\n\n let snapOffset\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const relativePoints = options.relativePoints || []\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index]\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n })\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset))\n }\n\n state.offsets = offsets\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = utils.extend({}, coords)\n const targets = []\n let target\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n state.realX = page.x\n state.realY = page.y\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n targets.push({\n x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: utils.is.number(target.range) ? target.range : options.range,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n }\n\n for (let i = 0, len = targets.length; i < len; i++) {\n target = targets[i]\n\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = utils.hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.dx = dx\n closest.dy = dy\n\n state.range = range\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const { element } = arg.interaction\n const optionsOrigin = utils.rect.rectToXY(\n utils.rect.resolveRectLike(arg.state.options.origin as any, null, null, [element])\n )\n const origin = optionsOrigin || utils.getOriginXY(\n arg.interactable,\n element,\n arg.interaction.prepared.name,\n )\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range : Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default snap\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport { ModifierArg } from '../base'\nimport snap, { SnapOptions, SnapState } from './pointer'\n\nexport type SnapSizeOptions = Pick<\nSnapOptions,\n'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'\n>\n\nfunction start (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [{\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of (options.targets || [])) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n snap.set(arg)\n\n state.options = options\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default snapSize\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport { ModifierArg } from '../base'\nimport { SnapState } from './pointer'\nimport snapSize, { SnapSizeOptions } from './size'\n\nfunction start (arg: ModifierArg) {\n const edges = arg.interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nfunction set (arg) {\n return snapSize.set(arg)\n}\n\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults) as SnapSizeOptions, {\n offset: { x: 0, y: 0 },\n } as unknown),\n}\n\nexport default snapEdges\n","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictRectModule from './restrict/rect'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictRect = makeModifier(restrictRectModule, 'restrictRect')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import BaseEvent from '@interactjs/core/BaseEvent'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\n\n/** */\nexport default class PointerEvent extends BaseEvent {\n type: T\n originalEvent: Interact.PointerEventType\n pointerId: number\n pointerType: string\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n\n /** */\n constructor (\n type: T,\n pointer: Interact.PointerType | PointerEvent,\n event: Interact.PointerEventType,\n eventTarget: Interact.EventTarget,\n interaction: Interact.Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double = !!(interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500)\n }\n else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n}\n","import { PerActionDefaults } from '@interactjs/core/defaultOptions'\nimport Eventable from '@interactjs/core/Eventable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport PointerEvent from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Interact.Point | string | Interact.Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\nconst signals = new utils.Signals()\nconst simpleSignals = ['down', 'up', 'cancel']\nconst simpleEvents = ['down', 'up', 'cancel']\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n}\n\nconst pointerEvents = {\n id: 'pointer-events/base',\n install,\n signals,\n PointerEvent,\n fire,\n collectEventTargets,\n createSignalListener,\n defaults,\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n}\n\nfunction fire (arg: {\n interaction: Interaction\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n targets?: EventTargetList\n pointerEvent?: PointerEvent\n type: T\n}, scope: Interact.Scope) {\n const {\n interaction, pointer, event, eventTarget,\n type = (arg as any).pointerEvent.type,\n targets = collectEventTargets(arg),\n } = arg\n\n const {\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now()),\n } = arg\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n (i + 1) < targets.length && targets[i + 1].node !== pointerEvent.currentTarget)) {\n break\n }\n }\n\n signals.fire('fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n }, scope)\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }: {\n interaction: Interaction\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n type: T\n}) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n signals.fire('collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(target =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration)\n }\n\n return signalArg.targets\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n })\n\n interactions.signals.on('update-pointer', ({ down, pointerInfo }) => {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n })\n\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'move',\n }, scope)\n }\n })\n\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n signals.fire('collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) { return }\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n }, scope)\n }, minDuration)\n })\n\n for (const signalName of ['up', 'cancel']) {\n interactions.signals.on(signalName, ({ interaction, pointerIndex }) => {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n })\n }\n\n for (let i = 0; i < simpleSignals.length; i++) {\n interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i], scope))\n }\n\n interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n })\n}\n\nfunction createSignalListener (type: string, scope) {\n return function ({ interaction, pointer, event, eventTarget }: any) {\n fire({ interaction, eventTarget, pointer, event, type }, scope)\n }\n}\n\nexport default pointerEvents\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n pointerEvents,\n interactions,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n pointerEvents.signals.on('new', onNew)\n pointerEvents.signals.on('fired', arg => onFired(arg as any, scope))\n\n for (const signal of ['move', 'up', 'cancel', 'endall']) {\n interactions.signals.on(signal, endHoldRepeat)\n }\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.push('holdrepeat')\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) { return }\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) { return }\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n }, scope)\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nexport default {\n id: 'pointer-events/holdRepeat',\n install,\n} as Interact.Plugin\n","import { Scope } from '@interactjs/core/scope'\nimport { merge } from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\n\ntype Interactable = import ('@interactjs/core/Interactable').default\ntype EventTargetList = import ('./base').EventTargetList\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope\n\n pointerEvents.signals.on('collect-targets', ({\n targets,\n node,\n type,\n eventTarget,\n }: {\n targets: EventTargetList\n node: Node\n type: string\n eventTarget: Interact.Element\n }) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n })\n\n interactables.signals.on('new', ({ interactable }) => {\n interactable.events.getRect = function (element: Interact.Element) {\n return interactable.getRect(element)\n }\n })\n\n interactables.signals.on('set', ({ interactable, options }) => {\n extend(interactable.events.options, pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n })\n\n merge(actions.eventTypes, pointerEvents.types)\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nexport default {\n id: 'pointer-events/interactableTargets',\n install,\n}\n","import pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nfunction install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n}\n\nconst id = 'pointer-events'\n\nexport { id, pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '@interactjs/core/Interactable'\nimport { EventPhase } from '@interactjs/core/InteractEvent'\nimport { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: () => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Reflow = 'reflow',\n }\n}\n\n(EventPhase as any).Reflow = 'reflow'\n\nexport function install (scope: Scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n // eslint-disable-next-line no-shadow\n Interactable,\n } = scope\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`)\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === EventPhase.Reflow) {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n })\n\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope)\n }\n}\n\nfunction reflow (interactable: Interactable, action: ActionProps, scope: Scope): Promise {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect)\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow (scope: Scope, interactable: Interactable, element: Interact.Element, action: ActionProps, event: any) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: EventPhase.Reflow,\n }\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prepared = extend({}, action)\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n\n interaction._doPhase(signalArg)\n\n const reflowPromise = (win.window as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default {\n id: 'reflow',\n install,\n} as Interact.Plugin\n","/** @module interact */\n\nimport { Options } from '@interactjs/core/defaultOptions'\nimport Interactable from '@interactjs/core/Interactable'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport browser from '@interactjs/utils/browser'\nimport events from '@interactjs/utils/events'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n */\ninteract.use = use\nfunction use (plugin: Interact.Plugin, options?: { [key: string]: any }) {\n scope.usePlugin(plugin, options)\n\n return interact\n}\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\ninteract.isSet = isSet\nfunction isSet (target: Interact.Element, options?: any) {\n return !!scope.interactables.get(target, options && options.context)\n}\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\n/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = debug\nfunction debug () {\n return scope\n}\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage\ninteract.getTouchBBox = utils.pointer.touchBBox\ninteract.getTouchDistance = utils.pointer.touchDistance\ninteract.getTouchAngle = utils.pointer.touchAngle\n\ninteract.getElementRect = utils.dom.getElementRect\ninteract.getElementClientRect = utils.dom.getElementClientRect\ninteract.matchesSelector = utils.dom.matchesSelector\ninteract.closest = utils.dom.closest\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = supportsTouch\nfunction supportsTouch () {\n return browser.supportsTouch\n}\n\n/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\ninteract.supportsPointerEvent = supportsPointerEvent\nfunction supportsPointerEvent () {\n return browser.supportsPointerEvent\n}\n\n/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\ninteract.stop = stop\nfunction stop () {\n for (const interaction of scope.interactions.list) {\n interaction.stop()\n }\n\n return interact\n}\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = pointerMoveTolerance\nfunction pointerMoveTolerance (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue\n\n return interact\n }\n\n return scope.interactions.pointerMoveTolerance\n}\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) {\n interaction.stop()\n }\n }\n})\n\ninteract.addDocument = (doc, options) => scope.addDocument(doc, options)\ninteract.removeDocument = doc => scope.removeDocument(doc)\n\nscope.interact = interact\n\nexport { scope }\nexport default interact\n","import * as actions from '@interactjs/actions'\nimport autoScroll from '@interactjs/auto-scroll'\nimport * as autoStart from '@interactjs/auto-start'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools'\nimport inertia from '@interactjs/inertia'\nimport * as modifiers from '@interactjs/modifiers'\nimport modifiersBase from '@interactjs/modifiers/base'\nimport * as pointerEvents from '@interactjs/pointer-events'\nimport reflow from '@interactjs/reflow'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window) {\n scope.init(window)\n\n interact.use(interactablePreventDefault)\n\n // pointerEvents\n interact.use(pointerEvents)\n\n // inertia\n interact.use(inertia)\n\n // autoStart, hold\n interact.use(autoStart)\n\n // drag and drop, resize, gesture\n interact.use(actions)\n\n // snap, resize, etc.\n interact.use(modifiersBase)\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type]\n\n _defaults._methods = _methods\n scope.defaults.perAction[type] = _defaults\n }\n\n // autoScroll\n interact.use(autoScroll)\n\n // reflow\n interact.use(reflow)\n\n // eslint-disable-next-line no-undef\n if (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n }\n\n return interact\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = process.env.npm_package_version\n\nexport default interact\nexport {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","/// \n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result = { range }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField])\n const gridy = Math.round((y - offset.y) / grid[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y))\n }\n\n return result\n }\n}\n\nexport default createGrid\n","import grid from './grid'\n\nexport { grid }\n","import interact, { init as initInteract } from '@interactjs/interact'\nimport * as modifiers from '@interactjs/modifiers'\nimport { Modifier } from '@interactjs/modifiers/base'\nimport '@interactjs/types'\nimport extend from '@interactjs/utils/extend'\nimport * as snappers from '@interactjs/utils/snappers'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: typeof modifiers & { [key: string]: (options?) => Modifier }\n snappers?: typeof snappers & { [key: string]: any }\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n id: 'interactjs',\n install () {\n interact.modifiers = extend({}, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\n;(interact as any).default = interact // tslint:disable-line no-string-literal\n;(interact as any).init = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","\nreturn _$index_29;\n\n});\n"]} \ No newline at end of file +{"version":3,"sources":["../../scripts/header.js","../../node_modules/browser-pack-flat/_prelude","../core/scope.ts","../core/interactions.ts","../core/Interaction.ts","../utils/domObjects.ts","../utils/arr.ts","../utils/isWindow.ts","../utils/window.ts","../utils/is.ts","../utils/browser.ts","../utils/domUtils.ts","../utils/clone.ts","../utils/pointerExtend.ts","../utils/hypot.ts","../utils/pointerUtils.ts","../utils/events.ts","../utils/extend.ts","../utils/rect.ts","../utils/getOriginXY.ts","../utils/normalizeListeners.ts","../utils/raf.ts","../utils/index.ts","../core/defaultOptions.ts","../core/Eventable.ts","../core/Interactable.ts","../core/InteractableSet.ts","../core/BaseEvent.ts","../core/InteractEvent.ts","../core/PointerInfo.ts","../core/interactionFinder.ts","../actions/drag.ts","../actions/drop/DropEvent.ts","../actions/drop/index.ts","../actions/gesture.ts","../actions/resize.ts","../actions/index.ts","../auto-scroll/index.ts","../auto-start/InteractableMethods.ts","../auto-start/base.ts","../auto-start/dragAxis.ts","../auto-start/hold.ts","../auto-start/index.ts","../core/interactablePreventDefault.ts","../dev-tools/index.ts","../modifiers/base.ts","../inertia/index.ts","../modifiers/restrict/pointer.ts","../modifiers/restrict/edges.ts","../modifiers/restrict/rect.ts","../modifiers/restrict/size.ts","../modifiers/snap/pointer.ts","../modifiers/snap/size.ts","../modifiers/snap/edges.ts","../modifiers/index.ts","../pointer-events/PointerEvent.ts","../pointer-events/base.ts","../pointer-events/holdRepeat.ts","../pointer-events/interactableTargets.ts","../pointer-events/index.ts","../reflow/index.ts","../interact/interact.ts","../interact/index.ts","../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 1.7.0\n *\n * Copyright (c) 2012-2019 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\nvar createModuleFactory = function createModuleFactory(t){var e;return function(r){return e||t(e={exports:{},parent:r},e.exports),e.exports}};\n","import domObjects from '../utils/domObjects'\nimport * as utils from '../utils/index'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractableSet from './InteractableSet'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase, options: Interact.Options }\n 'interactions:destroy': { interaction: Interact.Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\ntype ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options?: { [index: string]: any }\n}\n\nconst {\n win,\n browser,\n raf,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string\n install? (scope: Scope, options?: any): void\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n listenerMaps: Array<{\n map: ListenerMap\n id: string\n }> = []\n\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\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: Interact.Options) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable === this) {\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n }\n\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners (map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire (name: T, arg: SignalArgs[T]): void | false {\n for (const { map: { [name]: listener } } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) { this._plugins.map[plugin.id] = plugin }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n\n for (; index < this.listenerMaps.length; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (otherId === plugin.before) { break }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n }\n else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { 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.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now () {\n return ((this.window as any).Date as typeof Date || Date).now()\n }\n}\n\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n scope.usePlugin(interactions)\n scope.document = window.document\n scope.window = window\n\n return scope\n}\n","import browser from '../utils/browser'\nimport domObjects from '../utils/domObjects'\nimport { nodeContains } from '../utils/domUtils'\nimport events from '../utils/events'\nimport pointerUtils from '../utils/pointerUtils'\nimport InteractionBase from './Interaction'\nimport finder, { SearchDetails } from './interactionFinder'\nimport { Scope } from './scope'\n\ndeclare module '../core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n docEvents: Array<{ type: string, listener: Interact.Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n }\n else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () { return scope.now() }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new (options: { pointerType?: string, scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls () {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown ||\n interaction.pointerType !== 'touch' ||\n interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n}\n\nfunction doOnInteractions (method, scope) {\n return function (event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer ||\n (scope.now() - scope.prevTouchTime < 500) ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction (searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal ({ doc, scope, options }: Interact.SignalArgs[T], eventMethodName: 'add' | 'remove') {\n const { docEvents } = scope.interactions\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nexport default {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': arg => onDocSignal(arg, 'add'),\n 'scope:remove-document': arg => onDocSignal(arg, 'remove'),\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n","import * as utils from '../utils/index'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n}\n\nexport interface StartAction extends ActionProps {\n name: ActionName | string\n}\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = ''\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = ''\n}\n\nexport type PointerArgProps = {\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n pointerIndex: number\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: Interact.PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n pointerInfo: PointerInfo\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps<{\n pointerInfo: PointerInfo\n }>\n 'interactions:blur'\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoPhaseArg\n 'interactions:after-action-start': DoPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoPhaseArg\n 'interactions:after-action-move': DoPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoPhaseArg\n 'interactions:after-action-end': DoPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type _InteractionProxy = Pick<\nInteraction,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nexport class Interaction {\n // current interactable being interacted with\n interactable: Interactable = null\n\n // the target element of the interactable\n element: Interact.Element = null\n rect: Interact.Rect & Interact.Size\n edges: {\n [P in keyof Interact.Rect]?: boolean\n }\n\n _scopeFire: Interact.Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: Interact.EventTarget\n event: Interact.PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: _InteractionProxy = null\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, scopeFire }: {\n pointerType?: string\n scopeFire: Interact.Scope['fire']\n }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as _InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () { return that[key] },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n type: 'down',\n interaction: this,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action: StartAction, interactable: Interactable, element: Interact.Element) {\n if (this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) ||\n !interactable.options[action.name].enabled) {\n return false\n }\n\n utils.copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n this._stopped = false\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: EventPhase.Start,\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) {\n if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) {\n this.updatePointer(pointer, event, eventTarget, false)\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now())\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y)\n\n let dx\n let dy\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n type: 'move' as const,\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._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg?) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n }, signalArg || {})\n\n signalArg.phase = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, curEventTarget: Interact.EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n type: type as any,\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._scopeFire('interactions:blur', { event, type: 'blur', 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._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n getPointerIndex (pointer) {\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: Interact.EventTarget, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now())\n\n utils.pointer.copyCoords(this.coords.cur, this.coords.start)\n utils.pointer.copyCoords(this.coords.prev, this.coords.start)\n utils.pointer.pointerExtend(this.downPointer, pointer)\n\n this.downEvent = event\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: Interact.PointerType, event: Interact.PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) { return }\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this,\n })\n\n this.pointers.splice(pointerIndex, 1)\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy () {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd?: boolean, type?: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.interactable.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Omit & { iEvent?: InteractEvent }) {\n const { event, phase, preEnd, type } = signalArg\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type)\n const { rect } = this\n\n if (rect) {\n // update the rect modifications\n const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }\n\n if (edges.top) { rect.top += iEvent.delta.y }\n if (edges.bottom) { rect.bottom += iEvent.delta.y }\n if (edges.left) { rect.left += iEvent.delta.x }\n if (edges.right) { rect.right += iEvent.delta.x }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n _now () { return Date.now() }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","export 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","export default thing => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined as Window,\n window: undefined as Window,\n getWindow,\n init,\n}\n\nexport function init (window: Window & { wrap?: (...args) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document &&\n typeof window.wrap === 'function' &&\n window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win.window = window\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined\n win.realWindow = undefined\n}\nelse {\n init(window)\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = (node.ownerDocument || node)\n\n return rootNode.defaultView || win.window\n}\n\nwin.init = init\n\nexport default win\n","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Interact.Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n /Presto/.test(navigator.userAgent))\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n\n browser.pEventTypes = (browser.supportsPointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null)\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win, { getWindow } from './window'\n\nexport function nodeContains (parent: Node | Interact.EventTarget, child: Node | Interact.EventTarget) {\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = el => el.parentNode ? el.parentNode : el.host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Interact.Element[] | NodeListOf) {\n let deepestZoneParents = []\n let deepestZone = elements[0]\n let index = deepestZone ? 0 : -1\n let i\n let n\n\n for (i = 1; i < elements.length; i++) {\n const dropzone = elements[i]\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue\n }\n\n if (!deepestZone) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // compare zIndex of siblings\n if (dropzone.parentNode === deepestZone.parentNode) {\n const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0\n const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0\n\n if (dropzoneZIndex >= deepestZIndex) {\n deepestZone = dropzone\n index = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest dropzone\n if (!deepestZoneParents.length) {\n let parent = deepestZone\n let parentParent\n\n while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent)\n parent = parentParent\n }\n }\n\n let parent\n\n // if this element is an svg element and the current deepest is an\n // HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement &&\n dropzone instanceof domObjects.SVGElement &&\n !(dropzone instanceof domObjects.SVGSVGElement)) {\n if (dropzone === deepestZone.parentNode) {\n continue\n }\n\n parent = dropzone.ownerSVGElement\n }\n else {\n parent = dropzone\n }\n\n const dropzoneParents = []\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent)\n parent = getParent(parent)\n }\n\n n = 0\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ]\n\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone\n index = i\n deepestZoneParents = dropzoneParents\n\n break\n }\n else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n\n return index\n}\n\nexport function matchesUpTo (element: Interact.Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element)\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element)\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0])\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nfunction pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs\n let deprecated = false\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true\n break\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop]\n }\n }\n return dest\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n moz: /(Pressure)$/,\n}\n\nexport default pointerExtend\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = timeStamp\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () { return this.coords.page },\n get client () { return this.coords.client },\n get timeStamp () { return this.coords.timeStamp },\n get pageX () { return this.coords.page.x },\n get pageY () { return this.coords.page.y },\n get clientX () { return this.coords.client.x },\n get clientY () { return this.coords.client.y },\n get pointerId () { return this.coords.pointerId },\n get target () { return this.coords.target },\n get type () { return this.coords.type },\n get pointerType () { return this.coords.pointerType },\n get buttons () { return this.coords.buttons },\n }\n\n return event as typeof event & Interact.PointerType & Interact.PointerEventType\n },\n}\n\nexport default pointerUtils\n\nexport interface MockCoords {\n page: Interact.Point\n client: Interact.Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n","import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] }\n typeCount: number\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[]\n contexts: Node[]\n listeners: Array>\n }\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","export default function extend (dest: U, source: T): T & U {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\n\nexport function getStringOptionResult (value: any, target: Interact.HasGetRect, element) {\n if (value === 'parent') { return parentNode(element) }\n\n if (value === 'self') { return target.getRect(element) }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike (\n value: Interact.RectResolvable,\n target?: Interact.HasGetRect,\n element?: Interact.Element,\n functionArgs?: T,\n) {\n if (is.string(value)) {\n value = getStringOptionResult(value, target, element)\n }\n else if (is.func(value)) {\n value = value(...functionArgs)\n }\n\n if (is.element(value)) {\n value = getElementRect(value)\n }\n\n return value as Interact.Rect\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || (rect.left + rect.width)\n rect.bottom = rect.bottom || (rect.top + rect.height)\n }\n\n return rect\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right - rect.x)\n rect.height = rect.height || (rect.bottom - rect.y)\n }\n\n return rect\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n}\n","import { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target: Interact.HasGetRect & { options: Interact.PerActionDefaults }, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result,\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","let lastTime = 0\nlet request\nlet cancel\n\nfunction init (window) {\n request = window.requestAnimationFrame\n cancel = window.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`]\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = token => clearTimeout(token)\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n}\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: Interact.ActionProps, src: Interact.ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { win, arr, dom, is }\n","// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Interact.EventTarget\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Interact.Element\n listeners?: Interact.Listeners\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","import * as arr from '../utils/arr'\nimport extend from '../utils/extend'\nimport normalize, { NormalizedListeners } from '../utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\n T extends ActionName,\n P extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect (_element: Interact.Element) {\n return null\n }\n}\n\nexport default Eventable\n","import * as arr from '../utils/arr'\nimport browser from '../utils/browser'\nimport clone from '../utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '../utils/domUtils'\nimport events from '../utils/events'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\nimport normalizeListeners from '../utils/normalizeListeners'\nimport { getWindow } from '../utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\ntype IgnoreValue = string | Interact.Element | boolean\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Interact.Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Interact.Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev) || is.object(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Interact.Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Interact.Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue },\n targetNode: Node,\n eventTarget: Interact.EventTarget,\n ) {\n return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget))\n }\n\n testAllow (\n this: Interactable,\n allowFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.EventTarget,\n ) {\n if (!allowFrom) { return true }\n\n if (!is.element(element)) { return false }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n }\n else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (\n this: Interactable,\n ignoreFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.EventTarget,\n ) {\n if (!ignoreFrom || !is.element(element)) { return false }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n }\n else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interactable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n (this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","import * as arr from '../utils/arr'\nimport * as domUtils from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interact.Interactable\n target: Interact.Target\n options: Interact.OptionsArg\n win: Window\n }\n }\n}\n\nexport default class InteractableSet {\n // all set interactables\n list: Interact.Interactable[] = []\n\n selectorMap: {\n [selector: string]: Array<{ context: Document | Interact.Element, interactable: Interact.Interactable }>\n } = {}\n\n constructor (protected scope: Interact.Scope) {\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings = is.string(target)\n ? this.selectorMap[target]\n : target[this.scope.id]\n\n const targetIndex = targetMappings.findIndex(m => m.context === context)\n if (targetMappings[targetIndex]) {\n // Destroying mappingInfo's context and interactable\n targetMappings[targetIndex].context = null\n targetMappings[targetIndex].interactable = null\n }\n targetMappings.splice(targetIndex, 1)\n },\n })\n }\n\n new (target: Interact.Target, options?: any): Interact.Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n const mappingInfo = { context: interactable._context, interactable }\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) { this.selectorMap[target] = [] }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!interactable.target[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n target[this.scope.id].push(mappingInfo)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Interact.Target, options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings = isSelector\n ? this.selectorMap[target as string]\n : target[this.scope.id]\n\n if (!targetMappings) { return null }\n\n const found = arr.find(\n targetMappings,\n m => m.context === context &&\n (isSelector || m.interactable.inContext(target)))\n\n return found && found.interactable\n }\n\n forEachMatch (node: Node, callback: (interactable: Interact.Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret\n\n if ((is.string(interactable.target)\n // target is a selector and the element matches\n ? (is.element(node) && domUtils.matchesSelector(node, interactable.target))\n // target is the element\n : node === interactable.target) &&\n // the element is in context\n (interactable.inContext(node))) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class BaseEvent {\n type: string\n target: EventTarget\n currentTarget: EventTarget\n interactable: Interactable\n _interaction: Interaction\n timeStamp: any\n immediatePropagationStopped = false\n propagationStopped = false\n\n get interaction () {\n return this._interaction._proxy\n }\n\n constructor (interaction) {\n this._interaction = interaction\n }\n\n preventDefault () {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default BaseEvent\n","import extend from '../utils/extend'\nimport getOriginXY from '../utils/getOriginXY'\nimport hypot from '../utils/hypot'\nimport BaseEvent from './BaseEvent'\nimport defaults from './defaultOptions'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> extends BaseEvent {\n target: Interact.Element\n currentTarget: Interact.Element\n relatedTarget: Interact.Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n rect: Interact.FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Interact.Element\n dragLeave?: Interact.Element\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Interact.Element,\n related?: Interact.Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.interactable = target\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = (ending || phase === 'inertiastart') ? this.getSwipe() : null\n }\n\n get pageX () { return this.page.x }\n set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","/* eslint-disable @typescript-eslint/no-parameter-properties */\nexport class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: Interact.EventTarget,\n ) {}\n}\n\nexport default PointerInfo\n","import * as dom from '../utils/domUtils'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Interact.EventTarget\n curEventTarget: Interact.EventTarget\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && (pointerType === interaction.pointerType)) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId (interaction: Interact.Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import { ActionName, Scope } from '../core/scope'\nimport * as arr from '../utils/arr'\nimport * as is from '../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 defaults,\n } = scope\n\n scope.addListeners({\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n })\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag: Interact.Plugin = {\n id: 'actions/drag',\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import BaseEvent from '../../core/BaseEvent'\nimport Interactable from '../../core/Interactable'\nimport InteractEvent from '../../core/InteractEvent'\nimport Interaction from '../../core/Interaction'\nimport { ActionName } from '../../core/scope'\nimport * as arr from '../../utils/arr'\n\nclass DropEvent extends BaseEvent {\n target: Interact.Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Interact.Element\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: Interaction['dropState'], dragEvent: InteractEvent, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave'\n ? dropState.prev\n : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject () {\n const { dropState } = this._interaction\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropState.cur.dropzone !== this.dropzone ||\n dropState.cur.element !== this.target)) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target)\n\n dropState.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ]\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n }\n else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default DropEvent\n","import Interactable from '../../core/Interactable'\nimport InteractEvent from '../../core/InteractEvent'\nimport { Scope } from '../../core/scope'\nimport * as utils from '../../utils/index'\nimport drag from '../drag'\nimport DropEvent from './DropEvent'\n\nexport interface DropzoneMethod {\n (options: Interact.DropzoneOptions | boolean): Interact.Interactable\n (): Interact.DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Interact.Element,\n dropElemen: Interact.Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: {\n cur: {\n dropzone: Interactable // the dropzone a drag target might be dropped into\n element: Interact.Element // the element at the time of checking\n }\n prev: {\n dropzone: Interactable // the dropzone that was recently dragged away from\n element: Interact.Element // the element at the time of checking\n }\n rejected: boolean // wheather the potential drop was rejected from a listener\n events: any // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n element: Interact.Element\n rect: Interact.Rect\n }>\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n defaults,\n } = scope\n\n scope.usePlugin(drag)\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Interact.Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ dropState, interactable: draggable, element: dragElement }: Partial, dragEvent, pointerEvent) {\n const validDrops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interact.Interaction, _pointerEvent, dragEvent) {\n const { dropState } = interaction\n const dropEvents = {\n enter : null,\n leave : null,\n activate : null,\n deactivate: null,\n move : null,\n drop : null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null\n dropEvents.activate.dropzone = null\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null\n dropEvents.deactivate.dropzone = null\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dropEvents.move.dragmove = dragEvent\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\nfunction fireDropEvents (interaction: Interact.Interaction, events) {\n const { dropState } = interaction\n const {\n activeDrops,\n cur,\n prev,\n } = dropState\n\n if (events.leave) { prev.dropzone.fire(events.leave) }\n if (events.move) { cur.dropzone.fire(events.move) }\n if (events.enter) { cur.dropzone.fire(events.enter) }\n if (events.drop) { cur.dropzone.fire(events.drop) }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }: Interact.DoPhaseArg, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return }\n\n const { dropState } = interaction\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected = dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod (interactable: Interact.Interactable): Interact.DropzoneOptions\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean)\nfunction dropzoneMethod (interactable: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Interact.Element,\n dropElement: Interact.Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n },\n\n 'interactions:after-action-start': ({ interaction, event, iEvent: dragEvent }, scope) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n // reset active dropzones\n dropState.activeDrops = null\n dropState.events = null\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n }\n },\n\n // FIXME proper signal types\n 'interactions:action-move': onEventCreated,\n 'interactions:action-end': onEventCreated,\n\n 'interactions:after-action-move': function fireDropAfterMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n interaction.dropState.events = {}\n },\n\n 'interactions:after-action-end': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null\n dropState.events = null\n dropState.cur.dropzone = null\n dropState.cur.element = null\n dropState.prev.dropzone = null\n dropState.prev.element = null\n dropState.rejected = false\n }\n },\n },\n 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 '../core/InteractEvent'\nimport { ActionName, Scope } from '../core/scope'\nimport * as utils from '../utils/index'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.DoPhaseArg {\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 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 actions[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n id: 'actions/gesture',\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n },\n\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number } }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map(p => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (utils.is.number(iEvent.scale) &&\n iEvent.scale !== Infinity &&\n !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nexport default gesture\n","import { Interaction } from '../core/Interaction'\nimport { ActionName, Scope } from '../core/scope'\nimport * as arr from '../utils/arr'\nimport * as dom from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.FullRect\n current: Interact.Rect\n inverted: Interact.FullRect\n previous: Interact.FullRect\n delta: Interact.FullRect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n edges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n _linkedEdges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.FullRect\n edges?: Interact.ActionProps['edges']\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n id: 'actions/resize',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': arg => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': arg => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Interact.Element,\n interaction: Interaction,\n rect: Interact.Rect,\n ) {\n if (!rect) { return null }\n\n const page = extend({}, interaction.coords.cur.page)\n const options = interactable.options\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize\n const resizeEdges: { [edge: string]: boolean } = { left: false, right: false, top: false, bottom: false }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as ReturnType,\n\n getCursor ({ edges, axis, name }: Interact.ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n }\n else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n defaultMargin: null as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (\n name: string,\n value: any,\n page: Interact.Point,\n element: Node,\n interactableElement: Interact.Element,\n rect: Interact.Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) { return false }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2)\n\n if (width < 0) {\n if (name === 'left') { name = 'right' }\n else if (name === 'right') { name = 'left' }\n }\n if (height < 0) {\n if (name === 'top') { name = 'bottom' }\n else if (name === 'bottom') { name = 'top' }\n }\n\n if (name === 'left') { return page.x < ((width >= 0 ? rect.left : rect.right) + margin) }\n if (name === 'top') { return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin) }\n\n if (name === 'right') { return page.x > ((width >= 0 ? rect.right : rect.left) - margin) }\n if (name === 'bottom') { return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin) }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) { return false }\n\n return is.element(value)\n // the value is an element to use as a resize handle\n ? value === element\n // otherwise check if element matches value as selector\n : dom.matchesUpTo(element, value, interactableElement)\n}\n\nfunction initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const startRect = extend({}, interaction.rect)\n const resizeOptions = interaction.interactable.options.resize\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = extend({}, interaction.prepared.edges)\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom)\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right)\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top)\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left)\n\n interaction.prepared._linkedEdges = linkedEdges\n }\n else {\n interaction.prepared._linkedEdges = null\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : {\n left: startRect.left,\n right: startRect.right,\n top: startRect.top,\n bottom: startRect.bottom,\n },\n inverted : extend({}, startRect),\n previous : extend({}, startRect),\n delta : {\n left: 0,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n let edges = interaction.prepared.edges\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start\n const current = interaction.resizeRects.current\n const inverted = interaction.resizeRects.inverted\n const deltaRect = interaction.resizeRects.delta\n const previous = extend(interaction.resizeRects.previous, inverted)\n const originalEdges = edges\n\n const eventDelta = extend({}, iEvent.delta)\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1\n\n edges = interaction.prepared._linkedEdges\n\n if ((originalEdges.left && originalEdges.bottom) ||\n (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio\n }\n else if (originalEdges.left || originalEdges.right) { eventDelta.y = eventDelta.x / startAspectRatio }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio }\n }\n\n // update the 'current' rect without modifications\n if (edges.top) { current.top += eventDelta.y }\n if (edges.bottom) { current.bottom += eventDelta.y }\n if (edges.left) { current.left += eventDelta.x }\n if (edges.right) { current.right += eventDelta.x }\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(inverted, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top\n\n inverted.top = inverted.bottom\n inverted.bottom = swap\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left\n\n inverted.left = inverted.right\n inverted.right = swap\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom)\n inverted.bottom = Math.max(current.bottom, start.top)\n inverted.left = Math.min(current.left, start.right)\n inverted.right = Math.max(current.right, start.left)\n }\n\n inverted.width = inverted.right - inverted.left\n inverted.height = inverted.bottom - inverted.top\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge]\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = inverted\n iEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction updateEventAxes ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== ActionName.Resize || !interaction.resizeAxes) { return }\n\n const options = interaction.interactable.options\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y\n }\n else {\n iEvent.delta.y = iEvent.delta.x\n }\n iEvent.axes = 'xy'\n }\n else {\n iEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0\n }\n }\n}\n\nexport default resize\n","import { Scope } from '../core/scope'\nimport drag from './drag'\nimport drop from './drop/index'\nimport gesture from './gesture'\nimport resize from './resize'\n\nfunction install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n}\n\nconst id = 'actions'\n\nexport {\n id,\n install,\n gesture,\n resize,\n drag,\n drop,\n}\n","import * as domUtils from '../utils/domUtils'\nimport * as is from '../utils/is'\nimport raf from '../utils/raf'\nimport { getStringOptionResult } from '../utils/rect'\nimport { getWindow } from '../utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement\n margin?: number\n distance?: number\n interval?: number\n}\n\nfunction install (scope: Scope) {\n const {\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.eventTypes.push('autoscroll')\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed : 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n }\n else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.interactable, interaction.prepared.name))) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top\n let right\n let bottom\n let left\n\n const { interactable, element } = interaction\n const options = interactable.options[interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n }\n else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = (right ? 1 : left ? -1 : 0)\n autoScroll.y = (bottom ? 1 : top ? -1 : 0)\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.interactable,\n element,\n )\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nexport default {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n","import { warnOnce } from '../utils/index'\nimport * as is from '../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 Actions = import ('@interactjs/core/scope').Actions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Interact.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: Interact.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: Interact.Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */\n Interactable.prototype.actionChecker = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interact.Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (\n this: Interact.Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interact.Interaction,\n element: Interact.Element,\n): Interact.ActionProps {\n const action = this.defaultActionChecker(pointer, event, interaction, element)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n}\n\nfunction defaultActionChecker (\n interactable: Interact.Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interact.Interaction,\n element: Interact.Element,\n actions: Actions,\n) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interact.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: Interact.Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n","import * as utils from '../utils/index'\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'autoStart:before-start': Interact.SignalArgs['interactions:move']\n 'autoStart:prepared': { interaction: Interact.Interaction }\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Interact.Element\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n interact,\n defaults,\n } = scope\n\n scope.usePlugin(InteractableMethods)\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n }\n}\n\nfunction prepareOnDown ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope) {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Interact.Element, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove (arg: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\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.fire('autoStart:before-start', arg)\n\n const { interactable } = interaction\n\n if (interaction.prepared.name && interactable) {\n // check manualStart and interaction limit\n if (interactable.options[interaction.prepared.name].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n interaction.stop()\n }\n else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n}\n\nfunction clearCursorOnStop ({ interaction }: { interaction: Interact.Interaction }, scope: Interact.Scope) {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: Interact.ActionProps,\n interactable: Interact.Interactable,\n element: Interact.Element,\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interact.Interaction,\n pointer,\n event,\n matches: Interact.Interactable[],\n matchElements: Interact.Element[],\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) { continue }\n\n const action = validateAction(\n matchAction,\n match,\n matchElement,\n eventTarget,\n scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interact.Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n let matches = []\n let matchElements = []\n\n let element = eventTarget\n\n function pushMatches (interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (utils.is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)\n\n if (actionInfo.action &&\n !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = utils.dom.parentNode(element)\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interact.Interaction,\n { action, interactable, element }: {\n action: Interact.ActionProps\n interactable: Interact.Interactable\n element: Interact.Element\n },\n scope: Interact.Scope,\n) {\n action = action || { name: null }\n\n // clear previous target element cursor\n if (interaction.interactable && interaction.interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n\n interaction.interactable = interactable\n interaction.element = element\n utils.copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name\n ? interactable.getRect(element)\n : null\n\n setInteractionCursor(interaction, scope)\n\n scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit (interactable: Interact.Interactable, element: Interact.Element, action, scope: Interact.Scope) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) { continue }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue, scope: Interact.Scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Interact.Element, cursor, scope: Interact.Scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interact.Interaction, scope: Interact.Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker: Interact.CursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (utils.is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n }\n else {\n cursor = scope.actions[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nexport default {\n id: 'auto-start/base',\n install,\n listeners: {\n 'interactions:down': prepareOnDown,\n 'interactions:move': (arg, scope) => {\n prepareOnMove(arg, scope)\n startOnMove(arg, scope)\n },\n 'interactions:stop': clearCursorOnStop,\n },\n before: 'ations',\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n} as Interact.Plugin\n","import { ActionName } from '../core/scope'\nimport { parentNode } from '../utils/domUtils'\nimport * as is from '../utils/is'\nimport autoStart from './base'\n\nfunction beforeStart ({ interaction, eventTarget, dx, dy }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy')\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.interactable) { return }\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === ActionName.Drag &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element)\n }\n }\n}\n\nfunction checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false }\n\n const thisAxis = interactable.options[ActionName.Drag].startAxis\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis)\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n defaults,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nexport default {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\n","import autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nfunction install (scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n}\n\nconst id = 'auto-start'\n\nexport {\n id,\n install,\n autoStart,\n hold,\n dragAxis,\n}\n","import { matchesSelector, nodeContains } from '../utils/domUtils'\nimport events from '../utils/events'\nimport * as is from '../utils/is'\nimport { getWindow } from '../utils/window'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault: typeof preventDefault\n checkAndPreventDefault: (event: Event) => void\n }\n}\n\nfunction preventDefault (this: Interact.Interactable, newValue?: 'always' | 'never' | 'auto') {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n}\n\nfunction checkAndPreventDefault (interactable: Interact.Interactable, scope: Interact.Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') { return }\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: { interaction: Interact.Interaction, event: Interact.PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Interact.Scope) {\n /** @lends Interactable */\n const { Interactable } = scope\n\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n * @return {string | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {}),\n}\n","/* eslint-disable no-console */\n/* global process */\nimport domObjects from '../utils/domObjects'\nimport { parentNode } from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\nimport win from '../utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools?: Interact.OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: string\n text: string\n perform: (interaction: Interact.Interaction) => boolean\n getInfo: (interaction: Interact.Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = '',\n boxSizing = '',\n noListeners = '',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\n// eslint-disable-next-line no-restricted-syntax\nfunction install (scope: Interact.Scope, { logger }: { logger?: Logger } = {}) {\n const {\n Interactable,\n defaults,\n } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n}\n\nconst checks: Check[] = [\n {\n name: 'touchAction',\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [\n element,\n links.touchAction,\n ]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: 'boxSizing',\n perform (interaction) {\n const { element } = interaction\n\n return interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [\n element,\n links.boxSizing,\n ]\n },\n },\n\n {\n name: 'noListeners',\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [\n interaction.prepared.name,\n interaction.interactable,\n ]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop])\n}\n\nfunction parentHasStyle (element: Interact.Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent)\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n","import extend from '../utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: {\n states: ModifierState[]\n offsets: any\n startOffset: any\n startDelta: Interact.Point\n result?: {\n delta: {\n x: number\n y: number\n }\n rectDelta: {\n left: number\n right: number\n top: number\n bottom: number\n }\n coords: Interact.Point\n changed: boolean\n }\n endPrevented: boolean\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport interface Modifier<\n Defaults = any,\n State extends ModifierState = any,\n Name extends string = any\n> {\n options?: Defaults\n methods: {\n start?: (arg: ModifierArg) => void\n set: (arg: ModifierArg) => void\n beforeEnd?: (arg: ModifierArg) => boolean\n stop?: (arg: ModifierArg) => void\n }\n name?: Name\n}\n\nexport type ModifierState<\n Defaults = {},\n StateProps extends { [prop: string]: any } = {},\n Name extends string = any\n> = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg {\n interaction: Interact.Interaction\n interactable: Interact.Interactable\n phase: Interact.EventPhase\n rect: Interact.Rect\n states?: State[]\n state?: State\n element: Interact.Element\n pageCoords?: Interact.Point\n prevCoords?: Interact.Point\n coords?: Interact.Point\n startOffset?: Interact.Rect\n preEnd?: boolean\n requireEndOnly?: boolean\n}\n\nexport interface ModifierModule<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n> {\n defaults?: Defaults\n start? (arg: ModifierArg): void\n set? (arg: ModifierArg): void\n beforeEnd? (arg: ModifierArg): boolean\n stop? (arg: ModifierArg): void\n}\n\nfunction start (\n { interaction, phase }: { interaction: Interact.Interaction, phase: Interact.EventPhase },\n pageCoords: Interact.Point,\n prevCoords: Interact.Point,\n) {\n const { interactable, element } = interaction\n const modifierList = getModifierList(interaction)\n const states = prepareStates(modifierList)\n\n const rect = extend({} as { [key: string]: any }, interaction.rect)\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: ModifierArg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n prevCoords: prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page),\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nexport function startAll (arg: ModifierArg) {\n const states: ModifierState[] = arg.states\n\n for (const state of states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg)\n }\n }\n}\n\nexport function setAll (arg: ModifierArg) {\n const {\n prevCoords,\n phase,\n preEnd,\n requireEndOnly,\n rect,\n states,\n } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, rect)\n\n const result = {\n delta: { x: 0, y: 0 },\n rectDelta: {\n left : 0,\n right : 0,\n top : 0,\n bottom: 0,\n },\n coords: arg.coords,\n changed: true,\n }\n\n for (const state of states) {\n const { options } = state\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue }\n\n arg.state = state\n state.methods.set(arg)\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x\n result.delta.y = arg.coords.y - arg.pageCoords.y\n\n let rectChanged = false\n\n if (rect) {\n result.rectDelta.left = arg.rect.left - rect.left\n result.rectDelta.right = arg.rect.right - rect.right\n result.rectDelta.top = arg.rect.top - rect.top\n result.rectDelta.bottom = arg.rect.bottom - rect.bottom\n\n rectChanged = result.rectDelta.left !== 0 ||\n result.rectDelta.right !== 0 ||\n result.rectDelta.top !== 0 ||\n result.rectDelta.bottom !== 0\n }\n\n result.changed = !prevCoords || prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y ||\n rectChanged\n\n return result\n}\n\nfunction beforeMove (arg: Partial & {\n interaction: Interact.Interaction\n phase: Interact.EventPhase\n preEnd?: boolean\n skipModifiers?: number\n prevCoords?: Interact.Point\n modifiedCoords?: Interact.Point\n}): void | false {\n const { interaction, phase, preEnd, skipModifiers } = arg\n const { interactable, element } = interaction\n\n const states = skipModifiers\n ? interaction.modifiers.states.slice(skipModifiers)\n : interaction.modifiers.states\n const prevCoords = arg.prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page)\n\n const modifierResult = setAll({\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n prevCoords,\n rect: interaction.rect,\n states,\n requireEndOnly: false,\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 if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n modifierResult.coords.x += adjustment.x\n modifierResult.coords.y += adjustment.y\n modifierResult.delta.x += adjustment.x\n modifierResult.delta.y += adjustment.y\n }\n setCoords(arg)\n}\n\nfunction beforeEnd (arg: Interact.DoPhaseArg & { noPreEnd?: boolean, state?: ModifierState }): 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 as unknown as ModifierArg)\n\n if (endResult === false) {\n interaction.modifiers.endPrevented = true\n return false\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true })\n didPreEnd = true\n }\n }\n}\n\nfunction stop (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase }) {\n const { interaction } = arg\n const states = interaction.modifiers.states\n\n if (!states || !states.length) {\n return\n }\n\n const modifierArg: ModifierArg = extend({\n states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n }, arg as any)\n\n for (const state of states) {\n modifierArg.state = state\n\n if (state.methods.stop) { state.methods.stop(modifierArg) }\n }\n\n arg.interaction.modifiers.states = null\n arg.interaction.modifiers.endPrevented = null\n}\n\nfunction getModifierList (interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.filter(\n modifier => !modifier.options || modifier.options.enabled !== false,\n )\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type]\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n }\n })\n .filter(m => !!m)\n}\n\nexport function prepareStates (modifierList: Modifier[]) {\n const states: ModifierState[] = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return states\n}\n\nexport function setCoords (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase, rect?: Interact.Rect }) {\n const { interaction, phase } = arg\n const curCoords = interaction.coords.cur\n const 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]] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = interaction.modifiers.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n\nexport function restoreCoords ({ interaction: { coords, rect, modifiers } }: { interaction: Interact.Interaction }) {\n if (!modifiers.result) { return }\n\n const { startDelta } = modifiers\n const { delta: curDelta, rectDelta } = modifiers.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n}\n\nfunction shouldDo (options, preEnd?: boolean, requireEndOnly?: boolean, phase?: string) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly || options.alwaysOnEnd) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string\n> (\n module: ModifierModule,\n name?: Name,\n) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options: Defaults = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = { options, methods, name }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport default {\n id: 'modifiers/base',\n install: scope => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets: {},\n states: null,\n result: null,\n endPrevented: false,\n startDelta: null,\n }\n },\n\n 'interactions:before-action-start': arg => {\n start(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page)\n setCoords(arg)\n },\n\n 'interactions:action-resume': arg => {\n stop(arg)\n start(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords)\n beforeMove(arg)\n },\n\n 'interactions:after-action-move': restoreCoords,\n 'interactions:before-action-move': beforeMove,\n\n 'interactions:after-action-start': restoreCoords,\n\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': stop,\n },\n before: 'ations',\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 '../core/InteractEvent'\nimport modifiers, { restoreCoords, setCoords } from '../modifiers/base'\nimport * as utils from '../utils/index'\nimport raf from '../utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: {\n active: boolean\n smoothEnd: boolean\n allowResume: boolean\n\n startEvent?: Interact.InteractEvent\n upCoords: {\n page: Interact.Point\n client: Interact.Point\n timeStamp: number\n }\n\n xe?: number\n ye?: number\n sx?: number\n sy?: number\n\n t0?: number\n te?: number\n v0?: number\n vx0?: number\n vy0?: number\n duration?: number\n modifiedXe?: number\n modifiedYe?: number\n\n lambda_v0?: number // eslint-disable-line camelcase\n one_ve_v0?: number // eslint-disable-line camelcase\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:action-resume': {\n interaction: Interact.Interaction\n phase: EventPhase.Resume\n }\n }\n}\n\n(EventPhase as any).Resume = 'resume'\n;(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Interact.Scope) {\n const {\n defaults,\n } = scope\n\n scope.usePlugin(modifiers)\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 (\n { interaction, event, pointer, eventTarget }: Interact.SignalArgs['interactions:down'],\n scope: Interact.Scope,\n) {\n const state = interaction.inertia\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer as Interact.PointerType, event as Interact.PointerEventType, eventTarget, true)\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer),\n interaction._now(),\n )\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n phase: EventPhase.Resume as const,\n }\n\n scope.fire('interactions:action-resume', signalArg)\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event as Interact.PointerEventType, interaction.prepared.name, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release (\n { interaction, event, noPreEnd }: Interact.DoPhaseArg & { noPreEnd?: boolean },\n scope: Interact.Scope,\n) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = interaction._now()\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y)\n\n let smoothEnd = false\n let modifierResult: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: interaction.rect,\n pageCoords: interaction.coords.cur.page,\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus),\n ),\n preEnd: true,\n prevCoords: null,\n requireEndOnly: null,\n phase: EventPhase.InertiaStart,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierArg.prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.prevEvent.page\n modifierArg.requireEndOnly = false\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n setCoords(modifierArg)\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 restoreCoords(modifierArg)\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.interactable.fire(state.startEvent)\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x\n state.vy0 = interaction.coords.velocity.client.y\n state.v0 = pointerSpeed\n\n calcInertia(interaction, state)\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page)\n\n modifierArg.pageCoords.x += state.xe\n modifierArg.pageCoords.y += state.ye\n modifierArg.prevCoords = null\n modifierArg.requireEndOnly = true\n\n modifierResult = modifiers.setAll(modifierArg)\n\n state.modifiedXe += modifierResult.delta.x\n state.modifiedYe += modifierResult.delta.y\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.smoothEnd = true\n state.xe = modifierResult.delta.x\n state.ye = modifierResult.delta.y\n\n state.sx = state.sy = 0\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n\n return false\n}\n\nfunction stop ({ interaction }: Interact.DoPhaseArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = interaction._now() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.sx = state.modifiedXe\n state.sy = state.modifiedYe\n\n interaction.move()\n interaction.end(state.startEvent)\n state.active = false\n interaction.simulation = null\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n}\n\nfunction smothEndTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n\n const state = interaction.inertia\n const t = interaction._now() - state.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration)\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration)\n\n interaction.move()\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n else {\n state.sx = state.xe\n state.sy = state.ye\n\n interaction.move()\n interaction.end(state.startEvent)\n\n state.smoothEnd =\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction updateInertiaCoords (interaction: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [{\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n }], interaction._now())\n}\n\nfunction getOptions ({ interactable, prepared }: Interact.Interaction) {\n return interactable &&\n interactable.options &&\n prepared.name &&\n interactable.options[prepared.name].inertia\n}\n\nexport default {\n id: 'inertia',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n upCoords : {} as any,\n timeout : null,\n }\n },\n\n 'interactions:before-action-end': release,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n },\n before: 'modifiers/base',\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n}\n","import extend from '../../utils/extend'\nimport * as is from '../../utils/is'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierModule, ModifierState } from '../base'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: Interact.RectResolvable<[number, number, Interact.Interaction]>\n // what part of self is allowed to drag over\n elementRect: Interact.Rect\n offset: Interact.Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Interact.Rect = extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }, options.offset || {})\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = (restriction.right - restriction.left) - rect.width\n const heightDiff = (restriction.bottom - restriction.top) - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - (rect.width * elementRect.left)\n offset.top += startOffset.top - (rect.height * elementRect.top)\n\n offset.right += startOffset.right - (rect.width * (1 - elementRect.right))\n offset.bottom += startOffset.bottom - (rect.height * (1 - elementRect.bottom))\n }\n\n state.offset = offset\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) { return }\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect (value, interaction, coords?: Interact.Point) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default restrict\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport extend from '../../utils/extend'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport { getRestrictionRect, RestrictOptions } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, state }: ModifierArg) {\n const { options } = state\n const startOffset = interaction.modifiers.startOffset\n let offset\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { offset, options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || {} as Interact.Rect\n const outer = getRestrictionRect(options.outer, interaction, page) || {} as Interact.Rect\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default restrictEdges\n","import extend from '../../utils/extend'\nimport restrictPointer from './pointer'\n\nconst defaults = extend({\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n}, restrictPointer.defaults)\n\nconst restrictRect = {\n start: restrictPointer.start,\n set: restrictPointer.set,\n defaults,\n}\n\nexport default restrictRect\n","import extend from '../../utils/extend'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrictEdges, { RestrictEdgesState } from './edges'\nimport { getRestrictionRect, RestrictOptions } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n max?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState =\n RestrictEdgesState & ModifierState\n\nfunction set (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted)\n\n const minSize = rectUtils.tlbrToXywh(getRestrictionRect(options.min, interaction, arg.coords)) || noMin\n const maxSize = rectUtils.tlbrToXywh(getRestrictionRect(options.max, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default restrictSize\n","import * as utils from '../../utils/index'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface SnapPosition {\n x: number\n y: number\n range?: number\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: Interact.Interaction,\n offset: Interact.Point,\n index: number\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[]\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Interact.Point[]\n // startCoords = offset snapping from drag start page position\n offset: Interact.Point | Interact.RectResolvable<[Interact.Interaction]> | 'startCoords'\n offsetWithOrigin?: boolean\n origin: Interact.RectResolvable<[Interact.Element]> | Interact.Point\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const offsets = []\n const origin = options.offsetWithOrigin\n ? getOrigin(arg)\n : { x: 0, y: 0 }\n\n let snapOffset\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const relativePoints = options.relativePoints || []\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index]\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n })\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset))\n }\n\n state.offsets = offsets\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = utils.extend({}, coords)\n const targets = []\n let target\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n state.realX = page.x\n state.realY = page.y\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n targets.push({\n x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: utils.is.number(target.range) ? target.range : options.range,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n }\n\n for (let i = 0, len = targets.length; i < len; i++) {\n target = targets[i]\n\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = utils.hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.dx = dx\n closest.dy = dy\n\n state.range = range\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const { element } = arg.interaction\n const optionsOrigin = utils.rect.rectToXY(\n utils.rect.resolveRectLike(arg.state.options.origin as any, null, null, [element]),\n )\n const origin = optionsOrigin || utils.getOriginXY(\n arg.interactable,\n element,\n arg.interaction.prepared.name,\n )\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range : Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default snap\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '../../utils/extend'\nimport * as is from '../../utils/is'\nimport { ModifierArg } from '../base'\nimport snap, { SnapOptions, SnapState } from './pointer'\n\nexport type SnapSizeOptions = Pick<\nSnapOptions,\n'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'\n>\n\nfunction start (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [{\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of (options.targets || [])) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n snap.set(arg)\n\n state.options = options\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default snapSize\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n */\n\nimport clone from '../../utils/clone'\nimport extend from '../../utils/extend'\nimport { ModifierArg } from '../base'\nimport { SnapState } from './pointer'\nimport snapSize, { SnapSizeOptions } from './size'\n\nfunction start (arg: ModifierArg) {\n const edges = arg.interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nfunction set (arg) {\n return snapSize.set(arg)\n}\n\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults) as SnapSizeOptions, {\n offset: { x: 0, y: 0 },\n } as unknown),\n}\n\nexport default snapEdges\n","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictRectModule from './restrict/rect'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictRect = makeModifier(restrictRectModule, 'restrictRect')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import BaseEvent from '../core/BaseEvent'\nimport pointerUtils from '../utils/pointerUtils'\n\n/** */\nexport default class PointerEvent extends BaseEvent {\n type: T\n originalEvent: Interact.PointerEventType | PointerEvent\n pointerId: number\n pointerType: string\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n\n /** */\n constructor (\n type: T,\n pointer: Interact.PointerType | PointerEvent,\n event: Interact.PointerEventType | PointerEvent,\n eventTarget: Interact.EventTarget,\n interaction: Interact.Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double = !!(interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500)\n }\n else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n}\n","import { PerActionDefaults } from '../core/defaultOptions'\nimport Eventable from '../core/Eventable'\nimport Interaction from '../core/Interaction'\nimport { Scope } from '../core/scope'\nimport * as utils from '../utils/index'\nimport PointerEvent from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Interact.Point | string | Interact.Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n}\n\nconst pointerEvents = {\n id: 'pointer-events/base',\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n}\n\nfunction fire (\n arg: {\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Interact.Scope,\n) {\n const {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n targets = collectEventTargets(arg, scope),\n } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n (i + 1) < targets.length && targets[i + 1].node !== pointerEvent.currentTarget)) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n }, scope)\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }: {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n type: T\n}, scope: Interact.Scope) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents: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 addInteractionProps ({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo ({ down, pointerInfo }: Interact.SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold ({ interaction, pointerIndex }) {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n}\n\nfunction moveAndClearHold (\n { interaction, pointer, event, eventTarget, duplicate }: Interact.SignalArgs['interactions:move'],\n scope: Interact.Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicate && (!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: eventTarget as Interact.Element,\n type: 'move',\n }, scope)\n }\n}\n\nfunction downAndStartHold ({ interaction, pointer, event, eventTarget, pointerIndex }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope) {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) { return }\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n }, scope)\n }, minDuration)\n}\n\nfunction tapAfterUp ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:up'], scope: Interact.Scope) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install (scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n}\n\nexport default pointerEvents\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Interact.Scope) {\n scope.usePlugin(basePlugin)\n\n const {\n pointerEvents,\n } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.push('holdrepeat')\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: Interact.SignalArgs['pointerEvents:fired'],\n scope: Interact.Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) { return }\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) { return }\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n }, scope)\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nexport default {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n acc[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n },\n ),\n} as Interact.Plugin\n","import { Scope } from '../core/scope'\nimport { merge } from '../utils/arr'\nimport extend from '../utils/extend'\n\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 } = scope\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: Interact.Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nconst plugin: Interact.Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({\n targets,\n node,\n type,\n eventTarget,\n }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Interact.Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n","import pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nfunction install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n}\n\nconst id = 'pointer-events'\n\nexport { id, pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '../core/Interactable'\nimport { EventPhase } from '../core/InteractEvent'\nimport { ActionProps, Interaction } from '../core/Interaction'\nimport { Scope } from '../core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '../utils/index'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: () => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Reflow = 'reflow',\n }\n}\n\n(EventPhase as any).Reflow = 'reflow'\n\nexport function install (scope: Scope) {\n const {\n actions,\n /** @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 /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope)\n }\n}\n\nfunction reflow (interactable: Interactable, action: ActionProps, scope: Scope): Promise {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect)\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow (scope: Scope, interactable: Interactable, element: Interact.Element, action: ActionProps, event: any) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: EventPhase.Reflow,\n }\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prepared = extend({}, action)\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n\n interaction._doPhase(signalArg)\n\n const reflowPromise = (win.window as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === EventPhase.Reflow) {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n} as Interact.Plugin\n","/** @module interact */\n\nimport { Options } from '../core/defaultOptions'\nimport Interactable from '../core/Interactable'\nimport { Scope } from '../core/scope'\nimport browser from '../utils/browser'\nimport events from '../utils/events'\nimport * as utils from '../utils/index'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n */\ninteract.use = use\nfunction use (plugin: Interact.Plugin, options?: { [key: string]: any }) {\n scope.usePlugin(plugin, options)\n\n return interact\n}\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\ninteract.isSet = isSet\nfunction isSet (target: Interact.Element, options?: any) {\n return !!scope.interactables.get(target, options && options.context)\n}\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\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.addListeners({\n 'interactable:unset': ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) {\n interaction.stop()\n }\n }\n },\n})\n\ninteract.addDocument = (doc, options) => scope.addDocument(doc, options)\ninteract.removeDocument = doc => scope.removeDocument(doc)\n\nscope.interact = interact\n\nexport { scope }\nexport default interact\n","import * as actions from '../actions/index'\nimport autoScroll from '../auto-scroll/index'\nimport * as autoStart from '../auto-start/index'\nimport interactablePreventDefault from '../core/interactablePreventDefault'\nimport devTools from '../dev-tools/index'\nimport inertia from '../inertia/index'\nimport modifiersBase from '../modifiers/base'\nimport * as modifiers from '../modifiers/index'\nimport * as pointerEvents from '../pointer-events/index'\nimport reflow from '../reflow/index'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window) {\n scope.init(window)\n\n interact.use(interactablePreventDefault)\n\n // pointerEvents\n interact.use(pointerEvents)\n\n // inertia\n interact.use(inertia)\n\n // snap, resize, etc.\n interact.use(modifiersBase)\n\n // autoStart, hold\n interact.use(autoStart)\n\n // drag and drop, resize, gesture\n interact.use(actions)\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type]\n\n _defaults._methods = _methods\n scope.defaults.perAction[type] = _defaults\n }\n\n // autoScroll\n interact.use(autoScroll)\n\n // reflow\n interact.use(reflow)\n\n // eslint-disable-next-line no-undef\n if (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n }\n\n return interact\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = process.env.npm_package_version\n\nexport default interact\nexport {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","/// \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 const gridFunc = function snapGrid (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 gridFunc._isSnapGrid = true\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n\nexport default createGrid\n","import grid from './grid'\n\nexport { grid }\n","import interact, { init as initInteract } from '../interact/index'\nimport * as modifiers from '../modifiers/index'\nimport { Modifier } from '../modifiers/base'\nimport '../types/index'\nimport extend from '../utils/extend'\nimport * as snappers from '../utils/snappers/index'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: typeof modifiers & { [key: string]: (options?) => Modifier }\n snappers?: typeof snappers & { [key: string]: any }\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n id: 'interactjs',\n install () {\n interact.modifiers = extend({}, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\n;(interact as any).default = interact // tslint:disable-line no-string-literal\n;(interact as any).init = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","\nreturn _$index_29;\n\n});\n"]} \ No newline at end of file diff --git a/packages/interactjs/dist/interact.min.js b/packages/interactjs/dist/interact.min.js index e6f490e37..32d9c39d6 100644 --- a/packages/interactjs/dist/interact.min.js +++ b/packages/interactjs/dist/interact.min.js @@ -1,4 +1,4 @@ -/* interact.js 1.6.3 | 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{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).interact=e()}}(function(){function e(t){var n;return function(e){return n||t(n={exports:{},parent:e},n.exports),n.exports}}var h=e(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Scope=t.ActionName=void 0;var o=function(e){if(e&&e.__esModule)return e;var t=f();if(t&&t.has(e))return t.get(e);var n={};if(null!=e){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}}n.default=e,t&&t.set(e,n);return n}(lt),n=c(k),i=c(kt),a=c(It),s=c(Ft),u=c(nn),l=c(wn),r=c(S({}));function c(e){return e&&e.__esModule?e:{default:e}}function f(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return f=function(){return e},e}function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function d(e,t){return!t||"object"!==p(t)&&"function"!=typeof t?function(e){if(void 0!==e)return e;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e):t}function v(e,t,n){return(v="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=g(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(n):o.value}})(e,t,n||e)}function g(e){return(g=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function y(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(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||(p.pointer.setCoordDeltas(this.coords.delta,this.coords.prev,this.coords.cur),p.pointer.setCoordVelocity(this.coords.velocity,this.coords.delta)),this._signals.fire("move",a),i||(this.interacting()&&this.move(a),this.pointerWasMoved&&p.pointer.copyCoords(this.coords.prev,this.coords.cur))}},{key:"move",value:function(e){(e=p.extend({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this},e||{})).phase=i.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){var t;this._ending=!0,e=e||this._latestPointer.event,this.interacting()&&(t=this._doPhase({event:e,interaction:this,phase:i.EventPhase.End})),!(this._ending=!1)===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.interactable=this.element=null,this._interacting=!1,this._stopped=!0,this.prepared.name=this.prevEvent=null}},{key:"getPointerIndex",value:function(e){var t=p.pointer.getPointerId(e);return"mouse"===this.pointerType||"pen"===this.pointerType?this.pointers.length-1:p.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=p.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 s.default(o,e,t,null,null),i=this.pointers.length,this.pointers.push(a)),r&&(this.pointerIsDown=!0,this.interacting()||(p.pointer.setCoords(this.coords.start,this.pointers.map(function(e){return e.pointer}),this._now()),p.pointer.copyCoords(this.coords.cur,this.coords.start),p.pointer.copyCoords(this.coords.prev,this.coords.start),p.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:"destroy",value:function(){this._latestPointer.pointer=null,this._latestPointer.event=null,this._latestPointer.eventTarget=null}},{key:"_createPreparedEvent",value:function(e,t,n,r){var o=this.prepared.name;return new i.default(this,e,o,t,this.element,null,n,r)}},{key:"_fireEvent",value:function(e){this.interactable.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(!1===this._signals.fire("before-action-".concat(n),e))return!1;var i=e.iEvent=this._createPreparedEvent(t,n,r,o),a=this.rect;if(a){var s=this.edges||this.prepared.edges||{left:!0,right:!0,top:!0,bottom:!0};s.top&&(a.top+=i.delta.y),s.bottom&&(a.bottom+=i.delta.y),s.left&&(a.left+=i.delta.x),s.right&&(a.right+=i.delta.x),a.width=a.right-a.left,a.height=a.bottom-a.top}return this._signals.fire("action-".concat(n),e),this._fireEvent(i),this._signals.fire("after-action-".concat(n),e),!0}},{key:"_now",value:function(){return Date.now()}},{key:"pointerMoveTolerance",get:function(){return 1}}]),l}(),g=t.Interaction=v;t.default=g}),s={};function t(e,t){for(var n=0;na.left&&c.xa.top&&c.y=a.left&&v<=a.right&&g>=a.top&&g<=a.bottom}if(d&&vr.is.number(u)){var h=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);s=u<=h}e.options.drop.checker&&(s=e.options.drop.checker(t,n,s,e,i,r,o));return s}(this,e,t,n,r,o,i)},t.dynamicDrop=function(e){return vr.is.bool(e)?(i.dynamicDrop=e,t):i.dynamicDrop},vr.arr.merge(e.eventTypes,["dragenter","dragleave","dropactivate","dropdeactivate","dropmove","drop"]),e.methodDict.drop="dropzone",i.dynamicDrop=!1,o.actions.drop=jr.defaults},getActiveDrops:wr,getDrop:Or,getDropEvents:Pr,fireDropEvents:_r,defaults:{enabled:!1,accept:null,overlap:"pointer"}},Mr=jr;dr.default=Mr;var Er={};Object.defineProperty(Er,"__esModule",{value:!0}),Er.default=void 0;var Sr,kr=(Sr=wn)&&Sr.__esModule?Sr:{default:Sr},Tr=h({}),Dr=function(e){if(e&&e.__esModule)return e;var t=Ir();if(t&&t.has(e))return t.get(e);var n={};if(null!=e){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}}n.default=e,t&&t.set(e,n);return n}(lt);function Ir(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return Ir=function(){return e},e}Tr.ActionName.Gesture="gesture";var zr={id:"actions/gesture",install:function(e){var t=e.actions,n=e.Interactable,r=e.interactions,o=e.defaults;n.prototype.gesturable=function(e){return Dr.is.object(e)?(this.options.gesture.enabled=!1!==e.enabled,this.setPerAction("gesture",e),this.setOnEvents("gesture",e),this):Dr.is.bool(e)?(this.options.gesture.enabled=e,this):this.options.gesture},r.signals.on("action-start",Ar),r.signals.on("action-move",Ar),r.signals.on("action-end",Ar),r.signals.on("new",function(e){e.interaction.gesture={angle:0,distance:0,scale:1,startAngle:0,startDistance:0}}),t[Tr.ActionName.Gesture]=zr,t.names.push(Tr.ActionName.Gesture),Dr.arr.merge(t.eventTypes,["gesturestart","gesturemove","gestureend"]),t.methodDict.gesture="gesturable",o.actions.gesture=zr.defaults},defaults:{},checker:function(e,t,n,r,o){return 2<=o.pointers.length?{name:"gesture"}:null},getCursor:function(){return""}};function Ar(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,u=t.interactable.options.deltaSource;if(n.touches=[i[0],i[1]],a)n.distance=Dr.pointer.touchDistance(i,u),n.box=Dr.pointer.touchBBox(i),n.scale=1,n.ds=0,n.angle=Dr.pointer.touchAngle(i,u),n.da=0,t.gesture.startDistance=n.distance,t.gesture.startAngle=n.angle;else if(s||r instanceof kr.default){var l=t.prevEvent;n.distance=l.distance,n.box=l.box,n.scale=l.scale,n.ds=0,n.angle=l.angle,n.da=0}else n.distance=Dr.pointer.touchDistance(i,u),n.box=Dr.pointer.touchBBox(i),n.scale=n.distance/t.gesture.startDistance,n.angle=Dr.pointer.touchAngle(i,u),n.ds=n.scale-t.gesture.scale,n.da=n.angle-t.gesture.angle;t.gesture.distance=n.distance,t.gesture.angle=n.angle,Dr.is.number(n.scale)&&n.scale!==1/0&&!isNaN(n.scale)&&(t.gesture.scale=n.scale)}}var Cr=zr;Er.default=Cr;var Rr={};Object.defineProperty(Rr,"__esModule",{value:!0}),Rr.default=void 0;var Wr,Xr=h({}),Yr=qr(s),Nr=qr(A),Fr=(Wr=Ce)&&Wr.__esModule?Wr:{default:Wr},Lr=qr(y);function Vr(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return Vr=function(){return e},e}function qr(e){if(e&&e.__esModule)return e;var t=Vr();if(t&&t.has(e))return t.get(e);var n={};if(null!=e){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}}return n.default=e,t&&t.set(e,n),n}var Gr={id:"actions/resize",install:function(t){var e=t.actions,n=t.browser,r=t.Interactable,o=t.interactions,i=t.defaults;o.signals.on("new",function(e){e.resizeAxes="xy"}),o.signals.on("action-start",Br),o.signals.on("action-move",Hr),o.signals.on("action-end",$r),o.signals.on("action-start",Kr),o.signals.on("action-move",Kr),Gr.cursors=function(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"}}(n),Gr.defaultMargin=n.supportsTouch||n.supportsPointerEvent?20:10,r.prototype.resizable=function(e){return function(e,t,n){if(Lr.object(t))return e.options.resize.enabled=!1!==t.enabled,e.setPerAction("resize",t),e.setOnEvents("resize",t),Lr.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),Lr.bool(t.preserveAspectRatio)?e.options.resize.preserveAspectRatio=t.preserveAspectRatio:Lr.bool(t.square)&&(e.options.resize.square=t.square),e;if(Lr.bool(t))return e.options.resize.enabled=t,e;return e.options.resize}(this,e,t)},e[Xr.ActionName.Resize]=Gr,e.names.push(Xr.ActionName.Resize),Yr.merge(e.eventTypes,["resizestart","resizemove","resizeinertiastart","resizeresume","resizeend"]),e.methodDict.resize="resizable",i.actions.resize=Gr.defaults},defaults:{square:!(Xr.ActionName.Resize="resize"),preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},checker:function(e,t,n,r,o,i){if(!i)return null;var a=(0,Fr.default)({},o.coords.cur.page),s=n.options;if(s.resize.enabled){var u=s.resize,l={left:!1,right:!1,top:!1,bottom:!1};if(Lr.object(u.edges)){for(var c in l)l[c]=Ur(c,u.edges[c],a,o._latestPointer.eventTarget,r,i,u.margin||this.defaultMargin);if(l.left=l.left&&!l.right,l.top=l.top&&!l.bottom,l.left||l.right||l.top||l.bottom)return{name:"resize",edges:l}}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=e.edges,n=e.axis,r=e.name,o=Gr.cursors,i=null;if(n)i=o[r+n];else if(t){for(var a="",s=["top","bottom","left","right"],u=0;u(0<=s?i.right:i.left)-a;if("bottom"===e)return n.y>(0<=u?i.bottom:i.top)-a}return!!Lr.element(r)&&(Lr.element(t)?t===r:Nr.matchesUpTo(r,t,o))}function Br(e){var t=e.iEvent,n=e.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=(0,Fr.default)({},n.rect),o=n.interactable.options.resize;if(o.square||o.preserveAspectRatio){var i=(0,Fr.default)({},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:{left:r.left,right:r.right,top:r.top,bottom:r.bottom},inverted:(0,Fr.default)({},r),previous:(0,Fr.default)({},r),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},t.edges=n.prepared.edges,t.rect=n.resizeRects.inverted,t.deltaRect=n.resizeRects.delta}}function Hr(e){var t=e.iEvent,n=e.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r,o=n.interactable.options.resize,i=o.invert,a="reposition"===i||"negate"===i,s=n.prepared.edges,u=n.resizeRects.start,l=n.resizeRects.current,c=n.resizeRects.inverted,f=n.resizeRects.delta,p=(0,Fr.default)(n.resizeRects.previous,c),d=s,v=(0,Fr.default)({},t.delta);if(o.preserveAspectRatio||o.square){var g=o.preserveAspectRatio?n.resizeStartAspectRatio:1;s=n.prepared._linkedEdges,d.left&&d.bottom||d.right&&d.top?v.y=-v.x/g:d.left||d.right?v.y=v.x/g:(d.top||d.bottom)&&(v.x=v.y*g)}if(s.top&&(l.top+=v.y),s.bottom&&(l.bottom+=v.y),s.left&&(l.left+=v.x),s.right&&(l.right+=v.x),a){if((0,Fr.default)(c,l),"reposition"===i)c.top>c.bottom&&(r=c.top,c.top=c.bottom,c.bottom=r),c.left>c.right&&(r=c.left,c.left=c.right,c.right=r)}else c.top=Math.min(l.top,u.bottom),c.bottom=Math.max(l.bottom,u.top),c.left=Math.min(l.left,u.right),c.right=Math.max(l.right,u.left);for(var h in c.width=c.right-c.left,c.height=c.bottom-c.top,c)f[h]=c[h]-p[h];t.edges=n.prepared.edges,t.rect=c,t.deltaRect=f}}function $r(e){var t=e.iEvent,n=e.interaction;"resize"===n.prepared.name&&n.prepared.edges&&(t.edges=n.prepared.edges,t.rect=n.resizeRects.inverted,t.deltaRect=n.resizeRects.delta)}function Kr(e){var t=e.iEvent,n=e.interaction;e.action===Xr.ActionName.Resize&&n.resizeAxes&&(n.interactable.options.resize.square?("y"===n.resizeAxes?t.delta.x=t.delta.y:t.delta.y=t.delta.x,t.axes="xy"):(t.axes=n.resizeAxes,"x"===n.resizeAxes?t.delta.y=0:"y"===n.resizeAxes&&(t.delta.x=0)))}var Qr=Gr;Rr.default=Qr;var Jr={};Object.defineProperty(Jr,"__esModule",{value:!0}),Jr.install=function(e){e.usePlugin(to.default),e.usePlugin(no.default),e.usePlugin(Zr.default),e.usePlugin(eo.default)},Object.defineProperty(Jr,"drag",{enumerable:!0,get:function(){return Zr.default}}),Object.defineProperty(Jr,"drop",{enumerable:!0,get:function(){return eo.default}}),Object.defineProperty(Jr,"gesture",{enumerable:!0,get:function(){return to.default}}),Object.defineProperty(Jr,"resize",{enumerable:!0,get:function(){return no.default}}),Jr.id=void 0;var Zr=ro(Gn),eo=ro(dr),to=ro(Er),no=ro(Rr);function ro(e){return e&&e.__esModule?e:{default:e}}Jr.id="actions";var oo={};Object.defineProperty(oo,"__esModule",{value:!0}),oo.getContainer=po,oo.getScroll=vo,oo.getScrollSize=function(e){so.window(e)&&(e=window.document.body);return{x:e.scrollWidth,y:e.scrollHeight}},oo.getScrollSizeDelta=function(e,t){var n=e.interaction,r=e.element,o=n&&n.interactable.options[n.prepared.name].autoScroll;if(!o||!o.enabled)return t(),{x:0,y:0};var i=po(o.container,n.interactable,r),a=vo(i);t();var s=vo(i);return{x:s.x-a.x,y:s.y-a.y}},oo.default=void 0;var io,ao=co(A),so=co(y),uo=(io=tt)&&io.__esModule?io:{default:io};function lo(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return lo=function(){return e},e}function co(e){if(e&&e.__esModule)return e;var t=lo();if(t&&t.has(e))return t.get(e);var n={};if(null!=e){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}}return n.default=e,t&&t.set(e,n),n}var fo={defaults:{enabled:!1,margin:60,container:null,speed:300},now:Date.now,interaction:null,i:null,x:0,y:0,isScrolling:!1,prevTime:0,margin:0,speed:0,start:function(e){fo.isScrolling=!0,uo.default.cancel(fo.i),(e.autoScroll=fo).interaction=e,fo.prevTime=fo.now(),fo.i=uo.default.request(fo.scroll)},stop:function(){fo.isScrolling=!1,fo.interaction&&(fo.interaction.autoScroll=null),uo.default.cancel(fo.i)},scroll:function(){var e=fo.interaction,t=e.interactable,n=e.element,r=t.options[fo.interaction.prepared.name].autoScroll,o=po(r.container,t,n),i=fo.now(),a=(i-fo.prevTime)/1e3,s=r.speed*a;if(1<=s){var u={x:fo.x*s,y:fo.y*s};if(u.x||u.y){var l=vo(o);so.window(o)?o.scrollBy(u.x,u.y):o&&(o.scrollLeft+=u.x,o.scrollTop+=u.y);var c=vo(o),f={x:c.x-l.x,y:c.y-l.y};(f.x||f.y)&&t.fire({type:"autoscroll",target:n,interactable:t,delta:f,interaction:e,container:o})}fo.prevTime=i}fo.isScrolling&&(uo.default.cancel(fo.i),fo.i=uo.default.request(fo.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()&&fo.check(t.interactable,t.prepared.name))if(t.simulation)fo.x=fo.y=0;else{var r,o,i,a,s=t.interactable,u=t.element,l=s.options[t.prepared.name].autoScroll,c=po(l.container,s,u);if(so.window(c))a=n.clientXc.innerWidth-fo.margin,i=n.clientY>c.innerHeight-fo.margin;else{var f=ao.getElementClientRect(c);a=n.clientXf.right-fo.margin,i=n.clientY>f.bottom-fo.margin}fo.x=o?1:a?-1:0,fo.y=i?1:r?-1:0,fo.isScrolling||(fo.margin=l.margin,fo.speed=l.speed,fo.start(t))}}};function po(e,t,n){return(so.string(e)?(0,Re.getStringOptionResult)(e,t,n):e)||(0,l.getWindow)(n)}function vo(e){return so.window(e)&&(e=window.document.body),{x:e.scrollLeft,y:e.scrollTop}}var go={id:"auto-scroll",install:function(e){var t=e.interactions,n=e.defaults,r=e.actions;(e.autoScroll=fo).now=function(){return e.now()},t.signals.on("new",function(e){e.interaction.autoScroll=null}),t.signals.on("destroy",function(e){e.interaction.autoScroll=null,fo.stop(),fo.interaction&&(fo.interaction=null)}),t.signals.on("stop",fo.stop),t.signals.on("action-move",function(e){return fo.onInteractionMove(e)}),r.eventTypes.push("autoscroll"),n.perAction.autoScroll=fo.defaults}};oo.default=go;var ho={};Object.defineProperty(ho,"__esModule",{value:!0}),ho.default=void 0;var yo=function(e){if(e&&e.__esModule)return e;var t=mo();if(t&&t.has(e))return t.get(e);var n={};if(null!=e){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}}n.default=e,t&&t.set(e,n);return n}(y);function mo(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return mo=function(){return e},e}function bo(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 wo(e){return yo.bool(e)?(this.options.styleCursor=e,this):null===e?(delete this.options.styleCursor,this):this.options.styleCursor}function Oo(e){return yo.func(e)?(this.options.actionChecker=e,this):null===e?(delete this.options.actionChecker,this):this.options.actionChecker}var Po={id:"auto-start/interactableMethods",install:function(e){var t=e.Interactable,o=e.actions;t.prototype.getAction=bo,t.prototype.ignoreFrom=(0,lt.warnOnce)(function(e){return this._backCompatOption("ignoreFrom",e)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),t.prototype.allowFrom=(0,lt.warnOnce)(function(e){return this._backCompatOption("allowFrom",e)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),t.prototype.actionChecker=Oo,t.prototype.styleCursor=wo,t.prototype.defaultActionChecker=function(e,t,n,r){return function(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],u=null,l=0;ls.minSpeed&&c>s.endSpeed,v={interaction:n,pageCoords:n.coords.cur.page,states:p&&n.modifiers.states.map(function(e){return Wi.extend({},e)}),preEnd:!0,prevCoords:null,requireEndOnly:null,phase:wn.EventPhase.InertiaStart};p&&!d&&(v.prevCoords=n.modifiers.result?n.modifiers.result.coords:n.prevEvent.page,v.requireEndOnly=!1,(a=Ri.default.setAll(v)).changed&&(f=!0));if(!d&&!f)return null;Wi.pointer.copyCoords(i.upCoords,n.coords.cur),(0,Ri.setCoords)(v),n.pointers[0].pointer=i.startEvent=new t.InteractEvent(n,r,n.prepared.name,wn.EventPhase.InertiaStart,n.element),(0,Ri.restoreCoords)(v),i.t0=u,i.active=!0,i.allowResume=s.allowResume,n.simulation=i,n.interactable.fire(i.startEvent),d?(i.vx0=n.coords.velocity.client.x,i.vy0=n.coords.velocity.client.y,i.v0=c,Li(n,i),Wi.extend(v.pageCoords,n.coords.cur.page),v.pageCoords.x+=i.xe,v.pageCoords.y+=i.ye,v.prevCoords=null,v.requireEndOnly=!0,a=Ri.default.setAll(v),i.modifiedXe+=a.delta.x,i.modifiedYe+=a.delta.y,i.timeout=Xi.default.request(function(){return Vi(n)})):(i.smoothEnd=!0,i.xe=a.delta.x,i.ye=a.delta.y,i.sx=i.sy=0,i.timeout=Xi.default.request(function(){return qi(n)}));return!1}(e,t)}),e.signals.on("down",function(e){return function(e,t){var n=e.interaction,r=e.event,o=e.pointer,i=e.eventTarget,a=n.inertia;if(a.active)for(var s=i;Wi.is.element(s);){if(s===n.element){Xi.default.cancel(a.timeout),a.active=!1,n.simulation=null,n.updatePointer(o,r,i,!0),Wi.pointer.setCoords(n.coords.cur,n.pointers.map(function(e){return e.pointer}),n._now());var u={interaction:n,phase:wn.EventPhase.Resume};t.interactions.signals.fire("action-resume",u);var l=new t.InteractEvent(n,r,n.prepared.name,wn.EventPhase.Resume,n.element);n._fireEvent(l),Wi.pointer.copyCoords(n.coords.prev,n.coords.cur);break}s=Wi.dom.parentNode(s)}}(e,t)}),e.signals.on("stop",Fi),n.perAction.inertia={enabled:!1,resistance:10,minSpeed:100,endSpeed:10,allowResume:!0,smoothEndDuration:300},t.usePlugin(Ri.default)},calcInertia:Li,inertiaTick:Vi,smothEndTick:qi,updateInertiaCoords:Gi};Ai.default=Bi;var Hi={};Object.defineProperty(Hi,"__esModule",{value:!0}),Hi.default=void 0;var $i=Zi(Ce),Ki=function(e){if(e&&e.__esModule)return e;var t=Ji();if(t&&t.has(e))return t.get(e);var n={};if(null!=e){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}}n.default=e,t&&t.set(e,n);return n}(y),Qi=Zi(Re);function Ji(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return Ji=function(){return e},e}function Zi(e){return e&&e.__esModule?e:{default:e}}function ea(e,t,n){return Ki.func(e)?Qi.default.resolveRectLike(e,t.interactable,t.element,[n.x,n.y,t]):Qi.default.resolveRectLike(e,t.interactable,t.element)}var ta={start:function(e){var t=e.rect,n=e.startOffset,r=e.state,o=e.interaction,i=e.pageCoords,a=r.options,s=a.elementRect,u=(0,$i.default)({left:0,top:0,right:0,bottom:0},a.offset||{});if(t&&s){var l=ea(a.restriction,o,i);if(l){var c=l.right-l.left-t.width,f=l.bottom-l.top-t.height;c<0&&(u.left+=c,u.right+=c),f<0&&(u.top+=f,u.bottom+=f)}u.left+=n.left-t.width*s.left,u.top+=n.top-t.height*s.top,u.right+=n.right-t.width*(1-s.right),u.bottom+=n.bottom-t.height*(1-s.bottom)}r.offset=u},set:function(e){var t=e.coords,n=e.interaction,r=e.state,o=r.options,i=r.offset,a=ea(o.restriction,n,t);if(a){var s=Qi.default.xywhToTlbr(a);t.x=Math.max(Math.min(s.right-i.right,t.x),s.left+i.left),t.y=Math.max(Math.min(s.bottom-i.bottom,t.y),s.top+i.top)}},getRestrictionRect:ea,defaults:{restriction:null,elementRect:null,offset:null,endOnly:!1,enabled:!1}};Hi.default=ta;var na={};Object.defineProperty(na,"__esModule",{value:!0}),na.default=void 0;var ra=ia(Ce),oa=ia(Re);function ia(e){return e&&e.__esModule?e:{default:e}}var aa=ia(Hi).default.getRestrictionRect,sa={top:1/0,left:1/0,bottom:-1/0,right:-1/0},ua={top:-1/0,left:-1/0,bottom:1/0,right:1/0};function la(e,t){for(var n=["top","left","bottom","right"],r=0;rthis.pointerMoveTolerance);var a={pointer:e,pointerIndex:this.getPointerIndex(e),event:t,type:"move",eventTarget:n,dx:r,dy:o,duplicate:i,interaction:this};i||(p.pointer.setCoordDeltas(this.coords.delta,this.coords.prev,this.coords.cur),p.pointer.setCoordVelocity(this.coords.velocity,this.coords.delta)),this._scopeFire("interactions:move",a),i||(this.interacting()&&(a.type=null,this.move(a)),this.pointerWasMoved&&p.pointer.copyCoords(this.coords.prev,this.coords.cur))}},{key:"move",value:function(e){(e=p.extend({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this},e||{})).phase=i.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));var i=/cancel$/i.test(t.type)?"cancel":"up";this._scopeFire("interactions:".concat(i),{pointer:e,pointerIndex:o,event:t,eventTarget:n,type:i,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._scopeFire("interactions:blur",{event:e,type:"blur",interaction:this})}},{key:"end",value:function(e){var t;this._ending=!0,e=e||this._latestPointer.event,this.interacting()&&(t=this._doPhase({event:e,interaction:this,phase:i.EventPhase.End})),!(this._ending=!1)===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._scopeFire("interactions:stop",{interaction:this}),this.interactable=this.element=null,this._interacting=!1,this._stopped=!0,this.prepared.name=this.prevEvent=null}},{key:"getPointerIndex",value:function(e){var t=p.pointer.getPointerId(e);return"mouse"===this.pointerType||"pen"===this.pointerType?this.pointers.length-1:p.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=p.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 u.default(o,e,t,null,null),i=this.pointers.length,this.pointers.push(a)),r&&(this.pointerIsDown=!0,this.interacting()||(p.pointer.setCoords(this.coords.start,this.pointers.map(function(e){return e.pointer}),this._now()),p.pointer.copyCoords(this.coords.cur,this.coords.start),p.pointer.copyCoords(this.coords.prev,this.coords.start),p.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._scopeFire("interactions: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._scopeFire("interactions:remove-pointer",{pointer:e,event:t,eventTarget:null,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:"destroy",value:function(){this._latestPointer.pointer=null,this._latestPointer.event=null,this._latestPointer.eventTarget=null}},{key:"_createPreparedEvent",value:function(e,t,n,r){var o=this.prepared.name;return new i.default(this,e,o,t,this.element,null,n,r)}},{key:"_fireEvent",value:function(e){this.interactable.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(!1===this._scopeFire("interactions:before-action-".concat(n),e))return!1;var i=e.iEvent=this._createPreparedEvent(t,n,r,o),a=this.rect;if(a){var u=this.edges||this.prepared.edges||{left:!0,right:!0,top:!0,bottom:!0};u.top&&(a.top+=i.delta.y),u.bottom&&(a.bottom+=i.delta.y),u.left&&(a.left+=i.delta.x),u.right&&(a.right+=i.delta.x),a.width=a.right-a.left,a.height=a.bottom-a.top}return this._scopeFire("interactions:action-".concat(n),e),this._fireEvent(i),this._scopeFire("interactions:after-action-".concat(n),e),!0}},{key:"_now",value:function(){return Date.now()}}]),s}(),m=t.Interaction=h;t.default=m}),T={};Object.defineProperty(T,"__esModule",{value:!0}),T.default=void 0;var n={init:function(e){var t=e;n.document=t.document,n.DocumentFragment=t.DocumentFragment||r,n.SVGElement=t.SVGElement||r,n.SVGSVGElement=t.SVGSVGElement||r,n.SVGElementInstance=t.SVGElementInstance||r,n.Element=t.Element||r,n.HTMLElement=t.HTMLElement||n.Element,n.Event=t.Event,n.Touch=t.Touch||r,n.PointerEvent=t.PointerEvent||t.MSPointerEvent},document:null,DocumentFragment:null,SVGElement:null,SVGSVGElement:null,SVGElementInstance:null,Element:null,HTMLElement:null,Event:null,Touch:null,PointerEvent:null};function r(){}var t=n;T.default=t;var u={};function o(e,t){for(var n=0;na.left&&c.xa.top&&c.y=a.left&&v<=a.right&&y>=a.top&&y<=a.bottom}if(d&&Dr.is.number(l)){var g=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);u=l<=g}e.options.drop.checker&&(u=e.options.drop.checker(t,n,u,e,i,r,o));return u}(this,e,t,n,r,o,i)},n.dynamicDrop=function(e){return Dr.is.bool(e)?(t.dynamicDrop=e,n):t.dynamicDrop},Dr.arr.merge(e.eventTypes,["dragenter","dragleave","dropactivate","dropdeactivate","dropmove","drop"]),e.methodDict.drop="dropzone",t.dynamicDrop=!1,o.actions.drop=Lr.defaults},listeners:{"interactions:before-action-start":function(e){var t=e.interaction;"drag"===t.prepared.name&&(t.dropState={cur:{dropzone:null,element:null},prev:{dropzone:null,element:null},rejected:null,events:null,activeDrops:null})},"interactions:after-action-start":function(e,t){var n=e.interaction,r=(e.event,e.iEvent);if("drag"===n.prepared.name){var o=n.dropState;o.activeDrops=null,o.events=null,o.activeDrops=Wr(t,n.element),o.events=Yr(n,0,r),o.events.activate&&Rr(o.activeDrops,o.events.activate)}},"interactions:action-move":Nr,"interactions:action-end":Nr,"interactions:after-action-move":function(e){var t=e.interaction;"drag"===t.prepared.name&&(Fr(t,t.dropState.events),t.dropState.events={})},"interactions:after-action-end":function(e){var t=e.interaction;"drag"===t.prepared.name&&Fr(t,t.dropState.events)},"interactions:stop":function(e){var t=e.interaction;if("drag"===t.prepared.name){var n=t.dropState;n&&(n.activeDrops=null,n.events=null,n.cur.dropzone=null,n.cur.element=null,n.prev.dropzone=null,n.prev.element=null,n.rejected=!1)}}},getActiveDrops:Wr,getDrop:Xr,getDropEvents:Yr,fireDropEvents:Fr,defaults:{enabled:!1,accept:null,overlap:"pointer"}},Vr=Lr;Tr.default=Vr;var qr={};function Gr(e){return(Gr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(qr,"__esModule",{value:!0}),qr.default=void 0;var Ur,Br=(Ur=In)&&Ur.__esModule?Ur:{default:Ur},Hr=b({}),Kr=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==Gr(e)&&"function"!=typeof e)return{default:e};var t=$r();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(dt);function $r(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return $r=function(){return e},e}Hr.ActionName.Gesture="gesture";var Qr={id:"actions/gesture",install:function(e){var t=e.actions,n=e.Interactable,r=e.defaults;n.prototype.gesturable=function(e){return Kr.is.object(e)?(this.options.gesture.enabled=!1!==e.enabled,this.setPerAction("gesture",e),this.setOnEvents("gesture",e),this):Kr.is.bool(e)?(this.options.gesture.enabled=e,this):this.options.gesture},t[Hr.ActionName.Gesture]=Qr,t.names.push(Hr.ActionName.Gesture),Kr.arr.merge(t.eventTypes,["gesturestart","gesturemove","gestureend"]),t.methodDict.gesture="gesturable",r.actions.gesture=Qr.defaults},listeners:{"interactions:action-start":Jr,"interactions:action-move":Jr,"interactions:action-end":Jr,"interactions:new":function(e){e.interaction.gesture={angle:0,distance:0,scale:1,startAngle:0,startDistance:0}}},defaults:{},checker:function(e,t,n,r,o){return 2<=o.pointers.length?{name:"gesture"}:null},getCursor:function(){return""}};function Jr(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,u="end"===o,l=t.interactable.options.deltaSource;if(n.touches=[i[0],i[1]],a)n.distance=Kr.pointer.touchDistance(i,l),n.box=Kr.pointer.touchBBox(i),n.scale=1,n.ds=0,n.angle=Kr.pointer.touchAngle(i,l),n.da=0,t.gesture.startDistance=n.distance,t.gesture.startAngle=n.angle;else if(u||r instanceof Br.default){var s=t.prevEvent;n.distance=s.distance,n.box=s.box,n.scale=s.scale,n.ds=0,n.angle=s.angle,n.da=0}else n.distance=Kr.pointer.touchDistance(i,l),n.box=Kr.pointer.touchBBox(i),n.scale=n.distance/t.gesture.startDistance,n.angle=Kr.pointer.touchAngle(i,l),n.ds=n.scale-t.gesture.scale,n.da=n.angle-t.gesture.angle;t.gesture.distance=n.distance,t.gesture.angle=n.angle,Kr.is.number(n.scale)&&n.scale!==1/0&&!isNaN(n.scale)&&(t.gesture.scale=n.scale)}}var Zr=Qr;qr.default=Zr;var eo={};function to(e){return(to="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(eo,"__esModule",{value:!0}),eo.default=void 0;var no,ro=b({}),oo=so(u),io=so(C),ao=(no=Fe)&&no.__esModule?no:{default:no},uo=so(y);function lo(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return lo=function(){return e},e}function so(e){if(e&&e.__esModule)return e;if(null===e||"object"!==to(e)&&"function"!=typeof e)return{default:e};var t=lo();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var co={id:"actions/resize",install:function(t){var e=t.actions,n=t.browser,r=t.Interactable,o=t.defaults;co.cursors=function(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"}}(n),co.defaultMargin=n.supportsTouch||n.supportsPointerEvent?20:10,r.prototype.resizable=function(e){return function(e,t,n){if(uo.object(t))return e.options.resize.enabled=!1!==t.enabled,e.setPerAction("resize",t),e.setOnEvents("resize",t),uo.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),uo.bool(t.preserveAspectRatio)?e.options.resize.preserveAspectRatio=t.preserveAspectRatio:uo.bool(t.square)&&(e.options.resize.square=t.square),e;if(uo.bool(t))return e.options.resize.enabled=t,e;return e.options.resize}(this,e,t)},e[ro.ActionName.Resize]=co,e.names.push(ro.ActionName.Resize),oo.merge(e.eventTypes,["resizestart","resizemove","resizeinertiastart","resizeresume","resizeend"]),e.methodDict.resize="resizable",o.actions.resize=co.defaults},listeners:{"interactions:new":function(e){e.interaction.resizeAxes="xy"},"interactions:action-start":function(e){!function(e){var t=e.iEvent,n=e.interaction;if("resize"!==n.prepared.name||!n.prepared.edges)return;var r=(0,ao.default)({},n.rect),o=n.interactable.options.resize;if(o.square||o.preserveAspectRatio){var i=(0,ao.default)({},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:{left:r.left,right:r.right,top:r.top,bottom:r.bottom},inverted:(0,ao.default)({},r),previous:(0,ao.default)({},r),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},t.edges=n.prepared.edges,t.rect=n.resizeRects.inverted,t.deltaRect=n.resizeRects.delta}(e),po(e)},"interactions:action-move":function(e){!function(e){var t=e.iEvent,n=e.interaction;if("resize"!==n.prepared.name||!n.prepared.edges)return;var r=n.interactable.options.resize,o=r.invert,i="reposition"===o||"negate"===o,a=n.prepared.edges,u=n.resizeRects.start,l=n.resizeRects.current,s=n.resizeRects.inverted,c=n.resizeRects.delta,f=(0,ao.default)(n.resizeRects.previous,s),p=a,d=(0,ao.default)({},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)}a.top&&(l.top+=d.y);a.bottom&&(l.bottom+=d.y);a.left&&(l.left+=d.x);a.right&&(l.right+=d.x);if(i){var y;if((0,ao.default)(s,l),"reposition"===o)s.top>s.bottom&&(y=s.top,s.top=s.bottom,s.bottom=y),s.left>s.right&&(y=s.left,s.left=s.right,s.right=y)}else s.top=Math.min(l.top,u.bottom),s.bottom=Math.max(l.bottom,u.top),s.left=Math.min(l.left,u.right),s.right=Math.max(l.right,u.left);for(var g in s.width=s.right-s.left,s.height=s.bottom-s.top,s)c[g]=s[g]-f[g];t.edges=n.prepared.edges,t.rect=s,t.deltaRect=c}(e),po(e)},"interactions:action-end":function(e){var t=e.iEvent,n=e.interaction;if("resize"!==n.prepared.name||!n.prepared.edges)return;t.edges=n.prepared.edges,t.rect=n.resizeRects.inverted,t.deltaRect=n.resizeRects.delta}},defaults:{square:!(ro.ActionName.Resize="resize"),preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},checker:function(e,t,n,r,o,i){if(!i)return null;var a=(0,ao.default)({},o.coords.cur.page),u=n.options;if(u.resize.enabled){var l=u.resize,s={left:!1,right:!1,top:!1,bottom:!1};if(uo.object(l.edges)){for(var c in s)s[c]=fo(c,l.edges[c],a,o._latestPointer.eventTarget,r,i,l.margin||this.defaultMargin);if(s.left=s.left&&!s.right,s.top=s.top&&!s.bottom,s.left||s.right||s.top||s.bottom)return{name:"resize",edges:s}}else{var f="y"!==u.resize.axis&&a.x>i.right-this.defaultMargin,p="x"!==u.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=e.edges,n=e.axis,r=e.name,o=co.cursors,i=null;if(n)i=o[r+n];else if(t){for(var a="",u=["top","bottom","left","right"],l=0;l(0<=u?i.right:i.left)-a;if("bottom"===e)return n.y>(0<=l?i.bottom:i.top)-a}return!!uo.element(r)&&(uo.element(t)?t===r:io.matchesUpTo(r,t,o))}function po(e){var t=e.iEvent,n=e.interaction;n.prepared.name===ro.ActionName.Resize&&n.resizeAxes&&(n.interactable.options.resize.square?("y"===n.resizeAxes?t.delta.x=t.delta.y:t.delta.y=t.delta.x,t.axes="xy"):(t.axes=n.resizeAxes,"x"===n.resizeAxes?t.delta.y=0:"y"===n.resizeAxes&&(t.delta.x=0)))}var vo=co;eo.default=vo;var yo={};Object.defineProperty(yo,"__esModule",{value:!0}),yo.install=function(e){e.usePlugin(mo.default),e.usePlugin(bo.default),e.usePlugin(go.default),e.usePlugin(ho.default)},Object.defineProperty(yo,"drag",{enumerable:!0,get:function(){return go.default}}),Object.defineProperty(yo,"drop",{enumerable:!0,get:function(){return ho.default}}),Object.defineProperty(yo,"gesture",{enumerable:!0,get:function(){return mo.default}}),Object.defineProperty(yo,"resize",{enumerable:!0,get:function(){return bo.default}}),yo.id=void 0;var go=wo(ir),ho=wo(Tr),mo=wo(qr),bo=wo(eo);function wo(e){return e&&e.__esModule?e:{default:e}}yo.id="actions";var Oo={};function Po(e){return(Po="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(Oo,"__esModule",{value:!0}),Oo.getContainer=ko,Oo.getScroll=Do,Oo.getScrollSize=function(e){So.window(e)&&(e=window.document.body);return{x:e.scrollWidth,y:e.scrollHeight}},Oo.getScrollSizeDelta=function(e,t){var n=e.interaction,r=e.element,o=n&&n.interactable.options[n.prepared.name].autoScroll;if(!o||!o.enabled)return t(),{x:0,y:0};var i=ko(o.container,n.interactable,r),a=Do(i);t();var u=Do(i);return{x:u.x-a.x,y:u.y-a.y}},Oo.default=void 0;var _o,xo=Eo(C),So=Eo(y),jo=(_o=lt)&&_o.__esModule?_o:{default:_o};function Mo(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return Mo=function(){return e},e}function Eo(e){if(e&&e.__esModule)return e;if(null===e||"object"!==Po(e)&&"function"!=typeof e)return{default:e};var t=Mo();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var To={defaults:{enabled:!1,margin:60,container:null,speed:300},now:Date.now,interaction:null,i:null,x:0,y:0,isScrolling:!1,prevTime:0,margin:0,speed:0,start:function(e){To.isScrolling=!0,jo.default.cancel(To.i),(e.autoScroll=To).interaction=e,To.prevTime=To.now(),To.i=jo.default.request(To.scroll)},stop:function(){To.isScrolling=!1,To.interaction&&(To.interaction.autoScroll=null),jo.default.cancel(To.i)},scroll:function(){var e=To.interaction,t=e.interactable,n=e.element,r=t.options[To.interaction.prepared.name].autoScroll,o=ko(r.container,t,n),i=To.now(),a=(i-To.prevTime)/1e3,u=r.speed*a;if(1<=u){var l={x:To.x*u,y:To.y*u};if(l.x||l.y){var s=Do(o);So.window(o)?o.scrollBy(l.x,l.y):o&&(o.scrollLeft+=l.x,o.scrollTop+=l.y);var c=Do(o),f={x:c.x-s.x,y:c.y-s.y};(f.x||f.y)&&t.fire({type:"autoscroll",target:n,interactable:t,delta:f,interaction:e,container:o})}To.prevTime=i}To.isScrolling&&(jo.default.cancel(To.i),To.i=jo.default.request(To.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()&&To.check(t.interactable,t.prepared.name))if(t.simulation)To.x=To.y=0;else{var r,o,i,a,u=t.interactable,l=t.element,s=u.options[t.prepared.name].autoScroll,c=ko(s.container,u,l);if(So.window(c))a=n.clientXc.innerWidth-To.margin,i=n.clientY>c.innerHeight-To.margin;else{var f=xo.getElementClientRect(c);a=n.clientXf.right-To.margin,i=n.clientY>f.bottom-To.margin}To.x=o?1:a?-1:0,To.y=i?1:r?-1:0,To.isScrolling||(To.margin=s.margin,To.speed=s.speed,To.start(t))}}};function ko(e,t,n){return(So.string(e)?(0,Ne.getStringOptionResult)(e,t,n):e)||(0,l.getWindow)(n)}function Do(e){return So.window(e)&&(e=window.document.body),{x:e.scrollLeft,y:e.scrollTop}}var Io={id:"auto-scroll",install:function(e){var t=e.defaults,n=e.actions;(e.autoScroll=To).now=function(){return e.now()},n.eventTypes.push("autoscroll"),t.perAction.autoScroll=To.defaults},listeners:{"interactions:new":function(e){e.interaction.autoScroll=null},"interactions:destroy":function(e){e.interaction.autoScroll=null,To.stop(),To.interaction&&(To.interaction=null)},"interactions:stop":To.stop,"interactions:action-move":function(e){return To.onInteractionMove(e)}}};Oo.default=Io;var zo={};function Ao(e){return(Ao="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(zo,"__esModule",{value:!0}),zo.default=void 0;var Co=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==Ao(e)&&"function"!=typeof e)return{default:e};var t=Ro();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(y);function Ro(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return Ro=function(){return e},e}function Wo(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 Xo(e){return Co.bool(e)?(this.options.styleCursor=e,this):null===e?(delete this.options.styleCursor,this):this.options.styleCursor}function Yo(e){return Co.func(e)?(this.options.actionChecker=e,this):null===e?(delete this.options.actionChecker,this):this.options.actionChecker}var Fo={id:"auto-start/interactableMethods",install:function(e){var t=e.Interactable,o=e.actions;t.prototype.getAction=Wo,t.prototype.ignoreFrom=(0,dt.warnOnce)(function(e){return this._backCompatOption("ignoreFrom",e)},"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),t.prototype.allowFrom=(0,dt.warnOnce)(function(e){return this._backCompatOption("allowFrom",e)},"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),t.prototype.actionChecker=Yo,t.prototype.styleCursor=Xo,t.prototype.defaultActionChecker=function(e,t,n,r){return function(e,t,n,r,o,i){for(var a=e.getRect(o),u=n.buttons||{0:1,1:4,3:8,4:16}[n.button],l=null,s=0;su.minSpeed&&c>u.endSpeed,v={interaction:n,interactable:n.interactable,element:n.element,rect:n.rect,pageCoords:n.coords.cur.page,states:p&&n.modifiers.states.map(function(e){return ya.extend({},e)}),preEnd:!0,prevCoords:null,requireEndOnly:null,phase:In.EventPhase.InertiaStart};return p&&!d&&(v.prevCoords=n.modifiers.result?n.modifiers.result.coords:n.prevEvent.page,v.requireEndOnly=!1,(a=va.default.setAll(v)).changed&&(f=!0)),d||f?(ya.pointer.copyCoords(i.upCoords,n.coords.cur),(0,va.setCoords)(v),n.pointers[0].pointer=i.startEvent=new t.InteractEvent(n,r,n.prepared.name,In.EventPhase.InertiaStart,n.element),(0,va.restoreCoords)(v),i.t0=l,i.active=!0,i.allowResume=u.allowResume,n.simulation=i,n.interactable.fire(i.startEvent),d?(i.vx0=n.coords.velocity.client.x,i.vy0=n.coords.velocity.client.y,i.v0=c,ba(n,i),ya.extend(v.pageCoords,n.coords.cur.page),v.pageCoords.x+=i.xe,v.pageCoords.y+=i.ye,v.prevCoords=null,v.requireEndOnly=!0,a=va.default.setAll(v),i.modifiedXe+=a.delta.x,i.modifiedYe+=a.delta.y,i.timeout=ga.default.request(function(){return wa(n)})):(i.smoothEnd=!0,i.xe=a.delta.x,i.ye=a.delta.y,i.sx=i.sy=0,i.timeout=ga.default.request(function(){return Oa(n)})),!1):null},"interactions:down":function(e,t){var n=e.interaction,r=e.event,o=e.pointer,i=e.eventTarget,a=n.inertia;if(a.active)for(var u=i;ya.is.element(u);){if(u===n.element){ga.default.cancel(a.timeout),a.active=!1,n.simulation=null,n.updatePointer(o,r,i,!0),ya.pointer.setCoords(n.coords.cur,n.pointers.map(function(e){return e.pointer}),n._now());var l={interaction:n,phase:In.EventPhase.Resume};t.fire("interactions:action-resume",l);var s=new t.InteractEvent(n,r,n.prepared.name,In.EventPhase.Resume,n.element);n._fireEvent(s),ya.pointer.copyCoords(n.coords.prev,n.coords.cur);break}u=ya.dom.parentNode(u)}},"interactions:stop":function(e){var t=e.interaction,n=t.inertia;n.active&&(ga.default.cancel(n.timeout),n.active=!1,t.simulation=null)}},before:"modifiers/base",calcInertia:ba,inertiaTick:wa,smothEndTick:Oa,updateInertiaCoords:Pa};fa.default=xa;var Sa={};function ja(e){return(ja="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(Sa,"__esModule",{value:!0}),Sa.getRestrictionRect=Ia,Sa.default=void 0;var Ma=Da(Fe),Ea=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==ja(e)&&"function"!=typeof e)return{default:e};var t=ka();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(y),Ta=Da(Ne);function ka(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return ka=function(){return e},e}function Da(e){return e&&e.__esModule?e:{default:e}}function Ia(e,t,n){return Ea.func(e)?Ta.default.resolveRectLike(e,t.interactable,t.element,[n.x,n.y,t]):Ta.default.resolveRectLike(e,t.interactable,t.element)}var za={start:function(e){var t=e.rect,n=e.startOffset,r=e.state,o=e.interaction,i=e.pageCoords,a=r.options,u=a.elementRect,l=(0,Ma.default)({left:0,top:0,right:0,bottom:0},a.offset||{});if(t&&u){var s=Ia(a.restriction,o,i);if(s){var c=s.right-s.left-t.width,f=s.bottom-s.top-t.height;c<0&&(l.left+=c,l.right+=c),f<0&&(l.top+=f,l.bottom+=f)}l.left+=n.left-t.width*u.left,l.top+=n.top-t.height*u.top,l.right+=n.right-t.width*(1-u.right),l.bottom+=n.bottom-t.height*(1-u.bottom)}r.offset=l},set:function(e){var t=e.coords,n=e.interaction,r=e.state,o=r.options,i=r.offset,a=Ia(o.restriction,n,t);if(a){var u=Ta.default.xywhToTlbr(a);t.x=Math.max(Math.min(u.right-i.right,t.x),u.left+i.left),t.y=Math.max(Math.min(u.bottom-i.bottom,t.y),u.top+i.top)}},defaults:{restriction:null,elementRect:null,offset:null,endOnly:!1,enabled:!1}};Sa.default=za;var Aa={};Object.defineProperty(Aa,"__esModule",{value:!0}),Aa.default=void 0;var Ca=Wa(Fe),Ra=Wa(Ne);function Wa(e){return e&&e.__esModule?e:{default:e}}var Xa={top:1/0,left:1/0,bottom:-1/0,right:-1/0},Ya={top:-1/0,left:-1/0,bottom:1/0,right:1/0};function Fa(e,t){for(var n=["top","left","bottom","right"],r=0;r\n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\nvar createModuleFactory = function createModuleFactory(t){var e;return function(r){return e||t(e={exports:{},parent:r},e.exports),e.exports}};\n","import * as utils from '@interactjs/utils'\nimport domObjects from '@interactjs/utils/domObjects'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractableSet from './InteractableSet'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nconst {\n win,\n browser,\n raf,\n Signals,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport interface Plugin {\n id?: string\n install (scope: Scope, options?: any): void\n [key: string]: any\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n signals = new Signals()\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n _plugins: Plugin[] = []\n _pluginMap: { [id: string]: Plugin } = {}\n\n constructor () {\n const scope = this as Scope\n\n ;(this as { Interactable: typeof InteractableBase }).Interactable = class Interactable extends InteractableBase implements InteractableBase {\n get _defaults () { return scope.defaults }\n\n set (options: any) {\n super.set(options)\n\n scope.interactables.signals.fire('set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable === this) {\n interaction.stop()\n scope.interactions.signals.fire('destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n }\n\n scope.interactables.signals.fire('unset', { interactable: this })\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._pluginMap[plugin.id] || this._plugins.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) { this._pluginMap[plugin.id] = plugin }\n\n plugin.install(this, options)\n this._plugins.push(plugin)\n\n return this\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { return false }\n\n const window = win.getWindow(doc)\n\n options = options ? utils.extend({}, options) : {}\n\n this.documents.push({ doc, options })\n events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.signals.fire('add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.signals.fire('remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now () {\n return ((this.window as any).Date as typeof Date || Date).now()\n }\n}\n\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n scope.usePlugin(interactions)\n scope.document = window.document\n scope.window = window\n\n return scope\n}\n","import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\nimport Signals from '@interactjs/utils/Signals'\nimport InteractionBase from './Interaction'\nimport finder, { SearchDetails } from './interactionFinder'\nimport { Scope } from './scope'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n signals: Signals\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n docEvents: Array<{ type: string, listener: Interact.Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const signals = new Signals()\n\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n }\n else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n scope.signals.on('add-document', onDocSignal)\n scope.signals.on('remove-document', onDocSignal)\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () { return scope.now() }\n }\n\n scope.interactions = {\n signals,\n // all active and idle interactions\n list: [],\n new (options: { pointerType?: string, signals?: Signals }) {\n options.signals = signals\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls () {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown ||\n interaction.pointerType !== 'touch' ||\n interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n}\n\nfunction doOnInteractions (method, scope) {\n return function (event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer ||\n (scope.now() - scope.prevTouchTime < 500) ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction (searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.interactions.signals.fire('find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal ({ doc, scope, options }, signalName) {\n const { docEvents } = scope.interactions\n const eventMethod = signalName.indexOf('add') === 0\n ? events.add : events.remove\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nexport default {\n id: 'core/interactions',\n install,\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n","import * as utils from '@interactjs/utils'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n}\n\nexport interface StartAction extends ActionProps {\n name: ActionName | string\n}\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = ''\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = ''\n}\n\nexport type _InteractionProxy = Pick<\nInteraction,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nexport class Interaction {\n // current interactable being interacted with\n interactable: Interactable = null\n\n // the target element of the interactable\n element: Interact.Element = null\n rect: Interact.Rect & Interact.Size\n edges: {\n [P in keyof Interact.Rect]?: boolean\n }\n\n _signals: utils.Signals\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: Interact.EventTarget\n event: Interact.PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: _InteractionProxy = null\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, signals }: { pointerType?: string, signals: utils.Signals }) {\n this._signals = signals\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as _InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () { return that[key] },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args) => that[key](...args),\n })\n }\n\n this._signals.fire('new', { interaction: this })\n }\n\n pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n\n this._signals.fire('down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n interaction: this,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action: StartAction, interactable: Interactable, element: Interact.Element) {\n if (this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) ||\n !interactable.options[action.name].enabled) {\n return false\n }\n\n utils.copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n this._stopped = false\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: EventPhase.Start,\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) {\n this.updatePointer(pointer, event, eventTarget, false)\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now())\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y)\n\n let dx\n let dy\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n utils.pointer.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n utils.pointer.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._signals.fire('move', signalArg)\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg?) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n }, signalArg || {})\n\n signalArg.phase = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n this._signals.fire(/cancel$/i.test(event.type) ? 'cancel' : 'up', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n curEventTarget,\n interaction: this,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.pointerIsDown = false\n this.removePointer(pointer, event)\n }\n\n documentBlur (event) {\n this.end(event)\n this._signals.fire('blur', { event, interaction: this })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n *\n * @param {PointerEvent} [event]\n */\n end (event?: Interact.PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: EventPhase.End,\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction () {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting () {\n return this._interacting\n }\n\n /** */\n stop () {\n this._signals.fire('stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n getPointerIndex (pointer) {\n const pointerId = utils.pointer.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return (this.pointerType === 'mouse' || this.pointerType === 'pen')\n ? this.pointers.length - 1\n : utils.arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId)\n }\n\n getPointerInfo (pointer) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n updatePointer (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Node, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now())\n\n utils.pointer.copyCoords(this.coords.cur, this.coords.start)\n utils.pointer.copyCoords(this.coords.prev, this.coords.start)\n utils.pointer.pointerExtend(this.downPointer, pointer)\n\n this.downEvent = event\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._signals.fire('update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: Interact.PointerType, event: Interact.PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) { return }\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._signals.fire('remove-pointer', {\n pointer,\n event,\n pointerIndex,\n pointerInfo,\n interaction: this,\n })\n\n this.pointers.splice(pointerIndex, 1)\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy () {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd: boolean, type: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.interactable.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Partial) {\n const { event, phase, preEnd, type } = signalArg\n const beforeResult = this._signals.fire(`before-action-${phase}`, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type)\n const { rect } = this\n\n if (rect) {\n // update the rect modifications\n const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }\n\n if (edges.top) { rect.top += iEvent.delta.y }\n if (edges.bottom) { rect.bottom += iEvent.delta.y }\n if (edges.left) { rect.left += iEvent.delta.x }\n if (edges.right) { rect.right += iEvent.delta.x }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n this._signals.fire(`action-${phase}`, signalArg)\n\n this._fireEvent(iEvent)\n\n this._signals.fire(`after-action-${phase}`, signalArg)\n\n return true\n }\n\n _now () { return Date.now() }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","export function contains (array, target) {\n return array.indexOf(target) !== -1\n}\n\nexport function remove (array, target) {\n return array.splice(array.indexOf(target), 1)\n}\n\nexport function merge (target, source) {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport function from (source) {\n return merge([], source)\n}\n\nexport function findIndex (array, func) {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport function find (array, func) {\n return array[findIndex(array, func)]\n}\n","const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","export default thing => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined as Window,\n window: undefined as Window,\n getWindow,\n init,\n}\n\nexport function init (window: Window & { wrap?: (...args) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document &&\n typeof window.wrap === 'function' &&\n window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win.window = window\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined\n win.realWindow = undefined\n}\nelse {\n init(window)\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = (node.ownerDocument || node)\n\n return rootNode.defaultView || win.window\n}\n\nwin.init = init\n\nexport default win\n","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Interact.Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n /Presto/.test(navigator.userAgent))\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n\n browser.pEventTypes = (browser.supportsPointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null)\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win, { getWindow } from './window'\n\nexport function nodeContains (parent: Node, child: Node) {\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = child.parentNode\n }\n\n return false\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = el => el.parentNode ? el.parentNode : el.host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Interact.Element[] | NodeListOf) {\n let deepestZoneParents = []\n let deepestZone = elements[0]\n let index = deepestZone ? 0 : -1\n let i\n let n\n\n for (i = 1; i < elements.length; i++) {\n const dropzone = elements[i]\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue\n }\n\n if (!deepestZone) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // compare zIndex of siblings\n if (dropzone.parentNode === deepestZone.parentNode) {\n const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0\n const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0\n\n if (dropzoneZIndex >= deepestZIndex) {\n deepestZone = dropzone\n index = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest dropzone\n if (!deepestZoneParents.length) {\n let parent = deepestZone\n let parentParent\n\n while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent)\n parent = parentParent\n }\n }\n\n let parent\n\n // if this element is an svg element and the current deepest is an\n // HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement &&\n dropzone instanceof domObjects.SVGElement &&\n !(dropzone instanceof domObjects.SVGSVGElement)) {\n if (dropzone === deepestZone.parentNode) {\n continue\n }\n\n parent = dropzone.ownerSVGElement\n }\n else {\n parent = dropzone\n }\n\n const dropzoneParents = []\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent)\n parent = getParent(parent)\n }\n\n n = 0\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ]\n\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone\n index = i\n deepestZoneParents = dropzoneParents\n\n break\n }\n else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n\n return index\n}\n\nexport function matchesUpTo (element: Interact.Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element)\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element)\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0])\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nfunction pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs\n let deprecated = false\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true\n break\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop]\n }\n }\n return dest\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n moz: /(Pressure)$/,\n}\n\nexport default pointerExtend\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = timeStamp\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () { return this.coords.page },\n get client () { return this.coords.client },\n get timeStamp () { return this.coords.timeStamp },\n get pageX () { return this.coords.page.x },\n get pageY () { return this.coords.page.y },\n get clientX () { return this.coords.client.x },\n get clientY () { return this.coords.client.y },\n get pointerId () { return this.coords.pointerId },\n get target () { return this.coords.target },\n get type () { return this.coords.type },\n get pointerType () { return this.coords.pointerType },\n get buttons () { return this.coords.buttons },\n }\n\n return event as typeof event & Interact.PointerType & Interact.PointerEventType\n },\n}\n\nexport default pointerUtils\n\nexport interface MockCoords {\n page: Interact.Point\n client: Interact.Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n","import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] }\n typeCount: number\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[]\n contexts: Node[]\n listeners: Array>\n }\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","export default function extend> (dest: U, source: T) {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n return dest as T & U\n}\n","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\n\nexport function getStringOptionResult (value: any, target: Interact.HasGetRect, element) {\n if (value === 'parent') { return parentNode(element) }\n\n if (value === 'self') { return target.getRect(element) }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike (\n value: Interact.RectResolvable,\n target?: Interact.HasGetRect,\n element?: Interact.Element,\n functionArgs?: T\n) {\n if (is.string(value)) {\n value = getStringOptionResult(value, target, element)\n }\n else if (is.func(value)) {\n value = value(...functionArgs)\n }\n\n if (is.element(value)) {\n value = getElementRect(value)\n }\n\n return value as Interact.Rect\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || (rect.left + rect.width)\n rect.bottom = rect.bottom || (rect.top + rect.height)\n }\n\n return rect\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right - rect.x)\n rect.height = rect.height || (rect.bottom - rect.y)\n }\n\n return rect\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n}\n","import { HasGetRect } from '@interactjs/types/types'\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target: HasGetRect & { options: Interact.PerActionDefaults }, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","let lastTime = 0\nlet request\nlet cancel\n\nfunction init (window) {\n request = window.requestAnimationFrame\n cancel = window.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`]\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = token => clearTimeout(token)\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n}\n","export type SignalListener = (signalArg: PartialSignalArg, sinalName?: string) => (void | boolean)\n\nexport interface SignalArg {\n interaction: Interact.Interaction\n interactable: Interact.Interactable\n iEvent: Interact.InteractEvent\n element: Interact.EventTarget\n coords: Interact.Point\n event: Interact.PointerEventType\n phase: Interact.EventPhase\n [index: string]: any\n}\n\nexport type PartialSignalArg = Partial\n\nclass Signals {\n listeners: {\n [signalName: string]: SignalListener[]\n } = {}\n\n on (name: string, listener: SignalListener) {\n if (!this.listeners[name]) {\n this.listeners[name] = [listener]\n return\n }\n\n this.listeners[name].push(listener)\n }\n\n off (name: string, listener: SignalListener) {\n if (!this.listeners[name]) { return }\n\n const index = this.listeners[name].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[name].splice(index, 1)\n }\n }\n\n fire (name: string, arg: Partial): void | false {\n const targetListeners = this.listeners[name]\n\n if (!targetListeners) { return }\n\n for (const listener of targetListeners) {\n if (listener(arg, name) === false) {\n return false\n }\n }\n }\n}\n\nexport default Signals\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: Interact.ActionProps, src: Interact.ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { default as Signals } from './Signals'\nexport { win, arr, dom, is }\n","// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Interact.EventTarget\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Interact.Element\n listeners?: Interact.Listeners\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport normalize, { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\n T extends ActionName,\n P extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect (_element: Interact.Element) {\n return null\n }\n}\n\nexport default Eventable\n","import * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\ntype IgnoreValue = string | Interact.Element | boolean\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Interact.Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Interact.Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev) || is.object(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Interact.Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Interact.Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue },\n targetNode: Node,\n eventTarget: Interact.Element,\n ) {\n return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget))\n }\n\n testAllow (\n this: Interactable,\n allowFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.Element,\n ) {\n if (!allowFrom) { return true }\n\n if (!is.element(element)) { return false }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n }\n else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (\n this: Interactable,\n ignoreFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.Element,\n ) {\n if (!ignoreFrom || !is.element(element)) { return false }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n }\n else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interactable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n (this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport Signals from '@interactjs/utils/Signals'\n\nexport default class InteractableSet {\n signals = new Signals()\n\n // all set interactables\n list: Interact.Interactable[] = []\n\n selectorMap: {\n [selector: string]: Array<{ context: Document | Interact.Element, interactable: Interact.Interactable }>\n } = {}\n\n constructor (protected scope: Interact.Scope) {\n this.signals.on('unset', ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings = is.string(target)\n ? this.selectorMap[target]\n : target[this.scope.id]\n\n const targetIndex = targetMappings.findIndex(m => m.context === context)\n if (targetMappings[targetIndex]) {\n // Destroying mappingInfo's context and interactable\n targetMappings[targetIndex].context = null\n targetMappings[targetIndex].interactable = null\n }\n targetMappings.splice(targetIndex, 1)\n })\n }\n\n new (target: Interact.Target, options?: any): Interact.Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n const mappingInfo = { context: interactable._context, interactable }\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) { this.selectorMap[target] = [] }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!interactable.target[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n target[this.scope.id].push(mappingInfo)\n }\n\n this.signals.fire('new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Interact.Target, options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings = isSelector\n ? this.selectorMap[target as string]\n : target[this.scope.id]\n\n if (!targetMappings) { return null }\n\n const found = arr.find(\n targetMappings,\n m => m.context === context &&\n (isSelector || m.interactable.inContext(target)))\n\n return found && found.interactable\n }\n\n forEachMatch (node: Node, callback: (interactable: Interact.Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret\n\n if ((is.string(interactable.target)\n // target is a selector and the element matches\n ? (is.element(node) && domUtils.matchesSelector(node, interactable.target))\n // target is the element\n : node === interactable.target) &&\n // the element is in context\n (interactable.inContext(node))) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class BaseEvent {\n type: string\n target: EventTarget\n currentTarget: EventTarget\n interactable: Interactable\n _interaction: Interaction\n timeStamp: any\n immediatePropagationStopped = false\n propagationStopped = false\n\n get interaction () {\n return this._interaction._proxy\n }\n\n constructor (interaction) {\n this._interaction = interaction\n }\n\n preventDefault () {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default BaseEvent\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport BaseEvent from './BaseEvent'\nimport defaults from './defaultOptions'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> extends BaseEvent {\n target: Interact.Element\n currentTarget: Interact.Element\n relatedTarget: Interact.Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n rect: Interact.FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Interact.Element\n dragLeave?: Interact.Element\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Interact.Element,\n related?: Interact.Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.interactable = target\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = (ending || phase === 'inertiastart') ? this.getSwipe() : null\n }\n\n get pageX () { return this.page.x }\n set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","/* eslint-disable @typescript-eslint/no-parameter-properties */\nexport class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: Node,\n ) {}\n}\n\nexport default PointerInfo\n","import * as dom from '@interactjs/utils/domUtils'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Interact.EventTarget\n curEventTarget: Interact.EventTarget\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && (pointerType === interaction.pointerType)) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId (interaction: Interact.Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable: DraggableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drag: Interact.DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Drag]?: typeof drag\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Drag = 'drag'\n }\n}\n\n(ActionName as any).Drag = 'drag'\n\nexport type DragEvent = Interact.InteractEvent\n\nexport type DraggableMethod = Interact.ActionMethod\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('before-action-move', beforeMove)\n interactions.signals.on('action-resume', beforeMove)\n\n // dragmove\n interactions.signals.on('action-move', move)\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag: Interact.Plugin = {\n id: 'actions/drag',\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import BaseEvent from '@interactjs/core/BaseEvent'\nimport Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport Interaction from '@interactjs/core/Interaction'\nimport { ActionName } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\n\nclass DropEvent extends BaseEvent {\n target: Interact.Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Interact.Element\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: Interaction['dropState'], dragEvent: InteractEvent, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave'\n ? dropState.prev\n : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject () {\n const { dropState } = this._interaction\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropState.cur.dropzone !== this.dropzone ||\n dropState.cur.element !== this.target)) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target)\n\n dropState.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ]\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n }\n else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default DropEvent\n","import Interactable from '@interactjs/core/Interactable'\nimport InteractEvent from '@interactjs/core/InteractEvent'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport drag from '../drag'\nimport DropEvent from './DropEvent'\n\nexport interface DropzoneMethod {\n (options: Interact.DropzoneOptions | boolean): Interact.Interactable\n (): Interact.DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Interact.Element,\n dropElemen: Interact.Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: {\n cur: {\n dropzone: Interactable // the dropzone a drag target might be dropped into\n element: Interact.Element // the element at the time of checking\n }\n prev: {\n dropzone: Interactable // the dropzone that was recently dragged away from\n element: Interact.Element // the element at the time of checking\n }\n rejected: boolean // wheather the potential drop was rejected from a listener\n events: any // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n element: Interact.Element\n rect: Interact.Rect\n }>\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(drag)\n\n interactions.signals.on('before-action-start', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n })\n\n interactions.signals.on('after-action-start', ({ interaction, event, iEvent: dragEvent }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n // reset active dropzones\n dropState.activeDrops = null\n dropState.events = null\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n }\n })\n\n // FIXME proper signal types\n interactions.signals.on('action-move', arg => onEventCreated(arg as any, scope))\n interactions.signals.on('action-end', arg => onEventCreated(arg as any, scope))\n\n interactions.signals.on('after-action-move', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n interaction.dropState.events = {}\n })\n\n interactions.signals.on('after-action-end', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null\n dropState.events = null\n dropState.cur.dropzone = null\n dropState.cur.element = null\n dropState.prev.dropzone = null\n dropState.prev.element = null\n dropState.rejected = false\n }\n })\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Interact.Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ dropState, interactable: draggable, element: dragElement }: Partial, dragEvent, pointerEvent) {\n const validDrops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interact.Interaction, _pointerEvent, dragEvent) {\n const { dropState } = interaction\n const dropEvents = {\n enter : null,\n leave : null,\n activate : null,\n deactivate: null,\n move : null,\n drop : null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null\n dropEvents.activate.dropzone = null\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null\n dropEvents.deactivate.dropzone = null\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dropEvents.move.dragmove = dragEvent\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\nfunction fireDropEvents (interaction: Interact.Interaction, events) {\n const { dropState } = interaction\n const {\n activeDrops,\n cur,\n prev,\n } = dropState\n\n if (events.leave) { prev.dropzone.fire(events.leave) }\n if (events.move) { cur.dropzone.fire(events.move) }\n if (events.enter) { cur.dropzone.fire(events.enter) }\n if (events.drop) { cur.dropzone.fire(events.drop) }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }: Interact.SignalArg, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return }\n\n const { dropState } = interaction\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected = dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod (interactable: Interact.Interactable): Interact.DropzoneOptions\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean)\nfunction dropzoneMethod (interactable: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Interact.Element,\n dropElement: Interact.Element,\n rect: any\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n id: 'actions/drop',\n install,\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n defaults: {\n enabled: false,\n accept : null,\n overlap: 'pointer',\n } as Interact.DropzoneOptions,\n}\n\nexport default drop\n","import InteractEvent from '@interactjs/core/InteractEvent'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.SignalArg {\n iEvent: GestureEvent\n interaction: Interact.Interaction\n event: Interact.PointerEventType | GestureEvent\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n Interactable,\n interactions,\n defaults,\n } = scope\n\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on gesture events (makes the Interactable gesturable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of gesture events, or this Interactable\n */\n Interactable.prototype.gesturable = function (this: Interact.Interactable, options: Interact.GesturableOptions | boolean) {\n if (utils.is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (utils.is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Interact.Options\n } as GesturableMethod\n\n interactions.signals.on('action-start', updateGestureProps)\n interactions.signals.on('action-move', updateGestureProps)\n interactions.signals.on('action-end', updateGestureProps)\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n })\n\n actions[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n id: 'actions/gesture',\n install,\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number } }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map(p => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (utils.is.number(iEvent.scale) &&\n iEvent.scale !== Infinity &&\n !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nexport default gesture\n","import { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { ActionName, Scope } from '@interactjs/core/scope'\nimport * as arr from '@interactjs/utils/arr'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.FullRect\n current: Interact.Rect\n inverted: Interact.FullRect\n previous: Interact.FullRect\n delta: Interact.FullRect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n edges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n _linkedEdges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.FullRect\n edges?: Interact.ActionProps['edges']\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n interactions,\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n interactions.signals.on('new', interaction => {\n interaction.resizeAxes = 'xy'\n })\n\n interactions.signals.on('action-start', start)\n interactions.signals.on('action-move', move)\n interactions.signals.on('action-end', end)\n\n interactions.signals.on('action-start', updateEventAxes)\n interactions.signals.on('action-move', updateEventAxes)\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n id: 'actions/resize',\n install,\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Interact.Element,\n interaction: Interaction,\n rect: Interact.Rect\n ) {\n if (!rect) { return null }\n\n const page = extend({}, interaction.coords.cur.page)\n const options = interactable.options\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize\n const resizeEdges: { [edge: string]: boolean } = { left: false, right: false, top: false, bottom: false }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as ReturnType,\n\n getCursor ({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n }\n else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n defaultMargin: null as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (\n name: string,\n value: any,\n page: Interact.Point,\n element: Node,\n interactableElement: Interact.Element,\n rect: Interact.Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) { return false }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2)\n\n if (width < 0) {\n if (name === 'left') { name = 'right' }\n else if (name === 'right') { name = 'left' }\n }\n if (height < 0) {\n if (name === 'top') { name = 'bottom' }\n else if (name === 'bottom') { name = 'top' }\n }\n\n if (name === 'left') { return page.x < ((width >= 0 ? rect.left : rect.right) + margin) }\n if (name === 'top') { return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin) }\n\n if (name === 'right') { return page.x > ((width >= 0 ? rect.right : rect.left) - margin) }\n if (name === 'bottom') { return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin) }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) { return false }\n\n return is.element(value)\n // the value is an element to use as a resize handle\n ? value === element\n // otherwise check if element matches value as selector\n : dom.matchesUpTo(element, value, interactableElement)\n}\n\nfunction initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const startRect = extend({}, interaction.rect)\n const resizeOptions = interaction.interactable.options.resize\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = extend({}, interaction.prepared.edges)\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom)\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right)\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top)\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left)\n\n interaction.prepared._linkedEdges = linkedEdges\n }\n else {\n interaction.prepared._linkedEdges = null\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : {\n left: startRect.left,\n right: startRect.right,\n top: startRect.top,\n bottom: startRect.bottom,\n },\n inverted : extend({}, startRect),\n previous : extend({}, startRect),\n delta : {\n left: 0,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n let edges = interaction.prepared.edges\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start\n const current = interaction.resizeRects.current\n const inverted = interaction.resizeRects.inverted\n const deltaRect = interaction.resizeRects.delta\n const previous = extend(interaction.resizeRects.previous, inverted)\n const originalEdges = edges\n\n const eventDelta = extend({}, iEvent.delta)\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1\n\n edges = interaction.prepared._linkedEdges\n\n if ((originalEdges.left && originalEdges.bottom) ||\n (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio\n }\n else if (originalEdges.left || originalEdges.right) { eventDelta.y = eventDelta.x / startAspectRatio }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio }\n }\n\n // update the 'current' rect without modifications\n if (edges.top) { current.top += eventDelta.y }\n if (edges.bottom) { current.bottom += eventDelta.y }\n if (edges.left) { current.left += eventDelta.x }\n if (edges.right) { current.right += eventDelta.x }\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(inverted, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top\n\n inverted.top = inverted.bottom\n inverted.bottom = swap\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left\n\n inverted.left = inverted.right\n inverted.right = swap\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom)\n inverted.bottom = Math.max(current.bottom, start.top)\n inverted.left = Math.min(current.left, start.right)\n inverted.right = Math.max(current.right, start.left)\n }\n\n inverted.width = inverted.right - inverted.left\n inverted.height = inverted.bottom - inverted.top\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge]\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = inverted\n iEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction updateEventAxes ({ iEvent, interaction, action }: { iEvent: ResizeEvent, interaction: Interaction, action: ActionName }) {\n if (action !== ActionName.Resize || !interaction.resizeAxes) { return }\n\n const options = interaction.interactable.options\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y\n }\n else {\n iEvent.delta.y = iEvent.delta.x\n }\n iEvent.axes = 'xy'\n }\n else {\n iEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0\n }\n }\n}\n\nexport default resize\n","import { Scope } from '@interactjs/core/scope'\nimport drag, { DragEvent } from './drag'\nimport drop from './drop'\nimport gesture, { GestureEvent } from './gesture'\nimport resize, { ResizeEvent } from './resize'\n\nfunction install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n}\n\nconst id = 'actions'\n\nexport {\n id,\n install,\n gesture,\n GestureEvent,\n resize,\n ResizeEvent,\n drag,\n DragEvent,\n drop,\n}\n","import * as domUtils from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement\n margin?: number\n distance?: number\n interval?: number\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.autoScroll = null\n })\n\n interactions.signals.on('destroy', ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n })\n\n interactions.signals.on('stop', autoScroll.stop)\n\n interactions.signals.on('action-move', (arg: any) => autoScroll.onInteractionMove(arg))\n\n actions.eventTypes.push('autoscroll')\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed : 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n }\n else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.interactable, interaction.prepared.name))) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top\n let right\n let bottom\n let left\n\n const { interactable, element } = interaction\n const options = interactable.options[interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n }\n else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = (right ? 1 : left ? -1 : 0)\n autoScroll.y = (bottom ? 1 : top ? -1 : 0)\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.interactable,\n element\n )\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nexport default {\n id: 'auto-scroll',\n install,\n}\n","import { warnOnce } from '@interactjs/utils'\nimport * as is from '@interactjs/utils/is'\n\n// TODO: there seems to be a @babel/preset-typescript bug causing regular import\n// syntax to remain in js output\ntype Scope = import ('@interactjs/core/scope').Scope\ntype Actions = import ('@interactjs/core/scope').Actions\ntype Interaction = import ('@interactjs/core/Interaction').default\ntype Interactable = import ('@interactjs/core/Interactable').default\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Scope) {\n const {\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n actions,\n } = scope\n\n Interactable.prototype.getAction = getAction\n\n /**\n * ```js\n * interact(element, { ignoreFrom: document.getElementById('no-action') })\n * // or\n * interact(element).ignoreFrom('input, textarea, a')\n * ```\n * @deprecated\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to not ignore any elements\n * @return {string | Element | object} The current ignoreFrom value or this\n * Interactable\n */\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n /**\n * @deprecated\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * @example\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n *\n * @param {string | Element | null} [newValue] a CSS selector string, an\n * Element or `null` to allow from any element\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */\n Interactable.prototype.actionChecker = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (\n this: Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interaction,\n element: Interact.Element,\n): Interact.ActionProps {\n const action = this.defaultActionChecker(pointer, event, interaction, element)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n}\n\nfunction defaultActionChecker (\n interactable: Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interaction,\n element: Interact.Element,\n actions: Actions,\n) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker (this: Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n","import * as utils from '@interactjs/utils'\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Interact.Element\n signals: utils.Signals\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n interact,\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(InteractableMethods)\n\n // set cursor style on mousedown\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n // set cursor style on mousemove\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget }) => {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n })\n\n interactions.signals.on('move', arg => {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.autoStart.signals.fire('before-start', arg)\n\n const { interactable } = interaction\n\n if (interaction.prepared.name && interactable) {\n // check manualStart and interaction limit\n if (interactable.options[interaction.prepared.name].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n interaction.stop()\n }\n else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n })\n\n interactions.signals.on('stop', ({ interaction }) => {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n })\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n signals: new utils.Signals(),\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: Interact.ActionProps,\n interactable: Interact.Interactable,\n element: Interact.Element,\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interact.Interaction,\n pointer,\n event,\n matches: Interact.Interactable[],\n matchElements: Interact.Element[],\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) { continue }\n\n const action = validateAction(\n matchAction,\n match,\n matchElement,\n eventTarget,\n scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interact.Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: Interact.Element,\n scope: Interact.Scope,\n) {\n let matches = []\n let matchElements = []\n\n let element = eventTarget\n\n function pushMatches (interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (utils.is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)\n\n if (actionInfo.action &&\n !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = utils.dom.parentNode(element)\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interact.Interaction,\n { action, interactable, element }: {\n action: Interact.ActionProps\n interactable: Interact.Interactable\n element: Interact.Element\n },\n scope: Interact.Scope,\n) {\n action = action || { name: null }\n\n // clear previous target element cursor\n if (interaction.interactable && interaction.interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n\n interaction.interactable = interactable\n interaction.element = element\n utils.copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name\n ? interactable.getRect(element)\n : null\n\n setInteractionCursor(interaction, scope)\n\n scope.autoStart.signals.fire('prepared', { interaction })\n}\n\nfunction withinInteractionLimit (interactable: Interact.Interactable, element: Interact.Element, action, scope: Interact.Scope) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) { continue }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue, scope: Interact.Scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Interact.Element, cursor, scope: Interact.Scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interact.Interaction, scope: Interact.Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker: Interact.CursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (utils.is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n }\n else {\n cursor = scope.actions[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nexport default {\n id: 'auto-start/base',\n install,\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n} as Interact.Plugin\n","import { ActionName } from '@interactjs/core/scope'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport * as is from '@interactjs/utils/is'\nimport autoStart from './base'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\nfunction install (scope: Scope) {\n scope.autoStart.signals.on('before-start', ({ interaction, eventTarget, dx, dy }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy')\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.interactable) { return }\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === ActionName.Drag &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element)\n }\n }\n })\n\n function checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false }\n\n const thisAxis = interactable.options[ActionName.Drag].startAxis\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis)\n }\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n install,\n}\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n autoStart,\n interactions,\n defaults,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n\n interactions.signals.on('new', interaction => {\n interaction.autoStartHoldTimer = null\n })\n\n autoStart.signals.on('prepared', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n })\n\n interactions.signals.on('move', ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n })\n\n // prevent regular down->move autoStart\n autoStart.signals.on('before-start', ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n })\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nexport default {\n id: 'auto-start/hold',\n install,\n getHoldDuration,\n}\n","import autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nfunction install (scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n}\n\nconst id = 'auto-start'\n\nexport {\n id,\n install,\n autoStart,\n hold,\n dragAxis,\n}\n","import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport events from '@interactjs/utils/events'\nimport * as is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault: typeof preventDefault\n checkAndPreventDefault: (event: Event) => void\n }\n}\n\nfunction preventDefault (this: Interact.Interactable, newValue?: 'always' | 'never' | 'auto') {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n}\n\nfunction checkAndPreventDefault (interactable: Interact.Interactable, scope: Interact.Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') { return }\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: Interact.SignalArg) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Interact.Scope) {\n /** @lends Interactable */\n const Interactable = scope.Interactable\n\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n * @return {string | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n for (const eventSignal of ['down', 'move', 'up', 'cancel']) {\n scope.interactions.signals.on(eventSignal, onInteractionEvent)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport type Install = typeof install\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n}\n","/* eslint-disable no-console */\n/* global process */\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport win from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools?: Interact.OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: string\n text: string\n perform: (interaction: Interact.Interaction) => boolean\n getInfo: (interaction: Interact.Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = '',\n boxSizing = '',\n noListeners = '',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\n// eslint-disable-next-line no-restricted-syntax\nfunction install (scope: Interact.Scope, { logger }: { logger?: Logger } = {}) {\n const {\n interactions,\n Interactable,\n defaults,\n } = scope\n logger = logger || console\n\n interactions.signals.on('action-start', ({ interaction }) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n })\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n}\n\nconst checks: Check[] = [\n {\n name: 'touchAction',\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [\n element,\n links.touchAction,\n ]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: 'boxSizing',\n perform (interaction) {\n const { element } = interaction\n\n return interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [\n element,\n links.boxSizing,\n ]\n },\n },\n\n {\n name: 'noListeners',\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [\n interaction.prepared.name,\n interaction.interactable,\n ]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop])\n}\n\nfunction parentHasStyle (element: Interact.Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent)\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n","import { Scope } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: {\n states: ModifierState[]\n offsets: any\n startOffset: any\n startDelta: Interact.Point\n result?: {\n delta: {\n x: number\n y: number\n }\n rectDelta: {\n left: number\n right: number\n top: number\n bottom: number\n }\n coords: Interact.Point\n changed: boolean\n }\n endPrevented: boolean\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport interface Modifier<\n Defaults = any,\n State extends ModifierState = any,\n Name extends string = any\n> {\n options?: Defaults\n methods: {\n start?: (arg: ModifierArg) => void\n set: (arg: ModifierArg) => void\n beforeEnd?: (arg: ModifierArg) => boolean\n stop?: (arg: ModifierArg) => void\n }\n name?: Name\n}\n\nexport type ModifierState<\n Defaults = {},\n StateProps extends { [prop: string]: any } = {},\n Name extends string = any\n> = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg extends Pick {\n states?: State[]\n state?: State\n element: Interact.Element\n pageCoords?: Interact.Point\n prevCoords?: Interact.Point\n coords?: Interact.Point\n startOffset?: Interact.Rect\n preEnd?: boolean\n requireEndOnly?: boolean\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.defaults.perAction.modifiers = []\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets: {},\n states: null,\n result: null,\n endPrevented: false,\n startDelta: null,\n }\n })\n\n interactions.signals.on('before-action-start', (arg: Interact.SignalArg) => {\n start(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page)\n })\n\n interactions.signals.on('action-resume', (arg: Interact.SignalArg) => {\n stop(arg)\n start(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords)\n beforeMove(arg)\n })\n\n interactions.signals.on('after-action-move', restoreCoords as any)\n interactions.signals.on('before-action-move', beforeMove)\n\n interactions.signals.on('before-action-start', setCoords)\n interactions.signals.on('after-action-start', restoreCoords as any)\n\n interactions.signals.on('before-action-end', beforeEnd)\n interactions.signals.on('stop', stop)\n}\n\nfunction start (\n { interaction, phase }: Interact.SignalArg,\n pageCoords: Interact.Point,\n prevCoords: Interact.Point,\n) {\n const { interactable, element } = interaction\n const modifierList = getModifierList(interaction)\n const states = prepareStates(modifierList)\n\n const rect = extend({}, interaction.rect)\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: ModifierArg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n prevCoords: prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page),\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nexport function startAll (arg: ModifierArg) {\n const states: ModifierState[] = arg.states\n\n for (const state of states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg)\n }\n }\n}\n\nexport function setAll (arg: Partial) {\n const {\n prevCoords,\n phase,\n preEnd,\n requireEndOnly,\n rect,\n states,\n } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, rect)\n\n const result = {\n delta: { x: 0, y: 0 },\n rectDelta: {\n left : 0,\n right : 0,\n top : 0,\n bottom: 0,\n },\n coords: arg.coords,\n changed: true,\n }\n\n for (const state of states) {\n const { options } = state\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue }\n\n arg.state = state\n state.methods.set(arg)\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x\n result.delta.y = arg.coords.y - arg.pageCoords.y\n\n let rectChanged = false\n\n if (rect) {\n result.rectDelta.left = arg.rect.left - rect.left\n result.rectDelta.right = arg.rect.right - rect.right\n result.rectDelta.top = arg.rect.top - rect.top\n result.rectDelta.bottom = arg.rect.bottom - rect.bottom\n\n rectChanged = result.rectDelta.left !== 0 ||\n result.rectDelta.right !== 0 ||\n result.rectDelta.top !== 0 ||\n result.rectDelta.bottom !== 0\n }\n\n result.changed = !prevCoords || prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y ||\n rectChanged\n\n return result\n}\n\nfunction beforeMove (arg: Interact.SignalArg): void | false {\n const { interaction, phase, preEnd, skipModifiers } = arg\n const { interactable, element } = interaction\n\n const states = skipModifiers\n ? interaction.modifiers.states.slice(skipModifiers)\n : interaction.modifiers.states\n const prevCoords = arg.prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page)\n\n const modifierResult = setAll({\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n prevCoords,\n rect: interaction.rect,\n states,\n requireEndOnly: false,\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 if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n modifierResult.coords.x += adjustment.x\n modifierResult.coords.y += adjustment.y\n modifierResult.delta.x += adjustment.x\n modifierResult.delta.y += adjustment.y\n }\n setCoords(arg)\n}\n\nfunction beforeEnd (arg: Interact.SignalArg): void | false {\n const { interaction, event, noPreEnd } = arg\n const states = interaction.modifiers.states\n\n if (noPreEnd || !states || !states.length) {\n return\n }\n\n let didPreEnd = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endResult = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n if (endResult === false) {\n interaction.modifiers.endPrevented = true\n return false\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true })\n didPreEnd = true\n }\n }\n}\n\nfunction stop (arg: Interact.SignalArg) {\n const { interaction } = arg\n const states = interaction.modifiers.states\n\n if (!states || !states.length) {\n return\n }\n\n const modifierArg: ModifierArg = extend({\n states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n }, arg)\n\n for (const state of states) {\n modifierArg.state = state\n\n if (state.methods.stop) { state.methods.stop(modifierArg) }\n }\n\n arg.interaction.modifiers.states = null\n arg.interaction.modifiers.endPrevented = false\n}\n\nfunction getModifierList (interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.filter(\n modifier => !modifier.options || modifier.options.enabled !== false\n )\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type]\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n }\n })\n .filter(m => !!m)\n}\n\nexport function prepareStates (modifierList: Modifier[]) {\n const states: ModifierState[] = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return states\n}\n\nexport function setCoords (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase, rect?: Interact.Rect }) {\n const { interaction, phase } = arg\n const curCoords = interaction.coords.cur\n const 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]] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = interaction.modifiers.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n\nexport function restoreCoords ({ interaction: { coords, rect, modifiers } }: { interaction: Interact.Interaction }) {\n if (!modifiers.result) { return }\n\n const { startDelta } = modifiers\n const { delta: curDelta, rectDelta } = modifiers.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n}\n\nfunction shouldDo (options, preEnd?: boolean, requireEndOnly?: boolean, phase?: string) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly || options.alwaysOnEnd) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string\n> (\n module: { defaults?: Defaults, [key: string]: any },\n name?: Name\n) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options: Defaults = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = { options, methods, name }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport default {\n id: 'modifiers/base',\n install,\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n}\n","import { EventPhase } from '@interactjs/core/InteractEvent'\nimport modifiers, { restoreCoords, setCoords } from '@interactjs/modifiers/base'\nimport * as utils from '@interactjs/utils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: {\n active: boolean\n smoothEnd: boolean\n allowResume: boolean\n\n startEvent?: Interact.InteractEvent\n upCoords: {\n page: Interact.Point\n client: Interact.Point\n timeStamp: number\n }\n\n xe?: number\n ye?: number\n sx?: number\n sy?: number\n\n t0?: number\n te?: number\n v0?: number\n vx0?: number\n vy0?: number\n duration?: number\n modifiedXe?: number\n modifiedYe?: number\n\n lambda_v0?: number // eslint-disable-line camelcase\n one_ve_v0?: number // eslint-disable-line camelcase\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\n(EventPhase as any).Resume = 'resume'\n;(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Interact.Scope) {\n const {\n interactions,\n defaults,\n } = scope\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n upCoords : {} as any,\n timeout : null,\n }\n })\n\n interactions.signals.on('before-action-end', (arg: Interact.SignalArg) => release(arg, scope))\n interactions.signals.on('down', (arg: Interact.SignalArg) => resume(arg, scope))\n interactions.signals.on('stop', stop)\n\n defaults.perAction.inertia = {\n enabled : false,\n resistance : 10, // the lambda in exponential decay\n minSpeed : 100, // target speed must be above this for inertia to start\n endSpeed : 10, // the speed at which inertia is slow enough to stop\n allowResume : true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n\n scope.usePlugin(modifiers)\n}\n\nfunction resume (\n { interaction, event, pointer, eventTarget }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n const state = interaction.inertia\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer, event, eventTarget, true)\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer),\n interaction._now()\n )\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n phase: EventPhase.Resume,\n }\n\n scope.interactions.signals.fire('action-resume', signalArg)\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event, interaction.prepared.name, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release (\n { interaction, event, noPreEnd }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = interaction._now()\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y)\n\n let smoothEnd = false\n let modifierResult: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n pageCoords: interaction.coords.cur.page,\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus)\n ),\n preEnd: true,\n prevCoords: null,\n requireEndOnly: null,\n phase: EventPhase.InertiaStart,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierArg.prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.prevEvent.page\n modifierArg.requireEndOnly = false\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n setCoords(modifierArg)\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 restoreCoords(modifierArg)\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.interactable.fire(state.startEvent)\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x\n state.vy0 = interaction.coords.velocity.client.y\n state.v0 = pointerSpeed\n\n calcInertia(interaction, state)\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page)\n\n modifierArg.pageCoords.x += state.xe\n modifierArg.pageCoords.y += state.ye\n modifierArg.prevCoords = null\n modifierArg.requireEndOnly = true\n\n modifierResult = modifiers.setAll(modifierArg)\n\n state.modifiedXe += modifierResult.delta.x\n state.modifiedYe += modifierResult.delta.y\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.smoothEnd = true\n state.xe = modifierResult.delta.x\n state.ye = modifierResult.delta.y\n\n state.sx = state.sy = 0\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n\n return false\n}\n\nfunction stop ({ interaction }: Interact.SignalArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = interaction._now() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.sx = state.modifiedXe\n state.sy = state.modifiedYe\n\n interaction.move()\n interaction.end(state.startEvent)\n state.active = false\n interaction.simulation = null\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n}\n\nfunction smothEndTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n\n const state = interaction.inertia\n const t = interaction._now() - state.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration)\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration)\n\n interaction.move()\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n else {\n state.sx = state.xe\n state.sy = state.ye\n\n interaction.move()\n interaction.end(state.startEvent)\n\n state.smoothEnd =\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction updateInertiaCoords (interaction: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [{\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n }], interaction._now())\n}\n\nfunction getOptions ({ interactable, prepared }: Interact.Interaction) {\n return interactable &&\n interactable.options &&\n prepared.name &&\n interactable.options[prepared.name].inertia\n}\n\nexport default {\n id: 'inertia',\n install,\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n}\n","import extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: Interact.RectResolvable<[number, number, Interact.Interaction]>\n // what part of self is allowed to drag over\n elementRect: Interact.Rect\n offset: Interact.Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Interact.Rect = extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }, options.offset || {})\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = (restriction.right - restriction.left) - rect.width\n const heightDiff = (restriction.bottom - restriction.top) - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - (rect.width * elementRect.left)\n offset.top += startOffset.top - (rect.height * elementRect.top)\n\n offset.right += startOffset.right - (rect.width * (1 - elementRect.right))\n offset.bottom += startOffset.bottom - (rect.height * (1 - elementRect.bottom))\n }\n\n state.offset = offset\n}\n\nfunction set ({ coords, interaction, state }) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) { return }\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nfunction getRestrictionRect (value, interaction, coords?: Interact.Point) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict = {\n start,\n set,\n getRestrictionRect,\n defaults,\n}\n\nexport default restrict\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrict, { RestrictOptions } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState\n\nconst { getRestrictionRect } = restrict\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, state }: ModifierArg) {\n const { options } = state\n const startOffset = interaction.modifiers.startOffset\n let offset\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { offset, options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || {} as Interact.Rect\n const outer = getRestrictionRect(options.outer, interaction, page) || {} as Interact.Rect\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n getRestrictionRect,\n start,\n set,\n defaults,\n}\n\nexport default restrictEdges\n","import extend from '@interactjs/utils/extend'\nimport restrictPointer from './pointer'\n\nconst defaults = extend({\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n}, restrictPointer.defaults)\n\nconst restrictRect = {\n start: restrictPointer.start,\n set: restrictPointer.set,\n defaults,\n}\n\nexport default restrictRect\n","import extend from '@interactjs/utils/extend'\nimport rectUtils from '@interactjs/utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrictEdges, { RestrictEdgesState } from './edges'\nimport { RestrictOptions } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n max?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState =\n RestrictEdgesState & ModifierState\n\nfunction set (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted)\n\n const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction, arg.coords)) || noMin\n const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default restrictSize\n","import * as utils from '@interactjs/utils'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface SnapPosition {\n x: number\n y: number\n range?: number\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: Interact.Interaction,\n offset: Interact.Point,\n index: number\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[]\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Interact.Point[]\n // startCoords = offset snapping from drag start page position\n offset: Interact.Point | Interact.RectResolvable<[Interact.Interaction]> | 'startCoords'\n offsetWithOrigin?: boolean\n origin: Interact.RectResolvable<[Interact.Element]> | Interact.Point\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const offsets = []\n const origin = options.offsetWithOrigin\n ? getOrigin(arg)\n : { x: 0, y: 0 }\n\n let snapOffset\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const relativePoints = options.relativePoints || []\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index]\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n })\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset))\n }\n\n state.offsets = offsets\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = utils.extend({}, coords)\n const targets = []\n let target\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n state.realX = page.x\n state.realY = page.y\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n targets.push({\n x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: utils.is.number(target.range) ? target.range : options.range,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n }\n\n for (let i = 0, len = targets.length; i < len; i++) {\n target = targets[i]\n\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = utils.hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.dx = dx\n closest.dy = dy\n\n state.range = range\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const { element } = arg.interaction\n const optionsOrigin = utils.rect.rectToXY(\n utils.rect.resolveRectLike(arg.state.options.origin as any, null, null, [element])\n )\n const origin = optionsOrigin || utils.getOriginXY(\n arg.interactable,\n element,\n arg.interaction.prepared.name,\n )\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range : Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default snap\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport { ModifierArg } from '../base'\nimport snap, { SnapOptions, SnapState } from './pointer'\n\nexport type SnapSizeOptions = Pick<\nSnapOptions,\n'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'\n>\n\nfunction start (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [{\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of (options.targets || [])) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n snap.set(arg)\n\n state.options = options\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default snapSize\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport { ModifierArg } from '../base'\nimport { SnapState } from './pointer'\nimport snapSize, { SnapSizeOptions } from './size'\n\nfunction start (arg: ModifierArg) {\n const edges = arg.interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nfunction set (arg) {\n return snapSize.set(arg)\n}\n\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults) as SnapSizeOptions, {\n offset: { x: 0, y: 0 },\n } as unknown),\n}\n\nexport default snapEdges\n","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictRectModule from './restrict/rect'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictRect = makeModifier(restrictRectModule, 'restrictRect')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import BaseEvent from '@interactjs/core/BaseEvent'\nimport pointerUtils from '@interactjs/utils/pointerUtils'\n\n/** */\nexport default class PointerEvent extends BaseEvent {\n type: T\n originalEvent: Interact.PointerEventType\n pointerId: number\n pointerType: string\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n\n /** */\n constructor (\n type: T,\n pointer: Interact.PointerType | PointerEvent,\n event: Interact.PointerEventType,\n eventTarget: Interact.EventTarget,\n interaction: Interact.Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double = !!(interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500)\n }\n else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n}\n","import { PerActionDefaults } from '@interactjs/core/defaultOptions'\nimport Eventable from '@interactjs/core/Eventable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport PointerEvent from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Interact.Point | string | Interact.Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\nconst signals = new utils.Signals()\nconst simpleSignals = ['down', 'up', 'cancel']\nconst simpleEvents = ['down', 'up', 'cancel']\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n}\n\nconst pointerEvents = {\n id: 'pointer-events/base',\n install,\n signals,\n PointerEvent,\n fire,\n collectEventTargets,\n createSignalListener,\n defaults,\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n}\n\nfunction fire (arg: {\n interaction: Interaction\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n targets?: EventTargetList\n pointerEvent?: PointerEvent\n type: T\n}, scope: Interact.Scope) {\n const {\n interaction, pointer, event, eventTarget,\n type = (arg as any).pointerEvent.type,\n targets = collectEventTargets(arg),\n } = arg\n\n const {\n pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now()),\n } = arg\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n (i + 1) < targets.length && targets[i + 1].node !== pointerEvent.currentTarget)) {\n break\n }\n }\n\n signals.fire('fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n }, scope)\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }: {\n interaction: Interaction\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n type: T\n}) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n signals.fire('collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(target =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration)\n }\n\n return signalArg.targets\n}\n\nfunction install (scope: Scope) {\n const {\n interactions,\n } = scope\n\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n\n interactions.signals.on('new', ({ interaction }) => {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n })\n\n interactions.signals.on('update-pointer', ({ down, pointerInfo }) => {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n })\n\n interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'move',\n }, scope)\n }\n })\n\n interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n signals.fire('collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) { return }\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n }, scope)\n }, minDuration)\n })\n\n for (const signalName of ['up', 'cancel']) {\n interactions.signals.on(signalName, ({ interaction, pointerIndex }) => {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n })\n }\n\n for (let i = 0; i < simpleSignals.length; i++) {\n interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i], scope))\n }\n\n interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n })\n}\n\nfunction createSignalListener (type: string, scope) {\n return function ({ interaction, pointer, event, eventTarget }: any) {\n fire({ interaction, eventTarget, pointer, event, type }, scope)\n }\n}\n\nexport default pointerEvents\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n pointerEvents,\n interactions,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n pointerEvents.signals.on('new', onNew)\n pointerEvents.signals.on('fired', arg => onFired(arg as any, scope))\n\n for (const signal of ['move', 'up', 'cancel', 'endall']) {\n interactions.signals.on(signal, endHoldRepeat)\n }\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.push('holdrepeat')\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: Interact.SignalArg,\n scope: Interact.Scope\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) { return }\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) { return }\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n }, scope)\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nexport default {\n id: 'pointer-events/holdRepeat',\n install,\n} as Interact.Plugin\n","import { Scope } from '@interactjs/core/scope'\nimport { merge } from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\n\ntype Interactable = import ('@interactjs/core/Interactable').default\ntype EventTargetList = import ('./base').EventTargetList\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents: typeof pointerEventsMethod\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install (scope: Scope) {\n const {\n pointerEvents,\n actions,\n Interactable,\n interactables,\n } = scope\n\n pointerEvents.signals.on('collect-targets', ({\n targets,\n node,\n type,\n eventTarget,\n }: {\n targets: EventTargetList\n node: Node\n type: string\n eventTarget: Interact.Element\n }) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n })\n\n interactables.signals.on('new', ({ interactable }) => {\n interactable.events.getRect = function (element: Interact.Element) {\n return interactable.getRect(element)\n }\n })\n\n interactables.signals.on('set', ({ interactable, options }) => {\n extend(interactable.events.options, pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n })\n\n merge(actions.eventTypes, pointerEvents.types)\n\n Interactable.prototype.pointerEvents = pointerEventsMethod\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nfunction pointerEventsMethod (this: Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nexport default {\n id: 'pointer-events/interactableTargets',\n install,\n}\n","import pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nfunction install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n}\n\nconst id = 'pointer-events'\n\nexport { id, pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '@interactjs/core/Interactable'\nimport { EventPhase } from '@interactjs/core/InteractEvent'\nimport { ActionProps, Interaction } from '@interactjs/core/Interaction'\nimport { Scope } from '@interactjs/core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: () => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Reflow = 'reflow',\n }\n}\n\n(EventPhase as any).Reflow = 'reflow'\n\nexport function install (scope: Scope) {\n const {\n actions,\n interactions,\n /** @lends Interactable */\n // eslint-disable-next-line no-shadow\n Interactable,\n } = scope\n\n // add action reflow event types\n for (const actionName of actions.names) {\n actions.eventTypes.push(`${actionName}reflow`)\n }\n\n // remove completed reflow interactions\n interactions.signals.on('stop', ({ interaction }) => {\n if (interaction.pointerType === EventPhase.Reflow) {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n })\n\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise }\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope)\n }\n}\n\nfunction reflow (interactable: Interactable, action: ActionProps, scope: Scope): Promise {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect)\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow (scope: Scope, interactable: Interactable, element: Interact.Element, action: ActionProps, event: any) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: EventPhase.Reflow,\n }\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prepared = extend({}, action)\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n\n interaction._doPhase(signalArg)\n\n const reflowPromise = (win.window as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default {\n id: 'reflow',\n install,\n} as Interact.Plugin\n","/** @module interact */\n\nimport { Options } from '@interactjs/core/defaultOptions'\nimport Interactable from '@interactjs/core/Interactable'\nimport { Scope } from '@interactjs/core/scope'\nimport * as utils from '@interactjs/utils'\nimport browser from '@interactjs/utils/browser'\nimport events from '@interactjs/utils/events'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n */\ninteract.use = use\nfunction use (plugin: Interact.Plugin, options?: { [key: string]: any }) {\n scope.usePlugin(plugin, options)\n\n return interact\n}\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\ninteract.isSet = isSet\nfunction isSet (target: Interact.Element, options?: any) {\n return !!scope.interactables.get(target, options && options.context)\n}\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\n/**\n * Returns an object which exposes internal data\n * @alias module:interact.debug\n *\n * @return {object} An object with properties that outline the current state\n * and expose internal functions and variables\n */\ninteract.debug = debug\nfunction debug () {\n return scope\n}\n\n// expose the functions used to calculate multi-touch properties\ninteract.getPointerAverage = utils.pointer.pointerAverage\ninteract.getTouchBBox = utils.pointer.touchBBox\ninteract.getTouchDistance = utils.pointer.touchDistance\ninteract.getTouchAngle = utils.pointer.touchAngle\n\ninteract.getElementRect = utils.dom.getElementRect\ninteract.getElementClientRect = utils.dom.getElementClientRect\ninteract.matchesSelector = utils.dom.matchesSelector\ninteract.closest = utils.dom.closest\n\n/**\n * @alias module:interact.supportsTouch\n *\n * @return {boolean} Whether or not the browser supports touch input\n */\ninteract.supportsTouch = supportsTouch\nfunction supportsTouch () {\n return browser.supportsTouch\n}\n\n/**\n * @alias module:interact.supportsPointerEvent\n *\n * @return {boolean} Whether or not the browser supports PointerEvents\n */\ninteract.supportsPointerEvent = supportsPointerEvent\nfunction supportsPointerEvent () {\n return browser.supportsPointerEvent\n}\n\n/**\n * Cancels all interactions (end events are not fired)\n *\n * @alias module:interact.stop\n *\n * @return {object} interact\n */\ninteract.stop = stop\nfunction stop () {\n for (const interaction of scope.interactions.list) {\n interaction.stop()\n }\n\n return interact\n}\n\n/**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n *\n * @alias module:interact.pointerMoveTolerance\n *\n * @param {number} [newValue] The movement from the start position must be greater than this value\n * @return {interact | number}\n */\ninteract.pointerMoveTolerance = pointerMoveTolerance\nfunction pointerMoveTolerance (newValue) {\n if (utils.is.number(newValue)) {\n scope.interactions.pointerMoveTolerance = newValue\n\n return interact\n }\n\n return scope.interactions.pointerMoveTolerance\n}\n\nscope.interactables.signals.on('unset', ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) {\n interaction.stop()\n }\n }\n})\n\ninteract.addDocument = (doc, options) => scope.addDocument(doc, options)\ninteract.removeDocument = doc => scope.removeDocument(doc)\n\nscope.interact = interact\n\nexport { scope }\nexport default interact\n","import * as actions from '@interactjs/actions'\nimport autoScroll from '@interactjs/auto-scroll'\nimport * as autoStart from '@interactjs/auto-start'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools'\nimport inertia from '@interactjs/inertia'\nimport * as modifiers from '@interactjs/modifiers'\nimport modifiersBase from '@interactjs/modifiers/base'\nimport * as pointerEvents from '@interactjs/pointer-events'\nimport reflow from '@interactjs/reflow'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window) {\n scope.init(window)\n\n interact.use(interactablePreventDefault)\n\n // pointerEvents\n interact.use(pointerEvents)\n\n // inertia\n interact.use(inertia)\n\n // autoStart, hold\n interact.use(autoStart)\n\n // drag and drop, resize, gesture\n interact.use(actions)\n\n // snap, resize, etc.\n interact.use(modifiersBase)\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type]\n\n _defaults._methods = _methods\n scope.defaults.perAction[type] = _defaults\n }\n\n // autoScroll\n interact.use(autoScroll)\n\n // reflow\n interact.use(reflow)\n\n // eslint-disable-next-line no-undef\n if (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n }\n\n return interact\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = process.env.npm_package_version\n\nexport default interact\nexport {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n return function (x, y) {\n const {\n range,\n limits = {\n left : -Infinity,\n right : Infinity,\n top : -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result = { range }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / grid[xField])\n const gridy = Math.round((y - offset.y) / grid[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y))\n }\n\n return result\n }\n}\n\nexport default createGrid\n","import grid from './grid'\n\nexport { grid }\n","import interact, { init as initInteract } from '@interactjs/interact'\nimport * as modifiers from '@interactjs/modifiers'\nimport { Modifier } from '@interactjs/modifiers/base'\nimport '@interactjs/types'\nimport extend from '@interactjs/utils/extend'\nimport * as snappers from '@interactjs/utils/snappers'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: typeof modifiers & { [key: string]: (options?) => Modifier }\n snappers?: typeof snappers & { [key: string]: any }\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n id: 'interactjs',\n install () {\n interact.modifiers = extend({}, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\n;(interact as any).default = interact // tslint:disable-line no-string-literal\n;(interact as any).init = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","\nreturn _$index_29;\n\n});\n"]} \ No newline at end of file +{"version":3,"sources":["../../scripts/minHeader.js","../../scripts/header.js","../../node_modules/browser-pack-flat/_prelude","../core/scope.ts","../core/interactions.ts","../core/Interaction.ts","../utils/domObjects.ts","../utils/arr.ts","../utils/isWindow.ts","../utils/window.ts","../utils/is.ts","../utils/browser.ts","../utils/domUtils.ts","../utils/clone.ts","../utils/pointerExtend.ts","../utils/hypot.ts","../utils/pointerUtils.ts","../utils/events.ts","../utils/extend.ts","../utils/rect.ts","../utils/getOriginXY.ts","../utils/normalizeListeners.ts","../utils/raf.ts","../utils/index.ts","../core/defaultOptions.ts","../core/Eventable.ts","../core/Interactable.ts","../core/InteractableSet.ts","../core/BaseEvent.ts","../core/InteractEvent.ts","../core/PointerInfo.ts","../core/interactionFinder.ts","../actions/drag.ts","../actions/drop/DropEvent.ts","../actions/drop/index.ts","../actions/gesture.ts","../actions/resize.ts","../actions/index.ts","../auto-scroll/index.ts","../auto-start/InteractableMethods.ts","../auto-start/base.ts","../auto-start/dragAxis.ts","../auto-start/hold.ts","../auto-start/index.ts","../core/interactablePreventDefault.ts","../dev-tools/index.ts","../modifiers/base.ts","../inertia/index.ts","../modifiers/restrict/pointer.ts","../modifiers/restrict/edges.ts","../modifiers/restrict/rect.ts","../modifiers/restrict/size.ts","../modifiers/snap/pointer.ts","../modifiers/snap/size.ts","../modifiers/snap/edges.ts","../modifiers/index.ts","../pointer-events/PointerEvent.ts","../pointer-events/base.ts","../pointer-events/holdRepeat.ts","../pointer-events/interactableTargets.ts","../pointer-events/index.ts","../reflow/index.ts","../interact/interact.ts","../interact/index.ts","../utils/snappers/grid.ts","../utils/snappers/index.ts","index.ts","../../node_modules/browser-pack-flat/_postlude"],"names":[],"mappings":"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","file":"interact.min.js","sourceRoot":"","sourcesContent":["/* interact.js 1.7.0 | https://raw.github.com/taye/interact.js/master/LICENSE */\n","/**\n * interact.js 1.7.0\n *\n * Copyright (c) 2012-2019 Taye Adeyemi \n * Released under the MIT License.\n * https://raw.github.com/taye/interact.js/master/LICENSE\n */\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.interact = f()}})(function(){var define,module,exports;\nvar createModuleFactory = function createModuleFactory(t){var e;return function(r){return e||t(e={exports:{},parent:r},e.exports),e.exports}};\n","import domObjects from '../utils/domObjects'\nimport * as utils from '../utils/index'\nimport defaults from './defaultOptions'\nimport Eventable from './Eventable'\nimport InteractableBase from './Interactable'\nimport InteractableSet from './InteractableSet'\nimport InteractEvent from './InteractEvent'\nimport interactions from './interactions'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase, options: Interact.Options }\n 'interactions:destroy': { interaction: Interact.Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\ntype ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options?: { [index: string]: any }\n}\n\nconst {\n win,\n browser,\n raf,\n events,\n} = utils\n\nexport enum ActionName {\n}\n\nexport interface Actions {\n names: ActionName[]\n methodDict: { [key: string]: string }\n eventTypes: string[]\n}\n\nexport function createScope () {\n return new Scope()\n}\n\nexport type Defaults = typeof defaults\n\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string\n install? (scope: Scope, options?: any): void\n}\n\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n listenerMaps: Array<{\n map: ListenerMap\n id: string\n }> = []\n\n browser = browser\n events = events\n utils = utils\n defaults: Defaults = utils.clone(defaults) as Defaults\n Eventable = Eventable\n actions: Actions = {\n names: [],\n methodDict: {},\n eventTypes: [],\n }\n\n InteractEvent = InteractEvent\n Interactable!: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document, options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\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: Interact.Options) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset () {\n super.unset()\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable === this) {\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n }\n\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners (map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire (name: T, arg: SignalArgs[T]): void | false {\n for (const { map: { [name]: listener } } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init (window: Window) {\n return initScope(this, window)\n }\n\n pluginIsInstalled (plugin: Plugin) {\n return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin (plugin: Plugin, options?: { [key: string]: any }) {\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) { this._plugins.map[plugin.id] = plugin }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n\n for (; index < this.listenerMaps.length; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (otherId === plugin.before) { break }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n }\n else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument (doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) { 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.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument (doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex (doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions (doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now () {\n return ((this.window as any).Date as typeof Date || Date).now()\n }\n}\n\nexport function initScope (scope: Scope, window: Window) {\n win.init(window)\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n events.init(window)\n\n scope.usePlugin(interactions)\n scope.document = window.document\n scope.window = window\n\n return scope\n}\n","import browser from '../utils/browser'\nimport domObjects from '../utils/domObjects'\nimport { nodeContains } from '../utils/domUtils'\nimport events from '../utils/events'\nimport pointerUtils from '../utils/pointerUtils'\nimport InteractionBase from './Interaction'\nimport finder, { SearchDetails } from './interactionFinder'\nimport { Scope } from './scope'\n\ndeclare module '../core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: InteractionBase[]\n listeners: { [type: string]: Interact.Listener }\n docEvents: Array<{ type: string, listener: Interact.Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown', 'pointerMove', 'pointerUp',\n 'updatePointer', 'removePointer', 'windowBlur',\n]\n\nfunction install (scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n }\n else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class Interaction extends InteractionBase {\n get pointerMoveTolerance () {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance (value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now () { return scope.now() }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new (options: { pointerType?: string, scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls () {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown ||\n interaction.pointerType !== 'touch' ||\n interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n}\n\nfunction doOnInteractions (method, scope) {\n return function (event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer = invalidPointer ||\n (scope.now() - scope.prevTouchTime < 500) ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event,\n pointerId: pointerUtils.getPointerId(event),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction (searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal ({ doc, scope, options }: Interact.SignalArgs[T], eventMethodName: 'add' | 'remove') {\n const { docEvents } = scope.interactions\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nexport default {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': arg => onDocSignal(arg, 'add'),\n 'scope:remove-document': arg => onDocSignal(arg, 'remove'),\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n","import * as utils from '../utils/index'\nimport Interactable from './Interactable'\nimport InteractEvent, { EventPhase } from './InteractEvent'\nimport PointerInfo from './PointerInfo'\nimport { ActionName } from './scope'\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy'\n}\n\nexport interface StartAction extends ActionProps {\n name: ActionName | string\n}\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = ''\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = ''\n}\n\nexport type PointerArgProps = {\n pointer: Interact.PointerType\n event: Interact.PointerEventType\n eventTarget: Interact.EventTarget\n pointerIndex: number\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: Interact.PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n pointerInfo: PointerInfo\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps<{\n pointerInfo: PointerInfo\n }>\n 'interactions:blur'\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoPhaseArg\n 'interactions:after-action-start': DoPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoPhaseArg\n 'interactions:after-action-move': DoPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoPhaseArg\n 'interactions:after-action-end': DoPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type _InteractionProxy = Pick<\nInteraction,\nkeyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nexport class Interaction {\n // current interactable being interacted with\n interactable: Interactable = null\n\n // the target element of the interactable\n element: Interact.Element = null\n rect: Interact.Rect & Interact.Size\n edges: {\n [P in keyof Interact.Rect]?: boolean\n }\n\n _scopeFire: Interact.Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name : null,\n axis : null,\n edges: null,\n }\n\n pointerType: string\n\n // keep track of added pointers\n pointers: PointerInfo[] = []\n\n // pointerdown/mousedown/touchstart event\n downEvent: Interact.PointerEventType = null\n\n downPointer: Interact.PointerType = {} as Interact.PointerType\n\n _latestPointer: {\n pointer: Interact.EventTarget\n event: Interact.PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n // previous action event\n prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n _interacting = false\n _ending = false\n _stopped = true\n _proxy: _InteractionProxy = null\n\n simulation = null\n\n get pointerMoveTolerance () {\n return 1\n }\n\n /**\n * @alias Interaction.prototype.move\n */\n doMove = utils.warnOnce(\n function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n },\n 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords = {\n // Starting InteractEvent pointer coordinates\n start: utils.pointer.newCoords(),\n // Previous native pointer move event coordinates\n prev: utils.pointer.newCoords(),\n // current native pointer move event coordinates\n cur: utils.pointer.newCoords(),\n // Change in coordinates and time of the pointer\n delta: utils.pointer.newCoords(),\n // pointer velocity\n velocity: utils.pointer.newCoords(),\n }\n\n /** */\n constructor ({ pointerType, scopeFire }: {\n pointerType?: string\n scopeFire: Interact.Scope['fire']\n }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as _InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get () { return that[key] },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n type: 'down',\n interaction: this,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param {object} action The action to be performed - drag, resize, etc.\n * @param {Interactable} target The Interactable to target\n * @param {Element} element The DOM Element to target\n * @return {object} interact\n */\n start (action: StartAction, interactable: Interactable, element: Interact.Element) {\n if (this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === ActionName.Gesture ? 2 : 1) ||\n !interactable.options[action.name].enabled) {\n return false\n }\n\n utils.copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n this._stopped = false\n this._interacting = this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: EventPhase.Start,\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget) {\n if (!this.simulation && !(this.modifiers && this.modifiers.endPrevented)) {\n this.updatePointer(pointer, event, eventTarget, false)\n utils.pointer.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now())\n }\n\n const duplicateMove = (this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y)\n\n let dx\n let dy\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = utils.hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const signalArg = {\n pointer,\n pointerIndex: this.getPointerIndex(pointer),\n event,\n type: 'move' as const,\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._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n utils.pointer.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move (signalArg?) {\n signalArg = utils.extend({\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n }, signalArg || {})\n\n signalArg.phase = EventPhase.Move\n\n this._doPhase(signalArg)\n }\n\n // End interact move events and stop auto-scroll unless simulation is running\n pointerUp (pointer: Interact.PointerType, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, curEventTarget: Interact.EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n event,\n eventTarget,\n type: type as any,\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._scopeFire('interactions:blur', { event, type: 'blur', 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._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n getPointerIndex (pointer) {\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: Interact.EventTarget, down?: boolean) {\n const id = utils.pointer.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false\n ? false\n : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(\n id,\n pointer,\n event,\n null,\n null,\n )\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n }\n else {\n pointerInfo.pointer = pointer\n }\n\n if (down) {\n this.pointerIsDown = true\n\n if (!this.interacting()) {\n utils.pointer.setCoords(this.coords.start, this.pointers.map(p => p.pointer), this._now())\n\n utils.pointer.copyCoords(this.coords.cur, this.coords.start)\n utils.pointer.copyCoords(this.coords.prev, this.coords.start)\n utils.pointer.pointerExtend(this.downPointer, pointer)\n\n this.downEvent = event\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this,\n })\n\n return pointerIndex\n }\n\n removePointer (pointer: Interact.PointerType, event: Interact.PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) { return }\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this,\n })\n\n this.pointers.splice(pointerIndex, 1)\n }\n\n _updateLatestPointer (pointer, event, eventTarget) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy () {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n _createPreparedEvent (event: Interact.PointerEventType, phase: EventPhase, preEnd?: boolean, type?: string) {\n const actionName = this.prepared.name\n\n return new InteractEvent(this, event, actionName, phase, this.element, null, preEnd, type)\n }\n\n _fireEvent (iEvent) {\n this.interactable.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n _doPhase (signalArg: Omit & { iEvent?: InteractEvent }) {\n const { event, phase, preEnd, type } = signalArg\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type)\n const { rect } = this\n\n if (rect) {\n // update the rect modifications\n const edges = this.edges || this.prepared.edges || { left: true, right: true, top: true, bottom: true }\n\n if (edges.top) { rect.top += iEvent.delta.y }\n if (edges.bottom) { rect.bottom += iEvent.delta.y }\n if (edges.left) { rect.left += iEvent.delta.x }\n if (edges.right) { rect.right += iEvent.delta.x }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n _now () { return Date.now() }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} =\n{\n init,\n document: null as any,\n DocumentFragment: null as any,\n SVGElement: null as any,\n SVGSVGElement: null as any,\n // eslint-disable-next-line no-undef\n SVGElementInstance: null as any,\n Element: null as any,\n HTMLElement: null as any,\n Event: null as any,\n Touch: null as any,\n PointerEvent: null as any,\n}\n\nfunction blank () {}\n\nexport default domObjects\n\nfunction init (window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent)\n}\n","export 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","export default thing => !!(thing && thing.Window) && (thing instanceof thing.Window)\n","import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined as Window,\n window: undefined as Window,\n getWindow,\n init,\n}\n\nexport function init (window: Window & { wrap?: (...args) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document &&\n typeof window.wrap === 'function' &&\n window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win.window = window\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined\n win.realWindow = undefined\n}\nelse {\n init(window)\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = (node.ownerDocument || node)\n\n return rootNode.defaultView || win.window\n}\n\nwin.init = init\n\nexport default win\n","// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Interact.Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n","import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n /Presto/.test(navigator.userAgent))\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n\n browser.pEventTypes = (browser.supportsPointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null)\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win, { getWindow } from './window'\n\nexport function nodeContains (parent: Node | Interact.EventTarget, child: Node | Interact.EventTarget) {\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = el => el.parentNode ? el.parentNode : el.host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Interact.Element[] | NodeListOf) {\n let deepestZoneParents = []\n let deepestZone = elements[0]\n let index = deepestZone ? 0 : -1\n let i\n let n\n\n for (i = 1; i < elements.length; i++) {\n const dropzone = elements[i]\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue\n }\n\n if (!deepestZone) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // compare zIndex of siblings\n if (dropzone.parentNode === deepestZone.parentNode) {\n const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0\n const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0\n\n if (dropzoneZIndex >= deepestZIndex) {\n deepestZone = dropzone\n index = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest dropzone\n if (!deepestZoneParents.length) {\n let parent = deepestZone\n let parentParent\n\n while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent)\n parent = parentParent\n }\n }\n\n let parent\n\n // if this element is an svg element and the current deepest is an\n // HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement &&\n dropzone instanceof domObjects.SVGElement &&\n !(dropzone instanceof domObjects.SVGSVGElement)) {\n if (dropzone === deepestZone.parentNode) {\n continue\n }\n\n parent = dropzone.ownerSVGElement\n }\n else {\n parent = dropzone\n }\n\n const dropzoneParents = []\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent)\n parent = getParent(parent)\n }\n\n n = 0\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ]\n\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone\n index = i\n deepestZoneParents = dropzoneParents\n\n break\n }\n else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n\n return index\n}\n\nexport function matchesUpTo (element: Interact.Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element)\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element)\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0])\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","import * as arr from './arr'\nimport * as is from './is'\n\nexport default function clone (source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n }\n else if (is.array(value)) {\n dest[prop] = arr.from(value)\n }\n else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nfunction pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs\n let deprecated = false\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true\n break\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop]\n }\n }\n return dest\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n moz: /(Pressure)$/,\n}\n\nexport default pointerExtend\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = timeStamp\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () { return this.coords.page },\n get client () { return this.coords.client },\n get timeStamp () { return this.coords.timeStamp },\n get pageX () { return this.coords.page.x },\n get pageY () { return this.coords.page.y },\n get clientX () { return this.coords.client.x },\n get clientY () { return this.coords.client.y },\n get pointerId () { return this.coords.pointerId },\n get target () { return this.coords.target },\n get type () { return this.coords.type },\n get pointerType () { return this.coords.pointerType },\n get buttons () { return this.coords.buttons },\n }\n\n return event as typeof event & Interact.PointerType & Interact.PointerEventType\n },\n}\n\nexport default pointerUtils\n\nexport interface MockCoords {\n page: Interact.Point\n client: Interact.Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n","import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] }\n typeCount: number\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[]\n contexts: Node[]\n listeners: Array>\n }\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n","export default function extend (dest: U, source: T): T & U {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n","import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\n\nexport function getStringOptionResult (value: any, target: Interact.HasGetRect, element) {\n if (value === 'parent') { return parentNode(element) }\n\n if (value === 'self') { return target.getRect(element) }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike (\n value: Interact.RectResolvable,\n target?: Interact.HasGetRect,\n element?: Interact.Element,\n functionArgs?: T,\n) {\n if (is.string(value)) {\n value = getStringOptionResult(value, target, element)\n }\n else if (is.func(value)) {\n value = value(...functionArgs)\n }\n\n if (is.element(value)) {\n value = getElementRect(value)\n }\n\n return value as Interact.Rect\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || (rect.left + rect.width)\n rect.bottom = rect.bottom || (rect.top + rect.height)\n }\n\n return rect\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right - rect.x)\n rect.height = rect.height || (rect.bottom - rect.y)\n }\n\n return rect\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n}\n","import { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target: Interact.HasGetRect & { options: Interact.PerActionDefaults }, element, action?) {\n const actionOptions = target.options[action]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import extend from './extend'\nimport * as is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Interact.Listener[]\n}\n\nexport default function normalize (\n type: Interact.EventTypes,\n listeners?: Interact.ListenersArg | Interact.ListenersArg[],\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n return type.reduce(\n (acc, t) => extend(acc, normalize(t, listeners, result)),\n result,\n )\n }\n\n // ({ type: fn }) -> ('', { type: fn })\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n }\n else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, result)\n }\n }\n else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map(p => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split (type: string) {\n return type.trim().split(/ +/)\n}\n","let lastTime = 0\nlet request\nlet cancel\n\nfunction init (window) {\n request = window.requestAnimationFrame\n cancel = window.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`]\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = token => clearTimeout(token)\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n}\n","import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: Interact.ActionProps, src: Interact.ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { win, arr, dom, is }\n","// tslint:disable no-empty-interface\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {\n}\n\nexport interface BaseDefaults {\n preventDefault?: 'auto' | 'never' | string\n deltaSource?: 'page' | 'client'\n context?: Interact.EventTarget\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Interact.Point | string | Interact.Element\n listeners?: Interact.Listeners\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n}\n\nexport type Options = Partial & Partial & {\n [P in keyof ActionDefaults]?: Partial\n}\n\n// export interface Options extends BaseDefaults, PerActionDefaults {}\n\nexport interface OptionsArg extends BaseDefaults, Interact.OrBoolean {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n\nexport default defaults\n","import * as arr from '../utils/arr'\nimport extend from '../utils/extend'\nimport normalize, { NormalizedListeners } from '../utils/normalizeListeners'\nimport { EventPhase, InteractEvent } from './InteractEvent'\nimport { ActionName } from './scope'\n\nfunction fireUntilImmediateStopped<\n T extends ActionName,\n P extends EventPhase,\n> (event: InteractEvent, listeners: Interact.Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) { break }\n\n listener(event)\n }\n}\n\nclass Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor (options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire (event: any) {\n let listeners\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off (type: string, listener: Interact.ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) { continue }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect (_element: Interact.Element) {\n return null\n }\n}\n\nexport default Eventable\n","import * as arr from '../utils/arr'\nimport browser from '../utils/browser'\nimport clone from '../utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '../utils/domUtils'\nimport events from '../utils/events'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\nimport normalizeListeners from '../utils/normalizeListeners'\nimport { getWindow } from '../utils/window'\nimport { ActionDefaults, Defaults, Options } from './defaultOptions'\nimport Eventable from './Eventable'\nimport { Actions } from './scope'\n\ntype IgnoreValue = string | Interact.Element | boolean\n\n/** */\nexport class Interactable implements Partial {\n protected get _defaults (): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly options!: Required\n readonly _actions: Actions\n readonly target: Interact.Target\n readonly events = new Eventable()\n readonly _context: Document | Interact.Element\n readonly _win: Window\n readonly _doc: Document\n\n /** */\n constructor (target: Interact.Target, options: any, defaultContext: Document | Interact.Element) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n\n this.set(options)\n }\n\n setOnEvents (actionName: string, phases: NonNullable) {\n if (is.func(phases.onstart)) { this.on(`${actionName}start`, phases.onstart) }\n if (is.func(phases.onmove)) { this.on(`${actionName}move`, phases.onmove) }\n if (is.func(phases.onend)) { this.on(`${actionName}end`, phases.onend) }\n if (is.func(phases.oninertiastart)) { this.on(`${actionName}inertiastart`, phases.oninertiastart) }\n\n return this\n }\n\n updatePerActionListeners (actionName, prev, cur) {\n if (is.array(prev) || is.object(prev)) {\n this.off(actionName, prev)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this.on(actionName, cur)\n }\n }\n\n setPerAction (actionName, options: Interact.OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName in options) {\n const actionOptions = this.options[actionName]\n const optionValue = options[optionName]\n const isArray = is.array(optionValue)\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue)\n }\n\n // if the option value is an array\n if (isArray) {\n actionOptions[optionName] = arr.from(optionValue)\n }\n // if the option value is an object\n else if (!isArray && is.plainObject(optionValue)) {\n // copy the object\n actionOptions[optionName] = extend(\n actionOptions[optionName] || {},\n clone(optionValue))\n\n // set anabled field to true if it exists in the defaults\n if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n actionOptions[optionName].enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n actionOptions[optionName].enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n actionOptions[optionName] = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {object} The object's bounding rectangle.\n */\n getRect (element: Interact.Element) {\n element = element || (is.element(this.target)\n ? this.target\n : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker (checker: (element: Interact.Element) => any) {\n if (is.func(checker)) {\n this.getRect = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.getRect\n\n return this\n }\n\n return this.getRect\n }\n\n _backCompatOption (optionName, newValue) {\n if (trySelector(newValue) || is.object(newValue)) {\n this.options[optionName] = newValue\n\n for (const action of this._actions.names) {\n this.options[action][optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin (newValue) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource (newValue) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context () {\n return this._context\n }\n\n inContext (element) {\n return (this._context === element.ownerDocument ||\n nodeContains(this._context, element))\n }\n\n testIgnoreAllow (\n this: Interactable,\n options: { ignoreFrom: IgnoreValue, allowFrom: IgnoreValue },\n targetNode: Node,\n eventTarget: Interact.EventTarget,\n ) {\n return (!this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget))\n }\n\n testAllow (\n this: Interactable,\n allowFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.EventTarget,\n ) {\n if (!allowFrom) { return true }\n\n if (!is.element(element)) { return false }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n }\n else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n testIgnore (\n this: Interactable,\n ignoreFrom: IgnoreValue,\n targetNode: Node,\n element: Interact.EventTarget,\n ) {\n if (!ignoreFrom || !is.element(element)) { return false }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n }\n else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire (iEvent) {\n this.events.fire(iEvent)\n\n return this\n }\n\n _onOff (method: 'on' | 'off', typeArg: Interact.EventTypes, listenerArg?: Interact.ListenersArg | null, options?: any) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const addRemove = method === 'on' ? 'add' : 'remove'\n const listeners = normalizeListeners(typeArg, listenerArg)\n\n for (let type in listeners) {\n if (type === 'wheel') { type = browser.wheelEvent }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (arr.contains(this._actions.eventTypes, type)) {\n this.events[method](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n events[`${addRemove}Delegate`](this.target, this._context, type, listener, options)\n }\n // remove listener from this Interactable's element\n else {\n (events[addRemove] as typeof events.remove)(this.target, type, listener, options)\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on (types: Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('on', types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off (types: string | string[] | Interact.EventTypes, listener?: Interact.ListenersArg, options?: any) {\n return this._onOff('off', types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set (options: Interact.OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n (this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName in this._actions.methodDict) {\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n\n this[methodName](options[actionName])\n }\n\n for (const setting in options) {\n if (is.func(this[setting])) {\n this[setting](options[setting])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n *\n * @return {interact}\n */\n unset () {\n events.remove(this.target as Node, 'all')\n\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in events.delegatedEvents) {\n const delegated = events.delegatedEvents[type]\n\n if (delegated.selectors[0] === this.target &&\n delegated.contexts[0] === this._context) {\n delegated.selectors.splice(0, 1)\n delegated.contexts.splice(0, 1)\n delegated.listeners.splice(0, 1)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegated[type] = null\n }\n }\n\n events.remove(this._context, type, events.delegateListener)\n events.remove(this._context, type, events.delegateUseCapture, true)\n }\n }\n else {\n events.remove(this.target as Node, 'all')\n }\n }\n}\n\nexport default Interactable\n","import * as arr from '../utils/arr'\nimport * as domUtils from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interact.Interactable\n target: Interact.Target\n options: Interact.OptionsArg\n win: Window\n }\n }\n}\n\nexport default class InteractableSet {\n // all set interactables\n list: Interact.Interactable[] = []\n\n selectorMap: {\n [selector: string]: Array<{ context: Document | Interact.Element, interactable: Interact.Interactable }>\n } = {}\n\n constructor (protected scope: Interact.Scope) {\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target, _context: context } = interactable\n const targetMappings = is.string(target)\n ? this.selectorMap[target]\n : target[this.scope.id]\n\n const targetIndex = targetMappings.findIndex(m => m.context === context)\n if (targetMappings[targetIndex]) {\n // Destroying mappingInfo's context and interactable\n targetMappings[targetIndex].context = null\n targetMappings[targetIndex].interactable = null\n }\n targetMappings.splice(targetIndex, 1)\n },\n })\n }\n\n new (target: Interact.Target, options?: any): Interact.Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document)\n const mappingInfo = { context: interactable._context, interactable }\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) { this.selectorMap[target] = [] }\n this.selectorMap[target].push(mappingInfo)\n } else {\n if (!interactable.target[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n target[this.scope.id].push(mappingInfo)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n get (target: Interact.Target, options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const targetMappings = isSelector\n ? this.selectorMap[target as string]\n : target[this.scope.id]\n\n if (!targetMappings) { return null }\n\n const found = arr.find(\n targetMappings,\n m => m.context === context &&\n (isSelector || m.interactable.inContext(target)))\n\n return found && found.interactable\n }\n\n forEachMatch (node: Node, callback: (interactable: Interact.Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret\n\n if ((is.string(interactable.target)\n // target is a selector and the element matches\n ? (is.element(node) && domUtils.matchesSelector(node, interactable.target))\n // target is the element\n : node === interactable.target) &&\n // the element is in context\n (interactable.inContext(node))) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import Interactable from './Interactable'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class BaseEvent {\n type: string\n target: EventTarget\n currentTarget: EventTarget\n interactable: Interactable\n _interaction: Interaction\n timeStamp: any\n immediatePropagationStopped = false\n propagationStopped = false\n\n get interaction () {\n return this._interaction._proxy\n }\n\n constructor (interaction) {\n this._interaction = interaction\n }\n\n preventDefault () {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default BaseEvent\n","import extend from '../utils/extend'\nimport getOriginXY from '../utils/getOriginXY'\nimport hypot from '../utils/hypot'\nimport BaseEvent from './BaseEvent'\nimport defaults from './defaultOptions'\nimport Interaction from './Interaction'\nimport { ActionName } from './scope'\n\nexport enum EventPhase {\n Start = 'start',\n Move = 'move',\n End = 'end',\n _NONE = '',\n}\n\nexport class InteractEvent<\n T extends ActionName = any,\n P extends EventPhase = EventPhase._NONE,\n> extends BaseEvent {\n target: Interact.Element\n currentTarget: Interact.Element\n relatedTarget: Interact.Element\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Interact.Point\n client: Interact.Point\n delta: Interact.Point\n rect: Interact.FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Interact.Point\n speed: number\n swipe: ReturnType['getSwipe']>\n timeStamp: any\n // drag\n dragEnter?: Interact.Element\n dragLeave?: Interact.Element\n // resize\n axes?: 'x' | 'y' | 'xy'\n preEnd?: boolean\n\n /** */\n constructor (\n interaction: Interaction,\n event: Interact.PointerEventType,\n actionName: T,\n phase: P,\n element: Interact.Element,\n related?: Interact.Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.relatedTarget = related || null\n this.preEnd = preEnd\n this.type = type || (actionName + (phase || ''))\n this.interactable = target\n\n this.t0 = starting\n ? interaction.pointers[interaction.pointers.length - 1].downTime\n : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n }\n else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = (ending || phase === 'inertiastart') ? this.getSwipe() : null\n }\n\n get pageX () { return this.page.x }\n set pageX (value) { this.page.x = value }\n get pageY () { return this.page.y }\n set pageY (value) { this.page.y = value }\n\n get clientX () { return this.client.x }\n set clientX (value) { this.client.x = value }\n get clientY () { return this.client.y }\n set clientY (value) { this.client.y = value }\n\n get dx () { return this.delta.x }\n set dx (value) { this.delta.x = value }\n get dy () { return this.delta.y }\n set dy (value) { this.delta.y = value }\n\n get velocityX () { return this.velocity.x }\n set velocityX (value) { this.velocity.x = value }\n get velocityY () { return this.velocity.y }\n set velocityY (value) { this.velocity.y = value }\n\n getSwipe () {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 ||\n this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault () {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation () {\n this.propagationStopped = true\n }\n}\n\nexport default InteractEvent\n","/* eslint-disable @typescript-eslint/no-parameter-properties */\nexport class PointerInfo {\n constructor (\n public id: number,\n public pointer: Interact.PointerType,\n public event: Interact.PointerEventType,\n public downTime: number,\n public downTarget: Interact.EventTarget,\n ) {}\n}\n\nexport default PointerInfo\n","import * as dom from '../utils/domUtils'\n\nexport interface SearchDetails {\n pointer: Interact.PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: Interact.EventTarget\n curEventTarget: Interact.EventTarget\n scope: Interact.Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'],\n\n search (details) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n },\n\n // try to resume simulation with a new pointer\n simulationResume ({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget\n\n if (interaction.simulation && interaction.simulation.allowResume &&\n (interaction.pointerType === pointerType)) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen ({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) { continue }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer ({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle ({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && (pointerType === interaction.pointerType)) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId (interaction: Interact.Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import { ActionName, Scope } from '../core/scope'\nimport * as arr from '../utils/arr'\nimport * as is from '../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 defaults,\n } = scope\n\n scope.addListeners({\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n })\n\n Interactable.prototype.draggable = drag.draggable\n\n actions[ActionName.Drag] = drag\n actions.names.push(ActionName.Drag)\n arr.merge(actions.eventTypes, [\n 'dragstart',\n 'dragmove',\n 'draginertiastart',\n 'dragresume',\n 'dragend',\n ])\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n }\n else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move ({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\n/**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\nconst draggable: DraggableMethod = function draggable (this: Interact.Interactable, options?: Interact.DraggableOptions | boolean): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag\n}\n\nconst drag: Interact.Plugin = {\n id: 'actions/drag',\n install,\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis : 'xy',\n lockAxis : 'xy',\n } as Interact.DropzoneOptions,\n\n checker (_pointer, _event, interactable) {\n const dragOptions = interactable.options.drag\n\n return dragOptions.enabled\n ? {\n name: 'drag',\n axis: (dragOptions.lockAxis === 'start'\n ? dragOptions.startAxis\n : dragOptions.lockAxis),\n }\n : null\n },\n\n getCursor () {\n return 'move'\n },\n}\n\nexport default drag\n","import BaseEvent from '../../core/BaseEvent'\nimport Interactable from '../../core/Interactable'\nimport InteractEvent from '../../core/InteractEvent'\nimport Interaction from '../../core/Interaction'\nimport { ActionName } from '../../core/scope'\nimport * as arr from '../../utils/arr'\n\nclass DropEvent extends BaseEvent {\n target: Interact.Element\n dropzone: Interactable\n dragEvent: InteractEvent\n relatedTarget: Interact.Element\n draggable: Interactable\n timeStamp: number\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor (dropState: Interaction['dropState'], dragEvent: InteractEvent, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave'\n ? dropState.prev\n : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject () {\n const { dropState } = this._interaction\n\n if (\n (this.type !== 'dropactivate') && (\n !this.dropzone ||\n dropState.cur.dropzone !== this.dropzone ||\n dropState.cur.element !== this.target)) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(activeDrops, ({ dropzone, element }) =>\n dropzone === this.dropzone && element === this.target)\n\n dropState.activeDrops = [\n ...activeDrops.slice(0, index),\n ...activeDrops.slice(index + 1),\n ]\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n }\n else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault () {}\n\n stopPropagation () {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation () {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\nexport default DropEvent\n","import Interactable from '../../core/Interactable'\nimport InteractEvent from '../../core/InteractEvent'\nimport { Scope } from '../../core/scope'\nimport * as utils from '../../utils/index'\nimport drag from '../drag'\nimport DropEvent from './DropEvent'\n\nexport interface DropzoneMethod {\n (options: Interact.DropzoneOptions | boolean): Interact.Interactable\n (): Interact.DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n dropzone: DropzoneMethod\n dropCheck: (\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interactable,\n draggableElement: Interact.Element,\n dropElemen: Interact.Element,\n rect: any\n ) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: {\n cur: {\n dropzone: Interactable // the dropzone a drag target might be dropped into\n element: Interact.Element // the element at the time of checking\n }\n prev: {\n dropzone: Interactable // the dropzone that was recently dragged away from\n element: Interact.Element // the element at the time of checking\n }\n rejected: boolean // wheather the potential drop was rejected from a listener\n events: any // the drop events related to the current drag event\n activeDrops: Array<{\n dropzone: Interactable\n element: Interact.Element\n rect: Interact.Rect\n }>\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n drop: Interact.DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n}\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n dynamicDrop: (newValue?: boolean) => boolean | Interact.interact\n }\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n /** @lends module:interact */\n interact,\n /** @lends Interactable */\n Interactable, // eslint-disable-line no-shadow\n defaults,\n } = scope\n\n scope.usePlugin(drag)\n\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param {boolean | object | null} [options] The new options to be set.\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.dropzone = function (this: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n return dropzoneMethod(this, options)\n }\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n Interactable.prototype.dropCheck = function (this: Interact.Interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n interact.dynamicDrop = function (newValue?: boolean) {\n if (utils.is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop\n }\n\n utils.arr.merge(actions.eventTypes, [\n 'dragenter',\n 'dragleave',\n 'dropactivate',\n 'dropdeactivate',\n 'dropmove',\n 'drop',\n ])\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDrops ({ interactables }, draggableElement) {\n const drops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) { continue }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if ((utils.is.element(accept) && accept !== draggableElement) ||\n (utils.is.string(accept) &&\n !utils.dom.matchesSelector(draggableElement, accept)) ||\n (utils.is.func(accept) && !accept({ dropzone, draggableElement }))) {\n continue\n }\n\n // query for new elements if necessary\n const dropElements = utils.is.string(dropzone.target)\n ? dropzone._context.querySelectorAll(dropzone.target)\n : utils.is.array(dropzone.target) ? dropzone.target : [dropzone.target]\n\n for (const dropzoneElement of dropElements) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents (activeDrops, event) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops (scope: Scope, dragElement: Interact.Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDrops(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop ({ dropState, interactable: draggable, element: dragElement }: Partial, dragEvent, pointerEvent) {\n const validDrops = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n validDrops.push(dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect)\n ? dropzoneElement\n : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = utils.dom.indexOfDeepestElement(validDrops)\n\n return dropState.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents (interaction: Interact.Interaction, _pointerEvent, dragEvent) {\n const { dropState } = interaction\n const dropEvents = {\n enter : null,\n leave : null,\n activate : null,\n deactivate: null,\n move : null,\n drop : null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null\n dropEvents.activate.dropzone = null\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null\n dropEvents.deactivate.dropzone = null\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dropEvents.move.dragmove = dragEvent\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\nfunction fireDropEvents (interaction: Interact.Interaction, events) {\n const { dropState } = interaction\n const {\n activeDrops,\n cur,\n prev,\n } = dropState\n\n if (events.leave) { prev.dropzone.fire(events.leave) }\n if (events.move) { cur.dropzone.fire(events.move) }\n if (events.enter) { cur.dropzone.fire(events.enter) }\n if (events.drop) { cur.dropzone.fire(events.drop) }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated ({ interaction, iEvent, event }: Interact.DoPhaseArg, scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { return }\n\n const { dropState } = interaction\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected = dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod (interactable: Interact.Interactable): Interact.DropzoneOptions\nfunction dropzoneMethod (interactable: Interact.Interactable, options: Interact.DropzoneOptions | boolean)\nfunction dropzoneMethod (interactable: Interact.Interactable, options?: Interact.DropzoneOptions | boolean) {\n if (utils.is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = utils.normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n interactable.off(interactable.options.drop.listeners)\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (utils.is.func(options.ondrop)) { interactable.on('drop', options.ondrop) }\n if (utils.is.func(options.ondropactivate)) { interactable.on('dropactivate', options.ondropactivate) }\n if (utils.is.func(options.ondropdeactivate)) { interactable.on('dropdeactivate', options.ondropdeactivate) }\n if (utils.is.func(options.ondragenter)) { interactable.on('dragenter', options.ondragenter) }\n if (utils.is.func(options.ondragleave)) { interactable.on('dragleave', options.ondragleave) }\n if (utils.is.func(options.ondropmove)) { interactable.on('dropmove', options.ondropmove) }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n }\n else if (utils.is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (utils.is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod (\n interactable: Interact.Interactable,\n dragEvent: InteractEvent,\n event: Interact.PointerEventType,\n draggable: Interact.Interactable,\n draggableElement: Interact.Element,\n dropElement: Interact.Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return (interactable.options.drop.checker\n ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n : false)\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = utils.getOriginXY(draggable, draggableElement, 'drag')\n const page = utils.pointer.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = (page.x > rect.left) && (page.x < rect.right)\n const vertical = (page.y > rect.top) && (page.y < rect.bottom)\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && utils.is.number(dropOverlap)) {\n const overlapArea = (Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement)\n }\n\n return dropped\n}\n\nconst drop = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: null,\n }\n },\n\n 'interactions:after-action-start': ({ interaction, event, iEvent: dragEvent }, scope) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n // reset active dropzones\n dropState.activeDrops = null\n dropState.events = null\n dropState.activeDrops = getActiveDrops(scope, interaction.element)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n }\n },\n\n // FIXME proper signal types\n 'interactions:action-move': onEventCreated,\n 'interactions:action-end': onEventCreated,\n\n 'interactions:after-action-move': function fireDropAfterMove ({ interaction }) {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n interaction.dropState.events = {}\n },\n\n 'interactions:after-action-end': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n fireDropEvents(interaction, interaction.dropState.events)\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') { return }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null\n dropState.events = null\n dropState.cur.dropzone = null\n dropState.cur.element = null\n dropState.prev.dropzone = null\n dropState.prev.element = null\n dropState.rejected = false\n }\n },\n },\n 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 '../core/InteractEvent'\nimport { ActionName, Scope } from '../core/scope'\nimport * as utils from '../utils/index'\n\nexport type GesturableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable: GesturableMethod\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n gesture: Interact.GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Gesture]?: typeof gesture\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Gesture = 'gesture'\n }\n}\n\n(ActionName as any).Gesture = 'gesture'\n\nexport interface GestureEvent extends Interact.InteractEvent {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Interact.Rect // enclosing box of all points\n touches: Interact.PointerType[]\n}\n\nexport interface GestureSignalArg extends Interact.DoPhaseArg {\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 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 actions[ActionName.Gesture] = gesture\n actions.names.push(ActionName.Gesture)\n utils.arr.merge(actions.eventTypes, [\n 'gesturestart',\n 'gesturemove',\n 'gestureend',\n ])\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nconst gesture = {\n id: 'actions/gesture',\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n },\n\n defaults: {\n },\n\n checker (_pointer, _event, _interactable, _element, interaction: { pointers: { length: number } }) {\n if (interaction.pointers.length >= 2) {\n return { name: 'gesture' }\n }\n\n return null\n },\n\n getCursor () {\n return ''\n },\n}\n\nfunction updateGestureProps ({ interaction, iEvent, event, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') { return }\n\n const pointers = interaction.pointers.map(p => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n }\n else if (ending || event instanceof InteractEvent) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n }\n else {\n iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource)\n iEvent.box = utils.pointer.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (utils.is.number(iEvent.scale) &&\n iEvent.scale !== Infinity &&\n !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nexport default gesture\n","import { Interaction } from '../core/Interaction'\nimport { ActionName, Scope } from '../core/scope'\nimport * as arr from '../utils/arr'\nimport * as dom from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\nexport type ResizableMethod = Interact.ActionMethod\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable: ResizableMethod\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n resizeRects: {\n start: Interact.FullRect\n current: Interact.Rect\n inverted: Interact.FullRect\n previous: Interact.FullRect\n delta: Interact.FullRect\n }\n resizeStartAspectRatio: number\n }\n\n interface ActionProps {\n edges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n _linkedEdges?: { [edge in 'top' | 'left' | 'bottom' | 'right']?: boolean }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n resize: Interact.ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Actions {\n [ActionName.Resize]?: typeof resize\n }\n\n // eslint-disable-next-line no-shadow\n enum ActionName {\n Resize = 'resize'\n }\n}\n\n(ActionName as any).Resize = 'resize'\n\nexport interface ResizeEvent extends Interact.InteractEvent {\n deltaRect?: Interact.FullRect\n edges?: Interact.ActionProps['edges']\n}\n\nfunction install (scope: Scope) {\n const {\n actions,\n browser,\n /** @lends Interactable */\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @return {boolean | Interactable} A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n Interactable.prototype.resizable = function (this: Interact.Interactable, options: Interact.ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as ResizableMethod\n\n actions[ActionName.Resize] = resize\n actions.names.push(ActionName.Resize)\n arr.merge(actions.eventTypes, [\n 'resizestart',\n 'resizemove',\n 'resizeinertiastart',\n 'resizeresume',\n 'resizeend',\n ])\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nconst resize = {\n id: 'actions/resize',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': arg => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': arg => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as Interact.ResizableOptions,\n\n checker (\n _pointer: Interact.PointerType,\n _event: Interact.PointerEventType,\n interactable: Interact.Interactable,\n element: Interact.Element,\n interaction: Interaction,\n rect: Interact.Rect,\n ) {\n if (!rect) { return null }\n\n const page = extend({}, interaction.coords.cur.page)\n const options = interactable.options\n\n if (options.resize.enabled) {\n const resizeOptions = options.resize\n const resizeEdges: { [edge: string]: boolean } = { left: false, right: false, top: false, bottom: false }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || this.defaultMargin)\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n return {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n }\n else {\n const right = options.resize.axis !== 'y' && page.x > (rect.right - this.defaultMargin)\n const bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - this.defaultMargin)\n\n if (right || bottom) {\n return {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n }\n\n return null\n },\n\n cursors: null as ReturnType,\n\n getCursor ({ edges, axis, name }: Interact.ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n }\n else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n defaultMargin: null as number,\n}\n\nfunction resizable (interactable: Interact.Interactable, options: Interact.OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n }\n else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n }\n else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge (\n name: string,\n value: any,\n page: Interact.Point,\n element: Node,\n interactableElement: Interact.Element,\n rect: Interact.Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) { return false }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, (name === 'left' || name === 'right' ? width : height) / 2)\n\n if (width < 0) {\n if (name === 'left') { name = 'right' }\n else if (name === 'right') { name = 'left' }\n }\n if (height < 0) {\n if (name === 'top') { name = 'bottom' }\n else if (name === 'bottom') { name = 'top' }\n }\n\n if (name === 'left') { return page.x < ((width >= 0 ? rect.left : rect.right) + margin) }\n if (name === 'top') { return page.y < ((height >= 0 ? rect.top : rect.bottom) + margin) }\n\n if (name === 'right') { return page.x > ((width >= 0 ? rect.right : rect.left) - margin) }\n if (name === 'bottom') { return page.y > ((height >= 0 ? rect.bottom : rect.top) - margin) }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) { return false }\n\n return is.element(value)\n // the value is an element to use as a resize handle\n ? value === element\n // otherwise check if element matches value as selector\n : dom.matchesUpTo(element, value, interactableElement)\n}\n\nfunction initCursors (browser: typeof import ('@interactjs/utils/browser').default) {\n return (browser.isIe9 ? {\n x : 'e-resize',\n y : 's-resize',\n xy: 'se-resize',\n\n top : 'n-resize',\n left : 'w-resize',\n bottom : 's-resize',\n right : 'e-resize',\n topleft : 'se-resize',\n bottomright: 'se-resize',\n topright : 'ne-resize',\n bottomleft : 'ne-resize',\n } : {\n x : 'ew-resize',\n y : 'ns-resize',\n xy: 'nwse-resize',\n\n top : 'ns-resize',\n left : 'ew-resize',\n bottom : 'ns-resize',\n right : 'ew-resize',\n topleft : 'nwse-resize',\n bottomright: 'nwse-resize',\n topright : 'nesw-resize',\n bottomleft : 'nesw-resize',\n })\n}\n\nfunction start ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const startRect = extend({}, interaction.rect)\n const resizeOptions = interaction.interactable.options.resize\n\n /*\n * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge\n * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make\n * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend\n * on the active edges and the edge being interacted with.\n */\n if (resizeOptions.square || resizeOptions.preserveAspectRatio) {\n const linkedEdges = extend({}, interaction.prepared.edges)\n\n linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom)\n linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right)\n linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top)\n linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left)\n\n interaction.prepared._linkedEdges = linkedEdges\n }\n else {\n interaction.prepared._linkedEdges = null\n }\n\n // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize\n if (resizeOptions.preserveAspectRatio) {\n interaction.resizeStartAspectRatio = startRect.width / startRect.height\n }\n\n interaction.resizeRects = {\n start : startRect,\n current : {\n left: startRect.left,\n right: startRect.right,\n top: startRect.top,\n bottom: startRect.bottom,\n },\n inverted : extend({}, startRect),\n previous : extend({}, startRect),\n delta : {\n left: 0,\n right : 0,\n width : 0,\n top : 0,\n bottom: 0,\n height: 0,\n },\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction move ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n let edges = interaction.prepared.edges\n\n // eslint-disable-next-line no-shadow\n const start = interaction.resizeRects.start\n const current = interaction.resizeRects.current\n const inverted = interaction.resizeRects.inverted\n const deltaRect = interaction.resizeRects.delta\n const previous = extend(interaction.resizeRects.previous, inverted)\n const originalEdges = edges\n\n const eventDelta = extend({}, iEvent.delta)\n\n if (resizeOptions.preserveAspectRatio || resizeOptions.square) {\n // `resize.preserveAspectRatio` takes precedence over `resize.square`\n const startAspectRatio = resizeOptions.preserveAspectRatio\n ? interaction.resizeStartAspectRatio\n : 1\n\n edges = interaction.prepared._linkedEdges\n\n if ((originalEdges.left && originalEdges.bottom) ||\n (originalEdges.right && originalEdges.top)) {\n eventDelta.y = -eventDelta.x / startAspectRatio\n }\n else if (originalEdges.left || originalEdges.right) { eventDelta.y = eventDelta.x / startAspectRatio }\n else if (originalEdges.top || originalEdges.bottom) { eventDelta.x = eventDelta.y * startAspectRatio }\n }\n\n // update the 'current' rect without modifications\n if (edges.top) { current.top += eventDelta.y }\n if (edges.bottom) { current.bottom += eventDelta.y }\n if (edges.left) { current.left += eventDelta.x }\n if (edges.right) { current.right += eventDelta.x }\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(inverted, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n let swap\n\n if (inverted.top > inverted.bottom) {\n swap = inverted.top\n\n inverted.top = inverted.bottom\n inverted.bottom = swap\n }\n if (inverted.left > inverted.right) {\n swap = inverted.left\n\n inverted.left = inverted.right\n inverted.right = swap\n }\n }\n }\n else {\n // if not invertible, restrict to minimum of 0x0 rect\n inverted.top = Math.min(current.top, start.bottom)\n inverted.bottom = Math.max(current.bottom, start.top)\n inverted.left = Math.min(current.left, start.right)\n inverted.right = Math.max(current.right, start.left)\n }\n\n inverted.width = inverted.right - inverted.left\n inverted.height = inverted.bottom - inverted.top\n\n for (const edge in inverted) {\n deltaRect[edge] = inverted[edge] - previous[edge]\n }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = inverted\n iEvent.deltaRect = deltaRect\n}\n\nfunction end ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { return }\n\n iEvent.edges = interaction.prepared.edges\n iEvent.rect = interaction.resizeRects.inverted\n iEvent.deltaRect = interaction.resizeRects.delta\n}\n\nfunction updateEventAxes ({ iEvent, interaction }: { iEvent: ResizeEvent, interaction: Interaction }) {\n if (interaction.prepared.name !== ActionName.Resize || !interaction.resizeAxes) { return }\n\n const options = interaction.interactable.options\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = iEvent.delta.y\n }\n else {\n iEvent.delta.y = iEvent.delta.x\n }\n iEvent.axes = 'xy'\n }\n else {\n iEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n iEvent.delta.y = 0\n }\n else if (interaction.resizeAxes === 'y') {\n iEvent.delta.x = 0\n }\n }\n}\n\nexport default resize\n","import { Scope } from '../core/scope'\nimport drag from './drag'\nimport drop from './drop/index'\nimport gesture from './gesture'\nimport resize from './resize'\n\nfunction install (scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n}\n\nconst id = 'actions'\n\nexport {\n id,\n install,\n gesture,\n resize,\n drag,\n drop,\n}\n","import * as domUtils from '../utils/domUtils'\nimport * as is from '../utils/is'\nimport raf from '../utils/raf'\nimport { getStringOptionResult } from '../utils/rect'\nimport { getWindow } from '../utils/window'\n\ntype Scope = import ('@interactjs/core/scope').Scope\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement\n margin?: number\n distance?: number\n interval?: number\n}\n\nfunction install (scope: Scope) {\n const {\n defaults,\n actions,\n } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.eventTypes.push('autoscroll')\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled : false,\n margin : 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed : 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null,\n i: null, // the handle returned by window.setInterval\n x: 0,\n y: 0, // Direction each pulse is to scroll in\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start (interaction: Interact.Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop () {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll () {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const options = interactable.options[autoScroll.interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n }\n else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check (interactable, actionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll && options[actionName].autoScroll.enabled\n },\n onInteractionMove ({ interaction, pointer }) {\n if (!(interaction.interacting() &&\n autoScroll.check(interaction.interactable, interaction.prepared.name))) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top\n let right\n let bottom\n let left\n\n const { interactable, element } = interaction\n const options = interactable.options[interaction.prepared.name].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n }\n else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = (right ? 1 : left ? -1 : 0)\n autoScroll.y = (bottom ? 1 : top ? -1 : 0)\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer (value, interactable, element) {\n return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n}\n\nexport function getScroll (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize (container) {\n if (is.window(container)) { container = window.document.body }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta ({ interaction, element }, func) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(\n scrollOptions.container,\n interaction.interactable,\n element,\n )\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nexport default {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n","import { warnOnce } from '../utils/index'\nimport * as is from '../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 Actions = import ('@interactjs/core/scope').Actions\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: typeof getAction\n defaultActionChecker: (pointer: any, event: any, interaction: any, element: any) => any\n styleCursor: typeof styleCursor\n actionChecker: typeof actionChecker\n ignoreFrom: (...args: any) => boolean\n allowFrom: (...args: any) => boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n pointerIsDown: boolean\n }\n}\n\nfunction install (scope: Interact.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: Interact.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: Interact.Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param {function | null} [checker] A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @return {Function | Interactable} The checker function or this Interactable\n */\n Interactable.prototype.actionChecker = actionChecker\n\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.styleCursor = styleCursor\n\n Interactable.prototype.defaultActionChecker = function (this: Interact.Interactable, pointer, event, interaction, element) {\n return defaultActionChecker(this, pointer, event, interaction, element, actions)\n }\n}\n\nfunction getAction (\n this: Interact.Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interact.Interaction,\n element: Interact.Element,\n): Interact.ActionProps {\n const action = this.defaultActionChecker(pointer, event, interaction, element)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n}\n\nfunction defaultActionChecker (\n interactable: Interact.Interactable,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n interaction: Interact.Interaction,\n element: Interact.Element,\n actions: Actions,\n) {\n const rect = interactable.getRect(element)\n const buttons = (event as MouseEvent).buttons || ({\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n })[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n let action = null\n\n for (const actionName of actions.names) {\n // check mouseButton setting if the pointer is down\n if (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options[actionName].mouseButtons) === 0) {\n continue\n }\n\n action = (actions[actionName as keyof Actions] as any).checker(pointer, event, interactable, element, interaction, rect)\n\n if (action) {\n return action\n }\n }\n}\n\nfunction styleCursor (this: Interact.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: Interact.Interactable, checker: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n","import * as utils from '../utils/index'\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n maxInteractions: (...args: any) => any\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?\n styleCursor?\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Interact.Element\n ignoreFrom?: string | Interact.Element\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons?: 0 | 1 | 2 | 4 | 16\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'autoStart:before-start': Interact.SignalArgs['interactions:move']\n 'autoStart:prepared': { interaction: Interact.Interaction }\n }\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Interact.Element\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n interact,\n defaults,\n } = scope\n\n scope.usePlugin(InteractableMethods)\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n utils.extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = newValue => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n }\n}\n\nfunction prepareOnDown ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope) {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Interact.Element, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove (arg: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\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.fire('autoStart:before-start', arg)\n\n const { interactable } = interaction\n\n if (interaction.prepared.name && interactable) {\n // check manualStart and interaction limit\n if (interactable.options[interaction.prepared.name].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n interaction.stop()\n }\n else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n}\n\nfunction clearCursorOnStop ({ interaction }: { interaction: Interact.Interaction }, scope: Interact.Scope) {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: Interact.ActionProps,\n interactable: Interact.Interactable,\n element: Interact.Element,\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interact.Interaction,\n pointer,\n event,\n matches: Interact.Interactable[],\n matchElements: Interact.Element[],\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) { continue }\n\n const action = validateAction(\n matchAction,\n match,\n matchElement,\n eventTarget,\n scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interact.Interaction,\n pointer: Interact.PointerType,\n event: Interact.PointerEventType,\n eventTarget: Interact.EventTarget,\n scope: Interact.Scope,\n) {\n let matches = []\n let matchElements = []\n\n let element = eventTarget\n\n function pushMatches (interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (utils.is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)\n\n if (actionInfo.action &&\n !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = utils.dom.parentNode(element)\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interact.Interaction,\n { action, interactable, element }: {\n action: Interact.ActionProps\n interactable: Interact.Interactable\n element: Interact.Element\n },\n scope: Interact.Scope,\n) {\n action = action || { name: null }\n\n // clear previous target element cursor\n if (interaction.interactable && interaction.interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n\n interaction.interactable = interactable\n interaction.element = element\n utils.copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name\n ? interactable.getRect(element)\n : null\n\n setInteractionCursor(interaction, scope)\n\n scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit (interactable: Interact.Interactable, element: Interact.Element, action, scope: Interact.Scope) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) { continue }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue, scope: Interact.Scope) {\n if (utils.is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Interact.Element, cursor, scope: Interact.Scope) {\n if (scope.autoStart.cursorElement) {\n scope.autoStart.cursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interact.Interaction, scope: Interact.Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker: Interact.CursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (utils.is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n }\n else {\n cursor = scope.actions[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nexport default {\n id: 'auto-start/base',\n install,\n listeners: {\n 'interactions:down': prepareOnDown,\n 'interactions:move': (arg, scope) => {\n prepareOnMove(arg, scope)\n startOnMove(arg, scope)\n },\n 'interactions:stop': clearCursorOnStop,\n },\n before: 'ations',\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n} as Interact.Plugin\n","import { ActionName } from '../core/scope'\nimport { parentNode } from '../utils/domUtils'\nimport * as is from '../utils/is'\nimport autoStart from './base'\n\nfunction beforeStart ({ interaction, eventTarget, dx, dy }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope) {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy')\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n interaction.prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget\n\n const getDraggable = function (interactable) {\n if (interactable === interaction.interactable) { return }\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === ActionName.Drag &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n interaction.prepared.name = ActionName.Drag\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element)\n }\n }\n}\n\nfunction checkStartAxis (startAxis, interactable) {\n if (!interactable) { return false }\n\n const thisAxis = interactable.options[ActionName.Drag].startAxis\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis)\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install (scope: Interact.Scope) {\n const {\n defaults,\n } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration (interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) { return null }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nexport default {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\n","import autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n\nfunction install (scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n}\n\nconst id = 'auto-start'\n\nexport {\n id,\n install,\n autoStart,\n hold,\n dragAxis,\n}\n","import { matchesSelector, nodeContains } from '../utils/domUtils'\nimport events from '../utils/events'\nimport * as is from '../utils/is'\nimport { getWindow } from '../utils/window'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault: typeof preventDefault\n checkAndPreventDefault: (event: Event) => void\n }\n}\n\nfunction preventDefault (this: Interact.Interactable, newValue?: 'always' | 'never' | 'auto') {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n}\n\nfunction checkAndPreventDefault (interactable: Interact.Interactable, scope: Interact.Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') { return }\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent ({ interaction, event }: { interaction: Interact.Interaction, event: Interact.PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install (scope: Interact.Scope) {\n /** @lends Interactable */\n const { Interactable } = scope\n\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n * @return {string | Interactable} The current setting or this Interactable\n */\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener (event) {\n for (const interaction of scope.interactions.list) {\n if (interaction.element &&\n (interaction.element === event.target ||\n nodeContains(interaction.element, event.target))) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {}),\n}\n","/* eslint-disable no-console */\n/* global process */\nimport domObjects from '../utils/domObjects'\nimport { parentNode } from '../utils/domUtils'\nimport extend from '../utils/extend'\nimport * as is from '../utils/is'\nimport win from '../utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools?: Interact.OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: string\n text: string\n perform: (interaction: Interact.Interaction) => boolean\n getInfo: (interaction: Interact.Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = '',\n boxSizing = '',\n noListeners = '',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\n// eslint-disable-next-line no-restricted-syntax\nfunction install (scope: Interact.Scope, { logger }: { logger?: Logger } = {}) {\n const {\n Interactable,\n defaults,\n } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n}\n\nconst checks: Check[] = [\n {\n name: 'touchAction',\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [\n element,\n links.touchAction,\n ]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: 'boxSizing',\n perform (interaction) {\n const { element } = interaction\n\n return interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [\n element,\n links.boxSizing,\n ]\n },\n },\n\n {\n name: 'noListeners',\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [\n interaction.prepared.name,\n interaction.interactable,\n ]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop])\n}\n\nfunction parentHasStyle (element: Interact.Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent)\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options[interaction.prepared.name]\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n","import extend from '../utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: {\n states: ModifierState[]\n offsets: any\n startOffset: any\n startDelta: Interact.Point\n result?: {\n delta: {\n x: number\n y: number\n }\n rectDelta: {\n left: number\n right: number\n top: number\n bottom: number\n }\n coords: Interact.Point\n changed: boolean\n }\n endPrevented: boolean\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport interface Modifier<\n Defaults = any,\n State extends ModifierState = any,\n Name extends string = any\n> {\n options?: Defaults\n methods: {\n start?: (arg: ModifierArg) => void\n set: (arg: ModifierArg) => void\n beforeEnd?: (arg: ModifierArg) => boolean\n stop?: (arg: ModifierArg) => void\n }\n name?: Name\n}\n\nexport type ModifierState<\n Defaults = {},\n StateProps extends { [prop: string]: any } = {},\n Name extends string = any\n> = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg {\n interaction: Interact.Interaction\n interactable: Interact.Interactable\n phase: Interact.EventPhase\n rect: Interact.Rect\n states?: State[]\n state?: State\n element: Interact.Element\n pageCoords?: Interact.Point\n prevCoords?: Interact.Point\n coords?: Interact.Point\n startOffset?: Interact.Rect\n preEnd?: boolean\n requireEndOnly?: boolean\n}\n\nexport interface ModifierModule<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n> {\n defaults?: Defaults\n start? (arg: ModifierArg): void\n set? (arg: ModifierArg): void\n beforeEnd? (arg: ModifierArg): boolean\n stop? (arg: ModifierArg): void\n}\n\nfunction start (\n { interaction, phase }: { interaction: Interact.Interaction, phase: Interact.EventPhase },\n pageCoords: Interact.Point,\n prevCoords: Interact.Point,\n) {\n const { interactable, element } = interaction\n const modifierList = getModifierList(interaction)\n const states = prepareStates(modifierList)\n\n const rect = extend({} as { [key: string]: any }, interaction.rect)\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: ModifierArg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n prevCoords: prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page),\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nexport function startAll (arg: ModifierArg) {\n const states: ModifierState[] = arg.states\n\n for (const state of states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg)\n }\n }\n}\n\nexport function setAll (arg: ModifierArg) {\n const {\n prevCoords,\n phase,\n preEnd,\n requireEndOnly,\n rect,\n states,\n } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, rect)\n\n const result = {\n delta: { x: 0, y: 0 },\n rectDelta: {\n left : 0,\n right : 0,\n top : 0,\n bottom: 0,\n },\n coords: arg.coords,\n changed: true,\n }\n\n for (const state of states) {\n const { options } = state\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue }\n\n arg.state = state\n state.methods.set(arg)\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x\n result.delta.y = arg.coords.y - arg.pageCoords.y\n\n let rectChanged = false\n\n if (rect) {\n result.rectDelta.left = arg.rect.left - rect.left\n result.rectDelta.right = arg.rect.right - rect.right\n result.rectDelta.top = arg.rect.top - rect.top\n result.rectDelta.bottom = arg.rect.bottom - rect.bottom\n\n rectChanged = result.rectDelta.left !== 0 ||\n result.rectDelta.right !== 0 ||\n result.rectDelta.top !== 0 ||\n result.rectDelta.bottom !== 0\n }\n\n result.changed = !prevCoords || prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y ||\n rectChanged\n\n return result\n}\n\nfunction beforeMove (arg: Partial & {\n interaction: Interact.Interaction\n phase: Interact.EventPhase\n preEnd?: boolean\n skipModifiers?: number\n prevCoords?: Interact.Point\n modifiedCoords?: Interact.Point\n}): void | false {\n const { interaction, phase, preEnd, skipModifiers } = arg\n const { interactable, element } = interaction\n\n const states = skipModifiers\n ? interaction.modifiers.states.slice(skipModifiers)\n : interaction.modifiers.states\n const prevCoords = arg.prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page)\n\n const modifierResult = setAll({\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n prevCoords,\n rect: interaction.rect,\n states,\n requireEndOnly: false,\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 if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n modifierResult.coords.x += adjustment.x\n modifierResult.coords.y += adjustment.y\n modifierResult.delta.x += adjustment.x\n modifierResult.delta.y += adjustment.y\n }\n setCoords(arg)\n}\n\nfunction beforeEnd (arg: Interact.DoPhaseArg & { noPreEnd?: boolean, state?: ModifierState }): 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 as unknown as ModifierArg)\n\n if (endResult === false) {\n interaction.modifiers.endPrevented = true\n return false\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true })\n didPreEnd = true\n }\n }\n}\n\nfunction stop (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase }) {\n const { interaction } = arg\n const states = interaction.modifiers.states\n\n if (!states || !states.length) {\n return\n }\n\n const modifierArg: ModifierArg = extend({\n states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n }, arg as any)\n\n for (const state of states) {\n modifierArg.state = state\n\n if (state.methods.stop) { state.methods.stop(modifierArg) }\n }\n\n arg.interaction.modifiers.states = null\n arg.interaction.modifiers.endPrevented = null\n}\n\nfunction getModifierList (interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.filter(\n modifier => !modifier.options || modifier.options.enabled !== false,\n )\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type]\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n }\n })\n .filter(m => !!m)\n}\n\nexport function prepareStates (modifierList: Modifier[]) {\n const states: ModifierState[] = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return states\n}\n\nexport function setCoords (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase, rect?: Interact.Rect }) {\n const { interaction, phase } = arg\n const curCoords = interaction.coords.cur\n const 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]] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = interaction.modifiers.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n\nexport function restoreCoords ({ interaction: { coords, rect, modifiers } }: { interaction: Interact.Interaction }) {\n if (!modifiers.result) { return }\n\n const { startDelta } = modifiers\n const { delta: curDelta, rectDelta } = modifiers.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n}\n\nfunction shouldDo (options, preEnd?: boolean, requireEndOnly?: boolean, phase?: string) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly || options.alwaysOnEnd) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string\n> (\n module: ModifierModule,\n name?: Name,\n) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options: Defaults = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = { options, methods, name }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport default {\n id: 'modifiers/base',\n install: scope => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets: {},\n states: null,\n result: null,\n endPrevented: false,\n startDelta: null,\n }\n },\n\n 'interactions:before-action-start': arg => {\n start(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page)\n setCoords(arg)\n },\n\n 'interactions:action-resume': arg => {\n stop(arg)\n start(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords)\n beforeMove(arg)\n },\n\n 'interactions:after-action-move': restoreCoords,\n 'interactions:before-action-move': beforeMove,\n\n 'interactions:after-action-start': restoreCoords,\n\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': stop,\n },\n before: 'ations',\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 '../core/InteractEvent'\nimport modifiers, { restoreCoords, setCoords } from '../modifiers/base'\nimport * as utils from '../utils/index'\nimport raf from '../utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Resume = 'resume',\n InertiaStart = 'inertiastart',\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: {\n active: boolean\n smoothEnd: boolean\n allowResume: boolean\n\n startEvent?: Interact.InteractEvent\n upCoords: {\n page: Interact.Point\n client: Interact.Point\n timeStamp: number\n }\n\n xe?: number\n ye?: number\n sx?: number\n sy?: number\n\n t0?: number\n te?: number\n v0?: number\n vx0?: number\n vy0?: number\n duration?: number\n modifiedXe?: number\n modifiedYe?: number\n\n lambda_v0?: number // eslint-disable-line camelcase\n one_ve_v0?: number // eslint-disable-line camelcase\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n } | boolean // FIXME\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:action-resume': {\n interaction: Interact.Interaction\n phase: EventPhase.Resume\n }\n }\n}\n\n(EventPhase as any).Resume = 'resume'\n;(EventPhase as any).InertiaStart = 'inertiastart'\n\nfunction install (scope: Interact.Scope) {\n const {\n defaults,\n } = scope\n\n scope.usePlugin(modifiers)\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 (\n { interaction, event, pointer, eventTarget }: Interact.SignalArgs['interactions:down'],\n scope: Interact.Scope,\n) {\n const state = interaction.inertia\n\n // Check if the down event hits the current inertia target\n if (state.active) {\n let element = eventTarget\n\n // climb up the DOM tree from the event target\n while (utils.is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n // stop inertia\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n\n // update pointers to the down event's coordinates\n interaction.updatePointer(pointer as Interact.PointerType, event as Interact.PointerEventType, eventTarget, true)\n utils.pointer.setCoords(\n interaction.coords.cur,\n interaction.pointers.map(p => p.pointer),\n interaction._now(),\n )\n\n // fire appropriate signals\n const signalArg = {\n interaction,\n phase: EventPhase.Resume as const,\n }\n\n scope.fire('interactions:action-resume', signalArg)\n\n // fire a reume event\n const resumeEvent = new scope.InteractEvent(\n interaction, event as Interact.PointerEventType, interaction.prepared.name, EventPhase.Resume, interaction.element)\n\n interaction._fireEvent(resumeEvent)\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n break\n }\n\n element = utils.dom.parentNode(element)\n }\n }\n}\n\nfunction release (\n { interaction, event, noPreEnd }: Interact.DoPhaseArg & { noPreEnd?: boolean },\n scope: Interact.Scope,\n) {\n const state = interaction.inertia\n\n if (!interaction.interacting() ||\n (interaction.simulation && interaction.simulation.active) ||\n noPreEnd) {\n return null\n }\n\n const options = getOptions(interaction)\n\n const now = interaction._now()\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = utils.hypot(velocityClient.x, velocityClient.y)\n\n let smoothEnd = false\n let modifierResult: ReturnType\n\n // check if inertia should be started\n const inertiaPossible = (options && options.enabled &&\n interaction.prepared.name !== 'gesture' &&\n event !== state.startEvent)\n\n const inertia = (inertiaPossible &&\n (now - interaction.coords.cur.timeStamp) < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed)\n\n const modifierArg = {\n interaction,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: interaction.rect,\n pageCoords: interaction.coords.cur.page,\n states: inertiaPossible && interaction.modifiers.states.map(\n modifierStatus => utils.extend({}, modifierStatus),\n ),\n preEnd: true,\n prevCoords: null,\n requireEndOnly: null,\n phase: EventPhase.InertiaStart,\n }\n\n // smoothEnd\n if (inertiaPossible && !inertia) {\n modifierArg.prevCoords = interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.prevEvent.page\n modifierArg.requireEndOnly = false\n modifierResult = modifiers.setAll(modifierArg)\n\n if (modifierResult.changed) {\n smoothEnd = true\n }\n }\n\n if (!(inertia || smoothEnd)) { return null }\n\n utils.pointer.copyCoords(state.upCoords, interaction.coords.cur)\n\n setCoords(modifierArg)\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 restoreCoords(modifierArg)\n\n state.t0 = now\n\n state.active = true\n state.allowResume = options.allowResume\n interaction.simulation = state\n\n interaction.interactable.fire(state.startEvent)\n\n if (inertia) {\n state.vx0 = interaction.coords.velocity.client.x\n state.vy0 = interaction.coords.velocity.client.y\n state.v0 = pointerSpeed\n\n calcInertia(interaction, state)\n\n utils.extend(modifierArg.pageCoords, interaction.coords.cur.page)\n\n modifierArg.pageCoords.x += state.xe\n modifierArg.pageCoords.y += state.ye\n modifierArg.prevCoords = null\n modifierArg.requireEndOnly = true\n\n modifierResult = modifiers.setAll(modifierArg)\n\n state.modifiedXe += modifierResult.delta.x\n state.modifiedYe += modifierResult.delta.y\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.smoothEnd = true\n state.xe = modifierResult.delta.x\n state.ye = modifierResult.delta.y\n\n state.sx = state.sy = 0\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n\n return false\n}\n\nfunction stop ({ interaction }: Interact.DoPhaseArg) {\n const state = interaction.inertia\n if (state.active) {\n raf.cancel(state.timeout)\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction calcInertia (interaction: Interact.Interaction, state) {\n const options = getOptions(interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / state.v0) / lambda\n\n state.x0 = interaction.prevEvent.page.x\n state.y0 = interaction.prevEvent.page.y\n state.t0 = state.startEvent.timeStamp / 1000\n state.sx = state.sy = 0\n\n state.modifiedXe = state.xe = (state.vx0 - inertiaDur) / lambda\n state.modifiedYe = state.ye = (state.vy0 - inertiaDur) / lambda\n state.te = inertiaDur\n\n state.lambda_v0 = lambda / state.v0\n state.one_ve_v0 = 1 - options.endSpeed / state.v0\n}\n\nfunction inertiaTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n utils.pointer.setCoordDeltas(interaction.coords.delta, interaction.coords.prev, interaction.coords.cur)\n utils.pointer.setCoordVelocity(interaction.coords.velocity, interaction.coords.delta)\n\n const state = interaction.inertia\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = interaction._now() / 1000 - state.t0\n\n if (t < state.te) {\n const progress = 1 - (Math.exp(-lambda * t) - state.lambda_v0) / state.one_ve_v0\n\n if (state.modifiedXe === state.xe && state.modifiedYe === state.ye) {\n state.sx = state.xe * progress\n state.sy = state.ye * progress\n }\n else {\n const quadPoint = utils.getQuadraticCurvePoint(\n 0, 0,\n state.xe, state.ye,\n state.modifiedXe, state.modifiedYe,\n progress)\n\n state.sx = quadPoint.x\n state.sy = quadPoint.y\n }\n\n interaction.move()\n\n state.timeout = raf.request(() => inertiaTick(interaction))\n }\n else {\n state.sx = state.modifiedXe\n state.sy = state.modifiedYe\n\n interaction.move()\n interaction.end(state.startEvent)\n state.active = false\n interaction.simulation = null\n }\n\n utils.pointer.copyCoords(interaction.coords.prev, interaction.coords.cur)\n}\n\nfunction smothEndTick (interaction: Interact.Interaction) {\n updateInertiaCoords(interaction)\n\n const state = interaction.inertia\n const t = interaction._now() - state.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n state.sx = utils.easeOutQuad(t, 0, state.xe, duration)\n state.sy = utils.easeOutQuad(t, 0, state.ye, duration)\n\n interaction.move()\n\n state.timeout = raf.request(() => smothEndTick(interaction))\n }\n else {\n state.sx = state.xe\n state.sy = state.ye\n\n interaction.move()\n interaction.end(state.startEvent)\n\n state.smoothEnd =\n state.active = false\n interaction.simulation = null\n }\n}\n\nfunction updateInertiaCoords (interaction: Interact.Interaction) {\n const state = interaction.inertia\n\n // return if inertia isn't running\n if (!state.active) { return }\n\n const pageUp = state.upCoords.page\n const clientUp = state.upCoords.client\n\n utils.pointer.setCoords(interaction.coords.cur, [{\n pageX : pageUp.x + state.sx,\n pageY : pageUp.y + state.sy,\n clientX: clientUp.x + state.sx,\n clientY: clientUp.y + state.sy,\n }], interaction._now())\n}\n\nfunction getOptions ({ interactable, prepared }: Interact.Interaction) {\n return interactable &&\n interactable.options &&\n prepared.name &&\n interactable.options[prepared.name].inertia\n}\n\nexport default {\n id: 'inertia',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = {\n active : false,\n smoothEnd : false,\n allowResume: false,\n upCoords : {} as any,\n timeout : null,\n }\n },\n\n 'interactions:before-action-end': release,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n },\n before: 'modifiers/base',\n calcInertia,\n inertiaTick,\n smothEndTick,\n updateInertiaCoords,\n}\n","import extend from '../../utils/extend'\nimport * as is from '../../utils/is'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierModule, ModifierState } from '../base'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: Interact.RectResolvable<[number, number, Interact.Interaction]>\n // what part of self is allowed to drag over\n elementRect: Interact.Rect\n offset: Interact.Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Interact.Rect = extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }, options.offset || {})\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = (restriction.right - restriction.left) - rect.width\n const heightDiff = (restriction.bottom - restriction.top) - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - (rect.width * elementRect.left)\n offset.top += startOffset.top - (rect.height * elementRect.top)\n\n offset.right += startOffset.right - (rect.width * (1 - elementRect.right))\n offset.bottom += startOffset.bottom - (rect.height * (1 - elementRect.bottom))\n }\n\n state.offset = offset\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) { return }\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect (value, interaction, coords?: Interact.Point) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default restrict\n","// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport extend from '../../utils/extend'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport { getRestrictionRect, RestrictOptions } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, state }: ModifierArg) {\n const { options } = state\n const startOffset = interaction.modifiers.startOffset\n let offset\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { offset, options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || {} as Interact.Rect\n const outer = getRestrictionRect(options.outer, interaction, page) || {} as Interact.Rect\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default restrictEdges\n","import extend from '../../utils/extend'\nimport restrictPointer from './pointer'\n\nconst defaults = extend({\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n}, restrictPointer.defaults)\n\nconst restrictRect = {\n start: restrictPointer.start,\n set: restrictPointer.set,\n defaults,\n}\n\nexport default restrictRect\n","import extend from '../../utils/extend'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrictEdges, { RestrictEdgesState } from './edges'\nimport { getRestrictionRect, RestrictOptions } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n max?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState =\n RestrictEdgesState & ModifierState\n\nfunction set (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted)\n\n const minSize = rectUtils.tlbrToXywh(getRestrictionRect(options.min, interaction, arg.coords)) || noMin\n const maxSize = rectUtils.tlbrToXywh(getRestrictionRect(options.max, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default restrictSize\n","import * as utils from '../../utils/index'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface SnapPosition {\n x: number\n y: number\n range?: number\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: Interact.Interaction,\n offset: Interact.Point,\n index: number\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[]\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Interact.Point[]\n // startCoords = offset snapping from drag start page position\n offset: Interact.Point | Interact.RectResolvable<[Interact.Interaction]> | 'startCoords'\n offsetWithOrigin?: boolean\n origin: Interact.RectResolvable<[Interact.Element]> | Interact.Point\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const offsets = []\n const origin = options.offsetWithOrigin\n ? getOrigin(arg)\n : { x: 0, y: 0 }\n\n let snapOffset\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const relativePoints = options.relativePoints || []\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index]\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n })\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset))\n }\n\n state.offsets = offsets\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = utils.extend({}, coords)\n const targets = []\n let target\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n state.realX = page.x\n state.realY = page.y\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n targets.push({\n x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: utils.is.number(target.range) ? target.range : options.range,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n }\n\n for (let i = 0, len = targets.length; i < len; i++) {\n target = targets[i]\n\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = utils.hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.dx = dx\n closest.dy = dy\n\n state.range = range\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const { element } = arg.interaction\n const optionsOrigin = utils.rect.rectToXY(\n utils.rect.resolveRectLike(arg.state.options.origin as any, null, null, [element]),\n )\n const origin = optionsOrigin || utils.getOriginXY(\n arg.interactable,\n element,\n arg.interaction.prepared.name,\n )\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range : Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default snap\n","// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '../../utils/extend'\nimport * as is from '../../utils/is'\nimport { ModifierArg } from '../base'\nimport snap, { SnapOptions, SnapState } from './pointer'\n\nexport type SnapSizeOptions = Pick<\nSnapOptions,\n'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'\n>\n\nfunction start (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [{\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of (options.targets || [])) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n snap.set(arg)\n\n state.options = options\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default snapSize\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * @example\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n */\n\nimport clone from '../../utils/clone'\nimport extend from '../../utils/extend'\nimport { ModifierArg } from '../base'\nimport { SnapState } from './pointer'\nimport snapSize, { SnapSizeOptions } from './size'\n\nfunction start (arg: ModifierArg) {\n const edges = arg.interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nfunction set (arg) {\n return snapSize.set(arg)\n}\n\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults) as SnapSizeOptions, {\n offset: { x: 0, y: 0 },\n } as unknown),\n}\n\nexport default snapEdges\n","import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictRectModule from './restrict/rect'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictRect = makeModifier(restrictRectModule, 'restrictRect')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n","import BaseEvent from '../core/BaseEvent'\nimport pointerUtils from '../utils/pointerUtils'\n\n/** */\nexport default class PointerEvent extends BaseEvent {\n type: T\n originalEvent: Interact.PointerEventType | PointerEvent\n pointerId: number\n pointerType: string\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n\n /** */\n constructor (\n type: T,\n pointer: Interact.PointerType | PointerEvent,\n event: Interact.PointerEventType | PointerEvent,\n eventTarget: Interact.EventTarget,\n interaction: Interact.Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double = !!(interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500)\n }\n else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n}\n","import { PerActionDefaults } from '../core/defaultOptions'\nimport Eventable from '../core/Eventable'\nimport Interaction from '../core/Interaction'\nimport { Scope } from '../core/scope'\nimport * as utils from '../utils/index'\nimport PointerEvent from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Interact.Point | string | Interact.Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n}\n\nconst pointerEvents = {\n id: 'pointer-events/base',\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n}\n\nfunction fire (\n arg: {\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Interact.Scope,\n) {\n const {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n targets = collectEventTargets(arg, scope),\n } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n (i + 1) < targets.length && targets[i + 1].node !== pointerEvent.currentTarget)) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n }, scope)\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }: {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n type: T\n}, scope: Interact.Scope) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents: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 addInteractionProps ({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo ({ down, pointerInfo }: Interact.SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold ({ interaction, pointerIndex }) {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n}\n\nfunction moveAndClearHold (\n { interaction, pointer, event, eventTarget, duplicate }: Interact.SignalArgs['interactions:move'],\n scope: Interact.Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicate && (!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: eventTarget as Interact.Element,\n type: 'move',\n }, scope)\n }\n}\n\nfunction downAndStartHold ({ interaction, pointer, event, eventTarget, pointerIndex }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope) {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) { return }\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n }, scope)\n }, minDuration)\n}\n\nfunction tapAfterUp ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:up'], scope: Interact.Scope) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install (scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n}\n\nexport default pointerEvents\n","import basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Interact.Scope) {\n scope.usePlugin(basePlugin)\n\n const {\n pointerEvents,\n } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.push('holdrepeat')\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: Interact.SignalArgs['pointerEvents:fired'],\n scope: Interact.Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) { return }\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) { return }\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n }, scope)\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nexport default {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n acc[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n },\n ),\n} as Interact.Plugin\n","import { Scope } from '../core/scope'\nimport { merge } from '../utils/arr'\nimport extend from '../utils/extend'\n\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 } = scope\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: Interact.Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nconst plugin: Interact.Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({\n targets,\n node,\n type,\n eventTarget,\n }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Interact.Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n","import pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nfunction install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n}\n\nconst id = 'pointer-events'\n\nexport { id, pointerEvents, holdRepeat, interactableTargets, install }\n","import Interactable from '../core/Interactable'\nimport { EventPhase } from '../core/InteractEvent'\nimport { ActionProps, Interaction } from '../core/Interaction'\nimport { Scope } from '../core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '../utils/index'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: () => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Reflow = 'reflow',\n }\n}\n\n(EventPhase as any).Reflow = 'reflow'\n\nexport function install (scope: Scope) {\n const {\n actions,\n /** @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 /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope)\n }\n}\n\nfunction reflow (interactable: Interactable, action: ActionProps, scope: Scope): Promise {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect)\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow (scope: Scope, interactable: Interactable, element: Interact.Element, action: ActionProps, event: any) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: EventPhase.Reflow,\n }\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prepared = extend({}, action)\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n\n interaction._doPhase(signalArg)\n\n const reflowPromise = (win.window as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === EventPhase.Reflow) {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n} as Interact.Plugin\n","/** @module interact */\n\nimport { Options } from '../core/defaultOptions'\nimport Interactable from '../core/Interactable'\nimport { Scope } from '../core/scope'\nimport browser from '../utils/browser'\nimport events from '../utils/events'\nimport * as utils from '../utils/index'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n interact: InteractStatic\n }\n}\n\nexport interface InteractStatic {\n (target: Interact.Target, options?: Options): Interactable\n on: typeof on\n pointerMoveTolerance: typeof pointerMoveTolerance\n stop: typeof stop\n supportsPointerEvent: typeof supportsPointerEvent\n supportsTouch: typeof supportsTouch\n debug: typeof debug\n off: typeof off\n isSet: typeof isSet\n use: typeof use\n getPointerAverage: typeof utils.pointer.pointerAverage\n getTouchBBox: typeof utils.pointer.touchBBox\n getTouchDistance: typeof utils.pointer.touchDistance\n getTouchAngle: typeof utils.pointer.touchAngle\n getElementRect: typeof utils.dom.getElementRect\n getElementClientRect: typeof utils.dom.getElementClientRect\n matchesSelector: typeof utils.dom.matchesSelector\n closest: typeof utils.dom.closest\n addDocument: typeof scope.addDocument\n removeDocument: typeof scope.removeDocument\n version: string\n}\n\nconst globalEvents: any = {}\nconst scope = new Scope()\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @global\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport const interact: InteractStatic = function interact (target: Interact.Target, options?: any) {\n let interactable = scope.interactables.get(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = globalEvents\n }\n\n return interactable\n} as InteractStatic\n\n/**\n * Use a plugin\n *\n * @alias module:interact.use\n *\n * @param {Object} plugin\n * @param {function} plugin.install\n * @return {interact}\n */\ninteract.use = use\nfunction use (plugin: Interact.Plugin, options?: { [key: string]: any }) {\n scope.usePlugin(plugin, options)\n\n return interact\n}\n\n/**\n * Check if an element or selector has been set with the {@link interact}\n * function\n *\n * @alias module:interact.isSet\n *\n * @param {Element} element The Element being searched for\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\ninteract.isSet = isSet\nfunction isSet (target: Interact.Element, options?: any) {\n return !!scope.interactables.get(target, options && options.context)\n}\n\n/**\n * Add a global listener for an InteractEvent or adds a DOM event to `document`\n *\n * @alias module:interact.on\n *\n * @param {string | array | object} type The types of events to listen for\n * @param {function} listener The function event (s)\n * @param {object | boolean} [options] object or useCapture flag for\n * addEventListener\n * @return {object} interact\n */\ninteract.on = on\nfunction on (type: string | Interact.EventTypes, listener: Interact.ListenersArg, options?) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of (type as any[])) {\n interact.on(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.on(prop, (type as Interact.EventTypes)[prop], listener)\n }\n\n return interact\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (utils.arr.contains(scope.actions.eventTypes, type)) {\n // if this type of event was never bound\n if (!globalEvents[type]) {\n globalEvents[type] = [listener]\n }\n else {\n globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n events.add(scope.document, type, listener as Interact.Listener, { options })\n }\n\n return interact\n}\n\n/**\n * Removes a global InteractEvent listener or DOM event from `document`\n *\n * @alias module:interact.off\n *\n * @param {string | array | object} type The types of events that were listened\n * for\n * @param {function} listener The listener function to be removed\n * @param {object | boolean} options [options] object or useCapture flag for\n * removeEventListener\n * @return {object} interact\n */\ninteract.off = off\nfunction off (type, listener, options) {\n if (utils.is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (utils.is.array(type)) {\n for (const eventType of type) {\n interact.off(eventType, listener, options)\n }\n\n return interact\n }\n\n if (utils.is.object(type)) {\n for (const prop in type) {\n interact.off(prop, type[prop], listener)\n }\n\n return interact\n }\n\n if (!utils.arr.contains(scope.actions.eventTypes, type)) {\n events.remove(scope.document, type, listener, options)\n }\n else {\n let index\n\n if (type in globalEvents &&\n (index = globalEvents[type].indexOf(listener)) !== -1) {\n globalEvents[type].splice(index, 1)\n }\n }\n\n return interact\n}\n\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.addListeners({\n 'interactable:unset': ({ interactable }) => {\n scope.interactables.list.splice(scope.interactables.list.indexOf(interactable), 1)\n\n // Stop related interactions when an Interactable is unset\n for (const interaction of scope.interactions.list) {\n if (interaction.interactable === interactable && interaction.interacting() && !interaction._ending) {\n interaction.stop()\n }\n }\n },\n})\n\ninteract.addDocument = (doc, options) => scope.addDocument(doc, options)\ninteract.removeDocument = doc => scope.removeDocument(doc)\n\nscope.interact = interact\n\nexport { scope }\nexport default interact\n","import * as actions from '../actions/index'\nimport autoScroll from '../auto-scroll/index'\nimport * as autoStart from '../auto-start/index'\nimport interactablePreventDefault from '../core/interactablePreventDefault'\nimport devTools from '../dev-tools/index'\nimport inertia from '../inertia/index'\nimport modifiersBase from '../modifiers/base'\nimport * as modifiers from '../modifiers/index'\nimport * as pointerEvents from '../pointer-events/index'\nimport reflow from '../reflow/index'\nimport interact, { scope } from './interact'\n\nexport function init (window: Window) {\n scope.init(window)\n\n interact.use(interactablePreventDefault)\n\n // pointerEvents\n interact.use(pointerEvents)\n\n // inertia\n interact.use(inertia)\n\n // snap, resize, etc.\n interact.use(modifiersBase)\n\n // autoStart, hold\n interact.use(autoStart)\n\n // drag and drop, resize, gesture\n interact.use(actions)\n\n // for backwrads compatibility\n for (const type in modifiers) {\n const { _defaults, _methods } = modifiers[type]\n\n _defaults._methods = _methods\n scope.defaults.perAction[type] = _defaults\n }\n\n // autoScroll\n interact.use(autoScroll)\n\n // reflow\n interact.use(reflow)\n\n // eslint-disable-next-line no-undef\n if (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n }\n\n return interact\n}\n\n// eslint-disable-next-line no-undef\ninteract.version = process.env.npm_package_version\n\nexport default interact\nexport {\n interact,\n actions,\n autoScroll,\n interactablePreventDefault,\n inertia,\n modifiersBase as modifiers,\n pointerEvents,\n reflow,\n}\n","function createGrid (grid: (Interact.Rect | Interact.Point) & { range?: number, limits: Interact.Rect, offset: Interact.Point }) {\n const coordFields = [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ].filter(([xField, yField]) => xField in grid || yField in grid)\n\n const gridFunc = function snapGrid (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 gridFunc._isSnapGrid = true\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n\nexport default createGrid\n","import grid from './grid'\n\nexport { grid }\n","import interact, { init as initInteract } from '../interact/index'\nimport * as modifiers from '../modifiers/index'\nimport { Modifier } from '../modifiers/base'\nimport '../types/index'\nimport extend from '../utils/extend'\nimport * as snappers from '../utils/snappers/index'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: typeof modifiers & { [key: string]: (options?) => Modifier }\n snappers?: typeof snappers & { [key: string]: any }\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n id: 'interactjs',\n install () {\n interact.modifiers = extend({}, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\n;(interact as any).default = interact // tslint:disable-line no-string-literal\n;(interact as any).init = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n","\nreturn _$index_29;\n\n});\n"]} \ No newline at end of file diff --git a/packages/interactjs/index.d.ts b/packages/interactjs/index.d.ts index 08217246b..40897ac71 100644 --- a/packages/interactjs/index.d.ts +++ b/packages/interactjs/index.d.ts @@ -1,8 +1,8 @@ -import interact from '@interactjs/interact'; -import * as modifiers from '@interactjs/modifiers'; -import { Modifier } from '@interactjs/modifiers/base'; -import '@interactjs/types'; -import * as snappers from '@interactjs/utils/snappers'; +import interact from '../interact/index'; +import * as modifiers from '../modifiers/index'; +import { Modifier } from '../modifiers/base'; +import '../types/index'; +import * as snappers from '../utils/snappers/index'; declare module '@interactjs/interact/interact' { interface InteractStatic { modifiers?: typeof modifiers & { diff --git a/packages/interactjs/index.js b/packages/interactjs/index.js index b5bc8e610..fe7255e86 100644 --- a/packages/interactjs/index.js +++ b/packages/interactjs/index.js @@ -1,27 +1,32 @@ -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'; +import interact, { init as initInteract } from "../interact/index.js"; +import * as modifiers from "../modifiers/index.js"; +import "../types/index.js"; +import extend from "../utils/extend.js"; +import * as snappers from "../utils/snappers/index.js"; + if (typeof window === 'object' && !!window) { - init(window); + init(window); } + export function init(win) { - initInteract(win); - return interact.use({ - id: 'interactjs', - install() { - interact.modifiers = extend({}, modifiers); - interact.snappers = snappers; - interact.createSnapGrid = interact.snappers.grid; - }, - }); + initInteract(win); + return interact.use({ + id: 'interactjs', + + install() { + interact.modifiers = extend({}, modifiers); + interact.snappers = snappers; + interact.createSnapGrid = interact.snappers.grid; + } + + }); } 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; + module.exports = interact; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsRUFBRSxFQUFFLElBQUksSUFBSSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRSxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFBO0FBRWxELE9BQU8sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxLQUFLLFFBQVEsTUFBTSw0QkFBNEIsQ0FBQTtBQVV0RCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUNiO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FBRSxHQUFXO0lBQy9CLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVqQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDbEIsRUFBRSxFQUFFLFlBQVk7UUFDaEIsT0FBTztZQUNMLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUMxQyxRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtZQUM1QixRQUFRLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBO1FBQ2xELENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsZUFBZSxRQUFRLENBQ3RCO0FBQUMsUUFBZ0IsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLHdDQUF3QztDQUM3RTtBQUFDLFFBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQSxDQUFDLHdDQUF3QztBQUV2RSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQzFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFBO0NBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGludGVyYWN0LCB7IGluaXQgYXMgaW5pdEludGVyYWN0IH0gZnJvbSAnQGludGVyYWN0anMvaW50ZXJhY3QnXG5pbXBvcnQgKiBhcyBtb2RpZmllcnMgZnJvbSAnQGludGVyYWN0anMvbW9kaWZpZXJzJ1xuaW1wb3J0IHsgTW9kaWZpZXIgfSBmcm9tICdAaW50ZXJhY3Rqcy9tb2RpZmllcnMvYmFzZSdcbmltcG9ydCAnQGludGVyYWN0anMvdHlwZXMnXG5pbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCAqIGFzIHNuYXBwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3NuYXBwZXJzJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvaW50ZXJhY3QvaW50ZXJhY3QnIHtcbiAgaW50ZXJmYWNlIEludGVyYWN0U3RhdGljIHtcbiAgICBtb2RpZmllcnM/OiB0eXBlb2YgbW9kaWZpZXJzICYgeyBba2V5OiBzdHJpbmddOiAob3B0aW9ucz8pID0+IE1vZGlmaWVyIH1cbiAgICBzbmFwcGVycz86IHR5cGVvZiBzbmFwcGVycyAmIHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgICBjcmVhdGVTbmFwR3JpZD86IHR5cGVvZiBzbmFwcGVycy5ncmlkXG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmICEhd2luZG93KSB7XG4gIGluaXQod2luZG93KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCAod2luOiBXaW5kb3cpIHtcbiAgaW5pdEludGVyYWN0KHdpbilcblxuICByZXR1cm4gaW50ZXJhY3QudXNlKHtcbiAgICBpZDogJ2ludGVyYWN0anMnLFxuICAgIGluc3RhbGwgKCkge1xuICAgICAgaW50ZXJhY3QubW9kaWZpZXJzID0gZXh0ZW5kKHt9LCBtb2RpZmllcnMpXG4gICAgICBpbnRlcmFjdC5zbmFwcGVycyA9IHNuYXBwZXJzXG4gICAgICBpbnRlcmFjdC5jcmVhdGVTbmFwR3JpZCA9IGludGVyYWN0LnNuYXBwZXJzLmdyaWRcbiAgICB9LFxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbnRlcmFjdFxuOyhpbnRlcmFjdCBhcyBhbnkpLmRlZmF1bHQgPSBpbnRlcmFjdCAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLXN0cmluZy1saXRlcmFsXG47KGludGVyYWN0IGFzIGFueSkuaW5pdCA9IGluaXQgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1zdHJpbmctbGl0ZXJhbFxuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgISFtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBpbnRlcmFjdFxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/interactjs/index.js.map b/packages/interactjs/index.js.map new file mode 100644 index 000000000..bf59ceb97 --- /dev/null +++ b/packages/interactjs/index.js.map @@ -0,0 +1,28 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "interact", + "init", + "initInteract", + "modifiers", + "extend", + "snappers", + "window", + "win", + "use", + "id", + "install", + "createSnapGrid", + "grid", + "default", + "module", + "exports" + ], + "mappings": "AAAA,OAAOA,QAAP,IAAmBC,IAAI,IAAIC,YAA3B;AACA,OAAO,KAAKC,SAAZ;AAEA;AACA,OAAOC,MAAP;AACA,OAAO,KAAKC,QAAZ;;AAUA,IAAI,OAAOC,MAAP,KAAkB,QAAlB,IAA8B,CAAC,CAACA,MAApC,EAA4C;AAC1CL,EAAAA,IAAI,CAACK,MAAD,CAAJ;AACD;;AAED,OAAO,SAASL,IAAT,CAAeM,GAAf,EAA4B;AACjCL,EAAAA,YAAY,CAACK,GAAD,CAAZ;AAEA,SAAOP,QAAQ,CAACQ,GAAT,CAAa;AAClBC,IAAAA,EAAE,EAAE,YADc;;AAElBC,IAAAA,OAAO,GAAI;AACTV,MAAAA,QAAQ,CAACG,SAAT,GAAqBC,MAAM,CAAC,EAAD,EAAKD,SAAL,CAA3B;AACAH,MAAAA,QAAQ,CAACK,QAAT,GAAoBA,QAApB;AACAL,MAAAA,QAAQ,CAACW,cAAT,GAA0BX,QAAQ,CAACK,QAAT,CAAkBO,IAA5C;AACD;;AANiB,GAAb,CAAP;AAQD;AAED,eAAeZ,QAAf;AACEA,QAAD,CAAkBa,OAAlB,GAA4Bb,QAA5B,CAAqC;AAArC;AACCA,QAAD,CAAkBC,IAAlB,GAAyBA,IAAzB,C,CAA8B;;AAE/B,IAAI,OAAOa,MAAP,KAAkB,QAAlB,IAA8B,CAAC,CAACA,MAApC,EAA4C;AAC1CA,EAAAA,MAAM,CAACC,OAAP,GAAiBf,QAAjB;AACD", + "sourcesContent": [ + "import interact, { init as initInteract } from '../interact/index'\nimport * as modifiers from '../modifiers/index'\nimport { Modifier } from '../modifiers/base'\nimport '../types/index'\nimport extend from '../utils/extend'\nimport * as snappers from '../utils/snappers/index'\n\ndeclare module '@interactjs/interact/interact' {\n interface InteractStatic {\n modifiers?: typeof modifiers & { [key: string]: (options?) => Modifier }\n snappers?: typeof snappers & { [key: string]: any }\n createSnapGrid?: typeof snappers.grid\n }\n}\n\nif (typeof window === 'object' && !!window) {\n init(window)\n}\n\nexport function init (win: Window) {\n initInteract(win)\n\n return interact.use({\n id: 'interactjs',\n install () {\n interact.modifiers = extend({}, modifiers)\n interact.snappers = snappers\n interact.createSnapGrid = interact.snappers.grid\n },\n })\n}\n\nexport default interact\n;(interact as any).default = interact // tslint:disable-line no-string-literal\n;(interact as any).init = init // tslint:disable-line no-string-literal\n\nif (typeof module === 'object' && !!module) {\n module.exports = interact\n}\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/base.d.ts b/packages/modifiers/base.d.ts index aac945ff9..f0f97e3f9 100644 --- a/packages/modifiers/base.d.ts +++ b/packages/modifiers/base.d.ts @@ -1,4 +1,3 @@ -import { Scope } from '@interactjs/core/scope'; declare module '@interactjs/core/scope' { interface Scope { modifiers?: any; @@ -52,7 +51,11 @@ export declare type ModifierState extends Pick { +export interface ModifierArg { + interaction: Interact.Interaction; + interactable: Interact.Interactable; + phase: Interact.EventPhase; + rect: Interact.Rect; states?: State[]; state?: State; element: Interact.Element; @@ -63,8 +66,19 @@ export interface ModifierArg extend preEnd?: boolean; requireEndOnly?: boolean; } -declare function install(scope: Scope): void; -declare function start({ interaction, phase }: Interact.SignalArg, pageCoords: Interact.Point, prevCoords: Interact.Point): { +export interface ModifierModule { + defaults?: Defaults; + start?(arg: ModifierArg): void; + set?(arg: ModifierArg): void; + beforeEnd?(arg: ModifierArg): boolean; + stop?(arg: ModifierArg): void; +} +declare function start({ interaction, phase }: { + interaction: Interact.Interaction; + phase: Interact.EventPhase; +}, pageCoords: Interact.Point, prevCoords: Interact.Point): { delta: { x: number; y: number; @@ -79,7 +93,7 @@ declare function start({ interaction, phase }: Interact.SignalArg, pageCoords: I changed: boolean; }; export declare function startAll(arg: ModifierArg): void; -export declare function setAll(arg: Partial): { +export declare function setAll(arg: ModifierArg): { delta: { x: number; y: number; @@ -93,9 +107,22 @@ export declare function setAll(arg: Partial): { coords: import("../types/types").Point; changed: boolean; }; -declare function beforeMove(arg: Interact.SignalArg): void | false; -declare function beforeEnd(arg: Interact.SignalArg): void | false; -declare function stop(arg: Interact.SignalArg): void; +declare function beforeMove(arg: Partial & { + interaction: Interact.Interaction; + phase: Interact.EventPhase; + preEnd?: boolean; + skipModifiers?: number; + prevCoords?: Interact.Point; + modifiedCoords?: Interact.Point; +}): void | false; +declare function beforeEnd(arg: Interact.DoPhaseArg & { + noPreEnd?: boolean; + state?: ModifierState; +}): void | false; +declare function stop(arg: { + interaction: Interact.Interaction; + phase: Interact.EventPhase; +}): void; declare function getModifierList(interaction: any): any; export declare function prepareStates(modifierList: Modifier[]): { options: {}; @@ -125,22 +152,32 @@ declare function getRectOffset(rect: any, coords: any): { }; export declare function makeModifier(module: { - defaults?: Defaults; - [key: string]: any; -}, name?: Name): { +}, State extends ModifierState, Name extends string>(module: ModifierModule, name?: Name): { (_options?: Partial): Modifier; _defaults: Defaults; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => void; + beforeEnd: (arg: ModifierArg) => boolean; + stop: (arg: ModifierArg) => void; }; }; declare const _default: { id: string; - install: typeof install; + install: (scope: any) => void; + listeners: { + 'interactions:new': ({ interaction }: { + interaction: any; + }) => void; + 'interactions:before-action-start': (arg: any) => void; + 'interactions:action-resume': (arg: any) => void; + 'interactions:after-action-move': typeof restoreCoords; + 'interactions:before-action-move': typeof beforeMove; + 'interactions:after-action-start': typeof restoreCoords; + 'interactions:before-action-end': typeof beforeEnd; + 'interactions:stop': typeof stop; + }; + before: string; startAll: typeof startAll; setAll: typeof setAll; prepareStates: typeof prepareStates; diff --git a/packages/modifiers/base.js b/packages/modifiers/base.js index 3ab23397d..367eff0dc 100644 --- a/packages/modifiers/base.js +++ b/packages/modifiers/base.js @@ -1,342 +1,446 @@ -import extend from '@interactjs/utils/extend'; -function install(scope) { - const { interactions, } = scope; - scope.defaults.perAction.modifiers = []; - interactions.signals.on('new', ({ interaction }) => { - interaction.modifiers = { - startOffset: { left: 0, right: 0, top: 0, bottom: 0 }, - offsets: {}, - states: null, - result: null, - endPrevented: false, - startDelta: null, - }; - }); - interactions.signals.on('before-action-start', (arg) => { - start(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page); - }); - interactions.signals.on('action-resume', (arg) => { - stop(arg); - start(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords); - beforeMove(arg); - }); - interactions.signals.on('after-action-move', restoreCoords); - interactions.signals.on('before-action-move', beforeMove); - interactions.signals.on('before-action-start', setCoords); - interactions.signals.on('after-action-start', restoreCoords); - interactions.signals.on('before-action-end', beforeEnd); - interactions.signals.on('stop', stop); -} -function start({ interaction, phase }, pageCoords, prevCoords) { - const { interactable, element } = interaction; - const modifierList = getModifierList(interaction); - const states = prepareStates(modifierList); - const rect = extend({}, interaction.rect); - if (!('width' in rect)) { - rect.width = rect.right - rect.left; - } - if (!('height' in rect)) { - rect.height = rect.bottom - rect.top; - } - const startOffset = getRectOffset(rect, pageCoords); - interaction.modifiers.startOffset = startOffset; - interaction.modifiers.startDelta = { x: 0, y: 0 }; - const arg = { - interaction, - interactable, - element, - pageCoords, - phase, - rect, - startOffset, - states, - preEnd: false, - requireEndOnly: false, - prevCoords: prevCoords || (interaction.modifiers.result - ? interaction.modifiers.result.coords - : interaction.coords.prev.page), - }; - interaction.modifiers.states = states; - interaction.modifiers.result = null; - startAll(arg); - const result = interaction.modifiers.result = setAll(arg); - return result; +import extend from "../utils/extend.js"; + +function start({ + interaction, + phase +}, pageCoords, prevCoords) { + const { + interactable, + element + } = interaction; + const modifierList = getModifierList(interaction); + const states = prepareStates(modifierList); + const rect = extend({}, interaction.rect); + + if (!('width' in rect)) { + rect.width = rect.right - rect.left; + } + + if (!('height' in rect)) { + rect.height = rect.bottom - rect.top; + } + + const startOffset = getRectOffset(rect, pageCoords); + interaction.modifiers.startOffset = startOffset; + interaction.modifiers.startDelta = { + x: 0, + y: 0 + }; + const arg = { + interaction, + interactable, + element, + pageCoords, + phase, + rect, + startOffset, + states, + preEnd: false, + requireEndOnly: false, + prevCoords: prevCoords || (interaction.modifiers.result ? interaction.modifiers.result.coords : interaction.coords.prev.page) + }; + interaction.modifiers.states = states; + interaction.modifiers.result = null; + startAll(arg); + const result = interaction.modifiers.result = setAll(arg); + return result; } + export function startAll(arg) { - const states = arg.states; - for (const state of states) { - if (state.methods.start) { - arg.state = state; - state.methods.start(arg); - } + const states = arg.states; + + for (const state of states) { + if (state.methods.start) { + arg.state = state; + state.methods.start(arg); } + } } export function setAll(arg) { - const { prevCoords, phase, preEnd, requireEndOnly, rect, states, } = arg; - arg.coords = extend({}, arg.pageCoords); - arg.rect = extend({}, rect); - const result = { - delta: { x: 0, y: 0 }, - rectDelta: { - left: 0, - right: 0, - top: 0, - bottom: 0, - }, - coords: arg.coords, - changed: true, - }; - for (const state of states) { - const { options } = state; - if (!state.methods.set || - !shouldDo(options, preEnd, requireEndOnly, phase)) { - continue; - } - arg.state = state; - state.methods.set(arg); - } - result.delta.x = arg.coords.x - arg.pageCoords.x; - result.delta.y = arg.coords.y - arg.pageCoords.y; - let rectChanged = false; - if (rect) { - result.rectDelta.left = arg.rect.left - rect.left; - result.rectDelta.right = arg.rect.right - rect.right; - result.rectDelta.top = arg.rect.top - rect.top; - result.rectDelta.bottom = arg.rect.bottom - rect.bottom; - rectChanged = result.rectDelta.left !== 0 || - result.rectDelta.right !== 0 || - result.rectDelta.top !== 0 || - result.rectDelta.bottom !== 0; + const { + prevCoords, + phase, + preEnd, + requireEndOnly, + rect, + states + } = arg; + arg.coords = extend({}, arg.pageCoords); + arg.rect = extend({}, rect); + const result = { + delta: { + x: 0, + y: 0 + }, + rectDelta: { + left: 0, + right: 0, + top: 0, + bottom: 0 + }, + coords: arg.coords, + changed: true + }; + + for (const state of states) { + const { + options + } = state; + + if (!state.methods.set || !shouldDo(options, preEnd, requireEndOnly, phase)) { + continue; } - result.changed = !prevCoords || prevCoords.x !== result.coords.x || - prevCoords.y !== result.coords.y || - rectChanged; - return result; + + arg.state = state; + state.methods.set(arg); + } + + result.delta.x = arg.coords.x - arg.pageCoords.x; + result.delta.y = arg.coords.y - arg.pageCoords.y; + let rectChanged = false; + + if (rect) { + result.rectDelta.left = arg.rect.left - rect.left; + result.rectDelta.right = arg.rect.right - rect.right; + result.rectDelta.top = arg.rect.top - rect.top; + result.rectDelta.bottom = arg.rect.bottom - rect.bottom; + rectChanged = result.rectDelta.left !== 0 || result.rectDelta.right !== 0 || result.rectDelta.top !== 0 || result.rectDelta.bottom !== 0; + } + + result.changed = !prevCoords || prevCoords.x !== result.coords.x || prevCoords.y !== result.coords.y || rectChanged; + return result; } + function beforeMove(arg) { - const { interaction, phase, preEnd, skipModifiers } = arg; - const { interactable, element } = interaction; - const states = skipModifiers - ? interaction.modifiers.states.slice(skipModifiers) - : interaction.modifiers.states; - const prevCoords = arg.prevCoords || (interaction.modifiers.result - ? interaction.modifiers.result.coords - : interaction.coords.prev.page); - const modifierResult = setAll({ - interaction, - interactable, - element, - preEnd, - phase, - pageCoords: arg.modifiedCoords || interaction.coords.cur.page, - prevCoords, - rect: interaction.rect, - states, - requireEndOnly: false, - }); - interaction.modifiers.result = modifierResult; - // don't fire an action move if a modifier would keep the event in the same - // cordinates as before - if (!modifierResult.changed && interaction.interacting()) { - return false; - } - if (arg.modifiedCoords) { - const { page } = interaction.coords.cur; - const adjustment = { - x: arg.modifiedCoords.x - page.x, - y: arg.modifiedCoords.y - page.y, - }; - modifierResult.coords.x += adjustment.x; - modifierResult.coords.y += adjustment.y; - modifierResult.delta.x += adjustment.x; - modifierResult.delta.y += adjustment.y; - } - setCoords(arg); + const { + interaction, + phase, + preEnd, + skipModifiers + } = arg; + const { + interactable, + element + } = interaction; + const states = skipModifiers ? interaction.modifiers.states.slice(skipModifiers) : interaction.modifiers.states; + const prevCoords = arg.prevCoords || (interaction.modifiers.result ? interaction.modifiers.result.coords : interaction.coords.prev.page); + const modifierResult = setAll({ + interaction, + interactable, + element, + preEnd, + phase, + pageCoords: arg.modifiedCoords || interaction.coords.cur.page, + prevCoords, + rect: interaction.rect, + states, + requireEndOnly: false + }); + interaction.modifiers.result = modifierResult; // don't fire an action move if a modifier would keep the event in the same + // cordinates as before + + if (!modifierResult.changed && interaction.interacting()) { + return false; + } + + if (arg.modifiedCoords) { + const { + page + } = interaction.coords.cur; + const adjustment = { + x: arg.modifiedCoords.x - page.x, + y: arg.modifiedCoords.y - page.y + }; + modifierResult.coords.x += adjustment.x; + modifierResult.coords.y += adjustment.y; + modifierResult.delta.x += adjustment.x; + modifierResult.delta.y += adjustment.y; + } + + setCoords(arg); } + function beforeEnd(arg) { - const { interaction, event, noPreEnd } = arg; - const states = interaction.modifiers.states; - if (noPreEnd || !states || !states.length) { - return; - } - let didPreEnd = false; - for (const state of states) { - arg.state = state; - const { options, methods } = state; - const endResult = methods.beforeEnd && methods.beforeEnd(arg); - if (endResult === false) { - interaction.modifiers.endPrevented = true; - return false; - } - // if the endOnly option is true for any modifier - if (!didPreEnd && shouldDo(options, true, true)) { - // fire a move event at the modified coordinates - interaction.move({ event, preEnd: true }); - didPreEnd = true; - } + const { + interaction, + event, + noPreEnd + } = arg; + const states = interaction.modifiers.states; + + if (noPreEnd || !states || !states.length) { + return; + } + + let didPreEnd = false; + + for (const state of states) { + arg.state = state; + const { + options, + methods + } = state; + const endResult = methods.beforeEnd && methods.beforeEnd(arg); + + if (endResult === false) { + interaction.modifiers.endPrevented = true; + return false; + } // if the endOnly option is true for any modifier + + + if (!didPreEnd && shouldDo(options, true, true)) { + // fire a move event at the modified coordinates + interaction.move({ + event, + preEnd: true + }); + didPreEnd = true; } + } } + function stop(arg) { - const { interaction } = arg; - const states = interaction.modifiers.states; - if (!states || !states.length) { - return; - } - const modifierArg = extend({ - states, - interactable: interaction.interactable, - element: interaction.element, - rect: null, - }, arg); - for (const state of states) { - modifierArg.state = state; - if (state.methods.stop) { - state.methods.stop(modifierArg); - } + const { + interaction + } = arg; + const states = interaction.modifiers.states; + + if (!states || !states.length) { + return; + } + + const modifierArg = extend({ + states, + interactable: interaction.interactable, + element: interaction.element, + rect: null + }, arg); + + for (const state of states) { + modifierArg.state = state; + + if (state.methods.stop) { + state.methods.stop(modifierArg); } - arg.interaction.modifiers.states = null; - arg.interaction.modifiers.endPrevented = false; + } + + arg.interaction.modifiers.states = null; + arg.interaction.modifiers.endPrevented = null; } + function getModifierList(interaction) { - const actionOptions = interaction.interactable.options[interaction.prepared.name]; - const actionModifiers = actionOptions.modifiers; - if (actionModifiers && actionModifiers.length) { - return actionModifiers.filter(modifier => !modifier.options || modifier.options.enabled !== false); - } - return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize'] - .map(type => { - const options = actionOptions[type]; - return options && options.enabled && { - options, - methods: options._methods, - }; - }) - .filter(m => !!m); + const actionOptions = interaction.interactable.options[interaction.prepared.name]; + const actionModifiers = actionOptions.modifiers; + + if (actionModifiers && actionModifiers.length) { + return actionModifiers.filter(modifier => !modifier.options || modifier.options.enabled !== false); + } + + return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize'].map(type => { + const options = actionOptions[type]; + return options && options.enabled && { + options, + methods: options._methods + }; + }).filter(m => !!m); } + export function prepareStates(modifierList) { - const states = []; - for (let index = 0; index < modifierList.length; index++) { - const { options, methods, name } = modifierList[index]; - if (options && options.enabled === false) { - continue; - } - states.push({ - options, - methods, - index, - name, - }); + const states = []; + + for (let index = 0; index < modifierList.length; index++) { + const { + options, + methods, + name + } = modifierList[index]; + + if (options && options.enabled === false) { + continue; } - return states; + + states.push({ + options, + methods, + index, + name + }); + } + + return states; } export function setCoords(arg) { - const { interaction, phase } = arg; - const curCoords = interaction.coords.cur; - const startCoords = interaction.coords.start; - const { result, startDelta } = interaction.modifiers; - const curDelta = result.delta; - if (phase === 'start') { - extend(interaction.modifiers.startDelta, result.delta); - } - for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) { - coordsSet.page.x += delta.x; - coordsSet.page.y += delta.y; - coordsSet.client.x += delta.x; - coordsSet.client.y += delta.y; - } - const { rectDelta } = interaction.modifiers.result; - const rect = arg.rect || interaction.rect; - rect.left += rectDelta.left; - rect.right += rectDelta.right; - rect.top += rectDelta.top; - rect.bottom += rectDelta.bottom; - rect.width = rect.right - rect.left; - rect.height = rect.bottom - rect.top; + const { + interaction, + phase + } = arg; + const curCoords = interaction.coords.cur; + const startCoords = interaction.coords.start; + const { + result, + startDelta + } = interaction.modifiers; + const curDelta = result.delta; + + if (phase === 'start') { + extend(interaction.modifiers.startDelta, result.delta); + } + + for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) { + coordsSet.page.x += delta.x; + coordsSet.page.y += delta.y; + coordsSet.client.x += delta.x; + coordsSet.client.y += delta.y; + } + + const { + rectDelta + } = interaction.modifiers.result; + const rect = arg.rect || interaction.rect; + rect.left += rectDelta.left; + rect.right += rectDelta.right; + rect.top += rectDelta.top; + rect.bottom += rectDelta.bottom; + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; } -export function restoreCoords({ interaction: { coords, rect, modifiers } }) { - if (!modifiers.result) { - return; - } - const { startDelta } = modifiers; - const { delta: curDelta, rectDelta } = modifiers.result; - const coordsAndDeltas = [ - [coords.start, startDelta], - [coords.cur, curDelta], - ]; - for (const [coordsSet, delta] of coordsAndDeltas) { - coordsSet.page.x -= delta.x; - coordsSet.page.y -= delta.y; - coordsSet.client.x -= delta.x; - coordsSet.client.y -= delta.y; - } - rect.left -= rectDelta.left; - rect.right -= rectDelta.right; - rect.top -= rectDelta.top; - rect.bottom -= rectDelta.bottom; +export function restoreCoords({ + interaction: { + coords, + rect, + modifiers + } +}) { + if (!modifiers.result) { + return; + } + + const { + startDelta + } = modifiers; + const { + delta: curDelta, + rectDelta + } = modifiers.result; + const coordsAndDeltas = [[coords.start, startDelta], [coords.cur, curDelta]]; + + for (const [coordsSet, delta] of coordsAndDeltas) { + coordsSet.page.x -= delta.x; + coordsSet.page.y -= delta.y; + coordsSet.client.x -= delta.x; + coordsSet.client.y -= delta.y; + } + + rect.left -= rectDelta.left; + rect.right -= rectDelta.right; + rect.top -= rectDelta.top; + rect.bottom -= rectDelta.bottom; } + function shouldDo(options, preEnd, requireEndOnly, phase) { - return options - ? options.enabled !== false && - (preEnd || !options.endOnly) && - (!requireEndOnly || options.endOnly || options.alwaysOnEnd) && - (options.setStart || phase !== 'start') - : !requireEndOnly; + return options ? options.enabled !== false && (preEnd || !options.endOnly) && (!requireEndOnly || options.endOnly || options.alwaysOnEnd) && (options.setStart || phase !== 'start') : !requireEndOnly; } + function getRectOffset(rect, coords) { - return rect - ? { - left: coords.x - rect.left, - top: coords.y - rect.top, - right: rect.right - coords.x, - bottom: rect.bottom - coords.y, - } - : { - left: 0, - top: 0, - right: 0, - bottom: 0, - }; + return rect ? { + left: coords.x - rect.left, + top: coords.y - rect.top, + right: rect.right - coords.x, + bottom: rect.bottom - coords.y + } : { + left: 0, + top: 0, + right: 0, + bottom: 0 + }; } + export function makeModifier(module, name) { - const { defaults } = module; - const methods = { - start: module.start, - set: module.set, - beforeEnd: module.beforeEnd, - stop: module.stop, - }; - const modifier = (_options) => { - const options = (_options || {}); - options.enabled = options.enabled !== false; - // add missing defaults to options - for (const prop in defaults) { - if (!(prop in options)) { - options[prop] = defaults[prop]; - } - } - const m = { options, methods, name }; - return m; - }; - if (name && typeof name === 'string') { - // for backwrads compatibility - modifier._defaults = defaults; - modifier._methods = methods; + const { + defaults + } = module; + const methods = { + start: module.start, + set: module.set, + beforeEnd: module.beforeEnd, + stop: module.stop + }; + + const modifier = _options => { + const options = _options || {}; + options.enabled = options.enabled !== false; // add missing defaults to options + + for (const prop in defaults) { + if (!(prop in options)) { + options[prop] = defaults[prop]; + } } - return modifier; + + const m = { + options, + methods, + name + }; + return m; + }; + + if (name && typeof name === 'string') { + // for backwrads compatibility + modifier._defaults = defaults; + modifier._methods = methods; + } + + return modifier; } export default { - id: 'modifiers/base', - install, - startAll, - setAll, - prepareStates, - start, - beforeMove, - beforeEnd, - stop, - shouldDo, - getModifierList, - getRectOffset, - makeModifier, + id: 'modifiers/base', + install: scope => { + scope.defaults.perAction.modifiers = []; + }, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.modifiers = { + startOffset: { + left: 0, + right: 0, + top: 0, + bottom: 0 + }, + offsets: {}, + states: null, + result: null, + endPrevented: false, + startDelta: null + }; + }, + 'interactions:before-action-start': arg => { + start(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page); + setCoords(arg); + }, + 'interactions:action-resume': arg => { + stop(arg); + start(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords); + beforeMove(arg); + }, + 'interactions:after-action-move': restoreCoords, + 'interactions:before-action-move': beforeMove, + 'interactions:after-action-start': restoreCoords, + 'interactions:before-action-end': beforeEnd, + 'interactions:stop': stop + }, + before: 'ations', + startAll, + setAll, + prepareStates, + start, + beforeMove, + beforeEnd, + stop, + shouldDo, + getModifierList, + getRectOffset, + makeModifier }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFtRjdDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLFlBQVksR0FDYixHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFdkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQ2pELFdBQVcsQ0FBQyxTQUFTLEdBQUc7WUFDdEIsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUNyRCxPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLElBQUk7WUFDWixZQUFZLEVBQUUsS0FBSztZQUNuQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQXVCLEVBQUUsRUFBRTtRQUN6RSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2pGLENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBdUIsRUFBRSxFQUFFO1FBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtR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QUFFO1lBQzNCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUMvQjtTQUNGO1FBRUQsTUFBTSxDQUFDLEdBQW9DLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUVyRSxPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUMsQ0FBQTtJQUVELElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNwQyw4QkFBOEI7UUFDOUIsUUFBUSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUE7UUFDN0IsUUFBUSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7S0FDNUI7SUFFRCxPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsZUFBZTtJQUNiLEVBQUUsRUFBRSxnQkFBZ0I7SUFDcEIsT0FBTztJQUNQLFFBQVE7SUFDUixNQUFNO0lBQ04sYUFBYTtJQUNiLEtBQUs7SUFDTCxVQUFVO0lBQ1YsU0FBUztJQUNULElBQUk7SUFDSixRQUFRO0lBQ1IsZUFBZTtJQUNmLGFBQWE7SUFDYixZQUFZO0NBQ2IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9zY29wZScge1xuICBpbnRlcmZhY2UgU2NvcGUge1xuICAgIG1vZGlmaWVycz86IGFueVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGlvbiB7XG4gICAgbW9kaWZpZXJzPzoge1xuICAgICAgc3RhdGVzOiBNb2RpZmllclN0YXRlW11cbiAgICAgIG9mZnNldHM6IGFueVxuICAgICAgc3RhcnRPZmZzZXQ6IGFueVxuICAgICAgc3RhcnREZWx0YTogSW50ZXJhY3QuUG9pbnRcbiAgICAgIHJlc3VsdD86IHtcbiAgICAgICAgZGVsdGE6IHtcbiAgICAgICAgICB4OiBudW1iZXJcbiAgICAgICAgICB5OiBudW1iZXJcbiAgICAgICAgfVxuICAgICAgICByZWN0RGVsdGE6IHtcbiAgICAgICAgICBsZWZ0OiBudW1iZXJcbiAgICAgICAgICByaWdodDogbnVtYmVyXG4gICAgICAgICAgdG9wOiBudW1iZXJcbiAgICAgICAgICBib3R0b206IG51bWJlclxuICAgICAgICB9XG4gICAgICAgIGNvb3JkczogSW50ZXJhY3QuUG9pbnRcbiAgICAgICAgY2hhbmdlZDogYm9vbGVhblxuICAgICAgfVxuICAgICAgZW5kUHJldmVudGVkOiBib29sZWFuXG4gICAgfVxuICB9XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJyB7XG4gIGludGVyZmFjZSBQZXJBY3Rpb25EZWZhdWx0cyB7XG4gICAgbW9kaWZpZXJzPzogTW9kaWZpZXJbXVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZpZXI8XG4gIERlZmF1bHRzID0gYW55LFxuICBTdGF0ZSBleHRlbmRzIE1vZGlmaWVyU3RhdGUgPSBhbnksXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBhbnlcbj4ge1xuICBvcHRpb25zPzogRGVmYXVsdHNcbiAgbWV0aG9kczoge1xuICAgIHN0YXJ0PzogKGFyZzogTW9kaWZpZXJBcmc8U3RhdGU+KSA9PiB2b2lkXG4gICAgc2V0OiAoYXJnOiBNb2RpZmllckFyZzxTdGF0ZT4pID0+IHZvaWRcbiAgICBiZWZvcmVFbmQ/OiAoYXJnOiBNb2RpZmllckFyZzxTdGF0ZT4pID0+IGJvb2xlYW5cbiAgICBzdG9wPzogKGFyZzogTW9kaWZpZXJBcmc8U3RhdGU+KSA9PiB2b2lkXG4gIH1cbiAgbmFtZT86IE5hbWVcbn1cblxuZXhwb3J0IHR5cGUgTW9kaWZpZXJTdGF0ZTxcbiAgRGVmYXVsdHMgPSB7fSxcbiAgU3RhdGVQcm9wcyBleHRlbmRzIHsgW3Byb3A6IHN0cmluZ106IGFueSB9ID0ge30sXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBhbnlcbj4gPSB7XG4gIG9wdGlvbnM6IERlZmF1bHRzXG4gIG1ldGhvZHM/OiBNb2RpZmllcjxEZWZhdWx0cz5bJ21ldGhvZHMnXVxuICBpbmRleD86IG51bWJlclxuICBuYW1lPzogTmFtZVxufSAmIFN0YXRlUHJvcHNcblxuZXhwb3J0IGludGVyZmFjZSBNb2RpZmllckFyZzxTdGF0ZSBleHRlbmRzIE1vZGlmaWVyU3RhdGUgPSBNb2RpZmllclN0YXRlPiBleHRlbmRzIFBpY2s8SW50ZXJhY3QuU2lnbmFsQXJnLFxuJ2ludGVyYWN0aW9uJyB8XG4naW50ZXJhY3RhYmxlJyB8XG4ncGhhc2UnIHxcbidyZWN0J1xuPiB7XG4gIHN0YXRlcz86IFN0YXRlW11cbiAgc3RhdGU/OiBTdGF0ZVxuICBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50XG4gIHBhZ2VDb29yZHM/OiBJbnRlcmFjdC5Qb2ludFxuICBwcmV2Q29vcmRzPzogSW50ZXJhY3QuUG9pbnRcbiAgY29vcmRzPzogSW50ZXJhY3QuUG9pbnRcbiAgc3RhcnRPZmZzZXQ/OiBJbnRlcmFjdC5SZWN0XG4gIHByZUVuZD86IGJvb2xlYW5cbiAgcmVxdWlyZUVuZE9ubHk/OiBib29sZWFuXG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb25zLFxuICB9ID0gc2NvcGVcblxuICBzY29wZS5kZWZhdWx0cy5wZXJBY3Rpb24ubW9kaWZpZXJzID0gW11cblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbmV3JywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIGludGVyYWN0aW9uLm1vZGlmaWVycyA9IHtcbiAgICAgIHN0YXJ0T2Zmc2V0OiB7IGxlZnQ6IDAsIHJpZ2h0OiAwLCB0b3A6IDAsIGJvdHRvbTogMCB9LFxuICAgICAgb2Zmc2V0czoge30sXG4gICAgICBzdGF0ZXM6IG51bGwsXG4gICAgICByZXN1bHQ6IG51bGwsXG4gICAgICBlbmRQcmV2ZW50ZWQ6IGZhbHNlLFxuICAgICAgc3RhcnREZWx0YTogbnVsbCxcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tc3RhcnQnLCAoYXJnOiBJbnRlcmFjdC5TaWduYWxBcmcpID0+IHtcbiAgICBzdGFydChhcmcsIGFyZy5pbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZSwgYXJnLmludGVyYWN0aW9uLmNvb3Jkcy5wcmV2LnBhZ2UpXG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2FjdGlvbi1yZXN1bWUnLCAoYXJnOiBJbnRlcmFjdC5TaWduYWxBcmcpID0+IHtcbiAgICBzdG9wKGFyZylcbiAgICBzdGFydChhcmcsIGFyZy5pbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UsIGFyZy5pbnRlcmFjdGlvbi5tb2RpZmllcnMucmVzdWx0LmNvb3JkcylcbiAgICBiZWZvcmVNb3ZlKGFyZylcbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYWZ0ZXItYWN0aW9uLW1vdmUnLCByZXN0b3JlQ29vcmRzIGFzIGFueSlcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tbW92ZScsIGJlZm9yZU1vdmUpXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tc3RhcnQnLCBzZXRDb29yZHMpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdhZnRlci1hY3Rpb24tc3RhcnQnLCByZXN0b3JlQ29vcmRzIGFzIGFueSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignYmVmb3JlLWFjdGlvbi1lbmQnLCBiZWZvcmVFbmQpXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdzdG9wJywgc3RvcClcbn1cblxuZnVuY3Rpb24gc3RhcnQgKFxuICB7IGludGVyYWN0aW9uLCBwaGFzZSB9OiBJbnRlcmFjdC5TaWduYWxBcmcsXG4gIHBhZ2VDb29yZHM6IEludGVyYWN0LlBvaW50LFxuICBwcmV2Q29vcmRzOiBJbnRlcmFjdC5Qb2ludCxcbikge1xuICBjb25zdCB7IGludGVyYWN0YWJsZSwgZWxlbWVudCB9ID0gaW50ZXJhY3Rpb25cbiAgY29uc3QgbW9kaWZpZXJMaXN0ID0gZ2V0TW9kaWZpZXJMaXN0KGludGVyYWN0aW9uKVxuICBjb25zdCBzdGF0ZXMgPSBwcmVwYXJlU3RhdGVzKG1vZGlmaWVyTGlzdClcblxuICBjb25zdCByZWN0ID0gZXh0ZW5kKHt9LCBpbnRlcmFjdGlvbi5yZWN0KVxuXG4gIGlmICghKCd3aWR0aCcgIGluIHJlY3QpKSB7IHJlY3Qud2lkdGggID0gcmVjdC5yaWdodCAgLSByZWN0LmxlZnQgfVxuICBpZiAoISgnaGVpZ2h0JyBpbiByZWN0KSkgeyByZWN0LmhlaWdodCA9IHJlY3QuYm90dG9tIC0gcmVjdC50b3AgIH1cblxuICBjb25zdCBzdGFydE9mZnNldCA9IGdldFJlY3RPZmZzZXQocmVjdCwgcGFnZUNvb3JkcylcblxuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldFxuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhcnREZWx0YSA9IHsgeDogMCwgeTogMCB9XG5cbiAgY29uc3QgYXJnOiBNb2RpZmllckFyZzxhbnk+ID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIGludGVyYWN0YWJsZSxcbiAgICBlbGVtZW50LFxuICAgIHBhZ2VDb29yZHMsXG4gICAgcGhhc2UsXG4gICAgcmVjdCxcbiAgICBzdGFydE9mZnNldCxcbiAgICBzdGF0ZXMsXG4gICAgcHJlRW5kOiBmYWxzZSxcbiAgICByZXF1aXJlRW5kT25seTogZmFsc2UsXG4gICAgcHJldkNvb3JkczogcHJldkNvb3JkcyB8fCAoaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnJlc3VsdFxuICAgICAgPyBpbnRlcmFjdGlvbi5tb2RpZmllcnMucmVzdWx0LmNvb3Jkc1xuICAgICAgOiBpbnRlcmFjdGlvbi5jb29yZHMucHJldi5wYWdlKSxcbiAgfVxuXG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXMgPSBzdGF0ZXNcbiAgaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnJlc3VsdCA9IG51bGxcbiAgc3RhcnRBbGwoYXJnKVxuXG4gIGNvbnN0IHJlc3VsdCA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHQgPSBzZXRBbGwoYXJnKVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0QWxsIChhcmc6IE1vZGlmaWVyQXJnPGFueT4pIHtcbiAgY29uc3Qgc3RhdGVzOiBNb2RpZmllclN0YXRlW10gPSBhcmcuc3RhdGVzXG5cbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICBpZiAoc3RhdGUubWV0aG9kcy5zdGFydCkge1xuICAgICAgYXJnLnN0YXRlID0gc3RhdGVcbiAgICAgIHN0YXRlLm1ldGhvZHMuc3RhcnQoYXJnKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWxsIChhcmc6IFBhcnRpYWw8SW50ZXJhY3QuU2lnbmFsQXJnPikge1xuICBjb25zdCB7XG4gICAgcHJldkNvb3JkcyxcbiAgICBwaGFzZSxcbiAgICBwcmVFbmQsXG4gICAgcmVxdWlyZUVuZE9ubHksXG4gICAgcmVjdCxcbiAgICBzdGF0ZXMsXG4gIH0gPSBhcmdcblxuICBhcmcuY29vcmRzID0gZXh0ZW5kKHt9LCBhcmcucGFnZUNvb3JkcylcbiAgYXJnLnJlY3QgPSBleHRlbmQoe30sIHJlY3QpXG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGRlbHRhOiB7IHg6IDAsIHk6IDAgfSxcbiAgICByZWN0RGVsdGE6IHtcbiAgICAgIGxlZnQgIDogMCxcbiAgICAgIHJpZ2h0IDogMCxcbiAgICAgIHRvcCAgIDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICB9LFxuICAgIGNvb3JkczogYXJnLmNvb3JkcyxcbiAgICBjaGFuZ2VkOiB0cnVlLFxuICB9XG5cbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHN0YXRlXG5cbiAgICBpZiAoIXN0YXRlLm1ldGhvZHMuc2V0IHx8XG4gICAgICAhc2hvdWxkRG8ob3B0aW9ucywgcHJlRW5kLCByZXF1aXJlRW5kT25seSwgcGhhc2UpKSB7IGNvbnRpbnVlIH1cblxuICAgIGFyZy5zdGF0ZSA9IHN0YXRlXG4gICAgc3RhdGUubWV0aG9kcy5zZXQoYXJnKVxuICB9XG5cbiAgcmVzdWx0LmRlbHRhLnggPSBhcmcuY29vcmRzLnggLSBhcmcucGFnZUNvb3Jkcy54XG4gIHJlc3VsdC5kZWx0YS55ID0gYXJnLmNvb3Jkcy55IC0gYXJnLnBhZ2VDb29yZHMueVxuXG4gIGxldCByZWN0Q2hhbmdlZCA9IGZhbHNlXG5cbiAgaWYgKHJlY3QpIHtcbiAgICByZXN1bHQucmVjdERlbHRhLmxlZnQgICA9IGFyZy5yZWN0LmxlZnQgLSByZWN0LmxlZnRcbiAgICByZXN1bHQucmVjdERlbHRhLnJpZ2h0ICA9IGFyZy5yZWN0LnJpZ2h0IC0gcmVjdC5yaWdodFxuICAgIHJlc3VsdC5yZWN0RGVsdGEudG9wICAgID0gYXJnLnJlY3QudG9wIC0gcmVjdC50b3BcbiAgICByZXN1bHQucmVjdERlbHRhLmJvdHRvbSA9IGFyZy5yZWN0LmJvdHRvbSAtIHJlY3QuYm90dG9tXG5cbiAgICByZWN0Q2hhbmdlZCA9IHJlc3VsdC5yZWN0RGVsdGEubGVmdCAhPT0gMCB8fFxuICAgICAgcmVzdWx0LnJlY3REZWx0YS5yaWdodCAhPT0gMCB8fFxuICAgICAgcmVzdWx0LnJlY3REZWx0YS50b3AgIT09IDAgfHxcbiAgICAgIHJlc3VsdC5yZWN0RGVsdGEuYm90dG9tICE9PSAwXG4gIH1cblxuICByZXN1bHQuY2hhbmdlZCA9ICFwcmV2Q29vcmRzIHx8IHByZXZDb29yZHMueCAhPT0gcmVzdWx0LmNvb3Jkcy54IHx8XG4gICAgcHJldkNvb3Jkcy55ICE9PSByZXN1bHQuY29vcmRzLnkgfHxcbiAgICByZWN0Q2hhbmdlZFxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYmVmb3JlTW92ZSAoYXJnOiBJbnRlcmFjdC5TaWduYWxBcmcpOiB2b2lkIHwgZmFsc2Uge1xuICBjb25zdCB7IGludGVyYWN0aW9uLCBwaGFzZSwgcHJlRW5kLCBza2lwTW9kaWZpZXJzIH0gPSBhcmdcbiAgY29uc3QgeyBpbnRlcmFjdGFibGUsIGVsZW1lbnQgfSA9IGludGVyYWN0aW9uXG5cbiAgY29uc3Qgc3RhdGVzID0gc2tpcE1vZGlmaWVyc1xuICAgID8gaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXRlcy5zbGljZShza2lwTW9kaWZpZXJzKVxuICAgIDogaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXRlc1xuICBjb25zdCBwcmV2Q29vcmRzID0gYXJnLnByZXZDb29yZHMgfHwgKGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHRcbiAgICA/IGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHQuY29vcmRzXG4gICAgOiBpbnRlcmFjdGlvbi5jb29yZHMucHJldi5wYWdlKVxuXG4gIGNvbnN0IG1vZGlmaWVyUmVzdWx0ID0gc2V0QWxsKHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBpbnRlcmFjdGFibGUsXG4gICAgZWxlbWVudCxcbiAgICBwcmVFbmQsXG4gICAgcGhhc2UsXG4gICAgcGFnZUNvb3JkczogYXJnLm1vZGlmaWVkQ29vcmRzIHx8IGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZSxcbiAgICBwcmV2Q29vcmRzLFxuICAgIHJlY3Q6IGludGVyYWN0aW9uLnJlY3QsXG4gICAgc3RhdGVzLFxuICAgIHJlcXVpcmVFbmRPbmx5OiBmYWxzZSxcbiAgfSlcblxuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMucmVzdWx0ID0gbW9kaWZpZXJSZXN1bHRcblxuICAvLyBkb24ndCBmaXJlIGFuIGFjdGlvbiBtb3ZlIGlmIGEgbW9kaWZpZXIgd291bGQga2VlcCB0aGUgZXZlbnQgaW4gdGhlIHNhbWVcbiAgLy8gY29yZGluYXRlcyBhcyBiZWZvcmVcbiAgaWYgKCFtb2RpZmllclJlc3VsdC5jaGFuZ2VkICYmIGludGVyYWN0aW9uLmludGVyYWN0aW5nKCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChhcmcubW9kaWZpZWRDb29yZHMpIHtcbiAgICBjb25zdCB7IHBhZ2UgfSA9IGludGVyYWN0aW9uLmNvb3Jkcy5jdXJcbiAgICBjb25zdCBhZGp1c3RtZW50ID0ge1xuICAgICAgeDogYXJnLm1vZGlmaWVkQ29vcmRzLnggLSBwYWdlLngsXG4gICAgICB5OiBhcmcubW9kaWZpZWRDb29yZHMueSAtIHBhZ2UueSxcbiAgICB9XG5cbiAgICBtb2RpZmllclJlc3VsdC5jb29yZHMueCArPSBhZGp1c3RtZW50LnhcbiAgICBtb2RpZmllclJlc3VsdC5jb29yZHMueSArPSBhZGp1c3RtZW50LnlcbiAgICBtb2RpZmllclJlc3VsdC5kZWx0YS54ICs9IGFkanVzdG1lbnQueFxuICAgIG1vZGlmaWVyUmVzdWx0LmRlbHRhLnkgKz0gYWRqdXN0bWVudC55XG4gIH1cbiAgc2V0Q29vcmRzKGFyZylcbn1cblxuZnVuY3Rpb24gYmVmb3JlRW5kIChhcmc6IEludGVyYWN0LlNpZ25hbEFyZyk6IHZvaWQgfCBmYWxzZSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24sIGV2ZW50LCBub1ByZUVuZCB9ID0gYXJnXG4gIGNvbnN0IHN0YXRlcyA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXNcblxuICBpZiAobm9QcmVFbmQgfHwgIXN0YXRlcyB8fCAhc3RhdGVzLmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGRpZFByZUVuZCA9IGZhbHNlXG5cbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICBhcmcuc3RhdGUgPSBzdGF0ZVxuICAgIGNvbnN0IHsgb3B0aW9ucywgbWV0aG9kcyB9ID0gc3RhdGVcblxuICAgIGNvbnN0IGVuZFJlc3VsdCA9IG1ldGhvZHMuYmVmb3JlRW5kICYmIG1ldGhvZHMuYmVmb3JlRW5kKGFyZyBhcyB1bmtub3duIGFzIE1vZGlmaWVyQXJnKVxuXG4gICAgaWYgKGVuZFJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgIGludGVyYWN0aW9uLm1vZGlmaWVycy5lbmRQcmV2ZW50ZWQgPSB0cnVlXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgZW5kT25seSBvcHRpb24gaXMgdHJ1ZSBmb3IgYW55IG1vZGlmaWVyXG4gICAgaWYgKCFkaWRQcmVFbmQgJiYgc2hvdWxkRG8ob3B0aW9ucywgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIC8vIGZpcmUgYSBtb3ZlIGV2ZW50IGF0IHRoZSBtb2RpZmllZCBjb29yZGluYXRlc1xuICAgICAgaW50ZXJhY3Rpb24ubW92ZSh7IGV2ZW50LCBwcmVFbmQ6IHRydWUgfSlcbiAgICAgIGRpZFByZUVuZCA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcCAoYXJnOiBJbnRlcmFjdC5TaWduYWxBcmcpIHtcbiAgY29uc3QgeyBpbnRlcmFjdGlvbiB9ID0gYXJnXG4gIGNvbnN0IHN0YXRlcyA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXNcblxuICBpZiAoIXN0YXRlcyB8fCAhc3RhdGVzLmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgbW9kaWZpZXJBcmc6IE1vZGlmaWVyQXJnID0gZXh0ZW5kKHtcbiAgICBzdGF0ZXMsXG4gICAgaW50ZXJhY3RhYmxlOiBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUsXG4gICAgZWxlbWVudDogaW50ZXJhY3Rpb24uZWxlbWVudCxcbiAgICByZWN0OiBudWxsLFxuICB9LCBhcmcpXG5cbiAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICBtb2RpZmllckFyZy5zdGF0ZSA9IHN0YXRlXG5cbiAgICBpZiAoc3RhdGUubWV0aG9kcy5zdG9wKSB7IHN0YXRlLm1ldGhvZHMuc3RvcChtb2RpZmllckFyZykgfVxuICB9XG5cbiAgYXJnLmludGVyYWN0aW9uLm1vZGlmaWVycy5zdGF0ZXMgPSBudWxsXG4gIGFyZy5pbnRlcmFjdGlvbi5tb2RpZmllcnMuZW5kUHJldmVudGVkID0gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZ2V0TW9kaWZpZXJMaXN0IChpbnRlcmFjdGlvbikge1xuICBjb25zdCBhY3Rpb25PcHRpb25zID0gaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLm9wdGlvbnNbaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZV1cbiAgY29uc3QgYWN0aW9uTW9kaWZpZXJzID0gYWN0aW9uT3B0aW9ucy5tb2RpZmllcnNcblxuICBpZiAoYWN0aW9uTW9kaWZpZXJzICYmIGFjdGlvbk1vZGlmaWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYWN0aW9uTW9kaWZpZXJzLmZpbHRlcihcbiAgICAgIG1vZGlmaWVyID0+ICFtb2RpZmllci5vcHRpb25zIHx8IG1vZGlmaWVyLm9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcbiAgICApXG4gIH1cblxuICByZXR1cm4gWydzbmFwJywgJ3NuYXBTaXplJywgJ3NuYXBFZGdlcycsICdyZXN0cmljdCcsICdyZXN0cmljdEVkZ2VzJywgJ3Jlc3RyaWN0U2l6ZSddXG4gICAgLm1hcCh0eXBlID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBhY3Rpb25PcHRpb25zW3R5cGVdXG5cbiAgICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuZW5hYmxlZCAmJiB7XG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIG1ldGhvZHM6IG9wdGlvbnMuX21ldGhvZHMsXG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKG0gPT4gISFtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlcyAobW9kaWZpZXJMaXN0OiBNb2RpZmllcltdKSB7XG4gIGNvbnN0IHN0YXRlczogTW9kaWZpZXJTdGF0ZVtdID0gW11cblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbW9kaWZpZXJMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IHsgb3B0aW9ucywgbWV0aG9kcywgbmFtZSB9ID0gbW9kaWZpZXJMaXN0W2luZGV4XVxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkgeyBjb250aW51ZSB9XG5cbiAgICBzdGF0ZXMucHVzaCh7XG4gICAgICBvcHRpb25zLFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGluZGV4LFxuICAgICAgbmFtZSxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29vcmRzIChhcmc6IHsgaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uLCBwaGFzZTogSW50ZXJhY3QuRXZlbnRQaGFzZSwgcmVjdD86IEludGVyYWN0LlJlY3QgfSkge1xuICBjb25zdCB7IGludGVyYWN0aW9uLCBwaGFzZSB9ID0gYXJnXG4gIGNvbnN0IGN1ckNvb3JkcyA9IGludGVyYWN0aW9uLmNvb3Jkcy5jdXJcbiAgY29uc3Qgc3RhcnRDb29yZHMgPSBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnRcbiAgY29uc3QgeyByZXN1bHQsIHN0YXJ0RGVsdGEgfSA9IGludGVyYWN0aW9uLm1vZGlmaWVyc1xuICBjb25zdCBjdXJEZWx0YSA9IHJlc3VsdC5kZWx0YVxuXG4gIGlmIChwaGFzZSA9PT0gJ3N0YXJ0Jykge1xuICAgIGV4dGVuZChpbnRlcmFjdGlvbi5tb2RpZmllcnMuc3RhcnREZWx0YSwgcmVzdWx0LmRlbHRhKVxuICB9XG5cbiAgZm9yIChjb25zdCBbY29vcmRzU2V0LCBkZWx0YV0gb2YgW1tzdGFydENvb3Jkcywgc3RhcnREZWx0YV0sIFtjdXJDb29yZHMsIGN1ckRlbHRhXV0gYXMgY29uc3QpIHtcbiAgICBjb29yZHNTZXQucGFnZS54ICAgKz0gZGVsdGEueFxuICAgIGNvb3Jkc1NldC5wYWdlLnkgICArPSBkZWx0YS55XG4gICAgY29vcmRzU2V0LmNsaWVudC54ICs9IGRlbHRhLnhcbiAgICBjb29yZHNTZXQuY2xpZW50LnkgKz0gZGVsdGEueVxuICB9XG5cbiAgY29uc3QgeyByZWN0RGVsdGEgfSA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5yZXN1bHRcbiAgY29uc3QgcmVjdCA9IGFyZy5yZWN0IHx8IGludGVyYWN0aW9uLnJlY3RcblxuICByZWN0LmxlZnQgICArPSByZWN0RGVsdGEubGVmdFxuICByZWN0LnJpZ2h0ICArPSByZWN0RGVsdGEucmlnaHRcbiAgcmVjdC50b3AgICAgKz0gcmVjdERlbHRhLnRvcFxuICByZWN0LmJvdHRvbSArPSByZWN0RGVsdGEuYm90dG9tXG5cbiAgcmVjdC53aWR0aCA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnRcbiAgcmVjdC5oZWlnaHQgPSByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN0b3JlQ29vcmRzICh7IGludGVyYWN0aW9uOiB7IGNvb3JkcywgcmVjdCwgbW9kaWZpZXJzIH0gfTogeyBpbnRlcmFjdGlvbjogSW50ZXJhY3QuSW50ZXJhY3Rpb24gfSkge1xuICBpZiAoIW1vZGlmaWVycy5yZXN1bHQpIHsgcmV0dXJuIH1cblxuICBjb25zdCB7IHN0YXJ0RGVsdGEgfSA9IG1vZGlmaWVyc1xuICBjb25zdCB7IGRlbHRhOiBjdXJEZWx0YSwgcmVjdERlbHRhIH0gPSBtb2RpZmllcnMucmVzdWx0XG5cbiAgY29uc3QgY29vcmRzQW5kRGVsdGFzID0gW1xuICAgIFtjb29yZHMuc3RhcnQsIHN0YXJ0RGVsdGFdLFxuICAgIFtjb29yZHMuY3VyLCBjdXJEZWx0YV0sXG4gIF1cblxuICBmb3IgKGNvbnN0IFtjb29yZHNTZXQsIGRlbHRhXSBvZiBjb29yZHNBbmREZWx0YXMgYXMgYW55KSB7XG4gICAgY29vcmRzU2V0LnBhZ2UueCAtPSBkZWx0YS54XG4gICAgY29vcmRzU2V0LnBhZ2UueSAtPSBkZWx0YS55XG4gICAgY29vcmRzU2V0LmNsaWVudC54IC09IGRlbHRhLnhcbiAgICBjb29yZHNTZXQuY2xpZW50LnkgLT0gZGVsdGEueVxuICB9XG5cbiAgcmVjdC5sZWZ0IC09IHJlY3REZWx0YS5sZWZ0XG4gIHJlY3QucmlnaHQgLT0gcmVjdERlbHRhLnJpZ2h0XG4gIHJlY3QudG9wIC09IHJlY3REZWx0YS50b3BcbiAgcmVjdC5ib3R0b20gLT0gcmVjdERlbHRhLmJvdHRvbVxufVxuXG5mdW5jdGlvbiBzaG91bGREbyAob3B0aW9ucywgcHJlRW5kPzogYm9vbGVhbiwgcmVxdWlyZUVuZE9ubHk/OiBib29sZWFuLCBwaGFzZT86IHN0cmluZykge1xuICByZXR1cm4gb3B0aW9uc1xuICAgID8gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJlxuICAgICAgKHByZUVuZCB8fCAhb3B0aW9ucy5lbmRPbmx5KSAmJlxuICAgICAgKCFyZXF1aXJlRW5kT25seSB8fCBvcHRpb25zLmVuZE9ubHkgfHwgb3B0aW9ucy5hbHdheXNPbkVuZCkgJiZcbiAgICAgIChvcHRpb25zLnNldFN0YXJ0IHx8IHBoYXNlICE9PSAnc3RhcnQnKVxuICAgIDogIXJlcXVpcmVFbmRPbmx5XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RPZmZzZXQgKHJlY3QsIGNvb3Jkcykge1xuICByZXR1cm4gcmVjdFxuICAgID8ge1xuICAgICAgbGVmdCAgOiBjb29yZHMueCAtIHJlY3QubGVmdCxcbiAgICAgIHRvcCAgIDogY29vcmRzLnkgLSByZWN0LnRvcCxcbiAgICAgIHJpZ2h0IDogcmVjdC5yaWdodCAgLSBjb29yZHMueCxcbiAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20gLSBjb29yZHMueSxcbiAgICB9XG4gICAgOiB7XG4gICAgICBsZWZ0ICA6IDAsXG4gICAgICB0b3AgICA6IDAsXG4gICAgICByaWdodCA6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZU1vZGlmaWVyPFxuICBEZWZhdWx0cyBleHRlbmRzIHsgZW5hYmxlZD86IGJvb2xlYW4gfSxcbiAgU3RhdGUgZXh0ZW5kcyBNb2RpZmllclN0YXRlLFxuICBOYW1lIGV4dGVuZHMgc3RyaW5nXG4+IChcbiAgbW9kdWxlOiB7IGRlZmF1bHRzPzogRGVmYXVsdHMsIFtrZXk6IHN0cmluZ106IGFueSB9LFxuICBuYW1lPzogTmFtZVxuKSB7XG4gIGNvbnN0IHsgZGVmYXVsdHMgfSA9IG1vZHVsZVxuICBjb25zdCBtZXRob2RzID0ge1xuICAgIHN0YXJ0OiBtb2R1bGUuc3RhcnQsXG4gICAgc2V0OiBtb2R1bGUuc2V0LFxuICAgIGJlZm9yZUVuZDogbW9kdWxlLmJlZm9yZUVuZCxcbiAgICBzdG9wOiBtb2R1bGUuc3RvcCxcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVyID0gKF9vcHRpb25zPzogUGFydGlhbDxEZWZhdWx0cz4pID0+IHtcbiAgICBjb25zdCBvcHRpb25zOiBEZWZhdWx0cyA9IChfb3B0aW9ucyB8fCB7fSkgYXMgRGVmYXVsdHNcblxuICAgIG9wdGlvbnMuZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2VcblxuICAgIC8vIGFkZCBtaXNzaW5nIGRlZmF1bHRzIHRvIG9wdGlvbnNcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGVmYXVsdHMpIHtcbiAgICAgIGlmICghKHByb3AgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1bHRzW3Byb3BdXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbTogTW9kaWZpZXI8RGVmYXVsdHMsIFN0YXRlLCBOYW1lPiA9IHsgb3B0aW9ucywgbWV0aG9kcywgbmFtZSB9XG5cbiAgICByZXR1cm4gbVxuICB9XG5cbiAgaWYgKG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZm9yIGJhY2t3cmFkcyBjb21wYXRpYmlsaXR5XG4gICAgbW9kaWZpZXIuX2RlZmF1bHRzID0gZGVmYXVsdHNcbiAgICBtb2RpZmllci5fbWV0aG9kcyA9IG1ldGhvZHNcbiAgfVxuXG4gIHJldHVybiBtb2RpZmllclxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlkOiAnbW9kaWZpZXJzL2Jhc2UnLFxuICBpbnN0YWxsLFxuICBzdGFydEFsbCxcbiAgc2V0QWxsLFxuICBwcmVwYXJlU3RhdGVzLFxuICBzdGFydCxcbiAgYmVmb3JlTW92ZSxcbiAgYmVmb3JlRW5kLFxuICBzdG9wLFxuICBzaG91bGREbyxcbiAgZ2V0TW9kaWZpZXJMaXN0LFxuICBnZXRSZWN0T2Zmc2V0LFxuICBtYWtlTW9kaWZpZXIsXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/packages/modifiers/base.js.map b/packages/modifiers/base.js.map new file mode 100644 index 000000000..1497e09c3 --- /dev/null +++ b/packages/modifiers/base.js.map @@ -0,0 +1,110 @@ +{ + "version": 3, + "sources": [ + "base.ts" + ], + "names": [ + "extend", + "start", + "interaction", + "phase", + "pageCoords", + "prevCoords", + "interactable", + "element", + "modifierList", + "getModifierList", + "states", + "prepareStates", + "rect", + "width", + "right", + "left", + "height", + "bottom", + "top", + "startOffset", + "getRectOffset", + "modifiers", + "startDelta", + "x", + "y", + "arg", + "preEnd", + "requireEndOnly", + "result", + "coords", + "prev", + "page", + "startAll", + "setAll", + "state", + "methods", + "delta", + "rectDelta", + "changed", + "options", + "set", + "shouldDo", + "rectChanged", + "beforeMove", + "skipModifiers", + "slice", + "modifierResult", + "modifiedCoords", + "cur", + "interacting", + "adjustment", + "setCoords", + "beforeEnd", + "event", + "noPreEnd", + "length", + "didPreEnd", + "endResult", + "endPrevented", + "move", + "stop", + "modifierArg", + "actionOptions", + "prepared", + "name", + "actionModifiers", + "filter", + "modifier", + "enabled", + "map", + "type", + "_methods", + "m", + "index", + "push", + "curCoords", + "startCoords", + "curDelta", + "coordsSet", + "client", + "restoreCoords", + "coordsAndDeltas", + "endOnly", + "alwaysOnEnd", + "setStart", + "makeModifier", + "module", + "defaults", + "_options", + "prop", + "_defaults", + "id", + "install", + "scope", + "perAction", + "listeners", + "offsets", + "before" + ], + "mappings": "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", + "sourcesContent": [ + "import extend from '../utils/extend'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n modifiers?: any\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modifiers?: {\n states: ModifierState[]\n offsets: any\n startOffset: any\n startDelta: Interact.Point\n result?: {\n delta: {\n x: number\n y: number\n }\n rectDelta: {\n left: number\n right: number\n top: number\n bottom: number\n }\n coords: Interact.Point\n changed: boolean\n }\n endPrevented: boolean\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport interface Modifier<\n Defaults = any,\n State extends ModifierState = any,\n Name extends string = any\n> {\n options?: Defaults\n methods: {\n start?: (arg: ModifierArg) => void\n set: (arg: ModifierArg) => void\n beforeEnd?: (arg: ModifierArg) => boolean\n stop?: (arg: ModifierArg) => void\n }\n name?: Name\n}\n\nexport type ModifierState<\n Defaults = {},\n StateProps extends { [prop: string]: any } = {},\n Name extends string = any\n> = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg {\n interaction: Interact.Interaction\n interactable: Interact.Interactable\n phase: Interact.EventPhase\n rect: Interact.Rect\n states?: State[]\n state?: State\n element: Interact.Element\n pageCoords?: Interact.Point\n prevCoords?: Interact.Point\n coords?: Interact.Point\n startOffset?: Interact.Rect\n preEnd?: boolean\n requireEndOnly?: boolean\n}\n\nexport interface ModifierModule<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n> {\n defaults?: Defaults\n start? (arg: ModifierArg): void\n set? (arg: ModifierArg): void\n beforeEnd? (arg: ModifierArg): boolean\n stop? (arg: ModifierArg): void\n}\n\nfunction start (\n { interaction, phase }: { interaction: Interact.Interaction, phase: Interact.EventPhase },\n pageCoords: Interact.Point,\n prevCoords: Interact.Point,\n) {\n const { interactable, element } = interaction\n const modifierList = getModifierList(interaction)\n const states = prepareStates(modifierList)\n\n const rect = extend({} as { [key: string]: any }, interaction.rect)\n\n if (!('width' in rect)) { rect.width = rect.right - rect.left }\n if (!('height' in rect)) { rect.height = rect.bottom - rect.top }\n\n const startOffset = getRectOffset(rect, pageCoords)\n\n interaction.modifiers.startOffset = startOffset\n interaction.modifiers.startDelta = { x: 0, y: 0 }\n\n const arg: ModifierArg = {\n interaction,\n interactable,\n element,\n pageCoords,\n phase,\n rect,\n startOffset,\n states,\n preEnd: false,\n requireEndOnly: false,\n prevCoords: prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page),\n }\n\n interaction.modifiers.states = states\n interaction.modifiers.result = null\n startAll(arg)\n\n const result = interaction.modifiers.result = setAll(arg)\n\n return result\n}\n\nexport function startAll (arg: ModifierArg) {\n const states: ModifierState[] = arg.states\n\n for (const state of states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg)\n }\n }\n}\n\nexport function setAll (arg: ModifierArg) {\n const {\n prevCoords,\n phase,\n preEnd,\n requireEndOnly,\n rect,\n states,\n } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, rect)\n\n const result = {\n delta: { x: 0, y: 0 },\n rectDelta: {\n left : 0,\n right : 0,\n top : 0,\n bottom: 0,\n },\n coords: arg.coords,\n changed: true,\n }\n\n for (const state of states) {\n const { options } = state\n\n if (!state.methods.set ||\n !shouldDo(options, preEnd, requireEndOnly, phase)) { continue }\n\n arg.state = state\n state.methods.set(arg)\n }\n\n result.delta.x = arg.coords.x - arg.pageCoords.x\n result.delta.y = arg.coords.y - arg.pageCoords.y\n\n let rectChanged = false\n\n if (rect) {\n result.rectDelta.left = arg.rect.left - rect.left\n result.rectDelta.right = arg.rect.right - rect.right\n result.rectDelta.top = arg.rect.top - rect.top\n result.rectDelta.bottom = arg.rect.bottom - rect.bottom\n\n rectChanged = result.rectDelta.left !== 0 ||\n result.rectDelta.right !== 0 ||\n result.rectDelta.top !== 0 ||\n result.rectDelta.bottom !== 0\n }\n\n result.changed = !prevCoords || prevCoords.x !== result.coords.x ||\n prevCoords.y !== result.coords.y ||\n rectChanged\n\n return result\n}\n\nfunction beforeMove (arg: Partial & {\n interaction: Interact.Interaction\n phase: Interact.EventPhase\n preEnd?: boolean\n skipModifiers?: number\n prevCoords?: Interact.Point\n modifiedCoords?: Interact.Point\n}): void | false {\n const { interaction, phase, preEnd, skipModifiers } = arg\n const { interactable, element } = interaction\n\n const states = skipModifiers\n ? interaction.modifiers.states.slice(skipModifiers)\n : interaction.modifiers.states\n const prevCoords = arg.prevCoords || (interaction.modifiers.result\n ? interaction.modifiers.result.coords\n : interaction.coords.prev.page)\n\n const modifierResult = setAll({\n interaction,\n interactable,\n element,\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n prevCoords,\n rect: interaction.rect,\n states,\n requireEndOnly: false,\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 if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n modifierResult.coords.x += adjustment.x\n modifierResult.coords.y += adjustment.y\n modifierResult.delta.x += adjustment.x\n modifierResult.delta.y += adjustment.y\n }\n setCoords(arg)\n}\n\nfunction beforeEnd (arg: Interact.DoPhaseArg & { noPreEnd?: boolean, state?: ModifierState }): 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 as unknown as ModifierArg)\n\n if (endResult === false) {\n interaction.modifiers.endPrevented = true\n return false\n }\n\n // if the endOnly option is true for any modifier\n if (!didPreEnd && shouldDo(options, true, true)) {\n // fire a move event at the modified coordinates\n interaction.move({ event, preEnd: true })\n didPreEnd = true\n }\n }\n}\n\nfunction stop (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase }) {\n const { interaction } = arg\n const states = interaction.modifiers.states\n\n if (!states || !states.length) {\n return\n }\n\n const modifierArg: ModifierArg = extend({\n states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n }, arg as any)\n\n for (const state of states) {\n modifierArg.state = state\n\n if (state.methods.stop) { state.methods.stop(modifierArg) }\n }\n\n arg.interaction.modifiers.states = null\n arg.interaction.modifiers.endPrevented = null\n}\n\nfunction getModifierList (interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers.filter(\n modifier => !modifier.options || modifier.options.enabled !== false,\n )\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map(type => {\n const options = actionOptions[type]\n\n return options && options.enabled && {\n options,\n methods: options._methods,\n }\n })\n .filter(m => !!m)\n}\n\nexport function prepareStates (modifierList: Modifier[]) {\n const states: ModifierState[] = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n if (options && options.enabled === false) { continue }\n\n states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return states\n}\n\nexport function setCoords (arg: { interaction: Interact.Interaction, phase: Interact.EventPhase, rect?: Interact.Rect }) {\n const { interaction, phase } = arg\n const curCoords = interaction.coords.cur\n const 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]] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = interaction.modifiers.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n\nexport function restoreCoords ({ interaction: { coords, rect, modifiers } }: { interaction: Interact.Interaction }) {\n if (!modifiers.result) { return }\n\n const { startDelta } = modifiers\n const { delta: curDelta, rectDelta } = modifiers.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n}\n\nfunction shouldDo (options, preEnd?: boolean, requireEndOnly?: boolean, phase?: string) {\n return options\n ? options.enabled !== false &&\n (preEnd || !options.endOnly) &&\n (!requireEndOnly || options.endOnly || options.alwaysOnEnd) &&\n (options.setStart || phase !== 'start')\n : !requireEndOnly\n}\n\nfunction getRectOffset (rect, coords) {\n return rect\n ? {\n left : coords.x - rect.left,\n top : coords.y - rect.top,\n right : rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left : 0,\n top : 0,\n right : 0,\n bottom: 0,\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string\n> (\n module: ModifierModule,\n name?: Name,\n) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options: Defaults = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n options[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = { options, methods, name }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport default {\n id: 'modifiers/base',\n install: scope => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modifiers = {\n startOffset: { left: 0, right: 0, top: 0, bottom: 0 },\n offsets: {},\n states: null,\n result: null,\n endPrevented: false,\n startDelta: null,\n }\n },\n\n 'interactions:before-action-start': arg => {\n start(arg, arg.interaction.coords.start.page, arg.interaction.coords.prev.page)\n setCoords(arg)\n },\n\n 'interactions:action-resume': arg => {\n stop(arg)\n start(arg, arg.interaction.coords.cur.page, arg.interaction.modifiers.result.coords)\n beforeMove(arg)\n },\n\n 'interactions:after-action-move': restoreCoords,\n 'interactions:before-action-move': beforeMove,\n\n 'interactions:after-action-start': restoreCoords,\n\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': stop,\n },\n before: 'ations',\n startAll,\n setAll,\n prepareStates,\n start,\n beforeMove,\n beforeEnd,\n stop,\n shouldDo,\n getModifierList,\n getRectOffset,\n makeModifier,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/base.spec.js b/packages/modifiers/base.spec.js deleted file mode 100644 index 018005e97..000000000 --- a/packages/modifiers/base.spec.js +++ /dev/null @@ -1,101 +0,0 @@ -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, target, interaction, interactable, } = helpers.testEnv({ plugins: [modifiersBase] }); - scope.actions.eventTypes.push('TESTstart', 'TESTmove', 'TESTend'); - t.ok(utils.is.object(interaction.modifiers), 'modifiers prop is added new Interaction'); - const element = target; - 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 = { - enabled: true, - 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; - 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'); - interaction.pointerMove(moveEvent, moveEvent, element); - t.doesNotThrow(() => { - interaction._signals.fire('action-resume', { - interaction, - }); - }, 'action-resume doesn\'t throw errors'); - interaction.stop(); - interaction.pointerUp(moveEvent, moveEvent, element, element); - t.deepEqual(interaction.coords.cur.page, { x: moveEvent.pageX, y: moveEvent.pageY }, 'interaction coords after stopping are as expected'); - 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmFzZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLGFBQWEsTUFBTSxRQUFRLENBQUE7QUFFbEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3pCLE1BQU0sRUFDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEdBQ2IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRWpELEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRWpFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLHlDQUF5QyxDQUFDLENBQUE7SUFFdkYsTUFBTSxPQUFPLEdBQUcsTUFBMEIsQ0FBQTtJQUMxQyxNQUFNLFVBQVUsR0FBRztRQUNqQixLQUFLLEVBQUUsR0FBRztRQUNWLEtBQUssRUFBRSxHQUFHO1FBQ1YsT0FBTyxFQUFFLEdBQUc7UUFDWixPQUFPLEVBQUUsR0FBRztRQUNaLE1BQU0sRUFBRSxPQUFPO0tBQ1QsQ0FBQTtJQUNSLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLEtBQUssRUFBRSxHQUFHO1FBQ1YsS0FBSyxFQUFFLEdBQUc7UUFDVixPQUFPLEVBQUUsR0FBRztRQUNaLE9BQU8sRUFBRSxHQUFHO1FBQ1osTUFBTSxFQUFFLE9BQU87S0FDVCxDQUFBO0lBQ1IsTUFBTSxPQUFPLEdB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QyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUVuQixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7SUFDN0IsQ0FBQztJQUNELElBQUksQ0FBRSxFQUFFLEtBQUssRUFBRTtRQUNiLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUM1QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFBO1FBQzVCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7SUFDN0IsQ0FBQztDQUNGLENBQUE7QUFFRCxNQUFNLGNBQWMsR0FBRztJQUNyQixLQUFLLEtBQUssQ0FBQztJQUNYLEdBQUcsQ0FBRSxFQUFFLE1BQU0sRUFBRTtRQUNiLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDZixDQUFDO0NBQ0YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgbW9kaWZpZXJzQmFzZSBmcm9tICcuL2Jhc2UnXG5cbnRlc3QoJ21vZGlmaWVycy9iYXNlJywgdCA9PiB7XG4gIGNvbnN0IHtcbiAgICBzY29wZSxcbiAgICB0YXJnZXQsXG4gICAgaW50ZXJhY3Rpb24sXG4gICAgaW50ZXJhY3RhYmxlLFxuICB9ID0gaGVscGVycy50ZXN0RW52KHsgcGx1Z2luczogW21vZGlmaWVyc0Jhc2VdIH0pXG5cbiAgc2NvcGUuYWN0aW9ucy5ldmVudFR5cGVzLnB1c2goJ1RFU1RzdGFydCcsICdURVNUbW92ZScsICdURVNUZW5kJylcblxuICB0Lm9rKHV0aWxzLmlzLm9iamVjdChpbnRlcmFjdGlvbi5tb2RpZmllcnMpLCAnbW9kaWZpZXJzIHByb3AgaXMgYWRkZWQgbmV3IEludGVyYWN0aW9uJylcblxuICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0IGFzIEludGVyYWN0LkVsZW1lbnRcbiAgY29uc3Qgc3RhcnRFdmVudCA9IHtcbiAgICBwYWdlWDogMTAwLFxuICAgIHBhZ2VZOiAyMDAsXG4gICAgY2xpZW50WDogMTAwLFxuICAgIGNsaWVudFk6IDIwMCxcbiAgICB0YXJnZXQ6IGVsZW1lbnQsXG4gIH0gYXMgYW55XG4gIGNvbnN0IG1vdmVFdmVudCA9IHtcbiAgICBwYWdlWDogNDAwLFxuICAgIHBhZ2VZOiA1MDAsXG4gICAgY2xpZW50WDogNDAwLFxuICAgIGNsaWVudFk6IDUwMCxcbiAgICB0YXJnZXQ6IGVsZW1lbnQsXG4gIH0gYXMgYW55XG4gIGNvbnN0IG9wdGlvbnM6IGFueSA9IHsgdGFyZ2V0OiB7IHg6IDEwMCwgeTogMTAwIH0sIHNldFN0YXJ0OiB0cnVlIH1cbiAgbGV0IGZpcmVkRXZlbnRzID0gW11cblxuICBpbnRlcmFjdGFibGUucmVjdENoZWNrZXIoKCkgPT4gKHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDUwLCByaWdodDogNTAgfSkpXG4gIGludGVyYWN0YWJsZS5vbignVEVTVHN0YXJ0IFRFU1Rtb3ZlIFRFU1RlbmQnLCBldmVudCA9PiBmaXJlZEV2ZW50cy5wdXNoKGV2ZW50KSlcbiAgaW50ZXJhY3Rpb24ucG9pbnRlckRvd24oc3RhcnRFdmVudCwgc3RhcnRFdmVudCwgZWxlbWVudClcblxuICA7KGludGVyYWN0YWJsZS5vcHRpb25zIGFzIGFueSkuVEVTVCA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIG1vZGlmaWVyczogW1xuICAgICAge1xuICAgICAgICBvcHRpb25zLFxuICAgICAgICBtZXRob2RzOiB0YXJnZXRNb2RpZmllcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfVxuXG4gIGludGVyYWN0aW9uLnN0YXJ0KHsgbmFtZTogJ1RFU1QnIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcblxuICB0Lm9rKFxuICAgIG9wdGlvbnMuc3RhcnRlZCxcbiAgICAnbW9kaWZpZXIgbWV0aG9kcy5zdGFydCgpIHdhcyBjYWxsZWQnLFxuICApXG5cbiAgdC5vayhcbiAgICBvcHRpb25zLnNldHRlZCxcbiAgICAnbW9kaWZpZXIgbWV0aG9kcy5zZXQoKSB3YXMgY2FsbGVkJyxcbiAgKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnByZXZFdmVudC5wYWdlLFxuICAgIG9wdGlvbnMudGFyZ2V0LFxuICAgICdzdGFydCBldmVudCBjb29yZHMgYXJlIG1vZGlmaWVkJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZSxcbiAgICB7IHg6IDEwMCwgeTogMjAwIH0sXG4gICAgJ2ludGVyYWN0aW9uLmNvb3Jkcy5zdGFydCBhcmUgcmVzdG9yZWQgYWZ0ZXIgYWN0aW9uIHN0YXJ0IHBoYXNlJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UsXG4gICAgeyB4OiAxMDAsIHk6IDIwMCB9LFxuICAgICdpbnRlcmFjdGlvbi5jb29yZHMuY3VyIGFyZSByZXN0b3JlZCBhZnRlciBhY3Rpb24gc3RhcnQgcGhhc2UnKVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJNb3ZlKG1vdmVFdmVudCwgbW92ZUV2ZW50LCBlbGVtZW50KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLmNvb3Jkcy5jdXIucGFnZSxcbiAgICB7IHg6IG1vdmVFdmVudC5wYWdlWCwgeTogbW92ZUV2ZW50LnBhZ2VZIH0sXG4gICAgJ2ludGVyYWN0aW9uLmNvb3Jkcy5jdXIgYXJlIHJlc3RvcmVkIGFmdGVyIGFjdGlvbiBtb3ZlIHBoYXNlJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZSxcbiAgICB7IHg6IHN0YXJ0RXZlbnQucGFnZVgsIHk6IHN0YXJ0RXZlbnQucGFnZVkgfSxcbiAgICAnaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0IGFyZSByZXN0b3JlZCBhZnRlciBhY3Rpb24gbW92ZSBwaGFzZScpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgeyB4OiBpbnRlcmFjdGlvbi5wcmV2RXZlbnQueDAsIHk6IGludGVyYWN0aW9uLnByZXZFdmVudC55MCB9LFxuICAgIHsgeDogMTAwLCB5OiAxMDAgfSxcbiAgICAnbW92ZSBldmVudCBzdGFydCBjb29yZHMgYXJlIG1vZGlmaWVkJylcblxuICBmaXJlZEV2ZW50cyA9IFtdXG4gIGNvbnN0IHNpbWlsYXJNb3ZlRXZlbnQgPSB7IC4uLm1vdmVFdmVudCwgcGFnZVg6IG1vdmVFdmVudC5wYWdlWCArIDAuNSB9XG4gIGludGVyYWN0aW9uLnBvaW50ZXJNb3ZlKHNpbWlsYXJNb3ZlRXZlbnQsIHNpbWlsYXJNb3ZlRXZlbnQsIGVsZW1lbnQpXG4gIHQuZXF1YWwoZmlyZWRFdmVudHMubGVuZ3RoLCAwLCAnZHVwbGljYXRlIHJlc3VsdCBjb29yZHMgYXJlIGlnbm9yZWQnKVxuXG4gIGludGVyYWN0aW9uLnN0b3AoKVxuXG4gIHQub2soXG4gICAgb3B0aW9ucy5zdG9wcGVkLFxuICAgICdtb2RpZmllciBtZXRob2RzLnN0b3AoKSB3YXMgY2FsbGVkJyxcbiAgKVxuXG4gIC8vIGRvbid0IHNldCBzdGFydFxuICBvcHRpb25zLnNldFN0YXJ0ID0gbnVsbFxuICAvLyBhZGQgc2Vjb25kIG1vZGlmaWVyXG4gIDsoaW50ZXJhY3RhYmxlLm9wdGlvbnMgYXMgYW55KS5URVNULm1vZGlmaWVycy5wdXNoKHtcbiAgICBvcHRpb25zLFxuICAgIG1ldGhvZHM6IGRvdWJsZU1vZGlmaWVyLFxuICB9KVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKHN0YXJ0RXZlbnQsIHN0YXJ0RXZlbnQsIGVsZW1lbnQpXG4gIGludGVyYWN0aW9uLnN0YXJ0KHsgbmFtZTogJ1RFU1QnIH0sIGludGVyYWN0YWJsZSwgZWxlbWVudClcblxuICB0Lm5vdE9rKFxuICAgIG9wdGlvbnMuc2V0dGVkLFxuICAgICdtb2RpZmllciBtZXRob2RzLnNldCgpIHdhcyBub3QgY2FsbGVkIG9uIHN0YXJ0IHBoYXNlIHdpdGhvdXQgb3B0aW9ucy5zZXRTdGFydCcsXG4gIClcblxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5wcmV2RXZlbnQucGFnZSxcbiAgICB7IHg6IDEwMCwgeTogMjAwIH0sXG4gICAgJ3N0YXJ0IGV2ZW50IGNvb3JkcyBhcmUgbm90IG1vZGlmaWVkIHdpdGhvdXQgb3B0aW9ucy5zZXRTdGFydCcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LnBhZ2UsXG4gICAgeyB4OiAxMDAsIHk6IDIwMCB9LFxuICAgICdpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQgYXJlIG5vdCBtb2RpZmllZCB3aXRob3V0IG9wdGlvbnMuc2V0U3RhcnQnKVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJNb3ZlKG1vdmVFdmVudCwgbW92ZUV2ZW50LCBlbGVtZW50KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGludGVyYWN0aW9uLnByZXZFdmVudC5wYWdlLFxuICAgIHsgeDogMjAwLCB5OiAyMDAgfSxcbiAgICAnbW92ZSBldmVudCBjb29yZHMgYXJlIG1vZGlmaWVkIGJ5IGFsbCBtb2RpZmllcnMnKVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJNb3ZlKG1vdmVFdmVudCwgbW92ZUV2ZW50LCBlbGVtZW50KVxuXG4gIHQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICBpbnRlcmFjdGlvbi5fc2lnbmFscy5maXJlKCdhY3Rpb24tcmVzdW1lJywge1xuICAgICAgaW50ZXJhY3Rpb24sXG4gICAgfSlcbiAgfSwgJ2FjdGlvbi1yZXN1bWUgZG9lc25cXCd0IHRocm93IGVycm9ycycpXG5cbiAgaW50ZXJhY3Rpb24uc3RvcCgpXG5cbiAgaW50ZXJhY3Rpb24ucG9pbnRlclVwKG1vdmVFdmVudCwgbW92ZUV2ZW50LCBlbGVtZW50LCBlbGVtZW50KVxuICB0LmRlZXBFcXVhbChcbiAgICBpbnRlcmFjdGlvbi5jb29yZHMuY3VyLnBhZ2UsXG4gICAgeyB4OiBtb3ZlRXZlbnQucGFnZVgsIHk6IG1vdmVFdmVudC5wYWdlWSB9LFxuICAgICdpbnRlcmFjdGlvbiBjb29yZHMgYWZ0ZXIgc3RvcHBpbmcgYXJlIGFzIGV4cGVjdGVkJylcblxuICB0LmVuZCgpXG59KVxuXG5jb25zdCB0YXJnZXRNb2RpZmllciA9IHtcbiAgc3RhcnQgKHsgc3RhdGUgfSkge1xuICAgIHN0YXRlLm9wdGlvbnMuc3RhcnRlZCA9IHRydWVcbiAgfSxcbiAgc2V0ICh7IHN0YXRlLCBjb29yZHMgfSkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBzdGF0ZS5vcHRpb25zXG5cbiAgICBjb29yZHMueCA9IHRhcmdldC54XG4gICAgY29vcmRzLnkgPSB0YXJnZXQueVxuXG4gICAgc3RhdGUub3B0aW9ucy5zZXR0ZWQgPSB0cnVlXG4gIH0sXG4gIHN0b3AgKHsgc3RhdGUgfSkge1xuICAgIHN0YXRlLm9wdGlvbnMuc3RvcHBlZCA9IHRydWVcbiAgICBkZWxldGUgc3RhdGUub3B0aW9ucy5zdGFydGVkXG4gICAgZGVsZXRlIHN0YXRlLm9wdGlvbnMuc2V0dGVkXG4gIH0sXG59XG5cbmNvbnN0IGRvdWJsZU1vZGlmaWVyID0ge1xuICBzdGFydCAoKSB7fSxcbiAgc2V0ICh7IGNvb3JkcyB9KSB7XG4gICAgY29vcmRzLnggKj0gMlxuICAgIGNvb3Jkcy55ICo9IDJcbiAgfSxcbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/modifiers/index.d.ts b/packages/modifiers/index.d.ts index 6cae94e9a..332153bc4 100644 --- a/packages/modifiers/index.d.ts +++ b/packages/modifiers/index.d.ts @@ -1,81 +1,156 @@ export declare const snap: { - (_options?: Partial): import("./base").Modifier) => void; - set: (arg: import("./base").ModifierArg) => void; - beforeEnd?: (arg: import("./base").ModifierArg) => boolean; - stop?: (arg: import("./base").ModifierArg) => void; - }; - index?: number; - name?: any; - }, "snap">; + (_options?: Partial): import("./base").Modifier, "snap">; _defaults: import("./snap/pointer").SnapOptions; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: import("./base").ModifierArg>) => void; + set: (arg: import("./base").ModifierArg>) => void; + beforeEnd: (arg: import("./base").ModifierArg>) => boolean; + stop: (arg: import("./base").ModifierArg>) => void; }; }; export declare const snapSize: { - (_options?: Partial>): import("./base").Modifier, { - options: {}; - methods?: { - start?: (arg: import("./base").ModifierArg) => void; - set: (arg: import("./base").ModifierArg) => void; - beforeEnd?: (arg: import("./base").ModifierArg) => boolean; - stop?: (arg: import("./base").ModifierArg) => void; - }; - index?: number; - name?: any; - }, "snapSize">; - _defaults: Pick; + (_options?: Partial>): import("./base").Modifier, import("./base").ModifierState, "snapSize">; + _defaults: Pick; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: import("./base").ModifierArg>) => void; + set: (arg: import("./base").ModifierArg>) => void; + beforeEnd: (arg: import("./base").ModifierArg>) => boolean; + stop: (arg: import("./base").ModifierArg>) => void; }; }; export declare const snapEdges: { - (_options?: Partial>): import("./base").Modifier, { - options: {}; - methods?: { - start?: (arg: import("./base").ModifierArg) => void; - set: (arg: import("./base").ModifierArg) => void; - beforeEnd?: (arg: import("./base").ModifierArg) => boolean; - stop?: (arg: import("./base").ModifierArg) => void; - }; - index?: number; - name?: any; - }, "snapEdges">; - _defaults: Pick; + (_options?: Partial>): import("./base").Modifier, import("./base").ModifierState, "snapEdges">; + _defaults: Pick; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: import("./base").ModifierArg>) => void; + set: (arg: import("./base").ModifierArg>) => void; + beforeEnd: (arg: import("./base").ModifierArg>) => boolean; + stop: (arg: import("./base").ModifierArg>) => void; }; }; export declare const restrict: { - (_options?: Partial): import("./base").Modifier) => void; - set: (arg: import("./base").ModifierArg) => void; - beforeEnd?: (arg: import("./base").ModifierArg) => boolean; - stop?: (arg: import("./base").ModifierArg) => void; - }; - index?: number; - name?: any; - }, "restrict">; + (_options?: Partial): import("./base").Modifier, "restrict">; _defaults: import("./restrict/pointer").RestrictOptions; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: import("./base").ModifierArg>) => void; + set: (arg: import("./base").ModifierArg>) => void; + beforeEnd: (arg: import("./base").ModifierArg>) => boolean; + stop: (arg: import("./base").ModifierArg>) => void; }; }; export declare const restrictRect: { @@ -93,17 +168,9 @@ export declare const restrictRect: { bottom: number; right: number; }; - }, { - options: {}; - methods?: { - start?: (arg: import("./base").ModifierArg) => void; - set: (arg: import("./base").ModifierArg) => void; - beforeEnd?: (arg: import("./base").ModifierArg) => boolean; - stop?: (arg: import("./base").ModifierArg) => void; - }; - index?: number; - name?: any; - }, "restrictRect">; + }, import("./base").ModifierState, "restrictRect">; _defaults: import("./restrict/pointer").RestrictOptions & { elementRect: { top: number; @@ -113,49 +180,77 @@ export declare const restrictRect: { }; }; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: import("./base").ModifierArg>) => void; + set: (arg: import("./base").ModifierArg>) => void; + beforeEnd: (arg: import("./base").ModifierArg>) => boolean; + stop: (arg: import("./base").ModifierArg>) => void; }; }; export declare const restrictEdges: { - (_options?: Partial): import("./base").Modifier) => void; - set: (arg: import("./base").ModifierArg) => void; - beforeEnd?: (arg: import("./base").ModifierArg) => boolean; - stop?: (arg: import("./base").ModifierArg) => void; - }; - index?: number; - name?: any; - }, "restrictEdges">; + (_options?: Partial): import("./base").Modifier, "restrictEdges">; _defaults: import("./restrict/edges").RestrictEdgesOptions; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: import("./base").ModifierArg>) => void; + set: (arg: import("./base").ModifierArg>) => void; + beforeEnd: (arg: import("./base").ModifierArg>) => boolean; + stop: (arg: import("./base").ModifierArg>) => void; }; }; export declare const restrictSize: { - (_options?: Partial): import("./base").Modifier) => void; - set: (arg: import("./base").ModifierArg) => void; - beforeEnd?: (arg: import("./base").ModifierArg) => boolean; - stop?: (arg: import("./base").ModifierArg) => void; - }; - index?: number; - name?: any; - }, "restrictSize">; + (_options?: Partial): import("./base").Modifier, "restrictSize">; _defaults: import("./restrict/size").RestrictSizeOptions; _methods: { - start: any; - set: any; - beforeEnd: any; - stop: any; + start: (arg: import("./base").ModifierArg>) => void; + set: (arg: import("./base").ModifierArg>) => void; + beforeEnd: (arg: import("./base").ModifierArg>) => boolean; + stop: (arg: import("./base").ModifierArg>) => void; }; }; diff --git a/packages/modifiers/index.js b/packages/modifiers/index.js index 9f355e116..089a7ca53 100644 --- a/packages/modifiers/index.js +++ b/packages/modifiers/index.js @@ -1,12 +1,14 @@ -import base from './base'; -import restrictEdgesModule from './restrict/edges'; -import restrictModule from './restrict/pointer'; -import restrictRectModule from './restrict/rect'; -import restrictSizeModule from './restrict/size'; -import snapEdgesModule from './snap/edges'; -import snapModule from './snap/pointer'; -import snapSizeModule from './snap/size'; -const { makeModifier } = base; +import base from "./base.js"; +import restrictEdgesModule from "./restrict/edges.js"; +import restrictModule from "./restrict/pointer.js"; +import restrictRectModule from "./restrict/rect.js"; +import restrictSizeModule from "./restrict/size.js"; +import snapEdgesModule from "./snap/edges.js"; +import snapModule from "./snap/pointer.js"; +import snapSizeModule from "./snap/size.js"; +const { + makeModifier +} = base; export const snap = makeModifier(snapModule, 'snap'); export const snapSize = makeModifier(snapSizeModule, 'snapSize'); export const snapEdges = makeModifier(snapEdgesModule, 'snapEdges'); @@ -14,4 +16,4 @@ export const restrict = makeModifier(restrictModule, 'restrict'); export const restrictRect = makeModifier(restrictRectModule, 'restrictRect'); export const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges'); export const restrictSize = makeModifier(restrictSizeModule, 'restrictSize'); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxRQUFRLENBQUE7QUFDekIsT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLGNBQWMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLGtCQUFrQixNQUFNLGlCQUFpQixDQUFBO0FBQ2hELE9BQU8sa0JBQWtCLE1BQU0saUJBQWlCLENBQUE7QUFDaEQsT0FBTyxlQUFlLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sVUFBVSxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZDLE9BQU8sY0FBYyxNQUFNLGFBQWEsQ0FBQTtBQUV4QyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFBO0FBRTdCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDNUUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsQ0FBQTtBQUMvRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJhc2UgZnJvbSAnLi9iYXNlJ1xuaW1wb3J0IHJlc3RyaWN0RWRnZXNNb2R1bGUgZnJvbSAnLi9yZXN0cmljdC9lZGdlcydcbmltcG9ydCByZXN0cmljdE1vZHVsZSBmcm9tICcuL3Jlc3RyaWN0L3BvaW50ZXInXG5pbXBvcnQgcmVzdHJpY3RSZWN0TW9kdWxlIGZyb20gJy4vcmVzdHJpY3QvcmVjdCdcbmltcG9ydCByZXN0cmljdFNpemVNb2R1bGUgZnJvbSAnLi9yZXN0cmljdC9zaXplJ1xuaW1wb3J0IHNuYXBFZGdlc01vZHVsZSBmcm9tICcuL3NuYXAvZWRnZXMnXG5pbXBvcnQgc25hcE1vZHVsZSBmcm9tICcuL3NuYXAvcG9pbnRlcidcbmltcG9ydCBzbmFwU2l6ZU1vZHVsZSBmcm9tICcuL3NuYXAvc2l6ZSdcblxuY29uc3QgeyBtYWtlTW9kaWZpZXIgfSA9IGJhc2VcblxuZXhwb3J0IGNvbnN0IHNuYXAgPSBtYWtlTW9kaWZpZXIoc25hcE1vZHVsZSwgJ3NuYXAnKVxuZXhwb3J0IGNvbnN0IHNuYXBTaXplID0gbWFrZU1vZGlmaWVyKHNuYXBTaXplTW9kdWxlLCAnc25hcFNpemUnKVxuZXhwb3J0IGNvbnN0IHNuYXBFZGdlcyA9IG1ha2VNb2RpZmllcihzbmFwRWRnZXNNb2R1bGUsICdzbmFwRWRnZXMnKVxuZXhwb3J0IGNvbnN0IHJlc3RyaWN0ID0gbWFrZU1vZGlmaWVyKHJlc3RyaWN0TW9kdWxlLCAncmVzdHJpY3QnKVxuZXhwb3J0IGNvbnN0IHJlc3RyaWN0UmVjdCA9IG1ha2VNb2RpZmllcihyZXN0cmljdFJlY3RNb2R1bGUsICdyZXN0cmljdFJlY3QnKVxuZXhwb3J0IGNvbnN0IHJlc3RyaWN0RWRnZXMgPSBtYWtlTW9kaWZpZXIocmVzdHJpY3RFZGdlc01vZHVsZSwgJ3Jlc3RyaWN0RWRnZXMnKVxuZXhwb3J0IGNvbnN0IHJlc3RyaWN0U2l6ZSA9IG1ha2VNb2RpZmllcihyZXN0cmljdFNpemVNb2R1bGUsICdyZXN0cmljdFNpemUnKVxuIl19 \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/modifiers/index.js.map b/packages/modifiers/index.js.map new file mode 100644 index 000000000..a3b59b5cc --- /dev/null +++ b/packages/modifiers/index.js.map @@ -0,0 +1,28 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "base", + "restrictEdgesModule", + "restrictModule", + "restrictRectModule", + "restrictSizeModule", + "snapEdgesModule", + "snapModule", + "snapSizeModule", + "makeModifier", + "snap", + "snapSize", + "snapEdges", + "restrict", + "restrictRect", + "restrictEdges", + "restrictSize" + ], + "mappings": "AAAA,OAAOA,IAAP;AACA,OAAOC,mBAAP;AACA,OAAOC,cAAP;AACA,OAAOC,kBAAP;AACA,OAAOC,kBAAP;AACA,OAAOC,eAAP;AACA,OAAOC,UAAP;AACA,OAAOC,cAAP;AAEA,MAAM;AAAEC,EAAAA;AAAF,IAAmBR,IAAzB;AAEA,OAAO,MAAMS,IAAI,GAAGD,YAAY,CAACF,UAAD,EAAa,MAAb,CAAzB;AACP,OAAO,MAAMI,QAAQ,GAAGF,YAAY,CAACD,cAAD,EAAiB,UAAjB,CAA7B;AACP,OAAO,MAAMI,SAAS,GAAGH,YAAY,CAACH,eAAD,EAAkB,WAAlB,CAA9B;AACP,OAAO,MAAMO,QAAQ,GAAGJ,YAAY,CAACN,cAAD,EAAiB,UAAjB,CAA7B;AACP,OAAO,MAAMW,YAAY,GAAGL,YAAY,CAACL,kBAAD,EAAqB,cAArB,CAAjC;AACP,OAAO,MAAMW,aAAa,GAAGN,YAAY,CAACP,mBAAD,EAAsB,eAAtB,CAAlC;AACP,OAAO,MAAMc,YAAY,GAAGP,YAAY,CAACJ,kBAAD,EAAqB,cAArB,CAAjC", + "sourcesContent": [ + "import base from './base'\nimport restrictEdgesModule from './restrict/edges'\nimport restrictModule from './restrict/pointer'\nimport restrictRectModule from './restrict/rect'\nimport restrictSizeModule from './restrict/size'\nimport snapEdgesModule from './snap/edges'\nimport snapModule from './snap/pointer'\nimport snapSizeModule from './snap/size'\n\nconst { makeModifier } = base\n\nexport const snap = makeModifier(snapModule, 'snap')\nexport const snapSize = makeModifier(snapSizeModule, 'snapSize')\nexport const snapEdges = makeModifier(snapEdgesModule, 'snapEdges')\nexport const restrict = makeModifier(restrictModule, 'restrict')\nexport const restrictRect = makeModifier(restrictRectModule, 'restrictRect')\nexport const restrictEdges = makeModifier(restrictEdgesModule, 'restrictEdges')\nexport const restrictSize = makeModifier(restrictSizeModule, 'restrictSize')\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/restrict/edges.d.ts b/packages/modifiers/restrict/edges.d.ts index 6583de64c..35a527980 100644 --- a/packages/modifiers/restrict/edges.d.ts +++ b/packages/modifiers/restrict/edges.d.ts @@ -27,7 +27,6 @@ declare const restrictEdges: { bottom: number; right: number; }; - getRestrictionRect: (value: any, interaction: any, coords?: import("../../types/types").Point) => import("../../types/types").Rect; start: typeof start; set: typeof set; defaults: RestrictEdgesOptions; diff --git a/packages/modifiers/restrict/edges.js b/packages/modifiers/restrict/edges.js index 5204cfc52..f0cc03f8d 100644 --- a/packages/modifiers/restrict/edges.js +++ b/packages/modifiers/restrict/edges.js @@ -8,74 +8,106 @@ // outer: { top: 0, left: 0, right: 600, bottom: 600 }, // }, // }) -import extend from '@interactjs/utils/extend'; -import rectUtils from '@interactjs/utils/rect'; -import restrict from './pointer'; -const { getRestrictionRect } = restrict; -const noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }; -const noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }; -function start({ interaction, state }) { - const { options } = state; - const startOffset = interaction.modifiers.startOffset; - let offset; - if (options) { - const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page); - offset = rectUtils.rectToXY(offsetRect); - } - offset = offset || { x: 0, y: 0 }; - state.offset = { - top: offset.y + startOffset.top, - left: offset.x + startOffset.left, - bottom: offset.y - startOffset.bottom, - right: offset.x - startOffset.right, - }; +import extend from "../../utils/extend.js"; +import rectUtils from "../../utils/rect.js"; +import { getRestrictionRect } from "./pointer.js"; +const noInner = { + top: +Infinity, + left: +Infinity, + bottom: -Infinity, + right: -Infinity +}; +const noOuter = { + top: -Infinity, + left: -Infinity, + bottom: +Infinity, + right: +Infinity +}; + +function start({ + interaction, + state +}) { + const { + options + } = state; + const startOffset = interaction.modifiers.startOffset; + let offset; + + if (options) { + const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page); + offset = rectUtils.rectToXY(offsetRect); + } + + offset = offset || { + x: 0, + y: 0 + }; + state.offset = { + top: offset.y + startOffset.top, + left: offset.x + startOffset.left, + bottom: offset.y - startOffset.bottom, + right: offset.x - startOffset.right + }; } -function set({ coords, interaction, state }) { - const { offset, options } = state; - const edges = interaction.prepared._linkedEdges || interaction.prepared.edges; - if (!edges) { - return; - } - const page = extend({}, coords); - const inner = getRestrictionRect(options.inner, interaction, page) || {}; - const outer = getRestrictionRect(options.outer, interaction, page) || {}; - fixRect(inner, noInner); - fixRect(outer, noOuter); - if (edges.top) { - coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top); - } - else if (edges.bottom) { - coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom); - } - if (edges.left) { - coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left); - } - else if (edges.right) { - coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right); - } + +function set({ + coords, + interaction, + state +}) { + const { + offset, + options + } = state; + const edges = interaction.prepared._linkedEdges || interaction.prepared.edges; + + if (!edges) { + return; + } + + const page = extend({}, coords); + const inner = getRestrictionRect(options.inner, interaction, page) || {}; + const outer = getRestrictionRect(options.outer, interaction, page) || {}; + fixRect(inner, noInner); + fixRect(outer, noOuter); + + if (edges.top) { + coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top); + } else if (edges.bottom) { + coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom); + } + + if (edges.left) { + coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left); + } else if (edges.right) { + coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right); + } } + function fixRect(rect, defaults) { - for (const edge of ['top', 'left', 'bottom', 'right']) { - if (!(edge in rect)) { - rect[edge] = defaults[edge]; - } + for (const edge of ['top', 'left', 'bottom', 'right']) { + if (!(edge in rect)) { + rect[edge] = defaults[edge]; } - return rect; + } + + return rect; } + const defaults = { - inner: null, - outer: null, - offset: null, - endOnly: false, - enabled: false, + inner: null, + outer: null, + offset: null, + endOnly: false, + enabled: false }; const restrictEdges = { - noInner, - noOuter, - getRestrictionRect, - start, - set, - defaults, + noInner, + noOuter, + start, + set, + defaults }; export default restrictEdges; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrRUFBK0U7QUFDL0UsNkVBQTZFO0FBQzdFLEVBQUU7QUFDRiw0QkFBNEI7QUFDNUIsc0NBQXNDO0FBQ3RDLHFCQUFxQjtBQUNyQiwrREFBK0Q7QUFDL0QsK0RBQStEO0FBQy9ELE9BQU87QUFDUCxLQUFLO0FBRUwsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFFOUMsT0FBTyxRQUE2QixNQUFNLFdBQVcsQ0FBQTtBQWdCckQsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsUUFBUSxDQUFBO0FBQ3ZDLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUE7QUFDeEYsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtBQUV4RixTQUFTLEtBQUssQ0FBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQW1DO0lBQ3JFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFDekIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUE7SUFDckQsSUFBSSxNQUFNLENBQUE7SUFFVixJQUFJLE9BQU8sRUFBRTtRQUNYLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWpHLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0tBQ3hDO0lBRUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBRWpDLEtBQUssQ0FBQyxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRztRQUNsQyxJQUFJLEVBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSTtRQUNuQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTTtRQUNyQyxLQUFLLEVBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSztLQUNyQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQW1DO0lBQzNFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBO0lBRTdFLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFNO0tBQ1A7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQW1CLENBQUE7SUFDekYsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBbUIsQ0FBQTtJQUV6RixPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFdkIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBTSxNQUFNLENBQUMsR0FBRyxFQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtLQUMvRjtTQUNJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNyQixNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQ2xHO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQ2QsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBSyxNQUFNLENBQUMsSUFBSSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNoRztTQUNJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtRQUNwQixNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQ2pHO0FBQ0gsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFFLElBQUksRUFBRSxRQUFRO0lBQzlCLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNyRCxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUM1QjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsTUFBTSxRQUFRLEdBQXlCO0lBQ3JDLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxNQUFNLEVBQUUsSUFBSTtJQUNaLE9BQU8sRUFBRSxLQUFLO0lBQ2QsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFBO0FBRUQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsT0FBTztJQUNQLE9BQU87SUFDUCxrQkFBa0I7SUFDbEIsS0FBSztJQUNMLEdBQUc7SUFDSCxRQUFRO0NBQ1QsQ0FBQTtBQUVELGVBQWUsYUFBYSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBtb2R1bGUgYWRkcyB0aGUgb3B0aW9ucy5yZXNpemUucmVzdHJpY3RFZGdlcyBzZXR0aW5nIHdoaWNoIHNldHMgbWluIGFuZFxuLy8gbWF4IGZvciB0aGUgdG9wLCBsZWZ0LCBib3R0b20gYW5kIHJpZ2h0IGVkZ2VzIG9mIHRoZSB0YXJnZXQgYmVpbmcgcmVzaXplZC5cbi8vXG4vLyBpbnRlcmFjdCh0YXJnZXQpLnJlc2l6ZSh7XG4vLyAgIGVkZ2VzOiB7IHRvcDogdHJ1ZSwgbGVmdDogdHJ1ZSB9LFxuLy8gICByZXN0cmljdEVkZ2VzOiB7XG4vLyAgICAgaW5uZXI6IHsgdG9wOiAyMDAsIGxlZnQ6IDIwMCwgcmlnaHQ6IDQwMCwgYm90dG9tOiA0MDAgfSxcbi8vICAgICBvdXRlcjogeyB0b3A6ICAgMCwgbGVmdDogICAwLCByaWdodDogNjAwLCBib3R0b206IDYwMCB9LFxuLy8gICB9LFxuLy8gfSlcblxuaW1wb3J0IGV4dGVuZCBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9leHRlbmQnXG5pbXBvcnQgcmVjdFV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JlY3QnXG5pbXBvcnQgeyBNb2RpZmllckFyZywgTW9kaWZpZXJTdGF0ZSB9IGZyb20gJy4uL2Jhc2UnXG5pbXBvcnQgcmVzdHJpY3QsIHsgUmVzdHJpY3RPcHRpb25zIH0gZnJvbSAnLi9wb2ludGVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RyaWN0RWRnZXNPcHRpb25zIHtcbiAgaW5uZXI6IFJlc3RyaWN0T3B0aW9uc1sncmVzdHJpY3Rpb24nXVxuICBvdXRlcjogUmVzdHJpY3RPcHRpb25zWydyZXN0cmljdGlvbiddXG4gIG9mZnNldD86IFJlc3RyaWN0T3B0aW9uc1snb2Zmc2V0J11cbiAgZW5kT25seTogYm9vbGVhblxuICBlbmFibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBSZXN0cmljdEVkZ2VzU3RhdGUgPSBNb2RpZmllclN0YXRlPFJlc3RyaWN0RWRnZXNPcHRpb25zLCB7XG4gIGlubmVyOiBJbnRlcmFjdC5SZWN0XG4gIG91dGVyOiBJbnRlcmFjdC5SZWN0XG4gIG9mZnNldDogUmVzdHJpY3RFZGdlc09wdGlvbnNbJ29mZnNldCddXG59PlxuXG5jb25zdCB7IGdldFJlc3RyaWN0aW9uUmVjdCB9ID0gcmVzdHJpY3RcbmNvbnN0IG5vSW5uZXIgPSB7IHRvcDogK0luZmluaXR5LCBsZWZ0OiArSW5maW5pdHksIGJvdHRvbTogLUluZmluaXR5LCByaWdodDogLUluZmluaXR5IH1cbmNvbnN0IG5vT3V0ZXIgPSB7IHRvcDogLUluZmluaXR5LCBsZWZ0OiAtSW5maW5pdHksIGJvdHRvbTogK0luZmluaXR5LCByaWdodDogK0luZmluaXR5IH1cblxuZnVuY3Rpb24gc3RhcnQgKHsgaW50ZXJhY3Rpb24sIHN0YXRlIH06IE1vZGlmaWVyQXJnPFJlc3RyaWN0RWRnZXNTdGF0ZT4pIHtcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBzdGF0ZVxuICBjb25zdCBzdGFydE9mZnNldCA9IGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydE9mZnNldFxuICBsZXQgb2Zmc2V0XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0UmVzdHJpY3Rpb25SZWN0KG9wdGlvbnMub2Zmc2V0LCBpbnRlcmFjdGlvbiwgaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LnBhZ2UpXG5cbiAgICBvZmZzZXQgPSByZWN0VXRpbHMucmVjdFRvWFkob2Zmc2V0UmVjdClcbiAgfVxuXG4gIG9mZnNldCA9IG9mZnNldCB8fCB7IHg6IDAsIHk6IDAgfVxuXG4gIHN0YXRlLm9mZnNldCA9IHtcbiAgICB0b3A6ICAgIG9mZnNldC55ICsgc3RhcnRPZmZzZXQudG9wLFxuICAgIGxlZnQ6ICAgb2Zmc2V0LnggKyBzdGFydE9mZnNldC5sZWZ0LFxuICAgIGJvdHRvbTogb2Zmc2V0LnkgLSBzdGFydE9mZnNldC5ib3R0b20sXG4gICAgcmlnaHQ6ICBvZmZzZXQueCAtIHN0YXJ0T2Zmc2V0LnJpZ2h0LFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldCAoeyBjb29yZHMsIGludGVyYWN0aW9uLCBzdGF0ZSB9OiBNb2RpZmllckFyZzxSZXN0cmljdEVkZ2VzU3RhdGU+KSB7XG4gIGNvbnN0IHsgb2Zmc2V0LCBvcHRpb25zIH0gPSBzdGF0ZVxuICBjb25zdCBlZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLl9saW5rZWRFZGdlcyB8fCBpbnRlcmFjdGlvbi5wcmVwYXJlZC5lZGdlc1xuXG4gIGlmICghZWRnZXMpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhZ2UgPSBleHRlbmQoe30sIGNvb3JkcylcbiAgY29uc3QgaW5uZXIgPSBnZXRSZXN0cmljdGlvblJlY3Qob3B0aW9ucy5pbm5lciwgaW50ZXJhY3Rpb24sIHBhZ2UpIHx8IHt9IGFzIEludGVyYWN0LlJlY3RcbiAgY29uc3Qgb3V0ZXIgPSBnZXRSZXN0cmljdGlvblJlY3Qob3B0aW9ucy5vdXRlciwgaW50ZXJhY3Rpb24sIHBhZ2UpIHx8IHt9IGFzIEludGVyYWN0LlJlY3RcblxuICBmaXhSZWN0KGlubmVyLCBub0lubmVyKVxuICBmaXhSZWN0KG91dGVyLCBub091dGVyKVxuXG4gIGlmIChlZGdlcy50b3ApIHtcbiAgICBjb29yZHMueSA9IE1hdGgubWluKE1hdGgubWF4KG91dGVyLnRvcCAgICArIG9mZnNldC50b3AsICAgIHBhZ2UueSksIGlubmVyLnRvcCAgICArIG9mZnNldC50b3ApXG4gIH1cbiAgZWxzZSBpZiAoZWRnZXMuYm90dG9tKSB7XG4gICAgY29vcmRzLnkgPSBNYXRoLm1heChNYXRoLm1pbihvdXRlci5ib3R0b20gKyBvZmZzZXQuYm90dG9tLCBwYWdlLnkpLCBpbm5lci5ib3R0b20gKyBvZmZzZXQuYm90dG9tKVxuICB9XG4gIGlmIChlZGdlcy5sZWZ0KSB7XG4gICAgY29vcmRzLnggPSBNYXRoLm1pbihNYXRoLm1heChvdXRlci5sZWZ0ICAgKyBvZmZzZXQubGVmdCwgICBwYWdlLngpLCBpbm5lci5sZWZ0ICAgKyBvZmZzZXQubGVmdClcbiAgfVxuICBlbHNlIGlmIChlZGdlcy5yaWdodCkge1xuICAgIGNvb3Jkcy54ID0gTWF0aC5tYXgoTWF0aC5taW4ob3V0ZXIucmlnaHQgICsgb2Zmc2V0LnJpZ2h0LCAgcGFnZS54KSwgaW5uZXIucmlnaHQgICsgb2Zmc2V0LnJpZ2h0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpeFJlY3QgKHJlY3QsIGRlZmF1bHRzKSB7XG4gIGZvciAoY29uc3QgZWRnZSBvZiBbJ3RvcCcsICdsZWZ0JywgJ2JvdHRvbScsICdyaWdodCddKSB7XG4gICAgaWYgKCEoZWRnZSBpbiByZWN0KSkge1xuICAgICAgcmVjdFtlZGdlXSA9IGRlZmF1bHRzW2VkZ2VdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlY3Rcbn1cblxuY29uc3QgZGVmYXVsdHM6IFJlc3RyaWN0RWRnZXNPcHRpb25zID0ge1xuICBpbm5lcjogbnVsbCxcbiAgb3V0ZXI6IG51bGwsXG4gIG9mZnNldDogbnVsbCxcbiAgZW5kT25seTogZmFsc2UsXG4gIGVuYWJsZWQ6IGZhbHNlLFxufVxuXG5jb25zdCByZXN0cmljdEVkZ2VzID0ge1xuICBub0lubmVyLFxuICBub091dGVyLFxuICBnZXRSZXN0cmljdGlvblJlY3QsXG4gIHN0YXJ0LFxuICBzZXQsXG4gIGRlZmF1bHRzLFxufVxuXG5leHBvcnQgZGVmYXVsdCByZXN0cmljdEVkZ2VzXG4iXX0= \ No newline at end of file +//# sourceMappingURL=edges.js.map \ No newline at end of file diff --git a/packages/modifiers/restrict/edges.js.map b/packages/modifiers/restrict/edges.js.map index ff3bf9c0a..61db22aa1 100644 --- a/packages/modifiers/restrict/edges.js.map +++ b/packages/modifiers/restrict/edges.js.map @@ -1 +1,51 @@ -{"version":3,"file":"edges.js","sourceRoot":"","sources":["edges.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "edges.ts" + ], + "names": [ + "extend", + "rectUtils", + "getRestrictionRect", + "noInner", + "top", + "Infinity", + "left", + "bottom", + "right", + "noOuter", + "start", + "interaction", + "state", + "options", + "startOffset", + "modifiers", + "offset", + "offsetRect", + "coords", + "page", + "rectToXY", + "x", + "y", + "set", + "edges", + "prepared", + "_linkedEdges", + "inner", + "outer", + "fixRect", + "Math", + "min", + "max", + "rect", + "defaults", + "edge", + "endOnly", + "enabled", + "restrictEdges" + ], + "mappings": "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", + "sourcesContent": [ + "// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport extend from '../../utils/extend'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport { getRestrictionRect, RestrictOptions } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start ({ interaction, state }: ModifierArg) {\n const { options } = state\n const startOffset = interaction.modifiers.startOffset\n let offset\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { offset, options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || {} as Interact.Rect\n const outer = getRestrictionRect(options.outer, interaction, page) || {} as Interact.Rect\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n }\n else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n }\n else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect (rect, defaults) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default restrictEdges\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/restrict/edges.spec.js b/packages/modifiers/restrict/edges.spec.js deleted file mode 100644 index 0d84f206b..000000000 --- a/packages/modifiers/restrict/edges.spec.js +++ /dev/null @@ -1,53 +0,0 @@ -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.interactable = { - 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVkZ2VzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxXQUFXLE1BQU0sOEJBQThCLENBQUE7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzdELE9BQU8sYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBRTdDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQVMsQ0FBQyxDQUFBO0lBQ3RFLFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBUyxDQUFBO0lBQ2hDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ2pGLFdBQVcsQ0FBQyxXQUFXLEdBQUcsRUFBUyxDQUFBO0lBQ25DLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBUyxDQUFBO0lBQ25GLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO0lBRS9CLE1BQU0sT0FBTyxHQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDL0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxD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LEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFeEIsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDaEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQ2hELHFDQUFxQyxDQUN0QyxDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgbW9ja1NpZ25hbHMgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0IHJlc3RyaWN0RWRnZXMgZnJvbSAnLi4vcmVzdHJpY3QvZWRnZXMnXG5cbnRlc3QoJ3Jlc3RyaWN0RWRnZXMnLCB0ID0+IHtcbiAgY29uc3QgaW50ZXJhY3Rpb24gPSBuZXcgSW50ZXJhY3Rpb24oeyBzaWduYWxzOiBtb2NrU2lnbmFscygpIH0gYXMgYW55KVxuICBpbnRlcmFjdGlvbi5wcmVwYXJlZCA9IHt9IGFzIGFueVxuICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5lZGdlcyA9IHsgdG9wOiB0cnVlLCBib3R0b206IHRydWUsIGxlZnQ6IHRydWUsIHJpZ2h0OiB0cnVlIH1cbiAgaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMgPSB7fSBhcyBhbnlcbiAgaW50ZXJhY3Rpb24ucmVzaXplUmVjdHMuaW52ZXJ0ZWQgPSB7IHg6IDEwLCB5OiAyMCwgd2lkdGg6IDMwMCwgaGVpZ2h0OiAyMDAgfSBhcyBhbnlcbiAgaW50ZXJhY3Rpb24uX2ludGVyYWN0aW5nID0gdHJ1ZVxuXG4gIGNvbnN0IG9wdGlvbnM6IGFueSA9IHsgZW5hYmxlZDogdHJ1ZSB9XG4gIGNvbnN0IGNvb3JkcyA9IHsgeDogNDAsIHk6IDQwIH1cbiAgY29uc3Qgb2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogMCwgcmlnaHQ6IDAgfVxuICBjb25zdCBzdGF0ZSA9IHsgb3B0aW9ucywgb2Zmc2V0IH1cbiAgY29uc3QgYXJnID0geyBpbnRlcmFjdGlvbiwgc3RhdGUgfSBhcyBhbnlcblxuICBhcmcuY29vcmRzID0geyAuLi5jb29yZHMgfVxuXG4gIC8vIG91dGVyIHJlc3RyaWN0aW9uXG4gIG9wdGlvbnMub3V0ZXIgPSB7IHRvcDogMTAwLCBsZWZ0OiAxMDAsIGJvdHRvbTogMjAwLCByaWdodDogMjAwIH1cbiAgcmVzdHJpY3RFZGdlcy5zZXQoYXJnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGFyZy5jb29yZHMsXG4gICAgeyB4OiBjb29yZHMueSArIDYwLCB5OiBjb29yZHMueSArIDYwIH0sXG4gICAgJ291dGVyIHJlc3RyaWN0aW9uIGlzIGFwcGxpZWQgY29ycmVjdGx5J1xuICApXG5cbiAgYXJnLmNvb3JkcyA9IHsgLi4uY29vcmRzIH1cblxuICAvLyBpbm5lciByZXN0cmljdGlvblxuICBvcHRpb25zLm91dGVyID0gbnVsbFxuICBvcHRpb25zLmlubmVyID0geyB0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogMTAsIHJpZ2h0OiAxMCB9XG4gIHJlc3RyaWN0RWRnZXMuc2V0KGFyZylcblxuICB0LmRlZXBFcXVhbChcbiAgICBhcmcuY29vcmRzLFxuICAgIHsgeDogY29vcmRzLnggLSA0MCwgeTogY29vcmRzLnkgLSA0MCB9LFxuICAgICdpbm5lciByZXN0cmljdGlvbiBpcyBhcHBsaWVkIGNvcnJlY3RseSdcbiAgKVxuXG4gIC8vIG9mZnNldFxuICBPYmplY3QuYXNzaWduKG9mZnNldCwge1xuICAgIHRvcDogMTAwLFxuICAgIGxlZnQ6IDEwMCxcbiAgICBib3R0b206IDIwMCxcbiAgICByaWdodDogMjAwLFxuICB9KVxuICBhcmcuY29vcmRzID0geyAuLi5jb29yZHMgfVxuXG4gIG9wdGlvbnMub3V0ZXIgPSB7IHRvcDogMTAwLCBsZWZ0OiAxMDAsIGJvdHRvbTogMjAwLCByaWdodDogMjAwIH1cbiAgb3B0aW9ucy5pbm5lciA9IG51bGxcbiAgcmVzdHJpY3RFZGdlcy5zZXQoYXJnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGFyZy5jb29yZHMsXG4gICAgeyB4OiBjb29yZHMueCArIDE2MCwgeTogY29vcmRzLnggKyAxNjAgfSxcbiAgICAnb3V0ZXIgcmVzdHJpY3Rpb24gaXMgYXBwbGllZCBjb3JyZWN0bHkgd2l0aCBvZmZzZXQnXG4gIClcblxuICAvLyBzdGFydFxuICBpbnRlcmFjdGlvbi5tb2RpZmllcnMgPSB7fSBhcyBhbnlcbiAgaW50ZXJhY3Rpb24ubW9kaWZpZXJzLnN0YXJ0T2Zmc2V0ID0geyB0b3A6IDUsIGxlZnQ6IDEwLCBib3R0b206IC04LCByaWdodDogLTE2IH1cbiAgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlID0ge1xuICAgIGdldFJlY3QgKCkge1xuICAgICAgcmV0dXJuIHsgdG9wOiA1MDAsIGxlZnQ6IDkwMCB9XG4gICAgfSxcbiAgfSBhcyBhbnlcblxuICBvcHRpb25zLm9mZnNldCA9ICdzZWxmJ1xuICByZXN0cmljdEVkZ2VzLnN0YXJ0KGFyZylcblxuICB0LmRlZXBFcXVhbChcbiAgICBhcmcuc3RhdGUub2Zmc2V0LFxuICAgIHsgdG9wOiA1MDUsIGxlZnQ6IDkxMCwgYm90dG9tOiA1MDgsIHJpZ2h0OiA5MTYgfSxcbiAgICAnc3RhcnQgZ2V0cyB4L3kgZnJvbSBzZWxlY3RvciBzdHJpbmcnXG4gIClcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/modifiers/restrict/pointer.d.ts b/packages/modifiers/restrict/pointer.d.ts index 9c7af696c..bd65d07d5 100644 --- a/packages/modifiers/restrict/pointer.d.ts +++ b/packages/modifiers/restrict/pointer.d.ts @@ -1,4 +1,4 @@ -import { ModifierArg, ModifierState } from '../base'; +import { ModifierModule, ModifierState } from '../base'; export interface RestrictOptions { restriction: Interact.RectResolvable<[number, number, Interact.Interaction]>; elementRect: Interact.Rect; @@ -9,17 +9,6 @@ export interface RestrictOptions { export declare type RestrictState = ModifierState; -declare function start({ rect, startOffset, state, interaction, pageCoords }: ModifierArg): void; -declare function set({ coords, interaction, state }: { - coords: any; - interaction: any; - state: any; -}): void; -declare function getRestrictionRect(value: any, interaction: any, coords?: Interact.Point): import("../../types/types").Rect; -declare const restrict: { - start: typeof start; - set: typeof set; - getRestrictionRect: typeof getRestrictionRect; - defaults: RestrictOptions; -}; +export declare function getRestrictionRect(value: any, interaction: any, coords?: Interact.Point): import("../../types/types").Rect; +declare const restrict: ModifierModule; export default restrict; diff --git a/packages/modifiers/restrict/pointer.js b/packages/modifiers/restrict/pointer.js index 5baa25451..b61e83984 100644 --- a/packages/modifiers/restrict/pointer.js +++ b/packages/modifiers/restrict/pointer.js @@ -1,66 +1,92 @@ -import extend from '@interactjs/utils/extend'; -import * as is from '@interactjs/utils/is'; -import rectUtils from '@interactjs/utils/rect'; -function start({ rect, startOffset, state, interaction, pageCoords }) { - const { options } = state; - const { elementRect } = options; - const offset = extend({ - left: 0, - top: 0, - right: 0, - bottom: 0, - }, options.offset || {}); - if (rect && elementRect) { - const restriction = getRestrictionRect(options.restriction, interaction, pageCoords); - if (restriction) { - const widthDiff = (restriction.right - restriction.left) - rect.width; - const heightDiff = (restriction.bottom - restriction.top) - rect.height; - if (widthDiff < 0) { - offset.left += widthDiff; - offset.right += widthDiff; - } - if (heightDiff < 0) { - offset.top += heightDiff; - offset.bottom += heightDiff; - } - } - offset.left += startOffset.left - (rect.width * elementRect.left); - offset.top += startOffset.top - (rect.height * elementRect.top); - offset.right += startOffset.right - (rect.width * (1 - elementRect.right)); - offset.bottom += startOffset.bottom - (rect.height * (1 - elementRect.bottom)); +import extend from "../../utils/extend.js"; +import * as is from "../../utils/is.js"; +import rectUtils from "../../utils/rect.js"; + +function start({ + rect, + startOffset, + state, + interaction, + pageCoords +}) { + const { + options + } = state; + const { + elementRect + } = options; + const offset = extend({ + left: 0, + top: 0, + right: 0, + bottom: 0 + }, options.offset || {}); + + if (rect && elementRect) { + const restriction = getRestrictionRect(options.restriction, interaction, pageCoords); + + if (restriction) { + const widthDiff = restriction.right - restriction.left - rect.width; + const heightDiff = restriction.bottom - restriction.top - rect.height; + + if (widthDiff < 0) { + offset.left += widthDiff; + offset.right += widthDiff; + } + + if (heightDiff < 0) { + offset.top += heightDiff; + offset.bottom += heightDiff; + } } - state.offset = offset; + + offset.left += startOffset.left - rect.width * elementRect.left; + offset.top += startOffset.top - rect.height * elementRect.top; + offset.right += startOffset.right - rect.width * (1 - elementRect.right); + offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom); + } + + state.offset = offset; } -function set({ coords, interaction, state }) { - const { options, offset } = state; - const restriction = getRestrictionRect(options.restriction, interaction, coords); - if (!restriction) { - return; - } - const rect = rectUtils.xywhToTlbr(restriction); - coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left); - coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top); + +function set({ + coords, + interaction, + state +}) { + const { + options, + offset + } = state; + const restriction = getRestrictionRect(options.restriction, interaction, coords); + + if (!restriction) { + return; + } + + const rect = rectUtils.xywhToTlbr(restriction); + coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left); + coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top); } -function getRestrictionRect(value, interaction, coords) { - if (is.func(value)) { - return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction]); - } - else { - return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element); - } + +export function getRestrictionRect(value, interaction, coords) { + if (is.func(value)) { + return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction]); + } else { + return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element); + } } const defaults = { - restriction: null, - elementRect: null, - offset: null, - endOnly: false, - enabled: false, + restriction: null, + elementRect: null, + offset: null, + endOnly: false, + enabled: false }; const restrict = { - start, - set, - getRestrictionRect, - defaults, + start, + set, + defaults }; export default restrict; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUMxQyxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQWtCOUMsU0FBUyxLQUFLLENBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUE4QjtJQUMvRixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ3pCLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDL0IsTUFBTSxNQUFNLEdBQWtCLE1BQU0sQ0FBQztRQUNuQyxJQUFJLEVBQUUsQ0FBQztRQUNQLEdBQUcsRUFBRSxDQUFDO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLEVBQUUsQ0FBQztLQUNWLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUV4QixJQUFJLElBQUksSUFBSSxXQUFXLEVBQUU7UUFDdkIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFcEYsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLFNBQVMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7WUFDckUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO1lBRXZFLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDakIsTUFBTSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUE7Z0JB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SUFDSCxrQkFBa0I7SUFDbEIsUUFBUTtDQUNULENBQUE7QUFFRCxlQUFlLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHRlbmQgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvZXh0ZW5kJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvaXMnXG5pbXBvcnQgcmVjdFV0aWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL3JlY3QnXG5pbXBvcnQgeyBNb2RpZmllckFyZywgTW9kaWZpZXJTdGF0ZSB9IGZyb20gJy4uL2Jhc2UnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdHJpY3RPcHRpb25zIHtcbiAgLy8gd2hlcmUgdG8gZHJhZyBvdmVyXG4gIHJlc3RyaWN0aW9uOiBJbnRlcmFjdC5SZWN0UmVzb2x2YWJsZTxbbnVtYmVyLCBudW1iZXIsIEludGVyYWN0LkludGVyYWN0aW9uXT5cbiAgLy8gd2hhdCBwYXJ0IG9mIHNlbGYgaXMgYWxsb3dlZCB0byBkcmFnIG92ZXJcbiAgZWxlbWVudFJlY3Q6IEludGVyYWN0LlJlY3RcbiAgb2Zmc2V0OiBJbnRlcmFjdC5SZWN0XG4gIC8vIHJlc3RyaWN0IGp1c3QgYmVmb3JlIHRoZSBlbmQgZHJhZ1xuICBlbmRPbmx5OiBib29sZWFuXG4gIGVuYWJsZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIFJlc3RyaWN0U3RhdGUgPSBNb2RpZmllclN0YXRlPFJlc3RyaWN0T3B0aW9ucywge1xuICBvZmZzZXQ6IEludGVyYWN0LlJlY3Rcbn0+XG5cbmZ1bmN0aW9uIHN0YXJ0ICh7IHJlY3QsIHN0YXJ0T2Zmc2V0LCBzdGF0ZSwgaW50ZXJhY3Rpb24sIHBhZ2VDb29yZHMgfTogTW9kaWZpZXJBcmc8UmVzdHJpY3RTdGF0ZT4pIHtcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBzdGF0ZVxuICBjb25zdCB7IGVsZW1lbnRSZWN0IH0gPSBvcHRpb25zXG4gIGNvbnN0IG9mZnNldDogSW50ZXJhY3QuUmVjdCA9IGV4dGVuZCh7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICB9LCBvcHRpb25zLm9mZnNldCB8fCB7fSlcblxuICBpZiAocmVjdCAmJiBlbGVtZW50UmVjdCkge1xuICAgIGNvbnN0IHJlc3RyaWN0aW9uID0gZ2V0UmVzdHJpY3Rpb25SZWN0KG9wdGlvbnMucmVzdHJpY3Rpb24sIGludGVyYWN0aW9uLCBwYWdlQ29vcmRzKVxuXG4gICAgaWYgKHJlc3RyaWN0aW9uKSB7XG4gICAgICBjb25zdCB3aWR0aERpZmYgPSAocmVzdHJpY3Rpb24ucmlnaHQgLSByZXN0cmljdGlvbi5sZWZ0KSAtIHJlY3Qud2lkdGhcbiAgICAgIGNvbnN0IGhlaWdodERpZmYgPSAocmVzdHJpY3Rpb24uYm90dG9tIC0gcmVzdHJpY3Rpb24udG9wKSAtIHJlY3QuaGVpZ2h0XG5cbiAgICAgIGlmICh3aWR0aERpZmYgPCAwKSB7XG4gICAgICAgIG9mZnNldC5sZWZ0ICs9IHdpZHRoRGlmZlxuICAgICAgICBvZmZzZXQucmlnaHQgKz0gd2lkdGhEaWZmXG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0RGlmZiA8IDApIHtcbiAgICAgICAgb2Zmc2V0LnRvcCArPSBoZWlnaHREaWZmXG4gICAgICAgIG9mZnNldC5ib3R0b20gKz0gaGVpZ2h0RGlmZlxuICAgICAgfVxuICAgIH1cblxuICAgIG9mZnNldC5sZWZ0ICs9IHN0YXJ0T2Zmc2V0LmxlZnQgLSAocmVjdC53aWR0aCAgKiBlbGVtZW50UmVjdC5sZWZ0KVxuICAgIG9mZnNldC50b3AgICs9IHN0YXJ0T2Zmc2V0LnRvcCAgLSAocmVjdC5oZWlnaHQgKiBlbGVtZW50UmVjdC50b3ApXG5cbiAgICBvZmZzZXQucmlnaHQgICs9IHN0YXJ0T2Zmc2V0LnJpZ2h0ICAtIChyZWN0LndpZHRoICAqICgxIC0gZWxlbWVudFJlY3QucmlnaHQpKVxuICAgIG9mZnNldC5ib3R0b20gKz0gc3RhcnRPZmZzZXQuYm90dG9tIC0gKHJlY3QuaGVpZ2h0ICogKDEgLSBlbGVtZW50UmVjdC5ib3R0b20pKVxuICB9XG5cbiAgc3RhdGUub2Zmc2V0ID0gb2Zmc2V0XG59XG5cbmZ1bmN0aW9uIHNldCAoeyBjb29yZHMsIGludGVyYWN0aW9uLCBzdGF0ZSB9KSB7XG4gIGNvbnN0IHsgb3B0aW9ucywgb2Zmc2V0IH0gPSBzdGF0ZVxuXG4gIGNvbnN0IHJlc3RyaWN0aW9uID0gZ2V0UmVzdHJpY3Rpb25SZWN0KG9wdGlvbnMucmVzdHJpY3Rpb24sIGludGVyYWN0aW9uLCBjb29yZHMpXG5cbiAgaWYgKCFyZXN0cmljdGlvbikgeyByZXR1cm4gfVxuXG4gIGNvbnN0IHJlY3QgPSByZWN0VXRpbHMueHl3aFRvVGxicihyZXN0cmljdGlvbilcblxuICBjb29yZHMueCA9IE1hdGgubWF4KE1hdGgubWluKHJlY3QucmlnaHQgIC0gb2Zmc2V0LnJpZ2h0LCBjb29yZHMueCksIHJlY3QubGVmdCArIG9mZnNldC5sZWZ0KVxuICBjb29yZHMueSA9IE1hdGgubWF4KE1hdGgubWluKHJlY3QuYm90dG9tIC0gb2Zmc2V0LmJvdHRvbSwgY29vcmRzLnkpLCByZWN0LnRvcCAgKyBvZmZzZXQudG9wKVxufVxuXG5mdW5jdGlvbiBnZXRSZXN0cmljdGlvblJlY3QgKHZhbHVlLCBpbnRlcmFjdGlvbiwgY29vcmRzPzogSW50ZXJhY3QuUG9pbnQpIHtcbiAgaWYgKGlzLmZ1bmModmFsdWUpKSB7XG4gICAgcmV0dXJuIHJlY3RVdGlscy5yZXNvbHZlUmVjdExpa2UodmFsdWUsIGludGVyYWN0aW9uLmludGVyYWN0YWJsZSwgaW50ZXJhY3Rpb24uZWxlbWVudCwgW2Nvb3Jkcy54LCBjb29yZHMueSwgaW50ZXJhY3Rpb25dKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZWN0VXRpbHMucmVzb2x2ZVJlY3RMaWtlKHZhbHVlLCBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUsIGludGVyYWN0aW9uLmVsZW1lbnQpXG4gIH1cbn1cblxuY29uc3QgZGVmYXVsdHM6IFJlc3RyaWN0T3B0aW9ucyA9IHtcbiAgcmVzdHJpY3Rpb246IG51bGwsXG4gIGVsZW1lbnRSZWN0OiBudWxsLFxuICBvZmZzZXQ6IG51bGwsXG4gIGVuZE9ubHk6IGZhbHNlLFxuICBlbmFibGVkOiBmYWxzZSxcbn1cblxuY29uc3QgcmVzdHJpY3QgPSB7XG4gIHN0YXJ0LFxuICBzZXQsXG4gIGdldFJlc3RyaWN0aW9uUmVjdCxcbiAgZGVmYXVsdHMsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3RyaWN0XG4iXX0= \ No newline at end of file +//# sourceMappingURL=pointer.js.map \ No newline at end of file diff --git a/packages/modifiers/restrict/pointer.js.map b/packages/modifiers/restrict/pointer.js.map index ebd716be6..3ba6f5c25 100644 --- a/packages/modifiers/restrict/pointer.js.map +++ b/packages/modifiers/restrict/pointer.js.map @@ -1 +1,51 @@ -{"version":3,"file":"pointer.js","sourceRoot":"","sources":["pointer.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "pointer.ts" + ], + "names": [ + "extend", + "is", + "rectUtils", + "start", + "rect", + "startOffset", + "state", + "interaction", + "pageCoords", + "options", + "elementRect", + "offset", + "left", + "top", + "right", + "bottom", + "restriction", + "getRestrictionRect", + "widthDiff", + "width", + "heightDiff", + "height", + "set", + "coords", + "xywhToTlbr", + "x", + "Math", + "max", + "min", + "y", + "value", + "func", + "resolveRectLike", + "interactable", + "element", + "defaults", + "endOnly", + "enabled", + "restrict" + ], + "mappings": "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", + "sourcesContent": [ + "import extend from '../../utils/extend'\nimport * as is from '../../utils/is'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierModule, ModifierState } from '../base'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: Interact.RectResolvable<[number, number, Interact.Interaction]>\n // what part of self is allowed to drag over\n elementRect: Interact.Rect\n offset: Interact.Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState\n\nfunction start ({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Interact.Rect = extend({\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }, options.offset || {})\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = (restriction.right - restriction.left) - rect.width\n const heightDiff = (restriction.bottom - restriction.top) - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - (rect.width * elementRect.left)\n offset.top += startOffset.top - (rect.height * elementRect.top)\n\n offset.right += startOffset.right - (rect.width * (1 - elementRect.right))\n offset.bottom += startOffset.bottom - (rect.height * (1 - elementRect.bottom))\n }\n\n state.offset = offset\n}\n\nfunction set ({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) { return }\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect (value, interaction, coords?: Interact.Point) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default restrict\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/restrict/pointer.spec.js b/packages/modifiers/restrict/pointer.spec.js deleted file mode 100644 index 092ef14a4..000000000 --- a/packages/modifiers/restrict/pointer.spec.js +++ /dev/null @@ -1,41 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import restrict from '../restrict/pointer'; -test('restrict larger than restriction', t => { - const edges = { left: 0, top: 0, right: 200, bottom: 200 }; - const rect = { ...edges, width: 200, height: 200 }; - const { interaction, } = helpers.testEnv({ rect }); - const restriction = { left: 100, top: 50, right: 150, bottom: 150 }; - const options = { - ...restrict.defaults, - restriction: null, - elementRect: { left: 0, top: 0, right: 1, bottom: 1 }, - }; - const state = { options, offset: null }; - const arg = { - interaction, - state, - rect, - startOffset: rect, - coords: { x: 0, y: 0 }, - pageCoords: { x: 0, y: 0 }, - }; - options.restriction = () => null; - t.doesNotThrow(() => { - restrict.start(arg); - restrict.set(arg); - }, 'no errors with null-resolving restriction'); - options.restriction = restriction; - restrict.start(arg); - arg.coords = { x: 0, y: 0 }; - restrict.set(arg); - t.deepEqual(arg.coords, { x: 0, y: 0 }, 'allows top and left edge values to be lower than the restriction'); - arg.coords = { x: restriction.left + 10, y: restriction.top + 10 }; - restrict.set(arg); - t.deepEqual(arg.coords, { x: restriction.left - rect.left, y: restriction.top - rect.top }, 'keeps the top left edge values lower than the restriction'); - arg.coords = { x: restriction.right - rect.right - 10, y: restriction.bottom - rect.right - 10 }; - restrict.set(arg); - t.deepEqual(arg.coords, { x: restriction.right - rect.right, y: restriction.bottom - rect.right }, 'keeps the bottom right edge values higher than the restriction'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlci5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicG9pbnRlci5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxRQUFRLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzNDLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBQzFELE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFDbEQsTUFBTSxFQUNKLFdBQVcsR0FDWixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRTdCLE1BQU0sV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBQ25FLE1BQU0sT0FBTyxHQUFHO1FBQ2QsR0FBRyxRQUFRLENBQUMsUUFBUTtRQUNwQixXQUFXLEVBQUUsSUFBSTtRQUNqQixXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0tBQ3RELENBQUE7SUFDRCxNQUFNLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDdkMsTUFBTSxHQUFHLEdBQUc7UUFDVixXQUFXO1FBQ1gsS0FBSztRQUNMLElBQUk7UUFDSixXQUFXLEVBQUUsSUFBSTtRQUNqQixNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdEIsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0tBQzNCLENBQUE7SUFFRCxPQUFPLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTtJQUNoQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtRQUNsQixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQVUsQ0FBQyxDQUFBO1FBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBVSxDQUFDLENBQUE7SUFDMUIsQ0FBQyxFQUFFLDJDQUEyQyxDQUFDLENBQUE7SUFFL0MsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDakMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFVLENBQUMsQ0FBQTtJQUUxQixHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFDM0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQixDQUFDLENBQUMsU0FBUyxDQUNULEdBQUcsQ0FBQyxNQUFNLEVBQ1YsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDZCxrRUFBa0UsQ0FDbkUsQ0FBQTtJQUVELEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUE7SUFDbEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQixDQUFDLENBQUMsU0FBUyxDQUNULEdBQUcsQ0FBQyxNQUFNLEVBQ1YsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFDbEUsMkRBQTJELENBQzVELENBQUE7SUFFRCxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQTtJQUNoRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pCLENBQUMsQ0FBQyxTQUFTLENBQ1QsR0FBRyxDQUFDLE1BQU0sRUFDVixFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUN6RSxnRUFBZ0UsQ0FDakUsQ0FBQTtJQUVELENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvX2hlbHBlcnMnXG5pbXBvcnQgcmVzdHJpY3QgZnJvbSAnLi4vcmVzdHJpY3QvcG9pbnRlcidcblxudGVzdCgncmVzdHJpY3QgbGFyZ2VyIHRoYW4gcmVzdHJpY3Rpb24nLCB0ID0+IHtcbiAgY29uc3QgZWRnZXMgPSB7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IDIwMCwgYm90dG9tOiAyMDAgfVxuICBjb25zdCByZWN0ID0geyAuLi5lZGdlcywgd2lkdGg6IDIwMCwgaGVpZ2h0OiAyMDAgfVxuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb24sXG4gIH0gPSBoZWxwZXJzLnRlc3RFbnYoeyByZWN0IH0pXG5cbiAgY29uc3QgcmVzdHJpY3Rpb24gPSB7IGxlZnQ6IDEwMCwgdG9wOiA1MCwgcmlnaHQ6IDE1MCwgYm90dG9tOiAxNTAgfVxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLnJlc3RyaWN0LmRlZmF1bHRzLFxuICAgIHJlc3RyaWN0aW9uOiBudWxsLFxuICAgIGVsZW1lbnRSZWN0OiB7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IDEsIGJvdHRvbTogMSB9LFxuICB9XG4gIGNvbnN0IHN0YXRlID0geyBvcHRpb25zLCBvZmZzZXQ6IG51bGwgfVxuICBjb25zdCBhcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgc3RhdGUsXG4gICAgcmVjdCxcbiAgICBzdGFydE9mZnNldDogcmVjdCxcbiAgICBjb29yZHM6IHsgeDogMCwgeTogMCB9LFxuICAgIHBhZ2VDb29yZHM6IHsgeDogMCwgeTogMCB9LFxuICB9XG5cbiAgb3B0aW9ucy5yZXN0cmljdGlvbiA9ICgpID0+IG51bGxcbiAgdC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgIHJlc3RyaWN0LnN0YXJ0KGFyZyBhcyBhbnkpXG4gICAgcmVzdHJpY3Quc2V0KGFyZyBhcyBhbnkpXG4gIH0sICdubyBlcnJvcnMgd2l0aCBudWxsLXJlc29sdmluZyByZXN0cmljdGlvbicpXG5cbiAgb3B0aW9ucy5yZXN0cmljdGlvbiA9IHJlc3RyaWN0aW9uXG4gIHJlc3RyaWN0LnN0YXJ0KGFyZyBhcyBhbnkpXG5cbiAgYXJnLmNvb3JkcyA9IHsgeDogMCwgeTogMCB9XG4gIHJlc3RyaWN0LnNldChhcmcpXG4gIHQuZGVlcEVxdWFsKFxuICAgIGFyZy5jb29yZHMsXG4gICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgJ2FsbG93cyB0b3AgYW5kIGxlZnQgZWRnZSB2YWx1ZXMgdG8gYmUgbG93ZXIgdGhhbiB0aGUgcmVzdHJpY3Rpb24nXG4gIClcblxuICBhcmcuY29vcmRzID0geyB4OiByZXN0cmljdGlvbi5sZWZ0ICsgMTAsIHk6IHJlc3RyaWN0aW9uLnRvcCArIDEwIH1cbiAgcmVzdHJpY3Quc2V0KGFyZylcbiAgdC5kZWVwRXF1YWwoXG4gICAgYXJnLmNvb3JkcyxcbiAgICB7IHg6IHJlc3RyaWN0aW9uLmxlZnQgLSByZWN0LmxlZnQsIHk6IHJlc3RyaWN0aW9uLnRvcCAtIHJlY3QudG9wIH0sXG4gICAgJ2tlZXBzIHRoZSB0b3AgbGVmdCBlZGdlIHZhbHVlcyBsb3dlciB0aGFuIHRoZSByZXN0cmljdGlvbidcbiAgKVxuXG4gIGFyZy5jb29yZHMgPSB7IHg6IHJlc3RyaWN0aW9uLnJpZ2h0IC0gcmVjdC5yaWdodCAtIDEwLCB5OiByZXN0cmljdGlvbi5ib3R0b20gLSByZWN0LnJpZ2h0IC0gMTAgfVxuICByZXN0cmljdC5zZXQoYXJnKVxuICB0LmRlZXBFcXVhbChcbiAgICBhcmcuY29vcmRzLFxuICAgIHsgeDogcmVzdHJpY3Rpb24ucmlnaHQgLSByZWN0LnJpZ2h0LCB5OiByZXN0cmljdGlvbi5ib3R0b20gLSByZWN0LnJpZ2h0IH0sXG4gICAgJ2tlZXBzIHRoZSBib3R0b20gcmlnaHQgZWRnZSB2YWx1ZXMgaGlnaGVyIHRoYW4gdGhlIHJlc3RyaWN0aW9uJ1xuICApXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/modifiers/restrict/rect.d.ts b/packages/modifiers/restrict/rect.d.ts index 2ba9c34b0..6c282d09a 100644 --- a/packages/modifiers/restrict/rect.d.ts +++ b/packages/modifiers/restrict/rect.d.ts @@ -1,12 +1,10 @@ declare const restrictRect: { - start: ({ rect, startOffset, state, interaction, pageCoords }: import("../base").ModifierArg>) => void; + set: (arg: import("../base").ModifierArg>) => void; - set: ({ coords, interaction, state }: { - coords: any; - interaction: any; - state: any; - }) => void; defaults: import("./pointer").RestrictOptions & { elementRect: { top: number; diff --git a/packages/modifiers/restrict/rect.js b/packages/modifiers/restrict/rect.js index b807e3b1d..b66ee951c 100644 --- a/packages/modifiers/restrict/rect.js +++ b/packages/modifiers/restrict/rect.js @@ -1,15 +1,22 @@ -import extend from '@interactjs/utils/extend'; -import restrictPointer from './pointer'; +import extend from "../../utils/extend.js"; +import restrictPointer from "./pointer.js"; const defaults = extend({ - get elementRect() { - return { top: 0, left: 0, bottom: 1, right: 1 }; - }, - set elementRect(_) { }, + get elementRect() { + return { + top: 0, + left: 0, + bottom: 1, + right: 1 + }; + }, + + set elementRect(_) {} + }, restrictPointer.defaults); const restrictRect = { - start: restrictPointer.start, - set: restrictPointer.set, - defaults, + start: restrictPointer.start, + set: restrictPointer.set, + defaults }; export default restrictRect; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxlQUFlLE1BQU0sV0FBVyxDQUFBO0FBRXZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN0QixJQUFJLFdBQVc7UUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQ2pELENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBRSxDQUFDLElBQUcsQ0FBQztDQUN2QixFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUU1QixNQUFNLFlBQVksR0FBRztJQUNuQixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUs7SUFDNUIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHO0lBQ3hCLFFBQVE7Q0FDVCxDQUFBO0FBRUQsZUFBZSxZQUFZLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCByZXN0cmljdFBvaW50ZXIgZnJvbSAnLi9wb2ludGVyJ1xuXG5jb25zdCBkZWZhdWx0cyA9IGV4dGVuZCh7XG4gIGdldCBlbGVtZW50UmVjdCAoKSB7XG4gICAgcmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDEsIHJpZ2h0OiAxIH1cbiAgfSxcbiAgc2V0IGVsZW1lbnRSZWN0IChfKSB7fSxcbn0sIHJlc3RyaWN0UG9pbnRlci5kZWZhdWx0cylcblxuY29uc3QgcmVzdHJpY3RSZWN0ID0ge1xuICBzdGFydDogcmVzdHJpY3RQb2ludGVyLnN0YXJ0LFxuICBzZXQ6IHJlc3RyaWN0UG9pbnRlci5zZXQsXG4gIGRlZmF1bHRzLFxufVxuXG5leHBvcnQgZGVmYXVsdCByZXN0cmljdFJlY3RcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=rect.js.map \ No newline at end of file diff --git a/packages/modifiers/restrict/rect.js.map b/packages/modifiers/restrict/rect.js.map new file mode 100644 index 000000000..bde41059f --- /dev/null +++ b/packages/modifiers/restrict/rect.js.map @@ -0,0 +1,24 @@ +{ + "version": 3, + "sources": [ + "rect.ts" + ], + "names": [ + "extend", + "restrictPointer", + "defaults", + "elementRect", + "top", + "left", + "bottom", + "right", + "_", + "restrictRect", + "start", + "set" + ], + "mappings": "AAAA,OAAOA,MAAP;AACA,OAAOC,eAAP;AAEA,MAAMC,QAAQ,GAAGF,MAAM,CAAC;AACtB,MAAIG,WAAJ,GAAmB;AACjB,WAAO;AAAEC,MAAAA,GAAG,EAAE,CAAP;AAAUC,MAAAA,IAAI,EAAE,CAAhB;AAAmBC,MAAAA,MAAM,EAAE,CAA3B;AAA8BC,MAAAA,KAAK,EAAE;AAArC,KAAP;AACD,GAHqB;;AAItB,MAAIJ,WAAJ,CAAiBK,CAAjB,EAAoB,CAAE;;AAJA,CAAD,EAKpBP,eAAe,CAACC,QALI,CAAvB;AAOA,MAAMO,YAAY,GAAG;AACnBC,EAAAA,KAAK,EAAET,eAAe,CAACS,KADJ;AAEnBC,EAAAA,GAAG,EAAEV,eAAe,CAACU,GAFF;AAGnBT,EAAAA;AAHmB,CAArB;AAMA,eAAeO,YAAf", + "sourcesContent": [ + "import extend from '../../utils/extend'\nimport restrictPointer from './pointer'\n\nconst defaults = extend({\n get elementRect () {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect (_) {},\n}, restrictPointer.defaults)\n\nconst restrictRect = {\n start: restrictPointer.start,\n set: restrictPointer.set,\n defaults,\n}\n\nexport default restrictRect\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/restrict/size.js b/packages/modifiers/restrict/size.js index f89e8aa1d..d23e49627 100644 --- a/packages/modifiers/restrict/size.js +++ b/packages/modifiers/restrict/size.js @@ -1,55 +1,73 @@ -import extend from '@interactjs/utils/extend'; -import rectUtils from '@interactjs/utils/rect'; -import restrictEdges from './edges'; -const noMin = { width: -Infinity, height: -Infinity }; -const noMax = { width: +Infinity, height: +Infinity }; +import extend from "../../utils/extend.js"; +import rectUtils from "../../utils/rect.js"; +import restrictEdges from "./edges.js"; +import { getRestrictionRect } from "./pointer.js"; +const noMin = { + width: -Infinity, + height: -Infinity +}; +const noMax = { + width: +Infinity, + height: +Infinity +}; + function start(arg) { - return restrictEdges.start(arg); + return restrictEdges.start(arg); } + function set(arg) { - const { interaction, state } = arg; - const { options } = state; - const edges = interaction.prepared._linkedEdges || interaction.prepared.edges; - if (!edges) { - return; - } - const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted); - const minSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.min, interaction, arg.coords)) || noMin; - const maxSize = rectUtils.tlbrToXywh(restrictEdges.getRestrictionRect(options.max, interaction, arg.coords)) || noMax; - state.options = { - endOnly: options.endOnly, - inner: extend({}, restrictEdges.noInner), - outer: extend({}, restrictEdges.noOuter), - }; - if (edges.top) { - state.options.inner.top = rect.bottom - minSize.height; - state.options.outer.top = rect.bottom - maxSize.height; - } - else if (edges.bottom) { - state.options.inner.bottom = rect.top + minSize.height; - state.options.outer.bottom = rect.top + maxSize.height; - } - if (edges.left) { - state.options.inner.left = rect.right - minSize.width; - state.options.outer.left = rect.right - maxSize.width; - } - else if (edges.right) { - state.options.inner.right = rect.left + minSize.width; - state.options.outer.right = rect.left + maxSize.width; - } - restrictEdges.set(arg); - state.options = options; + const { + interaction, + state + } = arg; + const { + options + } = state; + const edges = interaction.prepared._linkedEdges || interaction.prepared.edges; + + if (!edges) { + return; + } + + const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted); + const minSize = rectUtils.tlbrToXywh(getRestrictionRect(options.min, interaction, arg.coords)) || noMin; + const maxSize = rectUtils.tlbrToXywh(getRestrictionRect(options.max, interaction, arg.coords)) || noMax; + state.options = { + endOnly: options.endOnly, + inner: extend({}, restrictEdges.noInner), + outer: extend({}, restrictEdges.noOuter) + }; + + if (edges.top) { + state.options.inner.top = rect.bottom - minSize.height; + state.options.outer.top = rect.bottom - maxSize.height; + } else if (edges.bottom) { + state.options.inner.bottom = rect.top + minSize.height; + state.options.outer.bottom = rect.top + maxSize.height; + } + + if (edges.left) { + state.options.inner.left = rect.right - minSize.width; + state.options.outer.left = rect.right - maxSize.width; + } else if (edges.right) { + state.options.inner.right = rect.left + minSize.width; + state.options.outer.right = rect.left + maxSize.width; + } + + restrictEdges.set(arg); + state.options = options; } + const defaults = { - min: null, - max: null, - endOnly: false, - enabled: false, + min: null, + max: null, + endOnly: false, + enabled: false }; const restrictSize = { - start, - set, - defaults, + start, + set, + defaults }; export default restrictSize; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sMEJBQTBCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFFOUMsT0FBTyxhQUFxQyxNQUFNLFNBQVMsQ0FBQTtBQUczRCxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtBQUNyRCxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtBQVNyRCxTQUFTLEtBQUssQ0FBRSxHQUFvQztJQUNsRCxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDakMsQ0FBQztBQVFELFNBQVMsR0FBRyxDQUFFLEdBQW1DO0lBQy9DLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFDekIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUE7SUFFN0UsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE9BQU07S0FDUDtJQUVELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVuRSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUE7SUFDckgsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFBO0lBRXJILEtBQUssQ0FBQyxPQUFPLEdBQUc7UUFDZCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDO0tBQ3pDLENBQUE7SUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7S0FDdkQ7U0FDSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDckIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO0tBQ3ZEO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQ2QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQTtRQUNyRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFBO0tBQ3REO1NBQ0ksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQTtLQUN0RDtJQUVELGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFdEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7QUFDekIsQ0FBQztBQUVELE1BQU0sUUFBUSxHQUF3QjtJQUNwQyxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsT0FBTyxFQUFFLEtBQUs7SUFDZCxPQUFPLEVBQUUsS0FBSztDQUNmLENBQUE7QUFFRCxNQUFNLFlBQVksR0FBRztJQUNuQixLQUFLO0lBQ0wsR0FBRztJQUNILFFBQVE7Q0FDVCxDQUFBO0FBRUQsZUFBZSxZQUFZLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCByZWN0VXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcmVjdCdcbmltcG9ydCB7IE1vZGlmaWVyQXJnLCBNb2RpZmllclN0YXRlIH0gZnJvbSAnLi4vYmFzZSdcbmltcG9ydCByZXN0cmljdEVkZ2VzLCB7IFJlc3RyaWN0RWRnZXNTdGF0ZSB9IGZyb20gJy4vZWRnZXMnXG5pbXBvcnQgeyBSZXN0cmljdE9wdGlvbnMgfSBmcm9tICcuL3BvaW50ZXInXG5cbmNvbnN0IG5vTWluID0geyB3aWR0aDogLUluZmluaXR5LCBoZWlnaHQ6IC1JbmZpbml0eSB9XG5jb25zdCBub01heCA9IHsgd2lkdGg6ICtJbmZpbml0eSwgaGVpZ2h0OiArSW5maW5pdHkgfVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RyaWN0U2l6ZU9wdGlvbnMge1xuICBtaW4/OiBJbnRlcmFjdC5TaXplIHwgSW50ZXJhY3QuUG9pbnQgfCBSZXN0cmljdE9wdGlvbnNbJ3Jlc3RyaWN0aW9uJ11cbiAgbWF4PzogSW50ZXJhY3QuU2l6ZSB8IEludGVyYWN0LlBvaW50IHwgUmVzdHJpY3RPcHRpb25zWydyZXN0cmljdGlvbiddXG4gIGVuZE9ubHk6IGJvb2xlYW5cbiAgZW5hYmxlZD86IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gc3RhcnQgKGFyZzogTW9kaWZpZXJBcmc8UmVzdHJpY3RFZGdlc1N0YXRlPikge1xuICByZXR1cm4gcmVzdHJpY3RFZGdlcy5zdGFydChhcmcpXG59XG5cbmV4cG9ydCB0eXBlIFJlc3RyaWN0U2l6ZVN0YXRlID1cbiAgUmVzdHJpY3RFZGdlc1N0YXRlICYgTW9kaWZpZXJTdGF0ZTxSZXN0cmljdFNpemVPcHRpb25zICYgeyBpbm5lcjogSW50ZXJhY3QuUmVjdCwgb3V0ZXI6IEludGVyYWN0LlJlY3QgfSwge1xuICAgIG1pbjogSW50ZXJhY3QuUmVjdFxuICAgIG1heDogSW50ZXJhY3QuUmVjdFxuICB9PlxuXG5mdW5jdGlvbiBzZXQgKGFyZzogTW9kaWZpZXJBcmc8UmVzdHJpY3RTaXplU3RhdGU+KSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24sIHN0YXRlIH0gPSBhcmdcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBzdGF0ZVxuICBjb25zdCBlZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLl9saW5rZWRFZGdlcyB8fCBpbnRlcmFjdGlvbi5wcmVwYXJlZC5lZGdlc1xuXG4gIGlmICghZWRnZXMpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSByZWN0VXRpbHMueHl3aFRvVGxicihpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5pbnZlcnRlZClcblxuICBjb25zdCBtaW5TaXplID0gcmVjdFV0aWxzLnRsYnJUb1h5d2gocmVzdHJpY3RFZGdlcy5nZXRSZXN0cmljdGlvblJlY3Qob3B0aW9ucy5taW4sIGludGVyYWN0aW9uLCBhcmcuY29vcmRzKSkgfHwgbm9NaW5cbiAgY29uc3QgbWF4U2l6ZSA9IHJlY3RVdGlscy50bGJyVG9YeXdoKHJlc3RyaWN0RWRnZXMuZ2V0UmVzdHJpY3Rpb25SZWN0KG9wdGlvbnMubWF4LCBpbnRlcmFjdGlvbiwgYXJnLmNvb3JkcykpIHx8IG5vTWF4XG5cbiAgc3RhdGUub3B0aW9ucyA9IHtcbiAgICBlbmRPbmx5OiBvcHRpb25zLmVuZE9ubHksXG4gICAgaW5uZXI6IGV4dGVuZCh7fSwgcmVzdHJpY3RFZGdlcy5ub0lubmVyKSxcbiAgICBvdXRlcjogZXh0ZW5kKHt9LCByZXN0cmljdEVkZ2VzLm5vT3V0ZXIpLFxuICB9XG5cbiAgaWYgKGVkZ2VzLnRvcCkge1xuICAgIHN0YXRlLm9wdGlvbnMuaW5uZXIudG9wID0gcmVjdC5ib3R0b20gLSBtaW5TaXplLmhlaWdodFxuICAgIHN0YXRlLm9wdGlvbnMub3V0ZXIudG9wID0gcmVjdC5ib3R0b20gLSBtYXhTaXplLmhlaWdodFxuICB9XG4gIGVsc2UgaWYgKGVkZ2VzLmJvdHRvbSkge1xuICAgIHN0YXRlLm9wdGlvbnMuaW5uZXIuYm90dG9tID0gcmVjdC50b3AgKyBtaW5TaXplLmhlaWdodFxuICAgIHN0YXRlLm9wdGlvbnMub3V0ZXIuYm90dG9tID0gcmVjdC50b3AgKyBtYXhTaXplLmhlaWdodFxuICB9XG4gIGlmIChlZGdlcy5sZWZ0KSB7XG4gICAgc3RhdGUub3B0aW9ucy5pbm5lci5sZWZ0ID0gcmVjdC5yaWdodCAtIG1pblNpemUud2lkdGhcbiAgICBzdGF0ZS5vcHRpb25zLm91dGVyLmxlZnQgPSByZWN0LnJpZ2h0IC0gbWF4U2l6ZS53aWR0aFxuICB9XG4gIGVsc2UgaWYgKGVkZ2VzLnJpZ2h0KSB7XG4gICAgc3RhdGUub3B0aW9ucy5pbm5lci5yaWdodCA9IHJlY3QubGVmdCArIG1pblNpemUud2lkdGhcbiAgICBzdGF0ZS5vcHRpb25zLm91dGVyLnJpZ2h0ID0gcmVjdC5sZWZ0ICsgbWF4U2l6ZS53aWR0aFxuICB9XG5cbiAgcmVzdHJpY3RFZGdlcy5zZXQoYXJnKVxuXG4gIHN0YXRlLm9wdGlvbnMgPSBvcHRpb25zXG59XG5cbmNvbnN0IGRlZmF1bHRzOiBSZXN0cmljdFNpemVPcHRpb25zID0ge1xuICBtaW46IG51bGwsXG4gIG1heDogbnVsbCxcbiAgZW5kT25seTogZmFsc2UsXG4gIGVuYWJsZWQ6IGZhbHNlLFxufVxuXG5jb25zdCByZXN0cmljdFNpemUgPSB7XG4gIHN0YXJ0LFxuICBzZXQsXG4gIGRlZmF1bHRzLFxufVxuXG5leHBvcnQgZGVmYXVsdCByZXN0cmljdFNpemVcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=size.js.map \ No newline at end of file diff --git a/packages/modifiers/restrict/size.js.map b/packages/modifiers/restrict/size.js.map index 5563f16c3..91b1631cb 100644 --- a/packages/modifiers/restrict/size.js.map +++ b/packages/modifiers/restrict/size.js.map @@ -1 +1,52 @@ -{"version":3,"file":"size.js","sourceRoot":"","sources":["size.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qDAAqD;AACrD,EAAE;AACF,4BAA4B;AAC5B,sCAAsC;AACtC,oBAAoB;AACpB,0CAA0C;AAC1C,0CAA0C;AAC1C,OAAO;AACP,MAAM;AAEN,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAC9C,OAAO,aAAa,MAAM,SAAS,CAAA;AAEnC,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAA;AACrD,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAA;AAErD,SAAS,KAAK,CAAE,GAAG;IACjB,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,GAAG,CAAE,GAAG;IACf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IAClC,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAA;IAE5E,IAAI,CAAC,KAAK,EAAE;QACV,OAAM;KACP;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAEnE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,KAAK,CAAA;IACzG,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,KAAK,CAAA;IAEzG,KAAK,CAAC,OAAO,GAAG;QACd,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC;QACxC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC;KACzC,CAAA;IAED,IAAI,KAAK,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QACtD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;KACvD;SACI,IAAI,KAAK,CAAC,MAAM,EAAE;QACrB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAA;QACtD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAA;KACvD;IACD,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QACrD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;KACtD;SACI,IAAI,KAAK,CAAC,KAAK,EAAE;QACpB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAA;QACrD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAA;KACtD;IAED,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEtB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;AACzB,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,KAAK;IACL,GAAG;IACH,QAAQ,EAAE;QACR,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;KACV;CACF,CAAA;AAED,eAAe,YAAY,CAAA"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "size.ts" + ], + "names": [ + "extend", + "rectUtils", + "restrictEdges", + "getRestrictionRect", + "noMin", + "width", + "Infinity", + "height", + "noMax", + "start", + "arg", + "set", + "interaction", + "state", + "options", + "edges", + "prepared", + "_linkedEdges", + "rect", + "xywhToTlbr", + "resizeRects", + "inverted", + "minSize", + "tlbrToXywh", + "min", + "coords", + "maxSize", + "max", + "endOnly", + "inner", + "noInner", + "outer", + "noOuter", + "top", + "bottom", + "left", + "right", + "defaults", + "enabled", + "restrictSize" + ], + "mappings": "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", + "sourcesContent": [ + "import extend from '../../utils/extend'\nimport rectUtils from '../../utils/rect'\nimport { ModifierArg, ModifierState } from '../base'\nimport restrictEdges, { RestrictEdgesState } from './edges'\nimport { getRestrictionRect, RestrictOptions } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n max?: Interact.Size | Interact.Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start (arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState =\n RestrictEdgesState & ModifierState\n\nfunction set (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared._linkedEdges || interaction.prepared.edges\n\n if (!edges) {\n return\n }\n\n const rect = rectUtils.xywhToTlbr(interaction.resizeRects.inverted)\n\n const minSize = rectUtils.tlbrToXywh(getRestrictionRect(options.min, interaction, arg.coords)) || noMin\n const maxSize = rectUtils.tlbrToXywh(getRestrictionRect(options.max, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n }\n else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n }\n else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default restrictSize\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/restrict/size.spec.js b/packages/modifiers/restrict/size.spec.js deleted file mode 100644 index 64df3a8ed..000000000 --- a/packages/modifiers/restrict/size.spec.js +++ /dev/null @@ -1,66 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import rectUtils from '@interactjs/utils/rect'; -import base from './../base'; -import restrictSize from './../restrict/size'; -test('restrictSize', t => { - const { interaction, } = helpers.testEnv(); - const edges = { left: true, top: true }; - const rect = { left: 0, top: 0, right: 200, bottom: 300 }; - 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'); - // min and max function restrictions - let minFuncArgs; - let maxFuncArgs; - options.min = (...args) => { - minFuncArgs = args; - return null; - }; - options.max = (...args) => { - maxFuncArgs = args; - return null; - }; - restrictSize.set(arg); - t.deepEqual(minFuncArgs, [arg.coords.x, arg.coords.y, interaction], 'correct args are passed to min function restriction'); - t.deepEqual(maxFuncArgs, [arg.coords.x, arg.coords.y, interaction], 'correct args are passed to max function restriction'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2l6ZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFDOUMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBO0FBRTdDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdkIsTUFBTSxFQUNKLFdBQVcsR0FDWixHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBRXpELFdBQVcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDckMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2xDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsRUFBUyxDQUFBO0lBQ25DLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDN0QsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFTLENBQUE7SUFDakMsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFFL0IsTUFBTSxPQUFPLEdBQUc7UUFDZCxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRyxF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SUFBSSxDQUFBO0lBQ2IsQ0FBQyxDQUFBO0lBRUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFVLENBQUMsQ0FBQTtJQUU1QixDQUFDLENBQUMsU0FBUyxDQUNULFdBQVcsRUFDWCxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUN6QyxxREFBcUQsQ0FDdEQsQ0FBQTtJQUVELENBQUMsQ0FBQyxTQUFTLENBQ1QsV0FBVyxFQUNYLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQ3pDLHFEQUFxRCxDQUN0RCxDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9faGVscGVycydcbmltcG9ydCByZWN0VXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcmVjdCdcbmltcG9ydCBiYXNlIGZyb20gJy4vLi4vYmFzZSdcbmltcG9ydCByZXN0cmljdFNpemUgZnJvbSAnLi8uLi9yZXN0cmljdC9zaXplJ1xuXG50ZXN0KCdyZXN0cmljdFNpemUnLCB0ID0+IHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9uLFxuICB9ID0gaGVscGVycy50ZXN0RW52KClcbiAgY29uc3QgZWRnZXMgPSB7IGxlZnQ6IHRydWUsIHRvcDogdHJ1ZSB9XG4gIGNvbnN0IHJlY3QgPSB7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IDIwMCwgYm90dG9tOiAzMDAgfVxuXG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0geyBuYW1lOiBudWxsIH1cbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMgPSBlZGdlc1xuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cyA9IHt9IGFzIGFueVxuICBpbnRlcmFjdGlvbi5yZXNpemVSZWN0cy5pbnZlcnRlZCA9IHJlY3RVdGlscy54eXdoVG9UbGJyKHJlY3QpXG4gIGludGVyYWN0aW9uLm1vZGlmaWVycyA9IHt9IGFzIGFueVxuICBpbnRlcmFjdGlvbi5faW50ZXJhY3RpbmcgPSB0cnVlXG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtaW46IHsgd2lkdGg6ICA2MCwgaGVpZ2h0OiAgNTAgfSBhcyBhbnksXG4gICAgbWF4OiB7IHdpZHRoOiAzMDAsIGhlaWdodDogMzUwIH0gYXMgYW55LFxuICB9XG4gIGNvbnN0IHN0YXJ0Q29vcmRzID0gT2JqZWN0LmZyZWV6ZSh7IHg6IDAsIHk6IDAgfSlcbiAgY29uc3Qgb2Zmc2V0ID0geyB0b3A6IDAsIGJvdHRvbTogMCwgbGVmdDogMCwgcmlnaHQ6IDAgfVxuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBvcHRpb25zLFxuICAgIG9mZnNldCxcbiAgICBtZXRob2RzOiByZXN0cmljdFNpemUsXG4gIH1cbiAgY29uc3QgYXJnOiBhbnkgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgc3RhdGVzOiBbc3RhdGVdLFxuICAgIGNvb3Jkczogc3RhcnRDb29yZHMsXG4gICAgcGFnZUNvb3Jkczogc3RhcnRDb29yZHMsXG4gICAgb3B0aW9ucyxcbiAgICBzdGF0ZTogbnVsbCxcbiAgfVxuXG4gIGludGVyYWN0aW9uLm1vZGlmaWVycy5zdGFydE9mZnNldCA9IGJhc2UuZ2V0UmVjdE9mZnNldChyZWN0LCBzdGFydENvb3JkcylcbiAgYmFzZS5zdGFydEFsbChhcmcpXG4gIGFyZy5zdGF0ZSA9IHN0YXRlXG5cbiAgY29uc3QgbW92ZTEgPSBPYmplY3QuZnJlZXplKHsgeDogLTUwLCB5OiAtNDAgfSlcbiAgYXJnLmNvb3JkcyA9IHsgLi4ubW92ZTEgfVxuICByZXN0cmljdFNpemUuc2V0KGFyZyBhcyBhbnkpXG5cbiAgdC5kZWVwRXF1YWwoYXJnLmNvb3JkcywgbW92ZTEsICd3aXRoaW4gYm90aCBtaW4gYW5kIG1heCcpXG5cbiAgY29uc3QgbW92ZTIgPSBPYmplY3QuZnJlZXplKHsgeDogLTIwMCwgeTogLTMwMCB9KVxuICBhcmcuY29vcmRzID0geyAuLi5tb3ZlMiB9XG4gIHJlc3RyaWN0U2l6ZS5zZXQoYXJnIGFzIGFueSlcblxuICB0LmRlZXBFcXVhbChhcmcuY29vcmRzLCB7IHg6IC0xMDAsIHk6IC01MCB9LCAnb3V0c2lkZSBtYXgnKVxuXG4gIGNvbnN0IG1vdmUzID0gT2JqZWN0LmZyZWV6ZSh7IHg6IDI1MCwgeTogMzIwIH0pXG4gIGFyZy5jb29yZHMgPSB7IC4uLm1vdmUzIH1cbiAgcmVzdHJpY3RTaXplLnNldChhcmcgYXMgYW55KVxuXG4gIHQuZGVlcEVxdWFsKGFyZy5jb29yZHMsIHsgeDogMTQwLCB5OiAyNTAgfSwgJ291dHNpZGUgbWluJylcblxuICAvLyBtaW4gYW5kIG1heCBmdW5jdGlvbiByZXN0cmljdGlvbnNcbiAgbGV0IG1pbkZ1bmNBcmdzXG4gIGxldCBtYXhGdW5jQXJnc1xuXG4gIG9wdGlvbnMubWluID0gKC4uLmFyZ3MpID0+IHtcbiAgICBtaW5GdW5jQXJncyA9IGFyZ3NcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIG9wdGlvbnMubWF4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICBtYXhGdW5jQXJncyA9IGFyZ3NcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmVzdHJpY3RTaXplLnNldChhcmcgYXMgYW55KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG1pbkZ1bmNBcmdzLFxuICAgIFthcmcuY29vcmRzLngsIGFyZy5jb29yZHMueSwgaW50ZXJhY3Rpb25dLFxuICAgICdjb3JyZWN0IGFyZ3MgYXJlIHBhc3NlZCB0byBtaW4gZnVuY3Rpb24gcmVzdHJpY3Rpb24nLFxuICApXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgbWF4RnVuY0FyZ3MsXG4gICAgW2FyZy5jb29yZHMueCwgYXJnLmNvb3Jkcy55LCBpbnRlcmFjdGlvbl0sXG4gICAgJ2NvcnJlY3QgYXJncyBhcmUgcGFzc2VkIHRvIG1heCBmdW5jdGlvbiByZXN0cmljdGlvbicsXG4gIClcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/modifiers/snap/edges.d.ts b/packages/modifiers/snap/edges.d.ts index e46413565..994c06c61 100644 --- a/packages/modifiers/snap/edges.d.ts +++ b/packages/modifiers/snap/edges.d.ts @@ -32,6 +32,6 @@ declare function set(arg: any): void; declare const snapEdges: { start: typeof start; set: typeof set; - defaults: Pick; + defaults: Pick; }; export default snapEdges; diff --git a/packages/modifiers/snap/edges.js b/packages/modifiers/snap/edges.js index 7b74a1ea0..e408ee68c 100644 --- a/packages/modifiers/snap/edges.js +++ b/packages/modifiers/snap/edges.js @@ -25,28 +25,34 @@ * }, * }) */ -import clone from '@interactjs/utils/clone'; -import extend from '@interactjs/utils/extend'; -import snapSize from './size'; +import clone from "../../utils/clone.js"; +import extend from "../../utils/extend.js"; +import snapSize from "./size.js"; + function start(arg) { - const edges = arg.interaction.prepared.edges; - if (!edges) { - return null; - } - arg.state.targetFields = arg.state.targetFields || [ - [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'], - ]; - return snapSize.start(arg); + const edges = arg.interaction.prepared.edges; + + if (!edges) { + return null; + } + + arg.state.targetFields = arg.state.targetFields || [[edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom']]; + return snapSize.start(arg); } + function set(arg) { - return snapSize.set(arg); + return snapSize.set(arg); } + const snapEdges = { - start, - set, - defaults: extend(clone(snapSize.defaults), { - offset: { x: 0, y: 0 }, - }), + start, + set, + defaults: extend(clone(snapSize.defaults), { + offset: { + x: 0, + y: 0 + } + }) }; export default snapEdges; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEtBQUssTUFBTSx5QkFBeUIsQ0FBQTtBQUMzQyxPQUFPLE1BQU0sTUFBTSwwQkFBMEIsQ0FBQTtBQUc3QyxPQUFPLFFBQTZCLE1BQU0sUUFBUSxDQUFBO0FBRWxELFNBQVMsS0FBSyxDQUFFLEdBQTJCO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQTtJQUU1QyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUE7S0FBRTtJQUUzQixHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSTtRQUNqRCxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQzlELENBQUE7SUFFRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDNUIsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFFLEdBQUc7SUFDZixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDMUIsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHO0lBQ2hCLEtBQUs7SUFDTCxHQUFHO0lBQ0gsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBb0IsRUFBRTtRQUM1RCxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7S0FDWixDQUFDO0NBQ2QsQ0FBQTtBQUVELGVBQWUsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIG1vZGlmaWVycy9zbmFwRWRnZXNcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgbW9kdWxlIGFsbG93cyBzbmFwcGluZyBvZiB0aGUgZWRnZXMgb2YgdGFyZ2V0cyBkdXJpbmcgcmVzaXplXG4gKiBpbnRlcmFjdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGludGVyYWN0KHRhcmdldCkucmVzaXphYmxlKHtcbiAqICAgc25hcEVkZ2VzOiB7XG4gKiAgICAgdGFyZ2V0czogW2ludGVyYWN0LnNuYXBwZXJzLmdyaWQoeyB4OiAxMDAsIHk6IDUwIH0pXSxcbiAqICAgfSxcbiAqIH0pXG4gKlxuICogaW50ZXJhY3QodGFyZ2V0KS5yZXNpemFibGUoe1xuICogICBzbmFwRWRnZXM6IHtcbiAqICAgICB0YXJnZXRzOiBbXG4gKiAgICAgICBpbnRlcmFjdC5zbmFwcGVycy5ncmlkKHtcbiAqICAgICAgICB0b3A6IDUwLFxuICogICAgICAgIGxlZnQ6IDUwLFxuICogICAgICAgIGJvdHRvbTogMTAwLFxuICogICAgICAgIHJpZ2h0OiAxMDAsXG4gKiAgICAgICB9KSxcbiAqICAgICBdLFxuICogICB9LFxuICogfSlcbiAqL1xuXG5pbXBvcnQgY2xvbmUgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvY2xvbmUnXG5pbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcbmltcG9ydCB7IE1vZGlmaWVyQXJnIH0gZnJvbSAnLi4vYmFzZSdcbmltcG9ydCB7IFNuYXBTdGF0ZSB9IGZyb20gJy4vcG9pbnRlcidcbmltcG9ydCBzbmFwU2l6ZSwgeyBTbmFwU2l6ZU9wdGlvbnMgfSBmcm9tICcuL3NpemUnXG5cbmZ1bmN0aW9uIHN0YXJ0IChhcmc6IE1vZGlmaWVyQXJnPFNuYXBTdGF0ZT4pIHtcbiAgY29uc3QgZWRnZXMgPSBhcmcuaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXNcblxuICBpZiAoIWVkZ2VzKSB7IHJldHVybiBudWxsIH1cblxuICBhcmcuc3RhdGUudGFyZ2V0RmllbGRzID0gYXJnLnN0YXRlLnRhcmdldEZpZWxkcyB8fCBbXG4gICAgW2VkZ2VzLmxlZnQgPyAnbGVmdCcgOiAncmlnaHQnLCBlZGdlcy50b3AgPyAndG9wJyA6ICdib3R0b20nXSxcbiAgXVxuXG4gIHJldHVybiBzbmFwU2l6ZS5zdGFydChhcmcpXG59XG5cbmZ1bmN0aW9uIHNldCAoYXJnKSB7XG4gIHJldHVybiBzbmFwU2l6ZS5zZXQoYXJnKVxufVxuXG5jb25zdCBzbmFwRWRnZXMgPSB7XG4gIHN0YXJ0LFxuICBzZXQsXG4gIGRlZmF1bHRzOiBleHRlbmQoY2xvbmUoc25hcFNpemUuZGVmYXVsdHMpIGFzIFNuYXBTaXplT3B0aW9ucywge1xuICAgIG9mZnNldDogeyB4OiAwLCB5OiAwIH0sXG4gIH0gYXMgdW5rbm93biksXG59XG5cbmV4cG9ydCBkZWZhdWx0IHNuYXBFZGdlc1xuIl19 \ No newline at end of file +//# sourceMappingURL=edges.js.map \ No newline at end of file diff --git a/packages/modifiers/snap/edges.js.map b/packages/modifiers/snap/edges.js.map index fa0f8f566..6f1e8df25 100644 --- a/packages/modifiers/snap/edges.js.map +++ b/packages/modifiers/snap/edges.js.map @@ -1 +1,30 @@ -{"version":3,"file":"edges.js","sourceRoot":"","sources":["edges.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAC3C,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,QAAQ,MAAM,QAAQ,CAAA;AAE7B,SAAS,OAAO,CAAE,KAAY;IAC5B,MAAM,EACJ,QAAQ,GACT,GAAG,KAAK,CAAA;IAET,QAAQ,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAA;AACnD,CAAC;AAED,SAAS,KAAK,CAAE,GAAG;IACjB,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAA;IAE5C,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAE3B,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI;QACjD,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;KAC9D,CAAA;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,GAAG,CAAE,GAAG;IACf,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,SAAS,GAAG;IAChB,OAAO;IACP,KAAK;IACL,GAAG;IACH,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACzC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;KACvB,CAAC;CACH,CAAA;AAED,eAAe,SAAS,CAAA"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "edges.ts" + ], + "names": [ + "clone", + "extend", + "snapSize", + "start", + "arg", + "edges", + "interaction", + "prepared", + "state", + "targetFields", + "left", + "top", + "set", + "snapEdges", + "defaults", + "offset", + "x", + "y" + ], + "mappings": "AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,OAAOA,KAAP;AACA,OAAOC,MAAP;AAGA,OAAOC,QAAP;;AAEA,SAASC,KAAT,CAAgBC,GAAhB,EAA6C;AAC3C,QAAMC,KAAK,GAAGD,GAAG,CAACE,WAAJ,CAAgBC,QAAhB,CAAyBF,KAAvC;;AAEA,MAAI,CAACA,KAAL,EAAY;AAAE,WAAO,IAAP;AAAa;;AAE3BD,EAAAA,GAAG,CAACI,KAAJ,CAAUC,YAAV,GAAyBL,GAAG,CAACI,KAAJ,CAAUC,YAAV,IAA0B,CACjD,CAACJ,KAAK,CAACK,IAAN,GAAa,MAAb,GAAsB,OAAvB,EAAgCL,KAAK,CAACM,GAAN,GAAY,KAAZ,GAAoB,QAApD,CADiD,CAAnD;AAIA,SAAOT,QAAQ,CAACC,KAAT,CAAeC,GAAf,CAAP;AACD;;AAED,SAASQ,GAAT,CAAcR,GAAd,EAAmB;AACjB,SAAOF,QAAQ,CAACU,GAAT,CAAaR,GAAb,CAAP;AACD;;AAED,MAAMS,SAAS,GAAG;AAChBV,EAAAA,KADgB;AAEhBS,EAAAA,GAFgB;AAGhBE,EAAAA,QAAQ,EAAEb,MAAM,CAACD,KAAK,CAACE,QAAQ,CAACY,QAAV,CAAN,EAA8C;AAC5DC,IAAAA,MAAM,EAAE;AAAEC,MAAAA,CAAC,EAAE,CAAL;AAAQC,MAAAA,CAAC,EAAE;AAAX;AADoD,GAA9C;AAHA,CAAlB;AAQA,eAAeJ,SAAf", + "sourcesContent": [ + "/**\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 '../../utils/clone'\nimport extend from '../../utils/extend'\nimport { ModifierArg } from '../base'\nimport { SnapState } from './pointer'\nimport snapSize, { SnapSizeOptions } from './size'\n\nfunction start (arg: ModifierArg) {\n const edges = arg.interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nfunction set (arg) {\n return snapSize.set(arg)\n}\n\nconst snapEdges = {\n start,\n set,\n defaults: extend(clone(snapSize.defaults) as SnapSizeOptions, {\n offset: { x: 0, y: 0 },\n } as unknown),\n}\n\nexport default snapEdges\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/snap/edges.spec.js b/packages/modifiers/snap/edges.spec.js deleted file mode 100644 index af362d378..000000000 --- a/packages/modifiers/snap/edges.spec.js +++ /dev/null @@ -1,44 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import snapEdges from '../snap/edges'; -test('modifiers/snap/edges', t => { - const rect = { top: 0, left: 0, bottom: 100, right: 100 }; - const { interaction, interactable, } = helpers.testEnv({ rect }); - interaction.interactable = interactable; - 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.interactable, - 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVkZ2VzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sNEJBQTRCLENBQUE7QUFDN0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxpQ0FBaUMsQ0FBQTtBQUMxRCxPQUFPLFNBQVMsTUFBTSxlQUFlLENBQUE7QUFFckMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQy9CLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBQ3pELE1BQU0sRUFDSixXQUFXLEVBQ1gsWUFBWSxHQUNiLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDN0IsV0FBVyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7SUFDdkMsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFFL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLEVBQUUsRUFBRTtRQUNSLEtBQUssRUFBRSxHQUFHO1FBQ1YsR0FBRyxFQUFFLENBQUM7UUFDTixNQUFNLEVBQUUsR0FBRztLQUNaLENBQUMsQ0FBQTtJQUNGLE1BQU0sT0FBTyxHQUFHO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsRUFBRSxHQUFHLE9BQU8sRUFBRTtTQUNmO1FBQ0QsS0FBSyxFQUFFLFFBQVE7S0FDaEIsQ0FBQTtJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2hELE1BQU0sR0FBRyxHQUFHO1FBQ1YsV0FBVztRQUNYLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtRQUN0QyxLQUFLLEVBQUUsSUFBSTtRQUNYLFVBQVU7UUFDVixNQUFNLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRTtRQUN6QixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ3pCLENBQUE7SUFFRCx1QkFBdUI7SUFDdkIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUV0RCxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDdkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFVLENBQUMsQ0FBQTtJQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRWxCLENBQUMsQ0FBQyxTQUFTLENBQ1QsR0FBRyxDQUFDLE1BQU0sRUFDVixFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ25DLDZCQUE2QixDQUFDLENBQUE7SUFFaEMsMkJBQTJCO0lBQzNCLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFFMUQsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ3ZCLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBVSxDQUFDLENBQUE7SUFDM0IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVsQixDQUFDLENBQUMsU0FBUyxDQUNULEdBQUcsQ0FBQyxNQUFNLEVBQ1YsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUN2Qyw0QkFBNEIsQ0FBQyxDQUFBO0lBRS9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJ0BpbnRlcmFjdGpzL2NvcmUvdGVzdHMvX2hlbHBlcnMnXG5pbXBvcnQgc25hcEVkZ2VzIGZyb20gJy4uL3NuYXAvZWRnZXMnXG5cbnRlc3QoJ21vZGlmaWVycy9zbmFwL2VkZ2VzJywgdCA9PiB7XG4gIGNvbnN0IHJlY3QgPSB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAxMDAsIHJpZ2h0OiAxMDAgfVxuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgaW50ZXJhY3RhYmxlLFxuICB9ID0gaGVscGVycy50ZXN0RW52KHsgcmVjdCB9KVxuICBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUgPSBpbnRlcmFjdGFibGVcbiAgaW50ZXJhY3Rpb24uX2ludGVyYWN0aW5nID0gdHJ1ZVxuXG4gIGNvbnN0IHRhcmdldDAgPSBPYmplY3QuZnJlZXplKHtcbiAgICBsZWZ0OiA1MCxcbiAgICByaWdodDogMTUwLFxuICAgIHRvcDogMCxcbiAgICBib3R0b206IDEwMCxcbiAgfSlcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICB0YXJnZXRzOiBbXG4gICAgICB7IC4uLnRhcmdldDAgfSxcbiAgICBdLFxuICAgIHJhbmdlOiBJbmZpbml0eSxcbiAgfVxuICBjb25zdCBwYWdlQ29vcmRzID0gT2JqZWN0LmZyZWV6ZSh7IHg6IDAsIHk6IDAgfSlcbiAgY29uc3QgYXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIGludGVyYWN0YWJsZTogaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlLFxuICAgIHN0YXRlOiBudWxsLFxuICAgIHBhZ2VDb29yZHMsXG4gICAgY29vcmRzOiB7IC4uLnBhZ2VDb29yZHMgfSxcbiAgICBvZmZzZXQ6IFt7IHg6IDAsIHk6IDAgfV0sXG4gIH1cblxuICAvLyByZXNpemUgZnJvbSB0b3AgbGVmdFxuICBpbnRlcmFjdGlvbi5wcmVwYXJlZC5lZGdlcyA9IHsgdG9wOiB0cnVlLCBsZWZ0OiB0cnVlIH1cblxuICBhcmcuc3RhdGUgPSB7IG9wdGlvbnMgfVxuICBzbmFwRWRnZXMuc3RhcnQoYXJnIGFzIGFueSlcbiAgc25hcEVkZ2VzLnNldChhcmcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgYXJnLmNvb3JkcyxcbiAgICB7IHg6IHRhcmdldDAubGVmdCwgeTogdGFyZ2V0MC50b3AgfSxcbiAgICAnbW9kaWZpZWQgY29vcmRzIGFyZSBjb3JyZWN0JylcblxuICAvLyByZXNpemUgZnJvbSBib3R0b20gcmlnaHRcbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQuZWRnZXMgPSB7IGJvdHRvbTogdHJ1ZSwgcmlnaHQ6IHRydWUgfVxuXG4gIGFyZy5zdGF0ZSA9IHsgb3B0aW9ucyB9XG4gIHNuYXBFZGdlcy5zdGFydChhcmcgYXMgYW55KVxuICBzbmFwRWRnZXMuc2V0KGFyZylcblxuICB0LmRlZXBFcXVhbChcbiAgICBhcmcuY29vcmRzLFxuICAgIHsgeDogdGFyZ2V0MC5yaWdodCwgeTogdGFyZ2V0MC5ib3R0b20gfSxcbiAgICAnbW9kaWZpZWQgY29vcmQgYXJlIGNvcnJlY3QnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/modifiers/snap/pointer.js b/packages/modifiers/snap/pointer.js index 86fb3366c..6ad269230 100644 --- a/packages/modifiers/snap/pointer.js +++ b/packages/modifiers/snap/pointer.js @@ -1,144 +1,178 @@ -import * as utils from '@interactjs/utils'; +import * as utils from "../../utils/index.js"; + function start(arg) { - const { interaction, interactable, element, rect, state, startOffset } = arg; - const { options } = state; - const offsets = []; - const origin = options.offsetWithOrigin - ? getOrigin(arg) - : { x: 0, y: 0 }; - let snapOffset; - if (options.offset === 'startCoords') { - snapOffset = { - x: interaction.coords.start.page.x, - y: interaction.coords.start.page.y, - }; - } - else { - const offsetRect = utils.rect.resolveRectLike(options.offset, interactable, element, [interaction]); - snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 }; - snapOffset.x += origin.x; - snapOffset.y += origin.y; - } - const relativePoints = options.relativePoints || []; - if (rect && options.relativePoints && options.relativePoints.length) { - for (let index = 0; index < relativePoints.length; index++) { - const relativePoint = relativePoints[index]; - offsets.push({ - index, - relativePoint, - x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x, - y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y, - }); - } - } - else { - offsets.push(utils.extend({ - index: 0, - relativePoint: null, - }, snapOffset)); + const { + interaction, + interactable, + element, + rect, + state, + startOffset + } = arg; + const { + options + } = state; + const offsets = []; + const origin = options.offsetWithOrigin ? getOrigin(arg) : { + x: 0, + y: 0 + }; + let snapOffset; + + if (options.offset === 'startCoords') { + snapOffset = { + x: interaction.coords.start.page.x, + y: interaction.coords.start.page.y + }; + } else { + const offsetRect = utils.rect.resolveRectLike(options.offset, interactable, element, [interaction]); + snapOffset = utils.rect.rectToXY(offsetRect) || { + x: 0, + y: 0 + }; + snapOffset.x += origin.x; + snapOffset.y += origin.y; + } + + const relativePoints = options.relativePoints || []; + + if (rect && options.relativePoints && options.relativePoints.length) { + for (let index = 0; index < relativePoints.length; index++) { + const relativePoint = relativePoints[index]; + offsets.push({ + index, + relativePoint, + x: startOffset.left - rect.width * relativePoint.x + snapOffset.x, + y: startOffset.top - rect.height * relativePoint.y + snapOffset.y + }); } - state.offsets = offsets; + } else { + offsets.push(utils.extend({ + index: 0, + relativePoint: null + }, snapOffset)); + } + + state.offsets = offsets; } + function set(arg) { - const { interaction, coords, state } = arg; - const { options, offsets } = state; - const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name); - const page = utils.extend({}, coords); - const targets = []; - let target; - if (!options.offsetWithOrigin) { - page.x -= origin.x; - page.y -= origin.y; - } - state.realX = page.x; - state.realY = page.y; - for (const offset of offsets) { - const relativeX = page.x - offset.x; - const relativeY = page.y - offset.y; - for (let index = 0, len = options.targets.length; index < len; index++) { - const snapTarget = options.targets[index]; - if (utils.is.func(snapTarget)) { - target = snapTarget(relativeX, relativeY, interaction, offset, index); - } - else { - target = snapTarget; - } - if (!target) { - continue; - } - targets.push({ - x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x, - y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y, - range: utils.is.number(target.range) ? target.range : options.range, - }); - } + const { + interaction, + coords, + state + } = arg; + const { + options, + offsets + } = state; + const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name); + const page = utils.extend({}, coords); + const targets = []; + let target; + + if (!options.offsetWithOrigin) { + page.x -= origin.x; + page.y -= origin.y; + } + + state.realX = page.x; + state.realY = page.y; + + for (const offset of offsets) { + const relativeX = page.x - offset.x; + const relativeY = page.y - offset.y; + + for (let index = 0, len = options.targets.length; index < len; index++) { + const snapTarget = options.targets[index]; + + if (utils.is.func(snapTarget)) { + target = snapTarget(relativeX, relativeY, interaction, offset, index); + } else { + target = snapTarget; + } + + if (!target) { + continue; + } + + targets.push({ + x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x, + y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y, + range: utils.is.number(target.range) ? target.range : options.range + }); } - const closest = { - target: null, - inRange: false, - distance: 0, - range: 0, - dx: 0, - dy: 0, - }; - for (let i = 0, len = targets.length; i < len; i++) { - target = targets[i]; - const range = target.range; - const dx = target.x - page.x; - const dy = target.y - page.y; - const distance = utils.hypot(dx, dy); - let inRange = distance <= range; - // Infinite targets count as being out of range - // compared to non infinite ones that are in range - if (range === Infinity && closest.inRange && closest.range !== Infinity) { - inRange = false; - } - if (!closest.target || (inRange - // is the closest target in range? - ? (closest.inRange && range !== Infinity - // the pointer is relatively deeper in this target - ? distance / range < closest.distance / closest.range - // this target has Infinite range and the closest doesn't - : (range === Infinity && closest.range !== Infinity) || - // OR this target is closer that the previous closest - distance < closest.distance) - // The other is not in range and the pointer is closer to this target - : (!closest.inRange && distance < closest.distance))) { - closest.target = target; - closest.distance = distance; - closest.range = range; - closest.inRange = inRange; - closest.dx = dx; - closest.dy = dy; - state.range = range; - } + } + + const closest = { + target: null, + inRange: false, + distance: 0, + range: 0, + dx: 0, + dy: 0 + }; + + for (let i = 0, len = targets.length; i < len; i++) { + target = targets[i]; + const range = target.range; + const dx = target.x - page.x; + const dy = target.y - page.y; + const distance = utils.hypot(dx, dy); + let inRange = distance <= range; // Infinite targets count as being out of range + // compared to non infinite ones that are in range + + if (range === Infinity && closest.inRange && closest.range !== Infinity) { + inRange = false; } - if (closest.inRange) { - coords.x = closest.target.x; - coords.y = closest.target.y; + + if (!closest.target || (inRange // is the closest target in range? + ? closest.inRange && range !== Infinity // the pointer is relatively deeper in this target + ? distance / range < closest.distance / closest.range // this target has Infinite range and the closest doesn't + : range === Infinity && closest.range !== Infinity || // OR this target is closer that the previous closest + distance < closest.distance : // The other is not in range and the pointer is closer to this target + !closest.inRange && distance < closest.distance)) { + closest.target = target; + closest.distance = distance; + closest.range = range; + closest.inRange = inRange; + closest.dx = dx; + closest.dy = dy; + state.range = range; } - state.closest = closest; + } + + if (closest.inRange) { + coords.x = closest.target.x; + coords.y = closest.target.y; + } + + state.closest = closest; } + function getOrigin(arg) { - const { element } = arg.interaction; - const optionsOrigin = utils.rect.rectToXY(utils.rect.resolveRectLike(arg.state.options.origin, null, null, [element])); - const origin = optionsOrigin || utils.getOriginXY(arg.interactable, element, arg.interaction.prepared.name); - return origin; + const { + element + } = arg.interaction; + const optionsOrigin = utils.rect.rectToXY(utils.rect.resolveRectLike(arg.state.options.origin, null, null, [element])); + const origin = optionsOrigin || utils.getOriginXY(arg.interactable, element, arg.interaction.prepared.name); + return origin; } + const defaults = { - range: Infinity, - targets: null, - offset: null, - offsetWithOrigin: true, - origin: null, - relativePoints: null, - endOnly: false, - enabled: false, + range: Infinity, + targets: null, + offset: null, + offsetWithOrigin: true, + origin: null, + relativePoints: null, + endOnly: false, + enabled: false }; const snap = { - start, - set, - defaults, + start, + set, + defaults }; export default snap; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQXdDMUMsU0FBUyxLQUFLLENBQUUsR0FBMkI7SUFDekMsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQzVFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFDekIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0I7UUFDckMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDaEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFFbEIsSUFBSSxVQUFVLENBQUE7SUFFZCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFO1FBQ3BDLFVBQVUsR0FBRztZQUNYLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkMsQ0FBQTtLQUNGO1NBQ0s7UUFDSixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBYSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBRTFHLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMs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RSxJQUFJO0lBQ1osZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QixNQUFNLEVBQUUsSUFBSTtJQUNaLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLE9BQU8sRUFBRSxLQUFLO0lBQ2QsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFBO0FBQ0QsTUFBTSxJQUFJLEdBQUc7SUFDWCxLQUFLO0lBQ0wsR0FBRztJQUNILFFBQVE7Q0FDVCxDQUFBO0FBRUQsZUFBZSxJQUFJLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcbmltcG9ydCB7IE1vZGlmaWVyQXJnLCBNb2RpZmllclN0YXRlIH0gZnJvbSAnLi4vYmFzZSdcblxuZXhwb3J0IGludGVyZmFjZSBTbmFwUG9zaXRpb24ge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIHJhbmdlPzogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFNuYXBGdW5jdGlvbiA9IChcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvbixcbiAgb2Zmc2V0OiBJbnRlcmFjdC5Qb2ludCxcbiAgaW5kZXg6IG51bWJlclxuKSA9PiBTbmFwUG9zaXRpb25cbmV4cG9ydCB0eXBlIFNuYXBUYXJnZXQgPSBTbmFwUG9zaXRpb24gfCBTbmFwRnVuY3Rpb25cbmV4cG9ydCBpbnRlcmZhY2UgU25hcE9wdGlvbnMge1xuICB0YXJnZXRzOiBTbmFwVGFyZ2V0W11cbiAgLy8gdGFyZ2V0IHJhbmdlXG4gIHJhbmdlOiBudW1iZXJcbiAgLy8gc2VsZiBwb2ludHMgZm9yIHNuYXBwaW5nLiBbMCwwXSA9IHRvcCBsZWZ0LCBbMSwxXSA9IGJvdHRvbSByaWdodFxuICByZWxhdGl2ZVBvaW50czogSW50ZXJhY3QuUG9pbnRbXVxuICAvLyBzdGFydENvb3JkcyA9IG9mZnNldCBzbmFwcGluZyBmcm9tIGRyYWcgc3RhcnQgcGFnZSBwb3NpdGlvblxuICBvZmZzZXQ6IEludGVyYWN0LlBvaW50IHwgSW50ZXJhY3QuUmVjdFJlc29sdmFibGU8W0ludGVyYWN0LkludGVyYWN0aW9uXT4gfCAnc3RhcnRDb29yZHMnXG4gIG9mZnNldFdpdGhPcmlnaW4/OiBib29sZWFuXG4gIG9yaWdpbjogSW50ZXJhY3QuUmVjdFJlc29sdmFibGU8W0ludGVyYWN0LkVsZW1lbnRdPiB8IEludGVyYWN0LlBvaW50XG4gIGVuZE9ubHk/OiBib29sZWFuXG4gIGVuYWJsZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIFNuYXBTdGF0ZSA9IE1vZGlmaWVyU3RhdGU8U25hcE9wdGlvbnMsIHtcbiAgb2Zmc2V0cz86IEludGVyYWN0LlBvaW50W11cbiAgcmVhbFg/OiBudW1iZXJcbiAgcmVhbFk/OiBudW1iZXJcbiAgcmFuZ2U/OiBudW1iZXJcbiAgY2xvc2VzdD86IGFueVxuICB0YXJnZXRGaWVsZHM/OiBzdHJpbmdbXVtdXG59PlxuXG5mdW5jdGlvbiBzdGFydCAoYXJnOiBNb2RpZmllckFyZzxTbmFwU3RhdGU+KSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24sIGludGVyYWN0YWJsZSwgZWxlbWVudCwgcmVjdCwgc3RhdGUsIHN0YXJ0T2Zmc2V0IH0gPSBhcmdcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBzdGF0ZVxuICBjb25zdCBvZmZzZXRzID0gW11cbiAgY29uc3Qgb3JpZ2luID0gb3B0aW9ucy5vZmZzZXRXaXRoT3JpZ2luXG4gICAgPyBnZXRPcmlnaW4oYXJnKVxuICAgIDogeyB4OiAwLCB5OiAwIH1cblxuICBsZXQgc25hcE9mZnNldFxuXG4gIGlmIChvcHRpb25zLm9mZnNldCA9PT0gJ3N0YXJ0Q29vcmRzJykge1xuICAgIHNuYXBPZmZzZXQgPSB7XG4gICAgICB4OiBpbnRlcmFjdGlvbi5jb29yZHMuc3RhcnQucGFnZS54LFxuICAgICAgeTogaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LnBhZ2UueSxcbiAgICB9XG4gIH1cbiAgZWxzZSAge1xuICAgIGNvbnN0IG9mZnNldFJlY3QgPSB1dGlscy5yZWN0LnJlc29sdmVSZWN0TGlrZShvcHRpb25zLm9mZnNldCBhcyBhbnksIGludGVyYWN0YWJsZSwgZWxlbWVudCwgW2ludGVyYWN0aW9uXSlcblxuICAgIHNuYXBPZmZzZXQgPSB1dGlscy5yZWN0LnJlY3RUb1hZKG9mZnNldFJlY3QpIHx8IHsgeDogMCwgeTogMCB9XG4gICAgc25hcE9mZnNldC54ICs9IG9yaWdpbi54XG4gICAgc25hcE9mZnNldC55ICs9IG9yaWdpbi55XG4gIH1cblxuICBjb25zdCByZWxhdGl2ZVBvaW50cyA9IG9wdGlvbnMucmVsYXRpdmVQb2ludHMgfHwgW11cblxuICBpZiAocmVjdCAmJiBvcHRpb25zLnJlbGF0aXZlUG9pbnRzICYmIG9wdGlvbnMucmVsYXRpdmVQb2ludHMubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJlbGF0aXZlUG9pbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgcmVsYXRpdmVQb2ludCA9IHJlbGF0aXZlUG9pbnRzW2luZGV4XVxuXG4gICAgICBvZmZzZXRzLnB1c2goe1xuICAgICAgICBpbmRleCxcbiAgICAgICAgcmVsYXRpdmVQb2ludCxcbiAgICAgICAgeDogc3RhcnRPZmZzZXQubGVmdCAtIChyZWN0LndpZHRoICAqIHJlbGF0aXZlUG9pbnQueCkgKyBzbmFwT2Zmc2V0LngsXG4gICAgICAgIHk6IHN0YXJ0T2Zmc2V0LnRvcCAgLSAocmVjdC5oZWlnaHQgKiByZWxhdGl2ZVBvaW50LnkpICsgc25hcE9mZnNldC55LFxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgb2Zmc2V0cy5wdXNoKHV0aWxzLmV4dGVuZCh7XG4gICAgICBpbmRleDogMCxcbiAgICAgIHJlbGF0aXZlUG9pbnQ6IG51bGwsXG4gICAgfSwgc25hcE9mZnNldCkpXG4gIH1cblxuICBzdGF0ZS5vZmZzZXRzID0gb2Zmc2V0c1xufVxuXG5mdW5jdGlvbiBzZXQgKGFyZzogTW9kaWZpZXJBcmc8U25hcFN0YXRlPikge1xuICBjb25zdCB7IGludGVyYWN0aW9uLCBjb29yZHMsIHN0YXRlIH0gPSBhcmdcbiAgY29uc3QgeyBvcHRpb25zLCBvZmZzZXRzIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IG9yaWdpbiA9IHV0aWxzLmdldE9yaWdpblhZKGludGVyYWN0aW9uLmludGVyYWN0YWJsZSwgaW50ZXJhY3Rpb24uZWxlbWVudCwgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSlcbiAgY29uc3QgcGFnZSA9IHV0aWxzLmV4dGVuZCh7fSwgY29vcmRzKVxuICBjb25zdCB0YXJnZXRzID0gW11cbiAgbGV0IHRhcmdldFxuXG4gIGlmICghb3B0aW9ucy5vZmZzZXRXaXRoT3JpZ2luKSB7XG4gICAgcGFnZS54IC09IG9yaWdpbi54XG4gICAgcGFnZS55IC09IG9yaWdpbi55XG4gIH1cblxuICBzdGF0ZS5yZWFsWCA9IHBhZ2UueFxuICBzdGF0ZS5yZWFsWSA9IHBhZ2UueVxuXG4gIGZvciAoY29uc3Qgb2Zmc2V0IG9mIG9mZnNldHMpIHtcbiAgICBjb25zdCByZWxhdGl2ZVggPSBwYWdlLnggLSBvZmZzZXQueFxuICAgIGNvbnN0IHJlbGF0aXZlWSA9IHBhZ2UueSAtIG9mZnNldC55XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDAsIGxlbiA9IG9wdGlvbnMudGFyZ2V0cy5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBzbmFwVGFyZ2V0ID0gb3B0aW9ucy50YXJnZXRzW2luZGV4XVxuICAgICAgaWYgKHV0aWxzLmlzLmZ1bmMoc25hcFRhcmdldCkpIHtcbiAgICAgICAgdGFyZ2V0ID0gc25hcFRhcmdldChyZWxhdGl2ZVgsIHJlbGF0aXZlWSwgaW50ZXJhY3Rpb24sIG9mZnNldCwgaW5kZXgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGFyZ2V0ID0gc25hcFRhcmdldFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRhcmdldCkgeyBjb250aW51ZSB9XG5cbiAgICAgIHRhcmdldHMucHVzaCh7XG4gICAgICAgIHg6ICh1dGlscy5pcy5udW1iZXIodGFyZ2V0LngpID8gdGFyZ2V0LnggOiByZWxhdGl2ZVgpICsgb2Zmc2V0LngsXG4gICAgICAgIHk6ICh1dGlscy5pcy5udW1iZXIodGFyZ2V0LnkpID8gdGFyZ2V0LnkgOiByZWxhdGl2ZVkpICsgb2Zmc2V0LnksXG5cbiAgICAgICAgcmFuZ2U6IHV0aWxzLmlzLm51bWJlcih0YXJnZXQucmFuZ2UpID8gdGFyZ2V0LnJhbmdlIDogb3B0aW9ucy5yYW5nZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2xvc2VzdCA9IHtcbiAgICB0YXJnZXQ6IG51bGwsXG4gICAgaW5SYW5nZTogZmFsc2UsXG4gICAgZGlzdGFuY2U6IDAsXG4gICAgcmFuZ2U6IDAsXG4gICAgZHg6IDAsXG4gICAgZHk6IDAsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFyZ2V0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHRhcmdldCA9IHRhcmdldHNbaV1cblxuICAgIGNvbnN0IHJhbmdlID0gdGFyZ2V0LnJhbmdlXG4gICAgY29uc3QgZHggPSB0YXJnZXQueCAtIHBhZ2UueFxuICAgIGNvbnN0IGR5ID0gdGFyZ2V0LnkgLSBwYWdlLnlcbiAgICBjb25zdCBkaXN0YW5jZSA9IHV0aWxzLmh5cG90KGR4LCBkeSlcbiAgICBsZXQgaW5SYW5nZSA9IGRpc3RhbmNlIDw9IHJhbmdlXG5cbiAgICAvLyBJbmZpbml0ZSB0YXJnZXRzIGNvdW50IGFzIGJlaW5nIG91dCBvZiByYW5nZVxuICAgIC8vIGNvbXBhcmVkIHRvIG5vbiBpbmZpbml0ZSBvbmVzIHRoYXQgYXJlIGluIHJhbmdlXG4gICAgaWYgKHJhbmdlID09PSBJbmZpbml0eSAmJiBjbG9zZXN0LmluUmFuZ2UgJiYgY2xvc2VzdC5yYW5nZSAhPT0gSW5maW5pdHkpIHtcbiAgICAgIGluUmFuZ2UgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICghY2xvc2VzdC50YXJnZXQgfHwgKGluUmFuZ2VcbiAgICAgIC8vIGlzIHRoZSBjbG9zZXN0IHRhcmdldCBpbiByYW5nZT9cbiAgICAgID8gKGNsb3Nlc3QuaW5SYW5nZSAmJiByYW5nZSAhPT0gSW5maW5pdHlcbiAgICAgICAgLy8gdGhlIHBvaW50ZXIgaXMgcmVsYXRpdmVseSBkZWVwZXIgaW4gdGhpcyB0YXJnZXRcbiAgICAgICAgPyBkaXN0YW5jZSAvIHJhbmdlIDwgY2xvc2VzdC5kaXN0YW5jZSAvIGNsb3Nlc3QucmFuZ2VcbiAgICAgICAgLy8gdGhpcyB0YXJnZXQgaGFzIEluZmluaXRlIHJhbmdlIGFuZCB0aGUgY2xvc2VzdCBkb2Vzbid0XG4gICAgICAgIDogKHJhbmdlID09PSBJbmZpbml0eSAmJiBjbG9zZXN0LnJhbmdlICE9PSBJbmZpbml0eSkgfHxcbiAgICAgICAgICAvLyBPUiB0aGlzIHRhcmdldCBpcyBjbG9zZXIgdGhhdCB0aGUgcHJldmlvdXMgY2xvc2VzdFxuICAgICAgICAgIGRpc3RhbmNlIDwgY2xvc2VzdC5kaXN0YW5jZSlcbiAgICAgIC8vIFRoZSBvdGhlciBpcyBub3QgaW4gcmFuZ2UgYW5kIHRoZSBwb2ludGVyIGlzIGNsb3NlciB0byB0aGlzIHRhcmdldFxuICAgICAgOiAoIWNsb3Nlc3QuaW5SYW5nZSAmJiBkaXN0YW5jZSA8IGNsb3Nlc3QuZGlzdGFuY2UpKSkge1xuICAgICAgY2xvc2VzdC50YXJnZXQgPSB0YXJnZXRcbiAgICAgIGNsb3Nlc3QuZGlzdGFuY2UgPSBkaXN0YW5jZVxuICAgICAgY2xvc2VzdC5yYW5nZSA9IHJhbmdlXG4gICAgICBjbG9zZXN0LmluUmFuZ2UgPSBpblJhbmdlXG4gICAgICBjbG9zZXN0LmR4ID0gZHhcbiAgICAgIGNsb3Nlc3QuZHkgPSBkeVxuXG4gICAgICBzdGF0ZS5yYW5nZSA9IHJhbmdlXG4gICAgfVxuICB9XG5cbiAgaWYgKGNsb3Nlc3QuaW5SYW5nZSkge1xuICAgIGNvb3Jkcy54ID0gY2xvc2VzdC50YXJnZXQueFxuICAgIGNvb3Jkcy55ID0gY2xvc2VzdC50YXJnZXQueVxuICB9XG5cbiAgc3RhdGUuY2xvc2VzdCA9IGNsb3Nlc3Rcbn1cblxuZnVuY3Rpb24gZ2V0T3JpZ2luIChhcmc6IFBhcnRpYWw8TW9kaWZpZXJBcmc8U25hcFN0YXRlPj4pIHtcbiAgY29uc3QgeyBlbGVtZW50IH0gPSBhcmcuaW50ZXJhY3Rpb25cbiAgY29uc3Qgb3B0aW9uc09yaWdpbiA9IHV0aWxzLnJlY3QucmVjdFRvWFkoXG4gICAgdXRpbHMucmVjdC5yZXNvbHZlUmVjdExpa2UoYXJnLnN0YXRlLm9wdGlvbnMub3JpZ2luIGFzIGFueSwgbnVsbCwgbnVsbCwgW2VsZW1lbnRdKVxuICApXG4gIGNvbnN0IG9yaWdpbiA9IG9wdGlvbnNPcmlnaW4gfHwgdXRpbHMuZ2V0T3JpZ2luWFkoXG4gICAgYXJnLmludGVyYWN0YWJsZSxcbiAgICBlbGVtZW50LFxuICAgIGFyZy5pbnRlcmFjdGlvbi5wcmVwYXJlZC5uYW1lLFxuICApXG5cbiAgcmV0dXJuIG9yaWdpblxufVxuXG5jb25zdCBkZWZhdWx0czogU25hcE9wdGlvbnMgPSB7XG4gIHJhbmdlICA6IEluZmluaXR5LFxuICB0YXJnZXRzOiBudWxsLFxuICBvZmZzZXQ6IG51bGwsXG4gIG9mZnNldFdpdGhPcmlnaW46IHRydWUsXG4gIG9yaWdpbjogbnVsbCxcbiAgcmVsYXRpdmVQb2ludHM6IG51bGwsXG4gIGVuZE9ubHk6IGZhbHNlLFxuICBlbmFibGVkOiBmYWxzZSxcbn1cbmNvbnN0IHNuYXAgPSB7XG4gIHN0YXJ0LFxuICBzZXQsXG4gIGRlZmF1bHRzLFxufVxuXG5leHBvcnQgZGVmYXVsdCBzbmFwXG4iXX0= \ No newline at end of file +//# sourceMappingURL=pointer.js.map \ No newline at end of file diff --git a/packages/modifiers/snap/pointer.js.map b/packages/modifiers/snap/pointer.js.map index 552f906f8..aefa878d8 100644 --- a/packages/modifiers/snap/pointer.js.map +++ b/packages/modifiers/snap/pointer.js.map @@ -1 +1,74 @@ -{"version":3,"file":"pointer.js","sourceRoot":"","sources":["pointer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE1C,SAAS,KAAK,CAAE,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;IAC9E,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACzB,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACrF,MAAM,MAAM,GAAG,aAAa,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEnG,IAAI,UAAU,CAAA;IAEd,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE;QACpC,UAAU,GAAG;YACX,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAC7C,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;SAC9C,CAAA;KACF;SACK;QACJ,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;QAEnG,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;KAC/D;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAA;IAEnD,IAAI,IAAI,IAAI,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;QACnE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;YAE3C,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,aAAa;gBACb,CAAC,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAI,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;gBACpE,CAAC,EAAE,WAAW,CAAC,GAAG,GAAI,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;aACrE,CAAC,CAAA;SACH;KACF;SACI;QACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACxB,KAAK,EAAE,CAAC;YACR,aAAa,EAAE,IAAI;SACpB,EAAE,UAAU,CAAC,CAAC,CAAA;KAChB;IAED,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;AACzB,CAAC;AAED,SAAS,GAAG,CAAE,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;IAC1C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAElC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACpG,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,IAAI,MAAM,CAAA;IACV,IAAI,CAAC,CAAA;IAEL,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAA;IAClB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAA;IAElB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;IACpB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;IAEpB,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;QAEnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACzC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAC7B,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;aACtE;iBACI;gBACH,MAAM,GAAG,UAAU,CAAA;aACpB;YAED,IAAI,CAAC,MAAM,EAAE;gBAAE,SAAQ;aAAE;YAEzB,OAAO,CAAC,IAAI,CAAC;gBACX,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAChE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAEhE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;aACpE,CAAC,CAAA;SACH;KACF;IAED,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;QACR,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;KACN,CAAA;IAED,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAEnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACpC,IAAI,OAAO,GAAG,QAAQ,IAAI,KAAK,CAAA;QAE/B,+CAA+C;QAC/C,kDAAkD;QAClD,IAAI,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;YACvE,OAAO,GAAG,KAAK,CAAA;SAChB;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO;YAC7B,kCAAkC;YAClC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,KAAK,QAAQ;gBACtC,kDAAkD;gBAClD,CAAC,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK;gBACrD,yDAAyD;gBACzD,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC;oBAClD,qDAAqD;oBACrD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAChC,qEAAqE;YACrE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;YACtD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;YACvB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAC3B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;YACrB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;YACzB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;YACf,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;YAEf,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;SACpB;KACF;IAED,IAAI,OAAO,CAAC,OAAO,EAAE;QACnB,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;KAC5B;IAED,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;AACzB,CAAC;AAED,MAAM,IAAI,GAAG;IACX,KAAK;IACL,GAAG;IACH,QAAQ,EAAE;QACR,OAAO,EAAE,KAAK;QACd,KAAK,EAAI,QAAQ;QACjB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QAEZ,cAAc,EAAE,IAAI;KACrB;CACF,CAAA;AAED,eAAe,IAAI,CAAA"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "pointer.ts" + ], + "names": [ + "utils", + "start", + "arg", + "interaction", + "interactable", + "element", + "rect", + "state", + "startOffset", + "options", + "offsets", + "origin", + "offsetWithOrigin", + "getOrigin", + "x", + "y", + "snapOffset", + "offset", + "coords", + "page", + "offsetRect", + "resolveRectLike", + "rectToXY", + "relativePoints", + "length", + "index", + "relativePoint", + "push", + "left", + "width", + "top", + "height", + "extend", + "set", + "getOriginXY", + "prepared", + "name", + "targets", + "target", + "realX", + "realY", + "relativeX", + "relativeY", + "len", + "snapTarget", + "is", + "func", + "number", + "range", + "closest", + "inRange", + "distance", + "dx", + "dy", + "i", + "hypot", + "Infinity", + "optionsOrigin", + "defaults", + "endOnly", + "enabled", + "snap" + ], + "mappings": "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", + "sourcesContent": [ + "import * as utils from '../../utils/index'\nimport { ModifierArg, ModifierState } from '../base'\n\nexport interface SnapPosition {\n x: number\n y: number\n range?: number\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: Interact.Interaction,\n offset: Interact.Point,\n index: number\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[]\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Interact.Point[]\n // startCoords = offset snapping from drag start page position\n offset: Interact.Point | Interact.RectResolvable<[Interact.Interaction]> | 'startCoords'\n offsetWithOrigin?: boolean\n origin: Interact.RectResolvable<[Interact.Element]> | Interact.Point\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const offsets = []\n const origin = options.offsetWithOrigin\n ? getOrigin(arg)\n : { x: 0, y: 0 }\n\n let snapOffset\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n }\n else {\n const offsetRect = utils.rect.resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = utils.rect.rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const relativePoints = options.relativePoints || []\n\n if (rect && options.relativePoints && options.relativePoints.length) {\n for (let index = 0; index < relativePoints.length; index++) {\n const relativePoint = relativePoints[index]\n\n offsets.push({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n })\n }\n }\n else {\n offsets.push(utils.extend({\n index: 0,\n relativePoint: null,\n }, snapOffset))\n }\n\n state.offsets = offsets\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = utils.getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = utils.extend({}, coords)\n const targets = []\n let target\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n state.realX = page.x\n state.realY = page.y\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n if (utils.is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction, offset, index)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n targets.push({\n x: (utils.is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (utils.is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: utils.is.number(target.range) ? target.range : options.range,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n dx: 0,\n dy: 0,\n }\n\n for (let i = 0, len = targets.length; i < len; i++) {\n target = targets[i]\n\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = utils.hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.dx = dx\n closest.dy = dy\n\n state.range = range\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const { element } = arg.interaction\n const optionsOrigin = utils.rect.rectToXY(\n utils.rect.resolveRectLike(arg.state.options.origin as any, null, null, [element]),\n )\n const origin = optionsOrigin || utils.getOriginXY(\n arg.interactable,\n element,\n arg.interaction.prepared.name,\n )\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range : Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default snap\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/snap/pointer.spec.js b/packages/modifiers/snap/pointer.spec.js deleted file mode 100644 index 6b2fc4599..000000000 --- a/packages/modifiers/snap/pointer.spec.js +++ /dev/null @@ -1,72 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import snap from '../snap/pointer'; -test('modifiers/snap', t => { - const { interaction, interactable, } = helpers.testEnv(); - const origin = { x: 120, y: 120 }; - interactable.options.TEST = { origin }; - interaction.interactable = interactable; - interaction.prepared = { name: 'TEST' }; - 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, offset, index, unexpected }; - return target0; - }; - const relativePoint = { x: 0, y: 0 }; - const options = { - offset: null, - offsetWithOrigin: true, - targets: [ - target0, - targetFunc, - ], - range: Infinity, - relativePoints: [relativePoint], - }; - const state = { - options, - realX: 0, - realY: 0, - }; - const pageCoords = Object.freeze({ x: 200, y: 300 }); - const arg = { - interaction, - interactable, - 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, { x: target0.x + origin.x, y: target0.y + origin.y }, 'snaps to target and adds origin which will be subtracted by InteractEvent'); - arg.coords = { ...pageCoords }; - state.options.targets = [targetFunc]; - snap.start(arg); - snap.set(arg); - t.deepEqual(funcArgs, { - x: pageCoords.x - origin.x, - y: pageCoords.y - origin.y, - offset: { - x: origin.x, - y: origin.y, - relativePoint, - index: 0, - }, - index: 0, - unexpected: [], - }, 'x, y, interaction, offset, index are passed to target function; origin subtracted from x, y'); - arg.coords = { ...pageCoords }; - options.offset = { x: 300, y: 300 }; - options.offsetWithOrigin = false; - snap.start(arg); - snap.set(arg); - t.deepEqual(arg.coords, { x: target0.x + 300, y: target0.y + 300 }, 'origin not added to target when !options.offsetWithOrigin'); - t.deepEqual({ x: funcArgs.x, y: funcArgs.y }, { x: pageCoords.x - origin.x - 300, y: pageCoords.y - origin.y - 300 }, 'origin still subtracted from function target x, y args when !options.offsetWithOrigin'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlci5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicG9pbnRlci5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxJQUFJLE1BQU0saUJBQWlCLENBQUE7QUFFbEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3pCLE1BQU0sRUFDSixXQUFXLEVBQ1gsWUFBWSxHQUNiLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3JCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBRWhDO0lBQUMsWUFBWSxDQUFDLE9BQWUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNoRCxXQUFXLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUN2QyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0lBQ3ZDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO0lBRS9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQTtJQUNuQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUNsRCwyREFBMkQ7SUFDM0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUU7UUFDdEUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQzlDLE9BQU8sT0FB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QVMsQ0FDVCxHQUFHLENBQUMsTUFBTSxFQUNWLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUMxQywyREFBMkQsQ0FDNUQsQ0FBQTtJQUVELENBQUMsQ0FBQyxTQUFTLENBQ1QsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUNoQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQ3RFLHVGQUF1RixDQUN4RixDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9faGVscGVycydcbmltcG9ydCBzbmFwIGZyb20gJy4uL3NuYXAvcG9pbnRlcidcblxudGVzdCgnbW9kaWZpZXJzL3NuYXAnLCB0ID0+IHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9uLFxuICAgIGludGVyYWN0YWJsZSxcbiAgfSA9IGhlbHBlcnMudGVzdEVudigpXG4gIGNvbnN0IG9yaWdpbiA9IHsgeDogMTIwLCB5OiAxMjAgfVxuXG4gIDsoaW50ZXJhY3RhYmxlLm9wdGlvbnMgYXMgYW55KS5URVNUID0geyBvcmlnaW4gfVxuICBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUgPSBpbnRlcmFjdGFibGVcbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQgPSB7IG5hbWU6ICdURVNUJyB9XG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IHRydWVcblxuICBsZXQgZnVuY0FyZ3MgPSBudWxsXG4gIGNvbnN0IHRhcmdldDAgPSBPYmplY3QuZnJlZXplKHsgeDogIDUwLCB5OiAgMTAwIH0pXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tc2hhZG93XG4gIGNvbnN0IHRhcmdldEZ1bmMgPSAoeCwgeSwgX2ludGVyYWN0aW9uLCBvZmZzZXQsIGluZGV4LCAuLi51bmV4cGVjdGVkKSA9PiB7XG4gICAgZnVuY0FyZ3MgPSB7IHgsIHksIG9mZnNldCwgaW5kZXgsIHVuZXhwZWN0ZWQgfVxuICAgIHJldHVybiB0YXJnZXQwXG4gIH1cbiAgY29uc3QgcmVsYXRpdmVQb2ludCA9IHsgeDogMCwgeTogMCB9XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgb2Zmc2V0OiBudWxsLFxuICAgIG9mZnNldFdpdGhPcmlnaW46IHRydWUsXG4gICAgdGFyZ2V0czogW1xuICAgICAgdGFyZ2V0MCxcbiAgICAgIHRhcmdldEZ1bmMsXG4gICAgXSxcbiAgICByYW5nZTogSW5maW5pdHksXG4gICAgcmVsYXRpdmVQb2ludHM6IFtyZWxhdGl2ZVBvaW50XSxcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIG9wdGlvbnMsXG4gICAgcmVhbFg6IDAsXG4gICAgcmVhbFk6IDAsXG4gIH1cbiAgY29uc3QgcGFnZUNvb3JkcyA9IE9iamVjdC5mcmVlemUoeyB4OiAyMDAsIHk6IDMwMCB9KVxuICBjb25zdCBhcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgaW50ZXJhY3RhYmxlLFxuICAgIHN0YXRlLFxuICAgIHBhZ2VDb29yZHMsXG4gICAgY29vcmRzOiB7IC4uLnBhZ2VDb29yZHMgfSxcbiAgICByZWN0OiB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAxMDAsIHJpZ2h0OiAxMDAsIHdpZHRoOiAxMDAsIGhlaWdodDogMTAwIH0sXG4gICAgc3RhcnRPZmZzZXQ6IHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwIH0sXG4gIH0gYXMgYW55XG5cbiAgc25hcC5zdGFydChhcmcpXG4gIHNuYXAuc2V0KGFyZylcblxuICB0LmRlZXBFcXVhbChcbiAgICBhcmcuY29vcmRzLFxuICAgIHsgeDogdGFyZ2V0MC54ICsgb3JpZ2luLngsIHk6IHRhcmdldDAueSArIG9yaWdpbi55IH0sXG4gICAgJ3NuYXBzIHRvIHRhcmdldCBhbmQgYWRkcyBvcmlnaW4gd2hpY2ggd2lsbCBiZSBzdWJ0cmFjdGVkIGJ5IEludGVyYWN0RXZlbnQnXG4gIClcblxuICBhcmcuY29vcmRzID0geyAuLi5wYWdlQ29vcmRzIH1cbiAgc3RhdGUub3B0aW9ucy50YXJnZXRzID0gW3RhcmdldEZ1bmNdXG4gIHNuYXAuc3RhcnQoYXJnKVxuICBzbmFwLnNldChhcmcpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgZnVuY0FyZ3MsXG4gICAge1xuICAgICAgeDogcGFnZUNvb3Jkcy54IC0gb3JpZ2luLngsXG4gICAgICB5OiBwYWdlQ29vcmRzLnkgLSBvcmlnaW4ueSxcbiAgICAgIG9mZnNldDoge1xuICAgICAgICB4OiBvcmlnaW4ueCxcbiAgICAgICAgeTogb3JpZ2luLnksXG4gICAgICAgIHJlbGF0aXZlUG9pbnQsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgfSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgdW5leHBlY3RlZDogW10sXG4gICAgfSxcbiAgICAneCwgeSwgaW50ZXJhY3Rpb24sIG9mZnNldCwgaW5kZXggYXJlIHBhc3NlZCB0byB0YXJnZXQgZnVuY3Rpb247IG9yaWdpbiBzdWJ0cmFjdGVkIGZyb20geCwgeSdcbiAgKVxuXG4gIGFyZy5jb29yZHMgPSB7IC4uLnBhZ2VDb29yZHMgfVxuICBvcHRpb25zLm9mZnNldCA9IHsgeDogMzAwLCB5OiAzMDAgfVxuICBvcHRpb25zLm9mZnNldFdpdGhPcmlnaW4gPSBmYWxzZVxuICBzbmFwLnN0YXJ0KGFyZylcbiAgc25hcC5zZXQoYXJnKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGFyZy5jb29yZHMsXG4gICAgeyB4OiB0YXJnZXQwLnggKyAzMDAsIHk6IHRhcmdldDAueSArIDMwMCB9LFxuICAgICdvcmlnaW4gbm90IGFkZGVkIHRvIHRhcmdldCB3aGVuICFvcHRpb25zLm9mZnNldFdpdGhPcmlnaW4nXG4gIClcblxuICB0LmRlZXBFcXVhbChcbiAgICB7IHg6IGZ1bmNBcmdzLngsIHk6IGZ1bmNBcmdzLnkgfSxcbiAgICB7IHg6IHBhZ2VDb29yZHMueCAtIG9yaWdpbi54IC0gMzAwLCB5OiBwYWdlQ29vcmRzLnkgLSBvcmlnaW4ueSAtIDMwMCB9LFxuICAgICdvcmlnaW4gc3RpbGwgc3VidHJhY3RlZCBmcm9tIGZ1bmN0aW9uIHRhcmdldCB4LCB5IGFyZ3Mgd2hlbiAhb3B0aW9ucy5vZmZzZXRXaXRoT3JpZ2luJ1xuICApXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/modifiers/snap/size.d.ts b/packages/modifiers/snap/size.d.ts index cfc132ff8..5780c6368 100644 --- a/packages/modifiers/snap/size.d.ts +++ b/packages/modifiers/snap/size.d.ts @@ -6,6 +6,6 @@ declare function set(arg: any): void; declare const snapSize: { start: typeof start; set: typeof set; - defaults: Pick; + defaults: Pick; }; export default snapSize; diff --git a/packages/modifiers/snap/size.js b/packages/modifiers/snap/size.js index 2096d3f98..2b5e8e43a 100644 --- a/packages/modifiers/snap/size.js +++ b/packages/modifiers/snap/size.js @@ -1,78 +1,100 @@ // This module allows snapping of the size of targets during resize // interactions. -import extend from '@interactjs/utils/extend'; -import * as is from '@interactjs/utils/is'; -import snap from './pointer'; +import extend from "../../utils/extend.js"; +import * as is from "../../utils/is.js"; +import snap from "./pointer.js"; + function start(arg) { - const { interaction, state } = arg; - const { options } = state; - const edges = interaction.prepared.edges; - if (!edges) { - return null; + const { + interaction, + state + } = arg; + const { + options + } = state; + const edges = interaction.prepared.edges; + + if (!edges) { + return null; + } + + arg.state = { + options: { + targets: null, + relativePoints: [{ + x: edges.left ? 0 : 1, + y: edges.top ? 0 : 1 + }], + offset: options.offset || 'self', + origin: { + x: 0, + y: 0 + }, + range: options.range } - arg.state = { - options: { - targets: null, - relativePoints: [{ - x: edges.left ? 0 : 1, - y: edges.top ? 0 : 1, - }], - offset: options.offset || 'self', - origin: { x: 0, y: 0 }, - range: options.range, - }, - }; - state.targetFields = state.targetFields || [ - ['width', 'height'], - ['x', 'y'], - ]; - snap.start(arg); - state.offsets = arg.state.offsets; - arg.state = state; + }; + state.targetFields = state.targetFields || [['width', 'height'], ['x', 'y']]; + snap.start(arg); + state.offsets = arg.state.offsets; + arg.state = state; } + function set(arg) { - const { interaction, state, coords } = arg; - const { options, offsets } = state; - const relative = { - x: coords.x - offsets[0].x, - y: coords.y - offsets[0].y, - }; - state.options = extend({}, options); - state.options.targets = []; - for (const snapTarget of (options.targets || [])) { - let target; - if (is.func(snapTarget)) { - target = snapTarget(relative.x, relative.y, interaction); - } - else { - target = snapTarget; - } - if (!target) { - continue; - } - for (const [xField, yField] of state.targetFields) { - if (xField in target || yField in target) { - target.x = target[xField]; - target.y = target[yField]; - break; - } - } - state.options.targets.push(target); + const { + interaction, + state, + coords + } = arg; + const { + options, + offsets + } = state; + const relative = { + x: coords.x - offsets[0].x, + y: coords.y - offsets[0].y + }; + state.options = extend({}, options); + state.options.targets = []; + + for (const snapTarget of options.targets || []) { + let target; + + if (is.func(snapTarget)) { + target = snapTarget(relative.x, relative.y, interaction); + } else { + target = snapTarget; } - snap.set(arg); - state.options = options; + + if (!target) { + continue; + } + + for (const [xField, yField] of state.targetFields) { + if (xField in target || yField in target) { + target.x = target[xField]; + target.y = target[yField]; + break; + } + } + + state.options.targets.push(target); + } + + snap.set(arg); + state.options = options; } + const defaults = { - range: Infinity, - targets: null, - offset: null, - endOnly: false, - enabled: false, + range: Infinity, + targets: null, + offset: null, + endOnly: false, + enabled: false }; const snapSize = { - start, - set, - defaults, + start, + set, + defaults }; export default snapSize; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUVBQW1FO0FBQ25FLGdCQUFnQjtBQUVoQixPQUFPLE1BQU0sTUFBTSwwQkFBMEIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRTFDLE9BQU8sSUFBZ0MsTUFBTSxXQUFXLENBQUE7QUFPeEQsU0FBUyxLQUFLLENBQUUsR0FBMkI7SUFDekMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUN6QixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQTtJQUV4QyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUE7S0FBRTtJQUUzQixHQUFHLENBQUMsS0FBSyxHQUFHO1FBQ1YsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLElBQUk7WUFDYixjQUFjLEVBQUUsQ0FBQztvQkFDZixDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQixDQUFDO1lBQ0YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTTtZQUNoQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1NBQ3JCO0tBQ0YsQ0FBQTtJQUVELEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSTtRQUN6QyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7UUFDbkIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0tBQ1gsQ0FBQTtJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDZixLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFBO0lBRWpDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0FBQ25CLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBRSxHQUFHO0lBQ2YsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQzFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBQ2xDLE1BQU0sUUFBUSxHQUFHO1FBQ2YsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0IsQ0FBQTtJQUVELEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNuQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7SUFFMUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDaEQsSUFBSSxNQUFNLENBQUE7UUFFVixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUE7U0FDekQ7YUFDSTtZQUNILE1BQU0sR0FBRyxVQUFVLENBQUE7U0FDcEI7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQUUsU0FBUTtTQUFFO1FBRXpCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQ2pELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO2dCQUN4QyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDekIsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBRXpCLE1BQUs7YUFDTjtTQUNGO1FBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQ25DO0lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUViLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0FBQ3pCLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBb0I7SUFDaEMsS0FBSyxFQUFFLFFBQVE7SUFDZixPQUFPLEVBQUUsSUFBSTtJQUNiLE1BQU0sRUFBRSxJQUFJO0lBQ1osT0FBTyxFQUFFLEtBQUs7SUFDZCxPQUFPLEVBQUUsS0FBSztDQUNmLENBQUE7QUFFRCxNQUFNLFFBQVEsR0FBRztJQUNmLEtBQUs7SUFDTCxHQUFHO0lBQ0gsUUFBUTtDQUNULENBQUE7QUFFRCxlQUFlLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgbW9kdWxlIGFsbG93cyBzbmFwcGluZyBvZiB0aGUgc2l6ZSBvZiB0YXJnZXRzIGR1cmluZyByZXNpemVcbi8vIGludGVyYWN0aW9ucy5cblxuaW1wb3J0IGV4dGVuZCBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9leHRlbmQnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9pcydcbmltcG9ydCB7IE1vZGlmaWVyQXJnIH0gZnJvbSAnLi4vYmFzZSdcbmltcG9ydCBzbmFwLCB7IFNuYXBPcHRpb25zLCBTbmFwU3RhdGUgfSBmcm9tICcuL3BvaW50ZXInXG5cbmV4cG9ydCB0eXBlIFNuYXBTaXplT3B0aW9ucyA9IFBpY2s8XG5TbmFwT3B0aW9ucyxcbid0YXJnZXRzJyB8ICdvZmZzZXQnIHwgJ2VuZE9ubHknIHwgJ3JhbmdlJyB8ICdlbmFibGVkJ1xuPlxuXG5mdW5jdGlvbiBzdGFydCAoYXJnOiBNb2RpZmllckFyZzxTbmFwU3RhdGU+KSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24sIHN0YXRlIH0gPSBhcmdcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBzdGF0ZVxuICBjb25zdCBlZGdlcyA9IGludGVyYWN0aW9uLnByZXBhcmVkLmVkZ2VzXG5cbiAgaWYgKCFlZGdlcykgeyByZXR1cm4gbnVsbCB9XG5cbiAgYXJnLnN0YXRlID0ge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIHRhcmdldHM6IG51bGwsXG4gICAgICByZWxhdGl2ZVBvaW50czogW3tcbiAgICAgICAgeDogZWRnZXMubGVmdCA/IDAgOiAxLFxuICAgICAgICB5OiBlZGdlcy50b3AgPyAwIDogMSxcbiAgICAgIH1dLFxuICAgICAgb2Zmc2V0OiBvcHRpb25zLm9mZnNldCB8fCAnc2VsZicsXG4gICAgICBvcmlnaW46IHsgeDogMCwgeTogMCB9LFxuICAgICAgcmFuZ2U6IG9wdGlvbnMucmFuZ2UsXG4gICAgfSxcbiAgfVxuXG4gIHN0YXRlLnRhcmdldEZpZWxkcyA9IHN0YXRlLnRhcmdldEZpZWxkcyB8fCBbXG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXSxcbiAgICBbJ3gnLCAneSddLFxuICBdXG5cbiAgc25hcC5zdGFydChhcmcpXG4gIHN0YXRlLm9mZnNldHMgPSBhcmcuc3RhdGUub2Zmc2V0c1xuXG4gIGFyZy5zdGF0ZSA9IHN0YXRlXG59XG5cbmZ1bmN0aW9uIHNldCAoYXJnKSB7XG4gIGNvbnN0IHsgaW50ZXJhY3Rpb24sIHN0YXRlLCBjb29yZHMgfSA9IGFyZ1xuICBjb25zdCB7IG9wdGlvbnMsIG9mZnNldHMgfSA9IHN0YXRlXG4gIGNvbnN0IHJlbGF0aXZlID0ge1xuICAgIHg6IGNvb3Jkcy54IC0gb2Zmc2V0c1swXS54LFxuICAgIHk6IGNvb3Jkcy55IC0gb2Zmc2V0c1swXS55LFxuICB9XG5cbiAgc3RhdGUub3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucylcbiAgc3RhdGUub3B0aW9ucy50YXJnZXRzID0gW11cblxuICBmb3IgKGNvbnN0IHNuYXBUYXJnZXQgb2YgKG9wdGlvbnMudGFyZ2V0cyB8fCBbXSkpIHtcbiAgICBsZXQgdGFyZ2V0XG5cbiAgICBpZiAoaXMuZnVuYyhzbmFwVGFyZ2V0KSkge1xuICAgICAgdGFyZ2V0ID0gc25hcFRhcmdldChyZWxhdGl2ZS54LCByZWxhdGl2ZS55LCBpbnRlcmFjdGlvbilcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0YXJnZXQgPSBzbmFwVGFyZ2V0XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQpIHsgY29udGludWUgfVxuXG4gICAgZm9yIChjb25zdCBbeEZpZWxkLCB5RmllbGRdIG9mIHN0YXRlLnRhcmdldEZpZWxkcykge1xuICAgICAgaWYgKHhGaWVsZCBpbiB0YXJnZXQgfHwgeUZpZWxkIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXQueCA9IHRhcmdldFt4RmllbGRdXG4gICAgICAgIHRhcmdldC55ID0gdGFyZ2V0W3lGaWVsZF1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlLm9wdGlvbnMudGFyZ2V0cy5wdXNoKHRhcmdldClcbiAgfVxuXG4gIHNuYXAuc2V0KGFyZylcblxuICBzdGF0ZS5vcHRpb25zID0gb3B0aW9uc1xufVxuXG5jb25zdCBkZWZhdWx0czogU25hcFNpemVPcHRpb25zID0ge1xuICByYW5nZTogSW5maW5pdHksXG4gIHRhcmdldHM6IG51bGwsXG4gIG9mZnNldDogbnVsbCxcbiAgZW5kT25seTogZmFsc2UsXG4gIGVuYWJsZWQ6IGZhbHNlLFxufVxuXG5jb25zdCBzbmFwU2l6ZSA9IHtcbiAgc3RhcnQsXG4gIHNldCxcbiAgZGVmYXVsdHMsXG59XG5cbmV4cG9ydCBkZWZhdWx0IHNuYXBTaXplXG4iXX0= \ No newline at end of file +//# sourceMappingURL=size.js.map \ No newline at end of file diff --git a/packages/modifiers/snap/size.js.map b/packages/modifiers/snap/size.js.map index ecb538e8f..d012a139e 100644 --- a/packages/modifiers/snap/size.js.map +++ b/packages/modifiers/snap/size.js.map @@ -1 +1,47 @@ -{"version":3,"file":"size.js","sourceRoot":"","sources":["size.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "size.ts" + ], + "names": [ + "extend", + "is", + "snap", + "start", + "arg", + "interaction", + "state", + "options", + "edges", + "prepared", + "targets", + "relativePoints", + "x", + "left", + "y", + "top", + "offset", + "origin", + "range", + "targetFields", + "offsets", + "set", + "coords", + "relative", + "snapTarget", + "target", + "func", + "xField", + "yField", + "push", + "defaults", + "Infinity", + "endOnly", + "enabled", + "snapSize" + ], + "mappings": "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", + "sourcesContent": [ + "// This module allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '../../utils/extend'\nimport * as is from '../../utils/is'\nimport { ModifierArg } from '../base'\nimport snap, { SnapOptions, SnapState } from './pointer'\n\nexport type SnapSizeOptions = Pick<\nSnapOptions,\n'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'\n>\n\nfunction start (arg: ModifierArg) {\n const { interaction, state } = arg\n const { options } = state\n const edges = interaction.prepared.edges\n\n if (!edges) { return null }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [{\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n }],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set (arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of (options.targets || [])) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n snap.set(arg)\n\n state.options = options\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default snapSize\n" + ] +} \ No newline at end of file diff --git a/packages/modifiers/snap/size.spec.js b/packages/modifiers/snap/size.spec.js deleted file mode 100644 index a51d386de..000000000 --- a/packages/modifiers/snap/size.spec.js +++ /dev/null @@ -1,39 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import Interaction from '@interactjs/core/Interaction'; -import { mockInteractable, mockSignals } from '@interactjs/core/tests/_helpers'; -import snapSize from '../snap/size'; -test('modifiers/snapSize', t => { - const interaction = new Interaction({ signals: mockSignals() }); - interaction.interactable = mockInteractable(); - interaction.interactable.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.interactable, - 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2l6ZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sV0FBVyxNQUFNLDhCQUE4QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUMvRSxPQUFPLFFBQVEsTUFBTSxjQUFjLENBQUE7QUFFbkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFTLENBQUMsQ0FBQTtJQUN0RSxXQUFXLENBQUMsWUFBWSxHQUFHLGdCQUFnQixFQUFFLENBQUE7SUFDN0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQVUsQ0FBQSxDQUFBO0lBQzlGLFdBQVcsQ0FBQyxRQUFRLEdBQUc7UUFDckIsSUFBSSxFQUFFLElBQUk7UUFDVixLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0tBQzlELENBQUE7SUFDRCxXQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtJQUUvQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUNsRCxNQUFNLE9BQU8sR0FBRztRQUNkLE9BQU8sRUFBRTtZQUNQLEVBQUUsR0FBRyxPQUFPLEVBQUU7U0FDZjtRQUNELEtBQUssRUFBRSxRQUFRO0tBQ2hCLENBQUE7SUFDRCxNQUFNLEtBQUssR0FBRztRQUNaLE9BQU87UUFDUCxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDckIsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztLQUN6QixDQUFBO0lBQ0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDbEQsTUFBTSxHQUFHLEdBQUc7UUFDVixXQUFXO1FBQ1gsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1FBQ3RDLEtBQUs7UUFDTCxVQUFVO1FBQ1YsTUFBTSxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUU7S0FDMUIsQ0FBQTtJQUVELFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBVSxDQUFDLENBQUE7SUFDMUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVqQixDQUFDLENBQUMsU0FBUyxDQUNULEdBQUcsQ0FBQyxNQUFNLEVBQ1YsT0FBTyxFQUNQLDBDQUEwQyxDQUMzQyxDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgbW9ja0ludGVyYWN0YWJsZSwgbW9ja1NpZ25hbHMgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0IHNuYXBTaXplIGZyb20gJy4uL3NuYXAvc2l6ZSdcblxudGVzdCgnbW9kaWZpZXJzL3NuYXBTaXplJywgdCA9PiB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gbmV3IEludGVyYWN0aW9uKHsgc2lnbmFsczogbW9ja1NpZ25hbHMoKSB9IGFzIGFueSlcbiAgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlID0gbW9ja0ludGVyYWN0YWJsZSgpXG4gIGludGVyYWN0aW9uLmludGVyYWN0YWJsZS5nZXRSZWN0ID0gKCkgPT4gKHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDEwMCwgcmlnaHQ6IDEwMCB9IGFzIGFueSlcbiAgaW50ZXJhY3Rpb24ucHJlcGFyZWQgPSB7XG4gICAgbmFtZTogbnVsbCxcbiAgICBlZGdlczogeyB0b3A6IHRydWUsIGxlZnQ6IHRydWUsIGJvdHRvbTogZmFsc2UsIHJpZ2h0OiBmYWxzZSB9LFxuICB9XG4gIGludGVyYWN0aW9uLl9pbnRlcmFjdGluZyA9IHRydWVcblxuICBjb25zdCB0YXJnZXQwID0gT2JqZWN0LmZyZWV6ZSh7IHg6ICA1MCwgeTogIDEwMCB9KVxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHRhcmdldHM6IFtcbiAgICAgIHsgLi4udGFyZ2V0MCB9LFxuICAgIF0sXG4gICAgcmFuZ2U6IEluZmluaXR5LFxuICB9XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIG9wdGlvbnMsXG4gICAgZGVsdGE6IHsgeDogMCwgeTogMCB9LFxuICAgIG9mZnNldDogW3sgeDogMCwgeTogMCB9XSxcbiAgfVxuICBjb25zdCBwYWdlQ29vcmRzID0gT2JqZWN0LmZyZWV6ZSh7IHg6IDEwLCB5OiAyMCB9KVxuICBjb25zdCBhcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgaW50ZXJhY3RhYmxlOiBpbnRlcmFjdGlvbi5pbnRlcmFjdGFibGUsXG4gICAgc3RhdGUsXG4gICAgcGFnZUNvb3JkcyxcbiAgICBjb29yZHM6IHsgLi4ucGFnZUNvb3JkcyB9LFxuICB9XG5cbiAgc25hcFNpemUuc3RhcnQoYXJnIGFzIGFueSlcbiAgc25hcFNpemUuc2V0KGFyZylcblxuICB0LmRlZXBFcXVhbChcbiAgICBhcmcuY29vcmRzLFxuICAgIHRhcmdldDAsXG4gICAgJ3NuYXBTaXplLnNldCBzaW5nbGUgdGFyZ2V0LCB6ZXJlbyBvZmZzZXQnXG4gIClcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/pointer-events/PointerEvent.d.ts b/packages/pointer-events/PointerEvent.d.ts index 12404682b..6fa9a292f 100644 --- a/packages/pointer-events/PointerEvent.d.ts +++ b/packages/pointer-events/PointerEvent.d.ts @@ -1,8 +1,8 @@ -import BaseEvent from '@interactjs/core/BaseEvent'; +import BaseEvent from '../core/BaseEvent'; /** */ export default class PointerEvent extends BaseEvent { type: T; - originalEvent: Interact.PointerEventType; + originalEvent: Interact.PointerEventType | PointerEvent; pointerId: number; pointerType: string; double: boolean; @@ -13,7 +13,7 @@ export default class PointerEvent extends BaseEvent { dt: number; eventable: any; /** */ - constructor(type: T, pointer: Interact.PointerType | PointerEvent, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, interaction: Interact.Interaction, timeStamp: number); + constructor(type: T, pointer: Interact.PointerType | PointerEvent, event: Interact.PointerEventType | PointerEvent, eventTarget: Interact.EventTarget, interaction: Interact.Interaction, timeStamp: number); _subtractOrigin({ x: originX, y: originY }: { x: any; y: any; diff --git a/packages/pointer-events/PointerEvent.js b/packages/pointer-events/PointerEvent.js index 562b2d8b4..ddd77170e 100644 --- a/packages/pointer-events/PointerEvent.js +++ b/packages/pointer-events/PointerEvent.js @@ -1,53 +1,89 @@ -import BaseEvent from '@interactjs/core/BaseEvent'; -import pointerUtils from '@interactjs/utils/pointerUtils'; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import BaseEvent from "../core/BaseEvent.js"; +import pointerUtils from "../utils/pointerUtils.js"; /** */ + export default class PointerEvent extends BaseEvent { - /** */ - constructor(type, pointer, event, eventTarget, interaction, timeStamp) { - super(interaction); - pointerUtils.pointerExtend(this, event); - if (event !== pointer) { - pointerUtils.pointerExtend(this, pointer); - } - this.timeStamp = timeStamp; - this.originalEvent = event; - this.type = type; - this.pointerId = pointerUtils.getPointerId(pointer); - this.pointerType = pointerUtils.getPointerType(pointer); - this.target = eventTarget; - this.currentTarget = null; - if (type === 'tap') { - const pointerIndex = interaction.getPointerIndex(pointer); - this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime; - const interval = this.timeStamp - interaction.tapTime; - this.double = !!(interaction.prevTap && - interaction.prevTap.type !== 'doubletap' && - interaction.prevTap.target === this.target && - interval < 500); - } - else if (type === 'doubletap') { - this.dt = pointer.timeStamp - interaction.tapTime; - } + /** */ + constructor(type, pointer, event, eventTarget, interaction, timeStamp) { + super(interaction); + + _defineProperty(this, "type", void 0); + + _defineProperty(this, "originalEvent", void 0); + + _defineProperty(this, "pointerId", void 0); + + _defineProperty(this, "pointerType", void 0); + + _defineProperty(this, "double", void 0); + + _defineProperty(this, "pageX", void 0); + + _defineProperty(this, "pageY", void 0); + + _defineProperty(this, "clientX", void 0); + + _defineProperty(this, "clientY", void 0); + + _defineProperty(this, "dt", void 0); + + _defineProperty(this, "eventable", void 0); + + pointerUtils.pointerExtend(this, event); + + if (event !== pointer) { + pointerUtils.pointerExtend(this, pointer); } - _subtractOrigin({ x: originX, y: originY }) { - this.pageX -= originX; - this.pageY -= originY; - this.clientX -= originX; - this.clientY -= originY; - return this; - } - _addOrigin({ x: originX, y: originY }) { - this.pageX += originX; - this.pageY += originY; - this.clientX += originX; - this.clientY += originY; - return this; - } - /** - * Prevent the default behaviour of the original Event - */ - preventDefault() { - this.originalEvent.preventDefault(); + + this.timeStamp = timeStamp; + this.originalEvent = event; + this.type = type; + this.pointerId = pointerUtils.getPointerId(pointer); + this.pointerType = pointerUtils.getPointerType(pointer); + this.target = eventTarget; + this.currentTarget = null; + + if (type === 'tap') { + const pointerIndex = interaction.getPointerIndex(pointer); + this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime; + const interval = this.timeStamp - interaction.tapTime; + this.double = !!(interaction.prevTap && interaction.prevTap.type !== 'doubletap' && interaction.prevTap.target === this.target && interval < 500); + } else if (type === 'doubletap') { + this.dt = pointer.timeStamp - interaction.tapTime; } + } + + _subtractOrigin({ + x: originX, + y: originY + }) { + this.pageX -= originX; + this.pageY -= originY; + this.clientX -= originX; + this.clientY -= originY; + return this; + } + + _addOrigin({ + x: originX, + y: originY + }) { + this.pageX += originX; + this.pageY += originY; + this.clientX += originX; + this.clientY += originY; + return this; + } + /** + * Prevent the default behaviour of the original Event + */ + + + preventDefault() { + this.originalEvent.preventDefault(); + } + } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRlckV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUG9pbnRlckV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBUyxNQUFNLDRCQUE0QixDQUFBO0FBQ2xELE9BQU8sWUFBWSxNQUFNLGdDQUFnQyxDQUFBO0FBRXpELE1BQU07QUFDTixNQUFNLENBQUMsT0FBTyxPQUFPLFlBQStCLFNBQVEsU0FBUztJQWFuRSxNQUFNO0lBQ04sWUFDRSxJQUFPLEVBQ1AsT0FBaUQsRUFDakQsS0FBZ0MsRUFDaEMsV0FBaUMsRUFDakMsV0FBaUMsRUFDakMsU0FBaUI7UUFFakIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2xCLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBRXZDLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUNyQixZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUMxQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQU8sU0FBUyxDQUFBO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFBO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQVksSUFBSSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQU8sWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFLLFlBQVksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDekQsSUFBSSxDQUFDLE1BQU0sR0FBVSxXQUFXLENBQUE7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7UUFFekIsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ2xCLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDekQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFBO1lBRXRFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQTtZQUVyRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPO2dCQUNsQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXO2dCQUN4QyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtnQkFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFBO1NBQ2xCO2FBQ0ksSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQzdCLElBQUksQ0FBQyxFQUFFLEdBQUksT0FBK0IsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQTtTQUMzRTtJQUNILENBQUM7SUFFRCxlQUFlLENBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7UUFDekMsSUFBSSxDQUFDLEtBQUssSUFBTSxPQUFPLENBQUE7UUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBTSxPQUFPLENBQUE7UUFDdkIsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUE7UUFDdkIsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUE7UUFFdkIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsVUFBVSxDQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO1FBQ3BDLElBQUksQ0FBQyxLQUFLLElBQU0sT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLElBQU0sT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFBO1FBRXZCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUE7SUFDckMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VFdmVudCBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0Jhc2VFdmVudCdcbmltcG9ydCBwb2ludGVyVXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMvcG9pbnRlclV0aWxzJ1xuXG4vKiogKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvaW50ZXJFdmVudDxUIGV4dGVuZHMgc3RyaW5nPiBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHR5cGU6IFRcbiAgb3JpZ2luYWxFdmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICBwb2ludGVySWQ6IG51bWJlclxuICBwb2ludGVyVHlwZTogc3RyaW5nXG4gIGRvdWJsZTogYm9vbGVhblxuICBwYWdlWDogbnVtYmVyXG4gIHBhZ2VZOiBudW1iZXJcbiAgY2xpZW50WDogbnVtYmVyXG4gIGNsaWVudFk6IG51bWJlclxuICBkdDogbnVtYmVyXG4gIGV2ZW50YWJsZTogYW55XG5cbiAgLyoqICovXG4gIGNvbnN0cnVjdG9yIChcbiAgICB0eXBlOiBULFxuICAgIHBvaW50ZXI6IEludGVyYWN0LlBvaW50ZXJUeXBlIHwgUG9pbnRlckV2ZW50PGFueT4sXG4gICAgZXZlbnQ6IEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGUsXG4gICAgZXZlbnRUYXJnZXQ6IEludGVyYWN0LkV2ZW50VGFyZ2V0LFxuICAgIGludGVyYWN0aW9uOiBJbnRlcmFjdC5JbnRlcmFjdGlvbixcbiAgICB0aW1lU3RhbXA6IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIoaW50ZXJhY3Rpb24pXG4gICAgcG9pbnRlclV0aWxzLnBvaW50ZXJFeHRlbmQodGhpcywgZXZlbnQpXG5cbiAgICBpZiAoZXZlbnQgIT09IHBvaW50ZXIpIHtcbiAgICAgIHBvaW50ZXJVdGlscy5wb2ludGVyRXh0ZW5kKHRoaXMsIHBvaW50ZXIpXG4gICAgfVxuXG4gICAgdGhpcy50aW1lU3RhbXAgICAgID0gdGltZVN0YW1wXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gZXZlbnRcbiAgICB0aGlzLnR5cGUgICAgICAgICAgPSB0eXBlXG4gICAgdGhpcy5wb2ludGVySWQgICAgID0gcG9pbnRlclV0aWxzLmdldFBvaW50ZXJJZChwb2ludGVyKVxuICAgIHRoaXMucG9pbnRlclR5cGUgICA9IHBvaW50ZXJVdGlscy5nZXRQb2ludGVyVHlwZShwb2ludGVyKVxuICAgIHRoaXMudGFyZ2V0ICAgICAgICA9IGV2ZW50VGFyZ2V0XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbFxuXG4gICAgaWYgKHR5cGUgPT09ICd0YXAnKSB7XG4gICAgICBjb25zdCBwb2ludGVySW5kZXggPSBpbnRlcmFjdGlvbi5nZXRQb2ludGVySW5kZXgocG9pbnRlcilcbiAgICAgIHRoaXMuZHQgPSB0aGlzLnRpbWVTdGFtcCAtIGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF0uZG93blRpbWVcblxuICAgICAgY29uc3QgaW50ZXJ2YWwgPSB0aGlzLnRpbWVTdGFtcCAtIGludGVyYWN0aW9uLnRhcFRpbWVcblxuICAgICAgdGhpcy5kb3VibGUgPSAhIShpbnRlcmFjdGlvbi5wcmV2VGFwICYmXG4gICAgICAgIGludGVyYWN0aW9uLnByZXZUYXAudHlwZSAhPT0gJ2RvdWJsZXRhcCcgJiZcbiAgICAgICAgaW50ZXJhY3Rpb24ucHJldlRhcC50YXJnZXQgPT09IHRoaXMudGFyZ2V0ICYmXG4gICAgICAgIGludGVydmFsIDwgNTAwKVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAnZG91YmxldGFwJykge1xuICAgICAgdGhpcy5kdCA9IChwb2ludGVyIGFzIFBvaW50ZXJFdmVudDwndGFwJz4pLnRpbWVTdGFtcCAtIGludGVyYWN0aW9uLnRhcFRpbWVcbiAgICB9XG4gIH1cblxuICBfc3VidHJhY3RPcmlnaW4gKHsgeDogb3JpZ2luWCwgeTogb3JpZ2luWSB9KSB7XG4gICAgdGhpcy5wYWdlWCAgIC09IG9yaWdpblhcbiAgICB0aGlzLnBhZ2VZICAgLT0gb3JpZ2luWVxuICAgIHRoaXMuY2xpZW50WCAtPSBvcmlnaW5YXG4gICAgdGhpcy5jbGllbnRZIC09IG9yaWdpbllcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfYWRkT3JpZ2luICh7IHg6IG9yaWdpblgsIHk6IG9yaWdpblkgfSkge1xuICAgIHRoaXMucGFnZVggICArPSBvcmlnaW5YXG4gICAgdGhpcy5wYWdlWSAgICs9IG9yaWdpbllcbiAgICB0aGlzLmNsaWVudFggKz0gb3JpZ2luWFxuICAgIHRoaXMuY2xpZW50WSArPSBvcmlnaW5ZXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHRoZSBvcmlnaW5hbCBFdmVudFxuICAgKi9cbiAgcHJldmVudERlZmF1bHQgKCkge1xuICAgIHRoaXMub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=PointerEvent.js.map \ No newline at end of file diff --git a/packages/pointer-events/PointerEvent.js.map b/packages/pointer-events/PointerEvent.js.map new file mode 100644 index 000000000..591875760 --- /dev/null +++ b/packages/pointer-events/PointerEvent.js.map @@ -0,0 +1,50 @@ +{ + "version": 3, + "sources": [ + "PointerEvent.ts" + ], + "names": [ + "BaseEvent", + "pointerUtils", + "PointerEvent", + "constructor", + "type", + "pointer", + "event", + "eventTarget", + "interaction", + "timeStamp", + "pointerExtend", + "originalEvent", + "pointerId", + "getPointerId", + "pointerType", + "getPointerType", + "target", + "currentTarget", + "pointerIndex", + "getPointerIndex", + "dt", + "pointers", + "downTime", + "interval", + "tapTime", + "double", + "prevTap", + "_subtractOrigin", + "x", + "originX", + "y", + "originY", + "pageX", + "pageY", + "clientX", + "clientY", + "_addOrigin", + "preventDefault" + ], + "mappings": ";;AAAA,OAAOA,SAAP;AACA,OAAOC,YAAP;AAEA;;AACA,eAAe,MAAMC,YAAN,SAA6CF,SAA7C,CAAuD;AAapE;AACAG,EAAAA,WAAW,CACTC,IADS,EAETC,OAFS,EAGTC,KAHS,EAITC,WAJS,EAKTC,WALS,EAMTC,SANS,EAOT;AACA,UAAMD,WAAN;;AADA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAEAP,IAAAA,YAAY,CAACS,aAAb,CAA2B,IAA3B,EAAiCJ,KAAjC;;AAEA,QAAIA,KAAK,KAAKD,OAAd,EAAuB;AACrBJ,MAAAA,YAAY,CAACS,aAAb,CAA2B,IAA3B,EAAiCL,OAAjC;AACD;;AAED,SAAKI,SAAL,GAAqBA,SAArB;AACA,SAAKE,aAAL,GAAqBL,KAArB;AACA,SAAKF,IAAL,GAAqBA,IAArB;AACA,SAAKQ,SAAL,GAAqBX,YAAY,CAACY,YAAb,CAA0BR,OAA1B,CAArB;AACA,SAAKS,WAAL,GAAqBb,YAAY,CAACc,cAAb,CAA4BV,OAA5B,CAArB;AACA,SAAKW,MAAL,GAAqBT,WAArB;AACA,SAAKU,aAAL,GAAqB,IAArB;;AAEA,QAAIb,IAAI,KAAK,KAAb,EAAoB;AAClB,YAAMc,YAAY,GAAGV,WAAW,CAACW,eAAZ,CAA4Bd,OAA5B,CAArB;AACA,WAAKe,EAAL,GAAU,KAAKX,SAAL,GAAiBD,WAAW,CAACa,QAAZ,CAAqBH,YAArB,EAAmCI,QAA9D;AAEA,YAAMC,QAAQ,GAAG,KAAKd,SAAL,GAAiBD,WAAW,CAACgB,OAA9C;AAEA,WAAKC,MAAL,GAAc,CAAC,EAAEjB,WAAW,CAACkB,OAAZ,IACflB,WAAW,CAACkB,OAAZ,CAAoBtB,IAApB,KAA6B,WADd,IAEfI,WAAW,CAACkB,OAAZ,CAAoBV,MAApB,KAA+B,KAAKA,MAFrB,IAGfO,QAAQ,GAAG,GAHE,CAAf;AAID,KAVD,MAWK,IAAInB,IAAI,KAAK,WAAb,EAA0B;AAC7B,WAAKgB,EAAL,GAAWf,OAAD,CAAiCI,SAAjC,GAA6CD,WAAW,CAACgB,OAAnE;AACD;AACF;;AAEDG,EAAAA,eAAe,CAAE;AAAEC,IAAAA,CAAC,EAAEC,OAAL;AAAcC,IAAAA,CAAC,EAAEC;AAAjB,GAAF,EAA8B;AAC3C,SAAKC,KAAL,IAAgBH,OAAhB;AACA,SAAKI,KAAL,IAAgBF,OAAhB;AACA,SAAKG,OAAL,IAAgBL,OAAhB;AACA,SAAKM,OAAL,IAAgBJ,OAAhB;AAEA,WAAO,IAAP;AACD;;AAEDK,EAAAA,UAAU,CAAE;AAAER,IAAAA,CAAC,EAAEC,OAAL;AAAcC,IAAAA,CAAC,EAAEC;AAAjB,GAAF,EAA8B;AACtC,SAAKC,KAAL,IAAgBH,OAAhB;AACA,SAAKI,KAAL,IAAgBF,OAAhB;AACA,SAAKG,OAAL,IAAgBL,OAAhB;AACA,SAAKM,OAAL,IAAgBJ,OAAhB;AAEA,WAAO,IAAP;AACD;AAED;;;;;AAGAM,EAAAA,cAAc,GAAI;AAChB,SAAK1B,aAAL,CAAmB0B,cAAnB;AACD;;AA5EmE", + "sourcesContent": [ + "import BaseEvent from '../core/BaseEvent'\nimport pointerUtils from '../utils/pointerUtils'\n\n/** */\nexport default class PointerEvent extends BaseEvent {\n type: T\n originalEvent: Interact.PointerEventType | PointerEvent\n pointerId: number\n pointerType: string\n double: boolean\n pageX: number\n pageY: number\n clientX: number\n clientY: number\n dt: number\n eventable: any\n\n /** */\n constructor (\n type: T,\n pointer: Interact.PointerType | PointerEvent,\n event: Interact.PointerEventType | PointerEvent,\n eventTarget: Interact.EventTarget,\n interaction: Interact.Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double = !!(interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500)\n }\n else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n }\n }\n\n _subtractOrigin ({ x: originX, y: originY }) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin ({ x: originX, y: originY }) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault () {\n this.originalEvent.preventDefault()\n }\n}\n" + ] +} \ No newline at end of file diff --git a/packages/pointer-events/PointerEvent.spec.js b/packages/pointer-events/PointerEvent.spec.js deleted file mode 100644 index 5caacd366..000000000 --- a/packages/pointer-events/PointerEvent.spec.js +++ /dev/null @@ -1,62 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -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 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, 0); - 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._proxy, '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, {}, 0); - 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRlckV2ZW50LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJQb2ludGVyRXZlbnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLFdBQVcsTUFBTSw4QkFBOEIsQ0FBQTtBQUN0RCxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sWUFBWSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pELE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBQy9DLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFBO0FBRXpDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUE7SUFDekIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUE7SUFDdEIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sT0FBTyxHQUFHO1FBQ2QsU0FBUztRQUNULGVBQWU7UUFDZixXQUFXLEVBQUUsbUJBQW1CO0tBQzFCLENBQUE7SUFDUixNQUFNLGFBQWEsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDekMsTUFBTSxLQUFLLEdBQUc7UUFDWixhQUFhO0tBQ1AsQ0FBQTtJQUNSLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFLEVBQVMsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLEVBQXNCLENBQUE7SUFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQVEsQ0FBQTtJQUUvRixDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUNuRCx1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QWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVwQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUksS0FBSyxDQUFDLEtBQUssR0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLHdDQUF3QyxDQUFDLENBQUE7SUFDakcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUssTUFBTSxDQUFDLENBQUMsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO0lBQ2pHLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsMENBQTBDLENBQUMsQ0FBQTtJQUNuRyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLDBDQUEwQyxDQUFDLENBQUE7SUFFbkcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQzVILHNFQUFzRSxDQUFDLENBQUE7SUFFekUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0IHBvaW50ZXJVdGlscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9wb2ludGVyVXRpbHMnXG5pbXBvcnQgU2lnbmFscyBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9TaWduYWxzJ1xuaW1wb3J0IFBvaW50ZXJFdmVudCBmcm9tICcuL1BvaW50ZXJFdmVudCdcblxudGVzdCgnUG9pbnRlckV2ZW50IGNvbnN0cnVjdG9yJywgdCA9PiB7XG4gIGNvbnN0IHR5cGUgPSAnVEVTVF9FVkVOVCdcbiAgY29uc3QgcG9pbnRlcklkID0gLTEwMFxuICBjb25zdCB0ZXN0UG9pbnRlclByb3AgPSBbJ1RFU1RfUE9JTlRFUl9QUk9QJ11cbiAgY29uc3QgcG9pbnRlciA9IHtcbiAgICBwb2ludGVySWQsXG4gICAgdGVzdFBvaW50ZXJQcm9wLFxuICAgIHBvaW50ZXJUeXBlOiAnVEVTVF9QT0lOVEVSX1RZUEUnLFxuICB9IGFzIGFueVxuICBjb25zdCB0ZXN0RXZlbnRQcm9wID0gWydURVNUX0VWRU5UX1BST1AnXVxuICBjb25zdCBldmVudCA9IHtcbiAgICB0ZXN0RXZlbnRQcm9wLFxuICB9IGFzIGFueVxuICBjb25zdCBpbnRlcmFjdGlvbiA9IG5ldyBJbnRlcmFjdGlvbih7IHNpZ25hbHM6IG5ldyBTaWduYWxzKCkgfSBhcyBhbnkpXG4gIGNvbnN0IGV2ZW50VGFyZ2V0ID0ge30gYXMgSW50ZXJhY3QuRWxlbWVudFxuICBjb25zdCBwb2ludGVyRXZlbnQgPSBuZXcgUG9pbnRlckV2ZW50KHR5cGUsIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgaW50ZXJhY3Rpb24sIDApIGFzIGFueVxuXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnRlc3RQb2ludGVyUHJvcCwgdGVzdFBvaW50ZXJQcm9wLFxuICAgICdwb2ludGVyRXZlbnQgaXMgZXh0ZW5kZWQgZm9ybSBwb2ludGVyJylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQudGVzdEV2ZW50UHJvcCwgdGVzdEV2ZW50UHJvcCxcbiAgICAncG9pbnRlckV2ZW50IGlzIGV4dGVuZGVkIGZvcm0gRXZlbnQnKVxuXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnR5cGUsIHR5cGUsXG4gICAgJ3R5cGUgaXMgc2V0IGNvcnJlY3RseScpXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnBvaW50ZXJUeXBlLCBwb2ludGVyVXRpbHMuZ2V0UG9pbnRlclR5cGUocG9pbnRlciksXG4gICAgJ3BvaW50ZXJUeXBlIGlzIHNldCBjb3JyZWN0bHknKVxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5wb2ludGVySWQsIHBvaW50ZXJJZCxcbiAgICAncG9pbnRlcklkIGlzIHNldCBjb3JyZWN0bHknKVxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5vcmlnaW5hbEV2ZW50LCBldmVudCxcbiAgICAnb3JpZ2luYWxFdmVudCBpcyBzZXQgY29ycmVjdGx5JylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQuaW50ZXJhY3Rpb24sIGludGVyYWN0aW9uLl9wcm94eSxcbiAgICAnaW50ZXJhY3Rpb24gaXMgc2V0IGNvcnJlY3RseScpXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnRhcmdldCwgZXZlbnRUYXJnZXQsXG4gICAgJ3RhcmdldCBpcyBzZXQgY29ycmVjdGx5JylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQuY3VycmVudFRhcmdldCwgbnVsbCxcbiAgICAnY3VycmVudFRhcmdldCBpcyBudWxsJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdQb2ludGVyRXZlbnQgbWV0aG9kcycsIHQgPT4ge1xuICBjb25zdCBtZXRob2RDb250ZXh0cyA9IHt9IGFzIGFueVxuICBjb25zdCBldmVudDogYW55ID0gWydwcmV2ZW50RGVmYXVsdCcsICdzdG9wUHJvcGFnYXRpb24nLCAnc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJ11cbiAgICAucmVkdWNlKChhY2MsIG1ldGhvZE5hbWUpID0+IHtcbiAgICAgIGFjY1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHsgbWV0aG9kQ29udGV4dHNbbWV0aG9kTmFtZV0gPSB0aGlzIH1cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBoZWxwZXJzLm5ld1BvaW50ZXIoKSlcbiAgY29uc3QgcG9pbnRlckV2ZW50ID0gbmV3IFBvaW50ZXJFdmVudCgnVEVTVCcsIHt9IGFzIGFueSwgZXZlbnQsIG51bGwsIHt9IGFzIGFueSwgMClcblxuICBwb2ludGVyRXZlbnQucHJldmVudERlZmF1bHQoKVxuICB0LmVxdWFsKG1ldGhvZENvbnRleHRzLnByZXZlbnREZWZhdWx0LCBldmVudCxcbiAgICAnUG9pbnRlckV2ZW50LnByZXZlbnREZWZhdWx0KCkgY2FsbHMgcHJldmVudERlZmF1bHQgb2Ygb3JpZ2luYWxFdmVudCcpXG5cbiAgdC5ub3RPayhwb2ludGVyRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkLFxuICAgICdwcm9wYWdhdGlvblN0b3BwZWQgaXMgZmFsc2UgYmVmb3JlIGNhbGwgdG8gc3RvcFByb3BhZ2F0aW9uJylcbiAgcG9pbnRlckV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIHQub2socG9pbnRlckV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCxcbiAgICAnc3RvcFByb3BhZ2F0aW9uIHNldHMgcHJvcGFnYXRpb25TdG9wcGVkIHRvIHRydWUnKVxuICB0LmVxdWFsKG1ldGhvZENvbnRleHRzLnN0b3BQcm9wYWdhdGlvbiwgdW5kZWZpbmVkLFxuICAgICdQb2ludGVyRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgZG9lcyBub3QgY2FsbCBzdG9wUHJvcGFnYXRpb24gb2Ygb3JpZ2luYWxFdmVudCcpXG5cbiAgdC5ub3RPayhwb2ludGVyRXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkLFxuICAgICdpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgaXMgZmFsc2UgYmVmb3JlIGNhbGwgdG8gc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJylcbiAgcG9pbnRlckV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG4gIHQuZXF1YWwobWV0aG9kQ29udGV4dHMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uLCB1bmRlZmluZWQsXG4gICAgJ1BvaW50ZXJFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSBkb2VzIG5vdCBjYWxsIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBvZiBvcmlnaW5hbEV2ZW50JylcbiAgdC5vayhwb2ludGVyRXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkLFxuICAgICdzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gc2V0cyBpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgdG8gdHJ1ZScpXG5cbiAgY29uc3Qgb3JpZ2luID0geyB4OiAyMCwgeTogMzAgfVxuICBwb2ludGVyRXZlbnQuX3N1YnRyYWN0T3JpZ2luKG9yaWdpbilcblxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5wYWdlWCwgICBldmVudC5wYWdlWCAgIC0gb3JpZ2luLngsICdzdWJ0cmFjdE9yaWdpbiB1cGRhdGVzIHBhZ2VYIGNvcnJlY3RseScpXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LnBhZ2VZLCAgIGV2ZW50LnBhZ2VZICAgLSBvcmlnaW4ueSwgJ3N1YnRyYWN0T3JpZ2luIHVwZGF0ZXMgcGFnZVkgY29ycmVjdGx5JylcbiAgdC5lcXVhbChwb2ludGVyRXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WCAtIG9yaWdpbi54LCAnc3VidHJhY3RPcmlnaW4gdXBkYXRlcyBjbGllbnRYIGNvcnJlY3RseScpXG4gIHQuZXF1YWwocG9pbnRlckV2ZW50LmNsaWVudFksIGV2ZW50LmNsaWVudFkgLSBvcmlnaW4ueSwgJ3N1YnRyYWN0T3JpZ2luIHVwZGF0ZXMgY2xpZW50WSBjb3JyZWN0bHknKVxuXG4gIHBvaW50ZXJFdmVudC5fYWRkT3JpZ2luKG9yaWdpbilcbiAgdC5vayhbJ3BhZ2VYJywgJ3BhZ2VZJywgJ2NsaWVudFgnLCAnY2xpZW50WSddLnJlZHVjZSgoYWxsRXF1YWwsIHByb3ApID0+IGFsbEVxdWFsICYmIHBvaW50ZXJFdmVudFtwcm9wXSA9PT0gZXZlbnRbcHJvcF0sIHRydWUpLFxuICAgICdhZGRPcmlnaW4gd2l0aCB0aGUgc3VidHJhY3RlZCBvcmlnaW4gcmV2ZXJ0cyB0byBvcmlnaW5hbCBjb29yZGluYXRlcycpXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/pointer-events/base.d.ts b/packages/pointer-events/base.d.ts index 9a01e99ae..c05862d8f 100644 --- a/packages/pointer-events/base.d.ts +++ b/packages/pointer-events/base.d.ts @@ -1,8 +1,7 @@ -import { PerActionDefaults } from '@interactjs/core/defaultOptions'; -import Eventable from '@interactjs/core/Eventable'; -import Interaction from '@interactjs/core/Interaction'; -import { Scope } from '@interactjs/core/scope'; -import * as utils from '@interactjs/utils'; +import { PerActionDefaults } from '../core/defaultOptions'; +import Eventable from '../core/Eventable'; +import Interaction from '../core/Interaction'; +import { Scope } from '../core/scope'; import PointerEvent from './PointerEvent'; export declare type EventTargetList = Array<{ node: Node; @@ -42,39 +41,68 @@ declare module '@interactjs/core/defaultOptions' { pointerEvents: Interact.Options; } } +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'pointerEvents:new': { + pointerEvent: PointerEvent; + }; + 'pointerEvents:fired': { + interaction: Interaction; + pointer: Interact.PointerType | PointerEvent; + event: Interact.PointerEventType | PointerEvent; + eventTarget: Interact.EventTarget; + pointerEvent: PointerEvent; + targets?: EventTargetList; + type: string; + }; + 'pointerEvents:collect-targets': { + interaction: Interaction; + pointer: Interact.PointerType | PointerEvent; + event: Interact.PointerEventType | PointerEvent; + eventTarget: Interact.EventTarget; + targets?: EventTargetList; + type: string; + path: Node[]; + node: null; + }; + } +} declare const pointerEvents: { id: string; install: typeof install; - signals: utils.Signals; + listeners: { + 'interactions:new': typeof addInteractionProps; + 'interactions:update-pointer': typeof addHoldInfo; + 'interactions:move': typeof moveAndClearHold; + 'interactions:down': (arg: any, scope: any) => void; + 'interactions:up': (arg: any, scope: any) => void; + 'interactions:cancel': (arg: any, scope: any) => void; + }; PointerEvent: typeof PointerEvent; fire: typeof fire; collectEventTargets: typeof collectEventTargets; - createSignalListener: typeof createSignalListener; defaults: PointerEventOptions; types: string[]; }; declare function fire(arg: { - interaction: Interaction; - pointer: Interact.PointerType; - event: Interact.PointerEventType; + pointer: Interact.PointerType | PointerEvent; + event: Interact.PointerEventType | PointerEvent; eventTarget: Interact.EventTarget; - targets?: EventTargetList; - pointerEvent?: PointerEvent; + interaction: Interaction; type: T; -}, scope: Interact.Scope): PointerEvent; + targets?: EventTargetList; +}, scope: Interact.Scope): PointerEvent; declare function collectEventTargets({ interaction, pointer, event, eventTarget, type }: { interaction: Interaction; - pointer: Interact.PointerType; - event: Interact.PointerEventType; + pointer: Interact.PointerType | PointerEvent; + event: Interact.PointerEventType | PointerEvent; eventTarget: Interact.EventTarget; type: T; -}): { - node: Node; - eventable: Eventable; - props: { - [key: string]: any; - }; -}[]; +}, scope: Interact.Scope): EventTargetList; +declare function addInteractionProps({ interaction }: { + interaction: any; +}): void; +declare function addHoldInfo({ down, pointerInfo }: Interact.SignalArgs['interactions:update-pointer']): void; +declare function moveAndClearHold({ interaction, pointer, event, eventTarget, duplicate }: Interact.SignalArgs['interactions:move'], scope: Interact.Scope): void; declare function install(scope: Scope): void; -declare function createSignalListener(type: string, scope: any): ({ interaction, pointer, event, eventTarget }: any) => void; export default pointerEvents; diff --git a/packages/pointer-events/base.js b/packages/pointer-events/base.js index d26fcbbd7..a61190b29 100644 --- a/packages/pointer-events/base.js +++ b/packages/pointer-events/base.js @@ -1,196 +1,274 @@ -import * as utils from '@interactjs/utils'; -import PointerEvent from './PointerEvent'; -const signals = new utils.Signals(); -const simpleSignals = ['down', 'up', 'cancel']; -const simpleEvents = ['down', 'up', 'cancel']; +import Interaction from "../core/Interaction.js"; +import { Scope } from "../core/scope.js"; +import * as utils from "../utils/index.js"; +import PointerEvent from "./PointerEvent.js"; const defaults = { - holdDuration: 600, - ignoreFrom: null, - allowFrom: null, - origin: { x: 0, y: 0 }, + holdDuration: 600, + ignoreFrom: null, + allowFrom: null, + origin: { + x: 0, + y: 0 + } }; const pointerEvents = { - id: 'pointer-events/base', - install, - signals, - PointerEvent, - fire, - collectEventTargets, - createSignalListener, - defaults, - types: [ - 'down', - 'move', - 'up', - 'cancel', - 'tap', - 'doubletap', - 'hold', - ], + id: 'pointer-events/base', + install, + listeners: { + 'interactions:new': addInteractionProps, + 'interactions:update-pointer': addHoldInfo, + 'interactions:move': moveAndClearHold, + 'interactions:down': (arg, scope) => { + downAndStartHold(arg, scope); + fire(arg, scope); + }, + 'interactions:up': (arg, scope) => { + clearHold(arg); + fire(arg, scope); + tapAfterUp(arg, scope); + }, + 'interactions:cancel': (arg, scope) => { + clearHold(arg); + fire(arg, scope); + } + }, + PointerEvent, + fire, + collectEventTargets, + defaults, + types: ['down', 'move', 'up', 'cancel', 'tap', 'doubletap', 'hold'] }; + function fire(arg, scope) { - const { interaction, pointer, event, eventTarget, type = arg.pointerEvent.type, targets = collectEventTargets(arg), } = arg; - const { pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now()), } = arg; - const signalArg = { - interaction, - pointer, - event, - eventTarget, - targets, - type, - pointerEvent, - }; - for (let i = 0; i < targets.length; i++) { - const target = targets[i]; - for (const prop in target.props || {}) { - pointerEvent[prop] = target.props[prop]; - } - const origin = utils.getOriginXY(target.eventable, target.node); - pointerEvent._subtractOrigin(origin); - pointerEvent.eventable = target.eventable; - pointerEvent.currentTarget = target.node; - target.eventable.fire(pointerEvent); - pointerEvent._addOrigin(origin); - if (pointerEvent.immediatePropagationStopped || - (pointerEvent.propagationStopped && - (i + 1) < targets.length && targets[i + 1].node !== pointerEvent.currentTarget)) { - break; - } + const { + interaction, + pointer, + event, + eventTarget, + type, + targets = collectEventTargets(arg, scope) + } = arg; + const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now()); + scope.fire('pointerEvents:new', { + pointerEvent + }); + const signalArg = { + interaction, + pointer, + event, + eventTarget, + targets, + type, + pointerEvent + }; + + for (let i = 0; i < targets.length; i++) { + const target = targets[i]; + + for (const prop in target.props || {}) { + pointerEvent[prop] = target.props[prop]; } - signals.fire('fired', signalArg); - if (type === 'tap') { - // if pointerEvent should make a double tap, create and fire a doubletap - // PointerEvent and use that as the prevTap - const prevTap = pointerEvent.double - ? fire({ - interaction, - pointer, - event, - eventTarget, - type: 'doubletap', - }, scope) - : pointerEvent; - interaction.prevTap = prevTap; - interaction.tapTime = prevTap.timeStamp; + + const origin = utils.getOriginXY(target.eventable, target.node); + + pointerEvent._subtractOrigin(origin); + + pointerEvent.eventable = target.eventable; + pointerEvent.currentTarget = target.node; + target.eventable.fire(pointerEvent); + + pointerEvent._addOrigin(origin); + + if (pointerEvent.immediatePropagationStopped || pointerEvent.propagationStopped && i + 1 < targets.length && targets[i + 1].node !== pointerEvent.currentTarget) { + break; } - return pointerEvent; + } + + scope.fire('pointerEvents:fired', signalArg); + + if (type === 'tap') { + // if pointerEvent should make a double tap, create and fire a doubletap + // PointerEvent and use that as the prevTap + const prevTap = pointerEvent.double ? fire({ + interaction, + pointer, + event, + eventTarget, + type: 'doubletap' + }, scope) : pointerEvent; + interaction.prevTap = prevTap; + interaction.tapTime = prevTap.timeStamp; + } + + return pointerEvent; } -function collectEventTargets({ interaction, pointer, event, eventTarget, type }) { - const pointerIndex = interaction.getPointerIndex(pointer); - const pointerInfo = interaction.pointers[pointerIndex]; - // do not fire a tap event if the pointer was moved before being lifted - if (type === 'tap' && (interaction.pointerWasMoved || - // or if the pointerup target is different to the pointerdown target - !(pointerInfo && pointerInfo.downTarget === eventTarget))) { - return []; - } - const path = utils.dom.getPath(eventTarget); - const signalArg = { - interaction, - pointer, - event, - eventTarget, - type, - path, - targets: [], - node: null, - }; - for (const node of path) { - signalArg.node = node; - signals.fire('collect-targets', signalArg); - } - if (type === 'hold') { - signalArg.targets = signalArg.targets.filter(target => target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration); - } - return signalArg.targets; + +function collectEventTargets({ + interaction, + pointer, + event, + eventTarget, + type +}, scope) { + const pointerIndex = interaction.getPointerIndex(pointer); + const pointerInfo = interaction.pointers[pointerIndex]; // do not fire a tap event if the pointer was moved before being lifted + + if (type === 'tap' && (interaction.pointerWasMoved || // or if the pointerup target is different to the pointerdown target + !(pointerInfo && pointerInfo.downTarget === eventTarget))) { + return []; + } + + const path = utils.dom.getPath(eventTarget); + const signalArg = { + interaction, + pointer, + event, + eventTarget, + type, + path, + targets: [], + node: null + }; + + for (const node of path) { + signalArg.node = node; + scope.fire('pointerEvents:collect-targets', signalArg); + } + + if (type === 'hold') { + signalArg.targets = signalArg.targets.filter(target => target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration); + } + + return signalArg.targets; } -function install(scope) { - const { interactions, } = scope; - scope.pointerEvents = pointerEvents; - scope.defaults.actions.pointerEvents = pointerEvents.defaults; - 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 - }); - interactions.signals.on('update-pointer', ({ down, pointerInfo }) => { - if (!down && pointerInfo.hold) { - return; - } - pointerInfo.hold = { duration: Infinity, timeout: null }; - }); - interactions.signals.on('move', ({ interaction, pointer, event, eventTarget, duplicateMove }) => { - const pointerIndex = interaction.getPointerIndex(pointer); - if (!duplicateMove && (!interaction.pointerIsDown || interaction.pointerWasMoved)) { - if (interaction.pointerIsDown) { - clearTimeout(interaction.pointers[pointerIndex].hold.timeout); - } - fire({ - interaction, - pointer, - event, - eventTarget, - type: 'move', - }, scope); - } - }); - interactions.signals.on('down', ({ interaction, pointer, event, eventTarget, pointerIndex }) => { - const timer = interaction.pointers[pointerIndex].hold; - const path = utils.dom.getPath(eventTarget); - const signalArg = { - interaction, - pointer, - event, - eventTarget, - type: 'hold', - targets: [], - path, - node: null, - }; - for (const node of path) { - signalArg.node = node; - signals.fire('collect-targets', signalArg); - } - if (!signalArg.targets.length) { - return; - } - let minDuration = Infinity; - for (const target of signalArg.targets) { - const holdDuration = target.eventable.options.holdDuration; - if (holdDuration < minDuration) { - minDuration = holdDuration; - } - } - timer.duration = minDuration; - timer.timeout = setTimeout(() => { - fire({ - interaction, - eventTarget, - pointer, - event, - type: 'hold', - }, scope); - }, minDuration); - }); - for (const signalName of ['up', 'cancel']) { - interactions.signals.on(signalName, ({ interaction, pointerIndex }) => { - if (interaction.pointers[pointerIndex].hold) { - clearTimeout(interaction.pointers[pointerIndex].hold.timeout); - } - }); + +function addInteractionProps({ + interaction +}) { + interaction.prevTap = null; // the most recent tap event on this interaction + + interaction.tapTime = 0; // time of the most recent tap event +} + +function addHoldInfo({ + down, + pointerInfo +}) { + if (!down && pointerInfo.hold) { + return; + } + + pointerInfo.hold = { + duration: Infinity, + timeout: null + }; +} + +function clearHold({ + interaction, + pointerIndex +}) { + if (interaction.pointers[pointerIndex].hold) { + clearTimeout(interaction.pointers[pointerIndex].hold.timeout); + } +} + +function moveAndClearHold({ + interaction, + pointer, + event, + eventTarget, + duplicate +}, scope) { + const pointerIndex = interaction.getPointerIndex(pointer); + + if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) { + if (interaction.pointerIsDown) { + clearTimeout(interaction.pointers[pointerIndex].hold.timeout); } - for (let i = 0; i < simpleSignals.length; i++) { - interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i], scope)); + + fire({ + interaction, + pointer, + event, + eventTarget: eventTarget, + type: 'move' + }, scope); + } +} + +function downAndStartHold({ + interaction, + pointer, + event, + eventTarget, + pointerIndex +}, scope) { + const timer = interaction.pointers[pointerIndex].hold; + const path = utils.dom.getPath(eventTarget); + const signalArg = { + interaction, + pointer, + event, + eventTarget, + type: 'hold', + targets: [], + path, + node: null + }; + + for (const node of path) { + signalArg.node = node; + scope.fire('pointerEvents:collect-targets', signalArg); + } + + if (!signalArg.targets.length) { + return; + } + + let minDuration = Infinity; + + for (const target of signalArg.targets) { + const holdDuration = target.eventable.options.holdDuration; + + if (holdDuration < minDuration) { + minDuration = holdDuration; } - interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => { - if (!interaction.pointerWasMoved) { - fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope); - } - }); + } + + timer.duration = minDuration; + timer.timeout = setTimeout(() => { + fire({ + interaction, + eventTarget, + pointer, + event, + type: 'hold' + }, scope); + }, minDuration); } -function createSignalListener(type, scope) { - return function ({ interaction, pointer, event, eventTarget }) { - fire({ interaction, eventTarget, pointer, event, type }, scope); - }; + +function tapAfterUp({ + interaction, + pointer, + event, + eventTarget +}, scope) { + if (!interaction.pointerWasMoved) { + fire({ + interaction, + eventTarget, + pointer, + event, + type: 'tap' + }, scope); + } +} + +function install(scope) { + scope.pointerEvents = pointerEvents; + scope.defaults.actions.pointerEvents = pointerEvents.defaults; } + export default pointerEvents; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQTtBQTRDekMsTUFBTSxPQUFPLEdBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDekMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQzlDLE1BQU0sWUFBWSxHQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUU5QyxNQUFNLFFBQVEsR0FBd0I7SUFDcEMsWUFBWSxFQUFFLEdBQUc7SUFDakIsVUFBVSxFQUFJLElBQUk7SUFDbEIsU0FBUyxFQUFLLElBQUk7SUFDbEIsTUFBTSxFQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQzdCLENBQUE7QUFFRCxNQUFNLGFBQWEsR0FBRztJQUNwQixFQUFFLEVBQUUscUJBQXFCO0lBQ3pCLE9BQU87SUFDUCxPQUFPO0lBQ1AsWUFBWTtJQUNaLElBQUk7SUFDSixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLFFBQVE7SUFDUixLQUFLLEVBQUU7UUFDTCxNQUFNO1FBQ04sTUFBTTtRQUNOLElBQUk7UUFDSixRQUFRO1FBQ1IsS0FBSztRQUNMLFdBQVc7UUFDWCxNQUFNO0tBQ1A7Q0FDRixDQUFBO0FBRUQsU0FBUyxJQUFJLENBQW9CLEdBUWhDLEVBQUUsS0FBcUI7SUFDdEIsTUFBTSxFQUNKLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFDeEMsSUFBSSxHQUFJLEdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUNyQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQ25DLEdBQUcsR0FBRyxDQUFBO0lBRVAsTUFBTSxFQUNKLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUM3RixHQUFHLEdBQUcsQ0FBQTtJQUVQLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLFdBQVc7UUFDWCxPQUFPO1FBQ1AsS0FBSztRQUNMLFdBQVc7UUFDWCxPQUFPO1FBQ1AsSUFBSTtRQUNKLFlBQVk7S0FDYixDQUFBO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXpCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUU7WUFDcEMsWUFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2pEO1FBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUUvRCxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3BDLFlBQVksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQTtRQUN6QyxZQUFZLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUE7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFbkMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUUvQixJQUFJLFlBQVksQ0FBQywyQkFBMkI7WUFDeEMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCO2dCQUM1QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN2RixNQUFLO1NBQ047S0FDRjtJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRWhDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtRQUNsQix3RUFBd0U7UUFDeEUsMkNBQTJDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxNQUFNO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ0wsV0FBVztnQkFDWCxPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsV0FBVztnQkFDWCxJQUFJLEVBQUUsV0FBVzthQUNsQixFQUFFLEtBQUssQ0FBQztZQUNULENBQUMsQ0FBQyxZQUFZLENBQUE7UUFFaEIsV0FBVyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDN0IsV0FBVyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFBO0tBQ3hDO0lBRUQsT0FBTyxZQUFZLENBQUE7QUFDckIsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQW9CLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFNL0Y7SUFDQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3pELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFdEQsdUVBQXVFO0lBQ3ZFLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlO1FBQzlDLG9FQUFvRTtRQUNwRSxDQUFDLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsRUFBRTtRQUM3RCxPQUFPLEVBQUUsQ0FBQTtLQUNWO0lBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDM0MsTUFBTSxTQUFTLEdBQUc7UUFDaEIsV0FBVztRQUNYLE9BQU87UUFDUCxLQUFLO1FBQ0wsV0FBVztRQUNYLElBQUk7UUFDSixJQUFJO1FBQ0osT0FBTyxFQUFFLEVBQXFCO1FBQzlCLElBQUksRUFBRSxJQUFJO0tBQ1gsQ0FBQTtJQUVELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFO1FBQ3ZCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBRXJCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUE7S0FDM0M7SUFFRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDbkIsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNwRCxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7S0FDOUY7SUFFRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUE7QUFDMUIsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLFlBQVksR0FDYixHQUFHLEtBQUssQ0FBQTtJQUVULEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO0lBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFBO0lBRTdELFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNqRCxXQUFXLENBQUMsT0FBTyxHQUFNLElBQUksQ0FBQSxDQUFFLGdEQUFnRDtRQUMvRSxXQUFXLENBQUMsT0FBTyxHQUFNLENBQUMsQ0FBQSxDQUFLLG9DQUFvQztJQUNyRSxDQUFDLENBQUMsQ0FBQTtJQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNsRSxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDN0IsT0FBTTtTQUNQO1FBRUQsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQzFELENBQUMsQ0FBQyxDQUFBO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtRQUM5RixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLElBQUksV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2pGLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRTtnQkFDN0IsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQzlEO1lBRUQsSUFBSSxDQUFDO2dCQUNILFdBQVc7Z0JBQ1gsT0FBTztnQkFDUCxLQUFLO2dCQUNMLFdBQVc7Z0JBQ1gsSUFBSSxFQUFFLE1BQU07YUFDYixFQUFFLEtBQUssQ0FBQyxDQUFBO1NBQ1Y7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7UUFDN0YsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDckQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0MsTUFBTSxTQUFTLEdBQUc7WUFDaEIsV0FBVztZQUNYLE9BQU87WUFDUCxLQUFLO1lBQ0wsV0FBVztZQUNYLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLEVBQXFCO1lBQzlCLElBQUk7WUFDSixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUE7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRTtZQUN2QixTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtZQUVyQixPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFBO1NBQzNDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRXpDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQTtRQUUxQixLQUFLLE1BQU0sTUFBTSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFBO1lBRTFELElBQUksWUFBWSxHQUFHLFdBQVcsRUFBRTtnQkFDOUIsV0FBVyxHQUFHLFlBQVksQ0FBQTthQUMzQjtTQUNGO1FBRUQsS0FBSyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUE7UUFDNUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzlCLElBQUksQ0FBQztnQkFDSCxXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsT0FBTztnQkFDUCxLQUFLO2dCQUNMLElBQUksRUFBRSxNQUFNO2FBQ2IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNYLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNqQixDQUFDLENBQUMsQ0FBQTtJQUVGLEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDekMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRTtZQUNwRSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUMzQyxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDOUQ7UUFDSCxDQUFDLENBQUMsQ0FBQTtLQUNIO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0tBQ3hGO0lBRUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1FBQzdFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDdkU7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFFLElBQVksRUFBRSxLQUFLO0lBQ2hELE9BQU8sVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBTztRQUNoRSxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDakUsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELGVBQWUsYUFBYSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGVyQWN0aW9uRGVmYXVsdHMgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJ1xuaW1wb3J0IEV2ZW50YWJsZSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0V2ZW50YWJsZSdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgUG9pbnRlckV2ZW50IGZyb20gJy4vUG9pbnRlckV2ZW50J1xuXG5leHBvcnQgdHlwZSBFdmVudFRhcmdldExpc3QgPSBBcnJheTx7XG4gIG5vZGU6IE5vZGVcbiAgZXZlbnRhYmxlOiBFdmVudGFibGVcbiAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH1cbn0+XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnRlckV2ZW50T3B0aW9ucyBleHRlbmRzIFBlckFjdGlvbkRlZmF1bHRzIHtcbiAgZW5hYmxlZD86IHVuZGVmaW5lZCAvLyBub3QgdXNlZFxuICBob2xkRHVyYXRpb24/OiBudW1iZXJcbiAgaWdub3JlRnJvbT86IGFueVxuICBhbGxvd0Zyb20/OiBhbnlcbiAgb3JpZ2luPzogSW50ZXJhY3QuUG9pbnQgfCBzdHJpbmcgfCBJbnRlcmFjdC5FbGVtZW50XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgcG9pbnRlckV2ZW50czogdHlwZW9mIHBvaW50ZXJFdmVudHNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIHByZXZUYXA/OiBQb2ludGVyRXZlbnQ8c3RyaW5nPlxuICAgIHRhcFRpbWU/OiBudW1iZXJcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9Qb2ludGVySW5mbycge1xuICBpbnRlcmZhY2UgUG9pbnRlckluZm8ge1xuICAgIGhvbGQ/OiB7XG4gICAgICBkdXJhdGlvbjogbnVtYmVyXG4gICAgICB0aW1lb3V0OiBhbnlcbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICBwb2ludGVyRXZlbnRzOiBJbnRlcmFjdC5PcHRpb25zXG4gIH1cbn1cblxuY29uc3Qgc2lnbmFscyAgICAgICA9IG5ldyB1dGlscy5TaWduYWxzKClcbmNvbnN0IHNpbXBsZVNpZ25hbHMgPSBbJ2Rvd24nLCAndXAnLCAnY2FuY2VsJ11cbmNvbnN0IHNpbXBsZUV2ZW50cyAgPSBbJ2Rvd24nLCAndXAnLCAnY2FuY2VsJ11cblxuY29uc3QgZGVmYXVsdHM6IFBvaW50ZXJFdmVudE9wdGlvbnMgPSB7XG4gIGhvbGREdXJhdGlvbjogNjAwLFxuICBpZ25vcmVGcm9tICA6IG51bGwsXG4gIGFsbG93RnJvbSAgIDogbnVsbCxcbiAgb3JpZ2luICAgICAgOiB7IHg6IDAsIHk6IDAgfSxcbn1cblxuY29uc3QgcG9pbnRlckV2ZW50cyA9IHtcbiAgaWQ6ICdwb2ludGVyLWV2ZW50cy9iYXNlJyxcbiAgaW5zdGFsbCxcbiAgc2lnbmFscyxcbiAgUG9pbnRlckV2ZW50LFxuICBmaXJlLFxuICBjb2xsZWN0RXZlbnRUYXJnZXRzLFxuICBjcmVhdGVTaWduYWxMaXN0ZW5lcixcbiAgZGVmYXVsdHMsXG4gIHR5cGVzOiBbXG4gICAgJ2Rvd24nLFxuICAgICdtb3ZlJyxcbiAgICAndXAnLFxuICAgICdjYW5jZWwnLFxuICAgICd0YXAnLFxuICAgICdkb3VibGV0YXAnLFxuICAgICdob2xkJyxcbiAgXSxcbn1cblxuZnVuY3Rpb24gZmlyZTxUIGV4dGVuZHMgc3RyaW5nPiAoYXJnOiB7XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvblxuICBwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZVxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICBldmVudFRhcmdldDogSW50ZXJhY3QuRXZlbnRUYXJnZXRcbiAgdGFyZ2V0cz86IEV2ZW50VGFyZ2V0TGlzdFxuICBwb2ludGVyRXZlbnQ/OiBQb2ludGVyRXZlbnQ8VD5cbiAgdHlwZTogVFxufSwgc2NvcGU6IEludGVyYWN0LlNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LFxuICAgIHR5cGUgPSAoYXJnIGFzIGFueSkucG9pbnRlckV2ZW50LnR5cGUsXG4gICAgdGFyZ2V0cyA9IGNvbGxlY3RFdmVudFRhcmdldHMoYXJnKSxcbiAgfSA9IGFyZ1xuXG4gIGNvbnN0IHtcbiAgICBwb2ludGVyRXZlbnQgPSBuZXcgUG9pbnRlckV2ZW50KHR5cGUsIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgaW50ZXJhY3Rpb24sIHNjb3BlLm5vdygpKSxcbiAgfSA9IGFyZ1xuXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBwb2ludGVyLFxuICAgIGV2ZW50LFxuICAgIGV2ZW50VGFyZ2V0LFxuICAgIHRhcmdldHMsXG4gICAgdHlwZSxcbiAgICBwb2ludGVyRXZlbnQsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRzW2ldXG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGFyZ2V0LnByb3BzIHx8IHt9KSB7XG4gICAgICAocG9pbnRlckV2ZW50IGFzIGFueSlbcHJvcF0gPSB0YXJnZXQucHJvcHNbcHJvcF1cbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW4gPSB1dGlscy5nZXRPcmlnaW5YWSh0YXJnZXQuZXZlbnRhYmxlLCB0YXJnZXQubm9kZSlcblxuICAgIHBvaW50ZXJFdmVudC5fc3VidHJhY3RPcmlnaW4ob3JpZ2luKVxuICAgIHBvaW50ZXJFdmVudC5ldmVudGFibGUgPSB0YXJnZXQuZXZlbnRhYmxlXG4gICAgcG9pbnRlckV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0YXJnZXQubm9kZVxuXG4gICAgdGFyZ2V0LmV2ZW50YWJsZS5maXJlKHBvaW50ZXJFdmVudClcblxuICAgIHBvaW50ZXJFdmVudC5fYWRkT3JpZ2luKG9yaWdpbilcblxuICAgIGlmIChwb2ludGVyRXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIHx8XG4gICAgICAgIChwb2ludGVyRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkICYmXG4gICAgICAgICAgICAoaSArIDEpIDwgdGFyZ2V0cy5sZW5ndGggJiYgdGFyZ2V0c1tpICsgMV0ubm9kZSAhPT0gcG9pbnRlckV2ZW50LmN1cnJlbnRUYXJnZXQpKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHNpZ25hbHMuZmlyZSgnZmlyZWQnLCBzaWduYWxBcmcpXG5cbiAgaWYgKHR5cGUgPT09ICd0YXAnKSB7XG4gICAgLy8gaWYgcG9pbnRlckV2ZW50IHNob3VsZCBtYWtlIGEgZG91YmxlIHRhcCwgY3JlYXRlIGFuZCBmaXJlIGEgZG91YmxldGFwXG4gICAgLy8gUG9pbnRlckV2ZW50IGFuZCB1c2UgdGhhdCBhcyB0aGUgcHJldlRhcFxuICAgIGNvbnN0IHByZXZUYXAgPSBwb2ludGVyRXZlbnQuZG91YmxlXG4gICAgICA/IGZpcmUoe1xuICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICB0eXBlOiAnZG91YmxldGFwJyxcbiAgICAgIH0sIHNjb3BlKVxuICAgICAgOiBwb2ludGVyRXZlbnRcblxuICAgIGludGVyYWN0aW9uLnByZXZUYXAgPSBwcmV2VGFwXG4gICAgaW50ZXJhY3Rpb24udGFwVGltZSA9IHByZXZUYXAudGltZVN0YW1wXG4gIH1cblxuICByZXR1cm4gcG9pbnRlckV2ZW50XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RFdmVudFRhcmdldHM8VCBleHRlbmRzIHN0cmluZz4gKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgdHlwZSB9OiB7XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvblxuICBwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZVxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICBldmVudFRhcmdldDogSW50ZXJhY3QuRXZlbnRUYXJnZXRcbiAgdHlwZTogVFxufSkge1xuICBjb25zdCBwb2ludGVySW5kZXggPSBpbnRlcmFjdGlvbi5nZXRQb2ludGVySW5kZXgocG9pbnRlcilcbiAgY29uc3QgcG9pbnRlckluZm8gPSBpbnRlcmFjdGlvbi5wb2ludGVyc1twb2ludGVySW5kZXhdXG5cbiAgLy8gZG8gbm90IGZpcmUgYSB0YXAgZXZlbnQgaWYgdGhlIHBvaW50ZXIgd2FzIG1vdmVkIGJlZm9yZSBiZWluZyBsaWZ0ZWRcbiAgaWYgKHR5cGUgPT09ICd0YXAnICYmIChpbnRlcmFjdGlvbi5wb2ludGVyV2FzTW92ZWQgfHxcbiAgICAgIC8vIG9yIGlmIHRoZSBwb2ludGVydXAgdGFyZ2V0IGlzIGRpZmZlcmVudCB0byB0aGUgcG9pbnRlcmRvd24gdGFyZ2V0XG4gICAgICAhKHBvaW50ZXJJbmZvICYmIHBvaW50ZXJJbmZvLmRvd25UYXJnZXQgPT09IGV2ZW50VGFyZ2V0KSkpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGNvbnN0IHBhdGggPSB1dGlscy5kb20uZ2V0UGF0aChldmVudFRhcmdldClcbiAgY29uc3Qgc2lnbmFsQXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIHBvaW50ZXIsXG4gICAgZXZlbnQsXG4gICAgZXZlbnRUYXJnZXQsXG4gICAgdHlwZSxcbiAgICBwYXRoLFxuICAgIHRhcmdldHM6IFtdIGFzIEV2ZW50VGFyZ2V0TGlzdCxcbiAgICBub2RlOiBudWxsLFxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIHBhdGgpIHtcbiAgICBzaWduYWxBcmcubm9kZSA9IG5vZGVcblxuICAgIHNpZ25hbHMuZmlyZSgnY29sbGVjdC10YXJnZXRzJywgc2lnbmFsQXJnKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdob2xkJykge1xuICAgIHNpZ25hbEFyZy50YXJnZXRzID0gc2lnbmFsQXJnLnRhcmdldHMuZmlsdGVyKHRhcmdldCA9PlxuICAgICAgdGFyZ2V0LmV2ZW50YWJsZS5vcHRpb25zLmhvbGREdXJhdGlvbiA9PT0gaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkLmR1cmF0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHNpZ25hbEFyZy50YXJnZXRzXG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb25zLFxuICB9ID0gc2NvcGVcblxuICBzY29wZS5wb2ludGVyRXZlbnRzID0gcG9pbnRlckV2ZW50c1xuICBzY29wZS5kZWZhdWx0cy5hY3Rpb25zLnBvaW50ZXJFdmVudHMgPSBwb2ludGVyRXZlbnRzLmRlZmF1bHRzXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ25ldycsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5wcmV2VGFwICAgID0gbnVsbCAgLy8gdGhlIG1vc3QgcmVjZW50IHRhcCBldmVudCBvbiB0aGlzIGludGVyYWN0aW9uXG4gICAgaW50ZXJhY3Rpb24udGFwVGltZSAgICA9IDAgICAgIC8vIHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50IHRhcCBldmVudFxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCd1cGRhdGUtcG9pbnRlcicsICh7IGRvd24sIHBvaW50ZXJJbmZvIH0pID0+IHtcbiAgICBpZiAoIWRvd24gJiYgcG9pbnRlckluZm8uaG9sZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcG9pbnRlckluZm8uaG9sZCA9IHsgZHVyYXRpb246IEluZmluaXR5LCB0aW1lb3V0OiBudWxsIH1cbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbW92ZScsICh7IGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGR1cGxpY2F0ZU1vdmUgfSkgPT4ge1xuICAgIGNvbnN0IHBvaW50ZXJJbmRleCA9IGludGVyYWN0aW9uLmdldFBvaW50ZXJJbmRleChwb2ludGVyKVxuXG4gICAgaWYgKCFkdXBsaWNhdGVNb3ZlICYmICghaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biB8fCBpbnRlcmFjdGlvbi5wb2ludGVyV2FzTW92ZWQpKSB7XG4gICAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93bikge1xuICAgICAgICBjbGVhclRpbWVvdXQoaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkLnRpbWVvdXQpXG4gICAgICB9XG5cbiAgICAgIGZpcmUoe1xuICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICB0eXBlOiAnbW92ZScsXG4gICAgICB9LCBzY29wZSlcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2Rvd24nLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBwb2ludGVySW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkXG4gICAgY29uc3QgcGF0aCA9IHV0aWxzLmRvbS5nZXRQYXRoKGV2ZW50VGFyZ2V0KVxuICAgIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICAgIGludGVyYWN0aW9uLFxuICAgICAgcG9pbnRlcixcbiAgICAgIGV2ZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICB0eXBlOiAnaG9sZCcsXG4gICAgICB0YXJnZXRzOiBbXSBhcyBFdmVudFRhcmdldExpc3QsXG4gICAgICBwYXRoLFxuICAgICAgbm9kZTogbnVsbCxcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGF0aCkge1xuICAgICAgc2lnbmFsQXJnLm5vZGUgPSBub2RlXG5cbiAgICAgIHNpZ25hbHMuZmlyZSgnY29sbGVjdC10YXJnZXRzJywgc2lnbmFsQXJnKVxuICAgIH1cblxuICAgIGlmICghc2lnbmFsQXJnLnRhcmdldHMubGVuZ3RoKSB7IHJldHVybiB9XG5cbiAgICBsZXQgbWluRHVyYXRpb24gPSBJbmZpbml0eVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2Ygc2lnbmFsQXJnLnRhcmdldHMpIHtcbiAgICAgIGNvbnN0IGhvbGREdXJhdGlvbiA9IHRhcmdldC5ldmVudGFibGUub3B0aW9ucy5ob2xkRHVyYXRpb25cblxuICAgICAgaWYgKGhvbGREdXJhdGlvbiA8IG1pbkR1cmF0aW9uKSB7XG4gICAgICAgIG1pbkR1cmF0aW9uID0gaG9sZER1cmF0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGltZXIuZHVyYXRpb24gPSBtaW5EdXJhdGlvblxuICAgIHRpbWVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZpcmUoe1xuICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0eXBlOiAnaG9sZCcsXG4gICAgICB9LCBzY29wZSlcbiAgICB9LCBtaW5EdXJhdGlvbilcbiAgfSlcblxuICBmb3IgKGNvbnN0IHNpZ25hbE5hbWUgb2YgWyd1cCcsICdjYW5jZWwnXSkge1xuICAgIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKHNpZ25hbE5hbWUsICh7IGludGVyYWN0aW9uLCBwb2ludGVySW5kZXggfSkgPT4ge1xuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF0uaG9sZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkLnRpbWVvdXQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2ltcGxlU2lnbmFscy5sZW5ndGg7IGkrKykge1xuICAgIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKHNpbXBsZVNpZ25hbHNbaV0sIGNyZWF0ZVNpZ25hbExpc3RlbmVyKHNpbXBsZUV2ZW50c1tpXSwgc2NvcGUpKVxuICB9XG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3VwJywgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCB9KSA9PiB7XG4gICAgaWYgKCFpbnRlcmFjdGlvbi5wb2ludGVyV2FzTW92ZWQpIHtcbiAgICAgIGZpcmUoeyBpbnRlcmFjdGlvbiwgZXZlbnRUYXJnZXQsIHBvaW50ZXIsIGV2ZW50LCB0eXBlOiAndGFwJyB9LCBzY29wZSlcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ25hbExpc3RlbmVyICh0eXBlOiBzdHJpbmcsIHNjb3BlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0IH06IGFueSkge1xuICAgIGZpcmUoeyBpbnRlcmFjdGlvbiwgZXZlbnRUYXJnZXQsIHBvaW50ZXIsIGV2ZW50LCB0eXBlIH0sIHNjb3BlKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBvaW50ZXJFdmVudHNcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/packages/pointer-events/base.js.map b/packages/pointer-events/base.js.map new file mode 100644 index 000000000..b898ad789 --- /dev/null +++ b/packages/pointer-events/base.js.map @@ -0,0 +1,87 @@ +{ + "version": 3, + "sources": [ + "base.ts" + ], + "names": [ + "Interaction", + "Scope", + "utils", + "PointerEvent", + "defaults", + "holdDuration", + "ignoreFrom", + "allowFrom", + "origin", + "x", + "y", + "pointerEvents", + "id", + "install", + "listeners", + "addInteractionProps", + "addHoldInfo", + "moveAndClearHold", + "arg", + "scope", + "downAndStartHold", + "fire", + "clearHold", + "tapAfterUp", + "collectEventTargets", + "types", + "interaction", + "pointer", + "event", + "eventTarget", + "type", + "targets", + "pointerEvent", + "now", + "signalArg", + "i", + "length", + "target", + "prop", + "props", + "getOriginXY", + "eventable", + "node", + "_subtractOrigin", + "currentTarget", + "_addOrigin", + "immediatePropagationStopped", + "propagationStopped", + "prevTap", + "double", + "tapTime", + "timeStamp", + "pointerIndex", + "getPointerIndex", + "pointerInfo", + "pointers", + "pointerWasMoved", + "downTarget", + "path", + "dom", + "getPath", + "filter", + "options", + "hold", + "duration", + "down", + "Infinity", + "timeout", + "clearTimeout", + "duplicate", + "pointerIsDown", + "timer", + "minDuration", + "setTimeout", + "actions" + ], + "mappings": "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", + "sourcesContent": [ + "import { PerActionDefaults } from '../core/defaultOptions'\nimport Eventable from '../core/Eventable'\nimport Interaction from '../core/Interaction'\nimport { Scope } from '../core/scope'\nimport * as utils from '../utils/index'\nimport PointerEvent from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Interact.Point | string | Interact.Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface ActionDefaults {\n pointerEvents: Interact.Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom : null,\n allowFrom : null,\n origin : { x: 0, y: 0 },\n}\n\nconst pointerEvents = {\n id: 'pointer-events/base',\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: [\n 'down',\n 'move',\n 'up',\n 'cancel',\n 'tap',\n 'doubletap',\n 'hold',\n ],\n}\n\nfunction fire (\n arg: {\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Interact.Scope,\n) {\n const {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n targets = collectEventTargets(arg, scope),\n } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n (pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = utils.getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n (i + 1) < targets.length && targets[i + 1].node !== pointerEvent.currentTarget)) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire({\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n }, scope)\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets ({ interaction, pointer, event, eventTarget, type }: {\n interaction: Interaction\n pointer: Interact.PointerType | PointerEvent\n event: Interact.PointerEventType | PointerEvent\n eventTarget: Interact.EventTarget\n type: T\n}, scope: Interact.Scope) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (type === 'tap' && (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))) {\n return []\n }\n\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents: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 addInteractionProps ({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo ({ down, pointerInfo }: Interact.SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold ({ interaction, pointerIndex }) {\n if (interaction.pointers[pointerIndex].hold) {\n clearTimeout(interaction.pointers[pointerIndex].hold.timeout)\n }\n}\n\nfunction moveAndClearHold (\n { interaction, pointer, event, eventTarget, duplicate }: Interact.SignalArgs['interactions:move'],\n scope: Interact.Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n\n if (!duplicate && (!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: eventTarget as Interact.Element,\n type: 'move',\n }, scope)\n }\n}\n\nfunction downAndStartHold ({ interaction, pointer, event, eventTarget, pointerIndex }: Interact.SignalArgs['interactions:down'], scope: Interact.Scope) {\n const timer = interaction.pointers[pointerIndex].hold\n const path = utils.dom.getPath(eventTarget)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) { return }\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire({\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n }, scope)\n }, minDuration)\n}\n\nfunction tapAfterUp ({ interaction, pointer, event, eventTarget }: Interact.SignalArgs['interactions:up'], scope: Interact.Scope) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install (scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n}\n\nexport default pointerEvents\n" + ] +} \ No newline at end of file diff --git a/packages/pointer-events/base.spec.js b/packages/pointer-events/base.spec.js deleted file mode 100644 index e3e9483f1..000000000 --- a/packages/pointer-events/base.spec.js +++ /dev/null @@ -1,144 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import Eventable from '@interactjs/core/Eventable'; -import Interaction from '@interactjs/core/Interaction'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import pointerEvents from './base'; -import interactableTargets from './interactableTargets'; -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 scope = helpers.mockScope(); - const eventable = new Eventable(pointerEvents.defaults); - const type = 'TEST'; - const element = {}; - const eventTarget = {}; - const TEST_PROP = ['TEST_PROP']; - let firedEvent; - const targets = [{ - eventable, - node: element, - props: { - TEST_PROP, - }, - }]; - eventable.on(type, event => { firedEvent = event; }); - pointerEvents.fire({ - type, - eventTarget, - pointer: {}, - event: {}, - interaction: {}, - targets, - }, scope); - 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(scope.interactions.new({}), { tapTime: -1, prevTap: null }); - interaction.updatePointer({}, {}, null); - const tapEvent = Object.assign(new pointerEvents.PointerEvent('tap', {}, {}, null, interaction, 0), { - timeStamp: tapTime, - }); - pointerEvents.fire({ - pointerEvent: tapEvent, - interaction, - targets: [{ - eventable, - element, - }], - }, scope); - 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 = { - node: {}, - props: { 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(); - scope.usePlugin(pointerEvents); - 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(); - scope.usePlugin(pointerEvents); - 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.pointers[i].hold are correct`); - } - t.end(); -}); -test('pointerEvents down hold up tap', async (t) => { - const { interaction, event, interactable, } = helpers.testEnv({ plugins: [pointerEvents, interactableTargets] }); - const fired = []; - for (const type of pointerEvents.types) { - interactable.on(type, e => fired.push(e)); - } - interaction.pointerDown(event, event, event.target); - interaction.pointerMove(event, event, event.target); - t.deepEqual(fired.map(e => e.type), ['down'], 'duplicate move event is not fired'); - const holdTimer = interaction.pointers[0].hold; - t.ok(!!holdTimer.timeout, 'hold timeout is set'); - await helpers.timeout(holdTimer.duration); - interaction.pointerUp(event, event, event.target, event.target); - t.deepEqual(fired.map(e => e.type), ['down', 'hold', 'up', 'tap'], 'tap event is fired after down, hold and up events'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmFzZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sU0FBUyxNQUFNLDRCQUE0QixDQUFBO0FBQ2xELE9BQU8sV0FBVyxNQUFNLDhCQUE4QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxhQUFrQyxNQUFNLFFBQVEsQ0FBQTtBQUN2RCxPQUFPLG1CQUFtQixNQUFNLHVCQUF1QixDQUFBO0FBRXZELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM5QixDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQzdCO1FBQ0UsTUFBTTtRQUNOLE1BQU07UUFDTixJQUFJO1FBQ0osUUFBUTtRQUNSLEtBQUs7UUFDTCxXQUFXO1FBQ1gsTUFBTTtLQUNQLEVBQ0Qsb0NBQW9DLENBQUMsQ0FBQTtJQUV2QyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUM3QixNQUFNLEtBQUssR0FBbUIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRWpELE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUE7SUFDbkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtJQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9CLElBQUksVUFBVSxDQUFBO0lBQ2QsTUFBTSxPQUFPLEdBQW9CLENBQUM7WUFDaEMsU0FBUztZQUNULElBQUksRUFBRSxP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LENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUUvRCxDQUFDLENBQUMsU0FBUyxDQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ3RCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQzdCLG1EQUFtRCxDQUFDLENBQUE7SUFFdEQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBFdmVudGFibGUgZnJvbSAnQGludGVyYWN0anMvY29yZS9FdmVudGFibGUnXG5pbXBvcnQgSW50ZXJhY3Rpb24gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9faGVscGVycydcbmltcG9ydCBwb2ludGVyRXZlbnRzLCB7IEV2ZW50VGFyZ2V0TGlzdCB9IGZyb20gJy4vYmFzZSdcbmltcG9ydCBpbnRlcmFjdGFibGVUYXJnZXRzIGZyb20gJy4vaW50ZXJhY3RhYmxlVGFyZ2V0cydcblxudGVzdCgncG9pbnRlckV2ZW50cy50eXBlcycsIHQgPT4ge1xuICB0LmRlZXBFcXVhbChwb2ludGVyRXZlbnRzLnR5cGVzLFxuICAgIFtcbiAgICAgICdkb3duJyxcbiAgICAgICdtb3ZlJyxcbiAgICAgICd1cCcsXG4gICAgICAnY2FuY2VsJyxcbiAgICAgICd0YXAnLFxuICAgICAgJ2RvdWJsZXRhcCcsXG4gICAgICAnaG9sZCcsXG4gICAgXSxcbiAgICAncG9pbnRlckV2ZW50cy50eXBlcyBpcyBhcyBleHBlY3RlZCcpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgncG9pbnRlckV2ZW50cy5maXJlJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlOiBJbnRlcmFjdC5TY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBjb25zdCBldmVudGFibGUgPSBuZXcgRXZlbnRhYmxlKHBvaW50ZXJFdmVudHMuZGVmYXVsdHMpXG4gIGNvbnN0IHR5cGUgPSAnVEVTVCdcbiAgY29uc3QgZWxlbWVudCA9IHt9XG4gIGNvbnN0IGV2ZW50VGFyZ2V0ID0ge31cbiAgY29uc3QgVEVTVF9QUk9QID0gWydURVNUX1BST1AnXVxuICBsZXQgZmlyZWRFdmVudFxuICBjb25zdCB0YXJnZXRzOiBFdmVudFRhcmdldExpc3QgPSBbe1xuICAgIGV2ZW50YWJsZSxcbiAgICBub2RlOiBlbGVtZW50IGFzIE5vZGUsXG4gICAgcHJvcHM6IHtcbiAgICAgIFRFU1RfUFJPUCxcbiAgICB9LFxuICB9XVxuXG4gIGV2ZW50YWJsZS5vbih0eXBlLCBldmVudCA9PiB7IGZpcmVkRXZlbnQgPSBldmVudCB9KVxuXG4gIHBvaW50ZXJFdmVudHMuZmlyZSh7XG4gICAgdHlwZSxcbiAgICBldmVudFRhcmdldCxcbiAgICBwb2ludGVyOiB7fSxcbiAgICBldmVudDoge30sXG4gICAgaW50ZXJhY3Rpb246IHt9LFxuICAgIHRhcmdldHMsXG4gIH0gYXMgYW55LCBzY29wZSlcblxuICB0Lm9rKGZpcmVkRXZlbnQgaW5zdGFuY2VvZiBwb2ludGVyRXZlbnRzLlBvaW50ZXJFdmVudCxcbiAgICAnRmlyZWQgZXZlbnQgaXMgYW4gaW5zdGFuY2Ugb2YgcG9pbnRlckV2ZW50cy5Qb2ludGVyRXZlbnQnKVxuICB0LmVxdWFsKGZpcmVkRXZlbnQudHlwZSwgdHlwZSxcbiAgICAnRmlyZWQgZXZlbnQgdHlwZSBpcyBjb3JyZWN0JylcbiAgdC5lcXVhbChmaXJlZEV2ZW50LmN1cnJlbnRUYXJnZXQsIGVsZW1lbnQsXG4gICAgJ0ZpcmVkIGV2ZW50IGN1cnJlbnRUYXJnZXQgaXMgY29ycmVjdCcpXG4gIHQuZXF1YWwoZmlyZWRFdmVudC50YXJnZXQsIGV2ZW50VGFyZ2V0LFxuICAgICdGaXJlZCBldmVudCB0YXJnZXQgaXMgY29ycmVjdCcpXG4gIHQuZXF1YWwoZmlyZWRFdmVudC5URVNUX1BST1AsIFRFU1RfUFJPUCxcbiAgICAnRmlyZWQgZXZlbnQgaGFzIHByb3BzIGZyb20gdGFyZ2V0LnByb3BzJylcblxuICBjb25zdCB0YXBUaW1lID0gNTAwXG4gIGNvbnN0IGludGVyYWN0aW9uID0gT2JqZWN0LmFzc2lnbihcbiAgICBzY29wZS5pbnRlcmFjdGlvbnMubmV3KHt9KSxcbiAgICB7IHRhcFRpbWU6IC0xLCBwcmV2VGFwOiBudWxsIH0pXG5cbiAgaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcih7fSBhcyBhbnksIHt9IGFzIGFueSwgbnVsbClcblxuICBjb25zdCB0YXBFdmVudCA9IE9iamVjdC5hc3NpZ24obmV3IHBvaW50ZXJFdmVudHMuUG9pbnRlckV2ZW50KCd0YXAnLCB7fSBhcyBhbnksIHt9IGFzIGFueSwgbnVsbCwgaW50ZXJhY3Rpb24sIDApLCB7XG4gICAgdGltZVN0YW1wOiB0YXBUaW1lLFxuICB9KVxuXG4gIHBvaW50ZXJFdmVudHMuZmlyZSh7XG4gICAgcG9pbnRlckV2ZW50OiB0YXBFdmVudCxcbiAgICBpbnRlcmFjdGlvbixcbiAgICB0YXJnZXRzOiBbe1xuICAgICAgZXZlbnRhYmxlLFxuICAgICAgZWxlbWVudCxcbiAgICB9XSxcbiAgfSBhcyBhbnksIHNjb3BlKVxuXG4gIHQuZXF1YWwoaW50ZXJhY3Rpb24udGFwVGltZSwgdGFwVGltZSxcbiAgICAnaW50ZXJhY3Rpb24udGFwVGltZSBpcyB1cGRhdGVkJylcbiAgdC5lcXVhbChpbnRlcmFjdGlvbi5wcmV2VGFwLCB0YXBFdmVudCxcbiAgICAnaW50ZXJhY3Rpb24ucHJldlRhcCBpcyB1cGRhdGVkJylcblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdwb2ludGVyRXZlbnRzLmNvbGxlY3RFdmVudFRhcmdldHMnLCB0ID0+IHtcbiAgY29uc3QgdHlwZSA9ICdURVNUJ1xuICBjb25zdCBURVNUX1BST1AgPSBbJ1RFU1RfUFJPUCddXG4gIGNvbnN0IHRhcmdldCA9IHtcbiAgICBub2RlOiB7fSBhcyBOb2RlLFxuICAgIHByb3BzOiB7IFRFU1RfUFJPUCB9LFxuICAgIGV2ZW50YWJsZTogbmV3IEV2ZW50YWJsZShwb2ludGVyRXZlbnRzLmRlZmF1bHRzKSxcbiAgfVxuICBsZXQgY29sbGVjdGVkVGFyZ2V0c1xuXG4gIGZ1bmN0aW9uIG9uQ29sbGVjdCAoeyB0YXJnZXRzIH06IHsgdGFyZ2V0czogRXZlbnRUYXJnZXRMaXN0IH0pIHtcbiAgICB0YXJnZXRzLnB1c2godGFyZ2V0KVxuXG4gICAgY29sbGVjdGVkVGFyZ2V0cyA9IHRhcmdldHNcbiAgfVxuXG4gIHBvaW50ZXJFdmVudHMuc2lnbmFscy5vbignY29sbGVjdC10YXJnZXRzJywgb25Db2xsZWN0KVxuICBwb2ludGVyRXZlbnRzLmNvbGxlY3RFdmVudFRhcmdldHMoe1xuICAgIGludGVyYWN0aW9uOiBuZXcgSW50ZXJhY3Rpb24oeyBzaWduYWxzOiBoZWxwZXJzLm1vY2tTaWduYWxzKCkgfSBhcyBhbnkpLFxuICAgIHBvaW50ZXI6IHt9LFxuICAgIGV2ZW50OiB7fSxcbiAgICBldmVudFRhcmdldDoge30sXG4gICAgdHlwZSxcbiAgfSBhcyBhbnkpXG5cbiAgdC5kZWVwRXF1YWwoY29sbGVjdGVkVGFyZ2V0cywgW3RhcmdldF0pXG5cbiAgcG9pbnRlckV2ZW50cy5zaWduYWxzLm9mZignY29sbGVjdC10YXJnZXRzJywgb25Db2xsZWN0KVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ3BvaW50ZXJFdmVudHMgSW50ZXJhY3Rpb24gdXBkYXRlLXBvaW50ZXIgc2lnbmFsJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlOiBJbnRlcmFjdC5TY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBzY29wZS51c2VQbHVnaW4ocG9pbnRlckV2ZW50cylcblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG4gIGNvbnN0IGluaXRpYWxIb2xkID0geyBkdXJhdGlvbjogSW5maW5pdHksIHRpbWVvdXQ6IG51bGwgfVxuICBjb25zdCBldmVudCA9IHt9IGFzIEludGVyYWN0LlBvaW50ZXJFdmVudFR5cGVcblxuICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKGhlbHBlcnMubmV3UG9pbnRlcigwKSwgZXZlbnQsIG51bGwsIGZhbHNlKVxuICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5wb2ludGVycy5tYXAocCA9PiBwLmhvbGQpLCBbaW5pdGlhbEhvbGRdLCAnc2V0IGhvbGQgaW5mbyBmb3IgbW92ZSBvbiBuZXcgcG9pbnRlcicpXG5cbiAgaW50ZXJhY3Rpb24ucmVtb3ZlUG9pbnRlcihoZWxwZXJzLm5ld1BvaW50ZXIoMCksIGV2ZW50KVxuXG4gIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIoaGVscGVycy5uZXdQb2ludGVyKDApLCBldmVudCwgbnVsbCwgdHJ1ZSlcbiAgdC5kZWVwRXF1YWwoaW50ZXJhY3Rpb24ucG9pbnRlcnMubWFwKHAgPT4gcC5ob2xkKSwgW2luaXRpYWxIb2xkXSlcblxuICBpbnRlcmFjdGlvbi51cGRhdGVQb2ludGVyKGhlbHBlcnMubmV3UG9pbnRlcig1KSwgZXZlbnQsIG51bGwsIHRydWUpXG4gIHQuZGVlcEVxdWFsKGludGVyYWN0aW9uLnBvaW50ZXJzLm1hcChwID0+IHAuaG9sZCksIFtpbml0aWFsSG9sZCwgaW5pdGlhbEhvbGRdKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ3BvaW50ZXJFdmVudHMgSW50ZXJhY3Rpb24gcmVtb3ZlLXBvaW50ZXIgc2lnbmFsJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlOiBJbnRlcmFjdC5TY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBzY29wZS51c2VQbHVnaW4ocG9pbnRlckV2ZW50cylcblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IHNjb3BlLmludGVyYWN0aW9ucy5uZXcoe30pXG5cbiAgY29uc3QgaWRzID0gWzAsIDEsIDIsIDNdXG4gIGNvbnN0IHJlbW92YWxzID0gW1xuICAgIHsgaWQ6IDAsIHJlbWFpbjogWzEsIDIsIDNdLCBtZXNzYWdlOiAnZmlyc3Qgb2YgNCcgIH0sXG4gICAgeyBpZDogMiwgcmVtYWluOiBbMSwgICAgM10sIG1lc3NhZ2U6ICdtaWRkbGUgb2YgMycgfSxcbiAgICB7IGlkOiAzLCByZW1haW46IFsxICAgICAgXSwgbWVzc2FnZTogJ2xhc3Qgb2YgMicgICB9LFxuICAgIHsgaWQ6IDEsIHJlbWFpbjogWyAgICAgICBdLCBtZXNzYWdlOiAnZmluYWwnICAgICAgIH0sXG4gIF1cblxuICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgIGNvbnN0IGluZGV4ID0gaW50ZXJhY3Rpb24udXBkYXRlUG9pbnRlcih7IHBvaW50ZXJJZDogaWQgfSBhcyBJbnRlcmFjdC5Qb2ludGVyVHlwZSwge30gYXMgSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZSwgbnVsbCwgdHJ1ZSlcbiAgICAvLyB1c2UgdGhlIGlkcyBhcyB0aGUgcG9pbnRlckluZm8uaG9sZCB2YWx1ZSBmb3IgdGhpcyB0ZXN0XG4gICAgaW50ZXJhY3Rpb24ucG9pbnRlcnNbaW5kZXhdLmhvbGQgPSBpZCBhcyBhbnlcbiAgfVxuXG4gIGZvciAoY29uc3QgcmVtb3ZhbCBvZiByZW1vdmFscykge1xuICAgIGludGVyYWN0aW9uLnJlbW92ZVBvaW50ZXIoeyBwb2ludGVySWQ6IHJlbW92YWwuaWQgfSBhcyBhbnksIG51bGwpXG5cbiAgICB0LmRlZXBFcXVhbChpbnRlcmFjdGlvbi5wb2ludGVycy5tYXAocCA9PiBwLmhvbGQgYXMgdW5rbm93biBhcyBudW1iZXIpLCByZW1vdmFsLnJlbWFpbixcbiAgICAgIGAke3JlbW92YWwubWVzc2FnZX0gLSByZW1haW5pbmcgaW50ZXJhY3Rpb24ucG9pbnRlcnNbaV0uaG9sZCBhcmUgY29ycmVjdGApXG4gIH1cblxuICB0LmVuZCgpXG59KVxuXG50ZXN0KCdwb2ludGVyRXZlbnRzIGRvd24gaG9sZCB1cCB0YXAnLCBhc3luYyB0ID0+IHtcbiAgY29uc3Qge1xuICAgIGludGVyYWN0aW9uLFxuICAgIGV2ZW50LFxuICAgIGludGVyYWN0YWJsZSxcbiAgfSA9IGhlbHBlcnMudGVzdEVudih7IHBsdWdpbnM6IFtwb2ludGVyRXZlbnRzLCBpbnRlcmFjdGFibGVUYXJnZXRzIF0gfSlcblxuICBjb25zdCBmaXJlZDogUG9pbnRlckV2ZW50W10gPSBbXVxuXG4gIGZvciAoY29uc3QgdHlwZSBvZiBwb2ludGVyRXZlbnRzLnR5cGVzKSB7XG4gICAgaW50ZXJhY3RhYmxlLm9uKHR5cGUsIGUgPT4gZmlyZWQucHVzaChlKSlcbiAgfVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJEb3duKGV2ZW50LCBldmVudCwgZXZlbnQudGFyZ2V0KVxuICBpbnRlcmFjdGlvbi5wb2ludGVyTW92ZShldmVudCwgZXZlbnQsIGV2ZW50LnRhcmdldClcblxuICB0LmRlZXBFcXVhbChcbiAgICBmaXJlZC5tYXAoZSA9PiBlLnR5cGUpLFxuICAgIFsnZG93biddLFxuICAgICdkdXBsaWNhdGUgbW92ZSBldmVudCBpcyBub3QgZmlyZWQnKVxuXG4gIGNvbnN0IGhvbGRUaW1lciA9IGludGVyYWN0aW9uLnBvaW50ZXJzWzBdLmhvbGRcblxuICB0Lm9rKCEhaG9sZFRpbWVyLnRpbWVvdXQsICdob2xkIHRpbWVvdXQgaXMgc2V0JylcblxuICBhd2FpdCBoZWxwZXJzLnRpbWVvdXQoaG9sZFRpbWVyLmR1cmF0aW9uKVxuXG4gIGludGVyYWN0aW9uLnBvaW50ZXJVcChldmVudCwgZXZlbnQsIGV2ZW50LnRhcmdldCwgZXZlbnQudGFyZ2V0KVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIGZpcmVkLm1hcChlID0+IGUudHlwZSksXG4gICAgWydkb3duJywgJ2hvbGQnLCAndXAnLCAndGFwJ10sXG4gICAgJ3RhcCBldmVudCBpcyBmaXJlZCBhZnRlciBkb3duLCBob2xkIGFuZCB1cCBldmVudHMnKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/pointer-events/holdRepeat.js b/packages/pointer-events/holdRepeat.js index 177e9dbca..5c2da6f8b 100644 --- a/packages/pointer-events/holdRepeat.js +++ b/packages/pointer-events/holdRepeat.js @@ -1,53 +1,74 @@ -import basePlugin from './base'; +import basePlugin from "./base.js"; + function install(scope) { - const { pointerEvents, interactions, } = scope; - scope.usePlugin(basePlugin); - pointerEvents.signals.on('new', onNew); - pointerEvents.signals.on('fired', arg => onFired(arg, scope)); - for (const signal of ['move', 'up', 'cancel', 'endall']) { - interactions.signals.on(signal, endHoldRepeat); - } - // don't repeat by default - pointerEvents.defaults.holdRepeatInterval = 0; - pointerEvents.types.push('holdrepeat'); + scope.usePlugin(basePlugin); + const { + pointerEvents + } = scope; // don't repeat by default + + pointerEvents.defaults.holdRepeatInterval = 0; + pointerEvents.types.push('holdrepeat'); } -function onNew({ pointerEvent }) { - if (pointerEvent.type !== 'hold') { - return; - } - pointerEvent.count = (pointerEvent.count || 0) + 1; + +function onNew({ + pointerEvent +}) { + if (pointerEvent.type !== 'hold') { + return; + } + + pointerEvent.count = (pointerEvent.count || 0) + 1; } -function onFired({ interaction, pointerEvent, eventTarget, targets }, scope) { - if (pointerEvent.type !== 'hold' || !targets.length) { - return; - } - // get the repeat interval from the first eventable - const interval = targets[0].eventable.options.holdRepeatInterval; - // don't repeat if the interval is 0 or less - if (interval <= 0) { - return; - } - // set a timeout to fire the holdrepeat event - interaction.holdIntervalHandle = setTimeout(() => { - scope.pointerEvents.fire({ - interaction, - eventTarget, - type: 'hold', - pointer: pointerEvent, - event: pointerEvent, - }, scope); - }, interval); + +function onFired({ + interaction, + pointerEvent, + eventTarget, + targets +}, scope) { + if (pointerEvent.type !== 'hold' || !targets.length) { + return; + } // get the repeat interval from the first eventable + + + const interval = targets[0].eventable.options.holdRepeatInterval; // don't repeat if the interval is 0 or less + + if (interval <= 0) { + return; + } // set a timeout to fire the holdrepeat event + + + interaction.holdIntervalHandle = setTimeout(() => { + scope.pointerEvents.fire({ + interaction, + eventTarget, + type: 'hold', + pointer: pointerEvent, + event: pointerEvent + }, scope); + }, interval); } -function endHoldRepeat({ interaction }) { - // set the interaction's holdStopTime property - // to stop further holdRepeat events - if (interaction.holdIntervalHandle) { - clearInterval(interaction.holdIntervalHandle); - interaction.holdIntervalHandle = null; - } + +function endHoldRepeat({ + interaction +}) { + // set the interaction's holdStopTime property + // to stop further holdRepeat events + if (interaction.holdIntervalHandle) { + clearInterval(interaction.holdIntervalHandle); + interaction.holdIntervalHandle = null; + } } + export default { - id: 'pointer-events/holdRepeat', - install, + id: 'pointer-events/holdRepeat', + install, + listeners: ['move', 'up', 'cancel', 'endall'].reduce((acc, enderTypes) => { + acc[`pointerEvents:${enderTypes}`] = endHoldRepeat; + return acc; + }, { + 'pointerEvents:new': onNew, + 'pointerEvents:fired': onFired + }) }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZFJlcGVhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvbGRSZXBlYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxVQUFVLE1BQU0sUUFBUSxDQUFBO0FBYy9CLFNBQVMsT0FBTyxDQUFFLEtBQXFCO0lBQ3JDLE1BQU0sRUFDSixhQUFhLEVBQ2IsWUFBWSxHQUNiLEdBQUcsS0FBSyxDQUFBO0lBRVQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUzQixhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDdEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBRXBFLEtBQUssTUFBTSxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUN2RCxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUE7S0FDL0M7SUFFRCwwQkFBMEI7SUFDMUIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUE7SUFDN0MsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDeEMsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFFLEVBQUUsWUFBWSxFQUFFO0lBQzlCLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7UUFBRSxPQUFNO0tBQUU7SUFFNUMsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FDZCxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBc0IsRUFDdkUsS0FBcUI7SUFFckIsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFBRSxPQUFNO0tBQUU7SUFFL0QsbURBQW1EO0lBQ25ELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFBO0lBRWhFLDRDQUE0QztJQUM1QyxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFNO0tBQUU7SUFFN0IsNkNBQTZDO0lBQzdDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQy9DLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLFdBQVc7WUFDWCxXQUFXO1lBQ1gsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsWUFBWTtZQUNyQixLQUFLLEVBQUUsWUFBWTtTQUNwQixFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ1gsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLEVBQUUsV0FBVyxFQUFFO0lBQ3JDLDhDQUE4QztJQUM5QyxvQ0FBb0M7SUFDcEMsSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUU7UUFDbEMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQzdDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7S0FDdEM7QUFDSCxDQUFDO0FBRUQsZUFBZTtJQUNiLEVBQUUsRUFBRSwyQkFBMkI7SUFDL0IsT0FBTztDQUNXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmFzZVBsdWdpbiBmcm9tICcuL2Jhc2UnXG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGlvbiB7XG4gICAgaG9sZEludGVydmFsSGFuZGxlPzogYW55XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL3BvaW50ZXItZXZlbnRzL2Jhc2UnIHtcbiAgaW50ZXJmYWNlIFBvaW50ZXJFdmVudE9wdGlvbnMge1xuICAgIGhvbGRSZXBlYXRJbnRlcnZhbD86IG51bWJlclxuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBJbnRlcmFjdC5TY29wZSkge1xuICBjb25zdCB7XG4gICAgcG9pbnRlckV2ZW50cyxcbiAgICBpbnRlcmFjdGlvbnMsXG4gIH0gPSBzY29wZVxuXG4gIHNjb3BlLnVzZVBsdWdpbihiYXNlUGx1Z2luKVxuXG4gIHBvaW50ZXJFdmVudHMuc2lnbmFscy5vbignbmV3Jywgb25OZXcpXG4gIHBvaW50ZXJFdmVudHMuc2lnbmFscy5vbignZmlyZWQnLCBhcmcgPT4gb25GaXJlZChhcmcgYXMgYW55LCBzY29wZSkpXG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgWydtb3ZlJywgJ3VwJywgJ2NhbmNlbCcsICdlbmRhbGwnXSkge1xuICAgIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKHNpZ25hbCwgZW5kSG9sZFJlcGVhdClcbiAgfVxuXG4gIC8vIGRvbid0IHJlcGVhdCBieSBkZWZhdWx0XG4gIHBvaW50ZXJFdmVudHMuZGVmYXVsdHMuaG9sZFJlcGVhdEludGVydmFsID0gMFxuICBwb2ludGVyRXZlbnRzLnR5cGVzLnB1c2goJ2hvbGRyZXBlYXQnKVxufVxuXG5mdW5jdGlvbiBvbk5ldyAoeyBwb2ludGVyRXZlbnQgfSkge1xuICBpZiAocG9pbnRlckV2ZW50LnR5cGUgIT09ICdob2xkJykgeyByZXR1cm4gfVxuXG4gIHBvaW50ZXJFdmVudC5jb3VudCA9IChwb2ludGVyRXZlbnQuY291bnQgfHwgMCkgKyAxXG59XG5cbmZ1bmN0aW9uIG9uRmlyZWQgKFxuICB7IGludGVyYWN0aW9uLCBwb2ludGVyRXZlbnQsIGV2ZW50VGFyZ2V0LCB0YXJnZXRzIH06IEludGVyYWN0LlNpZ25hbEFyZyxcbiAgc2NvcGU6IEludGVyYWN0LlNjb3BlXG4pIHtcbiAgaWYgKHBvaW50ZXJFdmVudC50eXBlICE9PSAnaG9sZCcgfHwgIXRhcmdldHMubGVuZ3RoKSB7IHJldHVybiB9XG5cbiAgLy8gZ2V0IHRoZSByZXBlYXQgaW50ZXJ2YWwgZnJvbSB0aGUgZmlyc3QgZXZlbnRhYmxlXG4gIGNvbnN0IGludGVydmFsID0gdGFyZ2V0c1swXS5ldmVudGFibGUub3B0aW9ucy5ob2xkUmVwZWF0SW50ZXJ2YWxcblxuICAvLyBkb24ndCByZXBlYXQgaWYgdGhlIGludGVydmFsIGlzIDAgb3IgbGVzc1xuICBpZiAoaW50ZXJ2YWwgPD0gMCkgeyByZXR1cm4gfVxuXG4gIC8vIHNldCBhIHRpbWVvdXQgdG8gZmlyZSB0aGUgaG9sZHJlcGVhdCBldmVudFxuICBpbnRlcmFjdGlvbi5ob2xkSW50ZXJ2YWxIYW5kbGUgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBzY29wZS5wb2ludGVyRXZlbnRzLmZpcmUoe1xuICAgICAgaW50ZXJhY3Rpb24sXG4gICAgICBldmVudFRhcmdldCxcbiAgICAgIHR5cGU6ICdob2xkJyxcbiAgICAgIHBvaW50ZXI6IHBvaW50ZXJFdmVudCxcbiAgICAgIGV2ZW50OiBwb2ludGVyRXZlbnQsXG4gICAgfSwgc2NvcGUpXG4gIH0sIGludGVydmFsKVxufVxuXG5mdW5jdGlvbiBlbmRIb2xkUmVwZWF0ICh7IGludGVyYWN0aW9uIH0pIHtcbiAgLy8gc2V0IHRoZSBpbnRlcmFjdGlvbidzIGhvbGRTdG9wVGltZSBwcm9wZXJ0eVxuICAvLyB0byBzdG9wIGZ1cnRoZXIgaG9sZFJlcGVhdCBldmVudHNcbiAgaWYgKGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZSkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJhY3Rpb24uaG9sZEludGVydmFsSGFuZGxlKVxuICAgIGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZSA9IG51bGxcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlkOiAncG9pbnRlci1ldmVudHMvaG9sZFJlcGVhdCcsXG4gIGluc3RhbGwsXG59IGFzIEludGVyYWN0LlBsdWdpblxuIl19 \ No newline at end of file +//# sourceMappingURL=holdRepeat.js.map \ No newline at end of file diff --git a/packages/pointer-events/holdRepeat.js.map b/packages/pointer-events/holdRepeat.js.map new file mode 100644 index 000000000..8f6000f41 --- /dev/null +++ b/packages/pointer-events/holdRepeat.js.map @@ -0,0 +1,45 @@ +{ + "version": 3, + "sources": [ + "holdRepeat.ts" + ], + "names": [ + "basePlugin", + "install", + "scope", + "usePlugin", + "pointerEvents", + "defaults", + "holdRepeatInterval", + "types", + "push", + "onNew", + "pointerEvent", + "type", + "count", + "onFired", + "interaction", + "eventTarget", + "targets", + "length", + "interval", + "eventable", + "options", + "holdIntervalHandle", + "setTimeout", + "fire", + "pointer", + "event", + "endHoldRepeat", + "clearInterval", + "id", + "listeners", + "reduce", + "acc", + "enderTypes" + ], + "mappings": "AAAA,OAAOA,UAAP;;AAcA,SAASC,OAAT,CAAkBC,KAAlB,EAAyC;AACvCA,EAAAA,KAAK,CAACC,SAAN,CAAgBH,UAAhB;AAEA,QAAM;AACJI,IAAAA;AADI,MAEFF,KAFJ,CAHuC,CAOvC;;AACAE,EAAAA,aAAa,CAACC,QAAd,CAAuBC,kBAAvB,GAA4C,CAA5C;AACAF,EAAAA,aAAa,CAACG,KAAd,CAAoBC,IAApB,CAAyB,YAAzB;AACD;;AAED,SAASC,KAAT,CAAgB;AAAEC,EAAAA;AAAF,CAAhB,EAAkC;AAChC,MAAIA,YAAY,CAACC,IAAb,KAAsB,MAA1B,EAAkC;AAAE;AAAQ;;AAE5CD,EAAAA,YAAY,CAACE,KAAb,GAAqB,CAACF,YAAY,CAACE,KAAb,IAAsB,CAAvB,IAA4B,CAAjD;AACD;;AAED,SAASC,OAAT,CACE;AAAEC,EAAAA,WAAF;AAAeJ,EAAAA,YAAf;AAA6BK,EAAAA,WAA7B;AAA0CC,EAAAA;AAA1C,CADF,EAEEd,KAFF,EAGE;AACA,MAAIQ,YAAY,CAACC,IAAb,KAAsB,MAAtB,IAAgC,CAACK,OAAO,CAACC,MAA7C,EAAqD;AAAE;AAAQ,GAD/D,CAGA;;;AACA,QAAMC,QAAQ,GAAGF,OAAO,CAAC,CAAD,CAAP,CAAWG,SAAX,CAAqBC,OAArB,CAA6Bd,kBAA9C,CAJA,CAMA;;AACA,MAAIY,QAAQ,IAAI,CAAhB,EAAmB;AAAE;AAAQ,GAP7B,CASA;;;AACAJ,EAAAA,WAAW,CAACO,kBAAZ,GAAiCC,UAAU,CAAC,MAAM;AAChDpB,IAAAA,KAAK,CAACE,aAAN,CAAoBmB,IAApB,CAAyB;AACvBT,MAAAA,WADuB;AAEvBC,MAAAA,WAFuB;AAGvBJ,MAAAA,IAAI,EAAE,MAHiB;AAIvBa,MAAAA,OAAO,EAAEd,YAJc;AAKvBe,MAAAA,KAAK,EAAEf;AALgB,KAAzB,EAMGR,KANH;AAOD,GAR0C,EAQxCgB,QARwC,CAA3C;AASD;;AAED,SAASQ,aAAT,CAAwB;AAAEZ,EAAAA;AAAF,CAAxB,EAAyC;AACvC;AACA;AACA,MAAIA,WAAW,CAACO,kBAAhB,EAAoC;AAClCM,IAAAA,aAAa,CAACb,WAAW,CAACO,kBAAb,CAAb;AACAP,IAAAA,WAAW,CAACO,kBAAZ,GAAiC,IAAjC;AACD;AACF;;AAED,eAAe;AACbO,EAAAA,EAAE,EAAE,2BADS;AAEb3B,EAAAA,OAFa;AAGb4B,EAAAA,SAAS,EAAE,CAAC,MAAD,EAAS,IAAT,EAAe,QAAf,EAAyB,QAAzB,EAAmCC,MAAnC,CACT,CAACC,GAAD,EAAMC,UAAN,KAAqB;AACnBD,IAAAA,GAAG,CAAE,iBAAgBC,UAAW,EAA7B,CAAH,GAAqCN,aAArC;AACA,WAAOK,GAAP;AACD,GAJQ,EAKT;AACE,yBAAqBtB,KADvB;AAEE,2BAAuBI;AAFzB,GALS;AAHE,CAAf", + "sourcesContent": [ + "import basePlugin from './base'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install (scope: Interact.Scope) {\n scope.usePlugin(basePlugin)\n\n const {\n pointerEvents,\n } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.push('holdrepeat')\n}\n\nfunction onNew ({ pointerEvent }) {\n if (pointerEvent.type !== 'hold') { return }\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired (\n { interaction, pointerEvent, eventTarget, targets }: Interact.SignalArgs['pointerEvents:fired'],\n scope: Interact.Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) { return }\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) { return }\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire({\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n }, scope)\n }, interval)\n}\n\nfunction endHoldRepeat ({ interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nexport default {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n acc[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n },\n ),\n} as Interact.Plugin\n" + ] +} \ No newline at end of file diff --git a/packages/pointer-events/holdRepeat.spec.js b/packages/pointer-events/holdRepeat.spec.js deleted file mode 100644 index ee04cea40..000000000 --- a/packages/pointer-events/holdRepeat.spec.js +++ /dev/null @@ -1,63 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import Eventable from '@interactjs/core/Eventable'; -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 pointerEvent = { - type: 'hold', - count: 0, - }; - const { scope } = helpers.testEnv({ plugins: [pointerEvents, holdRepeat] }); - 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(); - scope.usePlugin(pointerEvents); - scope.usePlugin(holdRepeat); - 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9sZFJlcGVhdC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9sZFJlcGVhdC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sU0FBUyxNQUFNLDRCQUE0QixDQUFBO0FBQ2xELE9BQU8sS0FBSyxPQUFPLE1BQU0saUNBQWlDLENBQUE7QUFDMUQsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxhQUFhLE1BQU0sUUFBUSxDQUFBO0FBQ2xDLE9BQU8sVUFBVSxNQUFNLGNBQWMsQ0FBQTtBQUVyQyxTQUFTLFNBQVM7SUFDaEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLGFBQWEsRUFBRTtZQUNiLFFBQVEsRUFBRSxFQUFFO1lBQ1osT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFO1lBQ3RCLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDZjtLQUNGLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDM0IsTUFBTSxZQUFZLEdBQUc7UUFDbkIsSUFBSSxFQUFFLE1BQU07UUFDWixLQUFLLEVBQUUsQ0FBQztLQUNULENBQUE7SUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFM0UsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDekQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSx1REFBdUQsQ0FBQyxDQUFBO0lBRXZGLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQTtJQUNoQixZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUMxQixLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUN6RCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFBO0lBRTVFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNULENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQzdCLE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQ3pCLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUzQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM5QyxNQUFNLFlBQVksR0FBRztRQUNuQixJQUFJLEVBQUUsTUFBTTtLQUNiLENBQUE7SUFDRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUE7SUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7UUFDOUUsa0JBQWtCLEVBQUUsQ0FBQztLQUN0QixDQUFDLENBQUMsQ0FBQTtJQUNILE1BQU0sU0FBUyxHQUFHO1FBQ2hCLFdBQVc7UUFDWCxZQUFZO1FBQ1osV0FBVztRQUNYLE9BQU8sRUFBRSxDQUFDO2dCQUNSLFNBQVM7YUFDVixDQUFDO0tBQ0gsQ0FBQTtJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxXQUFXLEVBQ3pDLHFFQUFxRSxDQUFDLENBQUE7SUFFeEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7SUFDekMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDLG9CQUFvQixJQUFJLFdBQVcsRUFDdEMseURBQXlELENBQUMsQ0FBQTtJQUU1RCxhQUFhLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFN0MsWUFBWSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUE7SUFDOUIsT0FBTyxXQUFXLENBQUMsa0JBQWtCLENBQUE7SUFDckMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLFdBQVcsRUFDekMsNkVBQTZFLENBQUMsQ0FBQTtJQUVoRixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0IEV2ZW50YWJsZSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0V2ZW50YWJsZSdcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnQGludGVyYWN0anMvY29yZS90ZXN0cy9faGVscGVycydcbmltcG9ydCBTaWduYWxzIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL1NpZ25hbHMnXG5pbXBvcnQgcG9pbnRlckV2ZW50cyBmcm9tICcuL2Jhc2UnXG5pbXBvcnQgaG9sZFJlcGVhdCBmcm9tICcuL2hvbGRSZXBlYXQnXG5cbmZ1bmN0aW9uIG1vY2tTY29wZSAoKSB7XG4gIHJldHVybiBoZWxwZXJzLm1vY2tTY29wZSh7XG4gICAgcG9pbnRlckV2ZW50czoge1xuICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgc2lnbmFsczogbmV3IFNpZ25hbHMoKSxcbiAgICAgIHR5cGVzOiBbXSxcbiAgICAgIGZpcmU6ICgpID0+IHt9LFxuICAgIH0sXG4gIH0pXG59XG5cbnRlc3QoJ2hvbGRSZXBlYXQgY291bnQnLCB0ID0+IHtcbiAgY29uc3QgcG9pbnRlckV2ZW50ID0ge1xuICAgIHR5cGU6ICdob2xkJyxcbiAgICBjb3VudDogMCxcbiAgfVxuXG4gIGNvbnN0IHsgc2NvcGUgfSA9IGhlbHBlcnMudGVzdEVudih7IHBsdWdpbnM6IFtwb2ludGVyRXZlbnRzLCBob2xkUmVwZWF0XSB9KVxuXG4gIHNjb3BlLnBvaW50ZXJFdmVudHMuc2lnbmFscy5maXJlKCduZXcnLCB7IHBvaW50ZXJFdmVudCB9KVxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5jb3VudCwgMSwgJ2ZpcnN0IGhvbGQgY291bnQgaXMgMSB3aXRoIGNvdW50IHByZXZpb3VzbHkgdW5kZWZpbmVkJylcblxuICBjb25zdCBjb3VudCA9IDIwXG4gIHBvaW50ZXJFdmVudC5jb3VudCA9IGNvdW50XG4gIHNjb3BlLnBvaW50ZXJFdmVudHMuc2lnbmFscy5maXJlKCduZXcnLCB7IHBvaW50ZXJFdmVudCB9KVxuICB0LmVxdWFsKHBvaW50ZXJFdmVudC5jb3VudCwgY291bnQgKyAxLCAnZXhpc3RpbmcgaG9sZCBjb3VudCBpcyBpbmNyZW1lbnRlZCcpXG5cbiAgdC5lbmQoKVxufSlcblxudGVzdCgnaG9sZFJlcGVhdCBvbkZpcmVkJywgdCA9PiB7XG4gIGNvbnN0IHNjb3BlID0gbW9ja1Njb3BlKClcbiAgc2NvcGUudXNlUGx1Z2luKHBvaW50ZXJFdmVudHMpXG4gIHNjb3BlLnVzZVBsdWdpbihob2xkUmVwZWF0KVxuXG4gIGNvbnN0IGludGVyYWN0aW9uID0gc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyh7fSlcbiAgY29uc3QgcG9pbnRlckV2ZW50ID0ge1xuICAgIHR5cGU6ICdob2xkJyxcbiAgfVxuICBjb25zdCBldmVudFRhcmdldCA9IHt9XG4gIGNvbnN0IGV2ZW50YWJsZSA9IG5ldyBFdmVudGFibGUoT2JqZWN0LmFzc2lnbih7fSwgc2NvcGUucG9pbnRlckV2ZW50cy5kZWZhdWx0cywge1xuICAgIGhvbGRSZXBlYXRJbnRlcnZhbDogMCxcbiAgfSkpXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBwb2ludGVyRXZlbnQsXG4gICAgZXZlbnRUYXJnZXQsXG4gICAgdGFyZ2V0czogW3tcbiAgICAgIGV2ZW50YWJsZSxcbiAgICB9XSxcbiAgfVxuXG4gIHNjb3BlLnBvaW50ZXJFdmVudHMuc2lnbmFscy5maXJlKCdmaXJlZCcsIHNpZ25hbEFyZylcbiAgdC5ub3RPaygnaG9sZEludGVydmFsSGFuZGxlJyBpbiBpbnRlcmFjdGlvbixcbiAgICAnaW50ZXJhY3Rpb24gaW50ZXJ2YWwgaGFuZGxlIHdhcyBub3Qgc2F2ZWQgd2l0aCAwIGhvbGRSZXBlYXRJbnRlcnZhbCcpXG5cbiAgZXZlbnRhYmxlLm9wdGlvbnMuaG9sZFJlcGVhdEludGVydmFsID0gMTBcbiAgc2NvcGUucG9pbnRlckV2ZW50cy5zaWduYWxzLmZpcmUoJ2ZpcmVkJywgc2lnbmFsQXJnKVxuICB0Lm9rKCdob2xkSW50ZXJ2YWxIYW5kbGUnIGluIGludGVyYWN0aW9uLFxuICAgICdpbnRlcmFjdGlvbiBpbnRlcnZhbCBoYW5kbGUgd2FzIHNhdmVkIHdpdGggaW50ZXJ2YWwgPiAwJylcblxuICBjbGVhckludGVydmFsKGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZSlcblxuICBwb2ludGVyRXZlbnQudHlwZSA9ICdOT1RfSE9MRCdcbiAgZGVsZXRlIGludGVyYWN0aW9uLmhvbGRJbnRlcnZhbEhhbmRsZVxuICBzY29wZS5wb2ludGVyRXZlbnRzLnNpZ25hbHMuZmlyZSgnZmlyZWQnLCBzaWduYWxBcmcpXG4gIHQubm90T2soJ2hvbGRJbnRlcnZhbEhhbmRsZScgaW4gaW50ZXJhY3Rpb24sXG4gICAgJ2ludGVyYWN0aW9uIGludGVydmFsIGhhbmRsZSBpcyBub3Qgc2F2ZWQgaWYgcG9pbnRlckV2ZW50LnR5cGUgaXMgbm90IFwiaG9sZFwiJylcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/pointer-events/index.js b/packages/pointer-events/index.js index 4a99cc249..2f994830b 100644 --- a/packages/pointer-events/index.js +++ b/packages/pointer-events/index.js @@ -1,11 +1,13 @@ -import pointerEvents from './base'; -import holdRepeat from './holdRepeat'; -import interactableTargets from './interactableTargets'; +import pointerEvents from "./base.js"; +import holdRepeat from "./holdRepeat.js"; +import interactableTargets from "./interactableTargets.js"; + function install(scope) { - scope.usePlugin(pointerEvents); - scope.usePlugin(holdRepeat); - scope.usePlugin(interactableTargets); + scope.usePlugin(pointerEvents); + scope.usePlugin(holdRepeat); + scope.usePlugin(interactableTargets); } + const id = 'pointer-events'; export { id, pointerEvents, holdRepeat, interactableTargets, install }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGFBQWEsTUFBTSxRQUFRLENBQUE7QUFDbEMsT0FBTyxVQUFVLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sbUJBQW1CLE1BQU0sdUJBQXVCLENBQUE7QUFFdkQsU0FBUyxPQUFPLENBQUUsS0FBSztJQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzlCLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDM0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0FBQ3RDLENBQUM7QUFFRCxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQTtBQUUzQixPQUFPLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcG9pbnRlckV2ZW50cyBmcm9tICcuL2Jhc2UnXG5pbXBvcnQgaG9sZFJlcGVhdCBmcm9tICcuL2hvbGRSZXBlYXQnXG5pbXBvcnQgaW50ZXJhY3RhYmxlVGFyZ2V0cyBmcm9tICcuL2ludGVyYWN0YWJsZVRhcmdldHMnXG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlKSB7XG4gIHNjb3BlLnVzZVBsdWdpbihwb2ludGVyRXZlbnRzKVxuICBzY29wZS51c2VQbHVnaW4oaG9sZFJlcGVhdClcbiAgc2NvcGUudXNlUGx1Z2luKGludGVyYWN0YWJsZVRhcmdldHMpXG59XG5cbmNvbnN0IGlkID0gJ3BvaW50ZXItZXZlbnRzJ1xuXG5leHBvcnQgeyBpZCwgcG9pbnRlckV2ZW50cywgaG9sZFJlcGVhdCwgaW50ZXJhY3RhYmxlVGFyZ2V0cywgaW5zdGFsbCB9XG4iXX0= \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/pointer-events/index.js.map b/packages/pointer-events/index.js.map new file mode 100644 index 000000000..30ee0fe76 --- /dev/null +++ b/packages/pointer-events/index.js.map @@ -0,0 +1,19 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "pointerEvents", + "holdRepeat", + "interactableTargets", + "install", + "scope", + "usePlugin", + "id" + ], + "mappings": "AAAA,OAAOA,aAAP;AACA,OAAOC,UAAP;AACA,OAAOC,mBAAP;;AAEA,SAASC,OAAT,CAAkBC,KAAlB,EAAyB;AACvBA,EAAAA,KAAK,CAACC,SAAN,CAAgBL,aAAhB;AACAI,EAAAA,KAAK,CAACC,SAAN,CAAgBJ,UAAhB;AACAG,EAAAA,KAAK,CAACC,SAAN,CAAgBH,mBAAhB;AACD;;AAED,MAAMI,EAAE,GAAG,gBAAX;AAEA,SAASA,EAAT,EAAaN,aAAb,EAA4BC,UAA5B,EAAwCC,mBAAxC,EAA6DC,OAA7D", + "sourcesContent": [ + "import pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n\nfunction install (scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n}\n\nconst id = 'pointer-events'\n\nexport { id, pointerEvents, holdRepeat, interactableTargets, install }\n" + ] +} \ No newline at end of file diff --git a/packages/pointer-events/interactableTargets.d.ts b/packages/pointer-events/interactableTargets.d.ts index 671bb62cf..b6ede3dd7 100644 --- a/packages/pointer-events/interactableTargets.d.ts +++ b/packages/pointer-events/interactableTargets.d.ts @@ -1,15 +1,9 @@ -import { Scope } from '@interactjs/core/scope'; -declare type Interactable = import('@interactjs/core/Interactable').default; declare module '@interactjs/core/Interactable' { interface Interactable { pointerEvents: typeof pointerEventsMethod; __backCompatOption: (optionName: string, newValue: any) => any; } } -declare function install(scope: Scope): void; -declare function pointerEventsMethod(this: Interactable, options: any): import("@interactjs/core/Interactable").Interactable; -declare const _default: { - id: string; - install: typeof install; -}; -export default _default; +declare function pointerEventsMethod(this: Interact.Interactable, options: any): import("@interactjs/core/Interactable").Interactable; +declare const plugin: Interact.Plugin; +export default plugin; diff --git a/packages/pointer-events/interactableTargets.js b/packages/pointer-events/interactableTargets.js index a26df37b8..53be2d25b 100644 --- a/packages/pointer-events/interactableTargets.js +++ b/packages/pointer-events/interactableTargets.js @@ -1,48 +1,72 @@ -import { merge } from '@interactjs/utils/arr'; -import extend from '@interactjs/utils/extend'; +import { merge } from "../utils/arr.js"; +import extend from "../utils/extend.js"; + function install(scope) { - const { pointerEvents, actions, Interactable, interactables, } = scope; - pointerEvents.signals.on('collect-targets', ({ targets, node, type, eventTarget, }) => { - scope.interactables.forEachMatch(node, (interactable) => { - const eventable = interactable.events; - const options = eventable.options; - if (eventable.types[type] && - eventable.types[type].length && - interactable.testIgnoreAllow(options, node, eventTarget)) { - targets.push({ - node, - eventable, - props: { interactable }, - }); - } - }); - }); - interactables.signals.on('new', ({ interactable }) => { - interactable.events.getRect = function (element) { - return interactable.getRect(element); - }; - }); - interactables.signals.on('set', ({ interactable, options }) => { - extend(interactable.events.options, pointerEvents.defaults); - extend(interactable.events.options, options.pointerEvents || {}); - }); - merge(actions.eventTypes, pointerEvents.types); - Interactable.prototype.pointerEvents = pointerEventsMethod; - const __backCompatOption = Interactable.prototype._backCompatOption; - Interactable.prototype._backCompatOption = function (optionName, newValue) { - const ret = __backCompatOption.call(this, optionName, newValue); - if (ret === this) { - this.events.options[optionName] = newValue; - } - return ret; - }; + const { + pointerEvents, + actions, + Interactable + } = scope; + merge(actions.eventTypes, pointerEvents.types); + Interactable.prototype.pointerEvents = pointerEventsMethod; + const __backCompatOption = Interactable.prototype._backCompatOption; + + Interactable.prototype._backCompatOption = function (optionName, newValue) { + const ret = __backCompatOption.call(this, optionName, newValue); + + if (ret === this) { + this.events.options[optionName] = newValue; + } + + return ret; + }; } + function pointerEventsMethod(options) { - extend(this.events.options, options); - return this; + extend(this.events.options, options); + return this; } -export default { - id: 'pointer-events/interactableTargets', - install, + +const plugin = { + id: 'pointer-events/interactableTargets', + install, + listeners: { + 'pointerEvents:collect-targets': ({ + targets, + node, + type, + eventTarget + }, scope) => { + scope.interactables.forEachMatch(node, interactable => { + const eventable = interactable.events; + const options = eventable.options; + + if (eventable.types[type] && eventable.types[type].length && interactable.testIgnoreAllow(options, node, eventTarget)) { + targets.push({ + node, + eventable, + props: { + interactable + } + }); + } + }); + }, + 'interactable:new': ({ + interactable + }) => { + interactable.events.getRect = function (element) { + return interactable.getRect(element); + }; + }, + 'interactable:set': ({ + interactable, + options + }, scope) => { + extend(interactable.events.options, scope.pointerEvents.defaults); + extend(interactable.events.options, options.pointerEvents || {}); + } + } }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RhYmxlVGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVyYWN0YWJsZVRhcmdldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzdDLE9BQU8sTUFBTSxNQUFNLDBCQUEwQixDQUFBO0FBWTdDLFNBQVMsT0FBTyxDQUFFLEtBQVk7SUFDNUIsTUFBTSxFQUNKLGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUNaLGFBQWEsR0FDZCxHQUFHLEtBQUssQ0FBQTtJQUVULGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFDM0MsT0FBTyxFQUNQLElBQUksRUFDSixJQUFJLEVBQ0osV0FBVyxHQU1aLEVBQUUsRUFBRTtRQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQTBCLEVBQUUsRUFBRTtZQUNwRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFBO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUE7WUFFakMsSUFDRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO2dCQUM1QixZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUU7Z0JBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsSUFBSTtvQkFDSixTQUFTO29CQUNULEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRTtpQkFDeEIsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUYsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO1FBQ25ELFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsT0FBeUI7WUFDL0QsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RDLENBQUMsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUM1RCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzNELE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ2xFLENBQUMsQ0FBQyxDQUFBO0lBRUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTlDLFlBQVksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFBO0lBRTFELE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQTtJQUVuRSxZQUFZLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsVUFBVSxFQUFFLFFBQVE7UUFDdkUsTUFBTSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFL0QsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQTtTQUMzQztRQUVELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQXNCLE9BQVk7SUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXBDLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELGVBQWU7SUFDYixFQUFFLEVBQUUsb0NBQW9DO0lBQ3hDLE9BQU87Q0FDUixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscy9hcnInXG5pbXBvcnQgZXh0ZW5kIGZyb20gJ0BpbnRlcmFjdGpzL3V0aWxzL2V4dGVuZCdcblxudHlwZSBJbnRlcmFjdGFibGUgPSBpbXBvcnQgKCdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScpLmRlZmF1bHRcbnR5cGUgRXZlbnRUYXJnZXRMaXN0ID0gaW1wb3J0ICgnLi9iYXNlJykuRXZlbnRUYXJnZXRMaXN0XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0YWJsZScge1xuICBpbnRlcmZhY2UgSW50ZXJhY3RhYmxlIHtcbiAgICBwb2ludGVyRXZlbnRzOiB0eXBlb2YgcG9pbnRlckV2ZW50c01ldGhvZFxuICAgIF9fYmFja0NvbXBhdE9wdGlvbjogKG9wdGlvbk5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkgPT4gYW55XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbCAoc2NvcGU6IFNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBwb2ludGVyRXZlbnRzLFxuICAgIGFjdGlvbnMsXG4gICAgSW50ZXJhY3RhYmxlLFxuICAgIGludGVyYWN0YWJsZXMsXG4gIH0gPSBzY29wZVxuXG4gIHBvaW50ZXJFdmVudHMuc2lnbmFscy5vbignY29sbGVjdC10YXJnZXRzJywgKHtcbiAgICB0YXJnZXRzLFxuICAgIG5vZGUsXG4gICAgdHlwZSxcbiAgICBldmVudFRhcmdldCxcbiAgfToge1xuICAgIHRhcmdldHM6IEV2ZW50VGFyZ2V0TGlzdFxuICAgIG5vZGU6IE5vZGVcbiAgICB0eXBlOiBzdHJpbmdcbiAgICBldmVudFRhcmdldDogSW50ZXJhY3QuRWxlbWVudFxuICB9KSA9PiB7XG4gICAgc2NvcGUuaW50ZXJhY3RhYmxlcy5mb3JFYWNoTWF0Y2gobm9kZSwgKGludGVyYWN0YWJsZTogSW50ZXJhY3RhYmxlKSA9PiB7XG4gICAgICBjb25zdCBldmVudGFibGUgPSBpbnRlcmFjdGFibGUuZXZlbnRzXG4gICAgICBjb25zdCBvcHRpb25zID0gZXZlbnRhYmxlLm9wdGlvbnNcblxuICAgICAgaWYgKFxuICAgICAgICBldmVudGFibGUudHlwZXNbdHlwZV0gJiZcbiAgICAgICAgZXZlbnRhYmxlLnR5cGVzW3R5cGVdLmxlbmd0aCAmJlxuICAgICAgICBpbnRlcmFjdGFibGUudGVzdElnbm9yZUFsbG93KG9wdGlvbnMsIG5vZGUsIGV2ZW50VGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXRzLnB1c2goe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgZXZlbnRhYmxlLFxuICAgICAgICAgIHByb3BzOiB7IGludGVyYWN0YWJsZSB9LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgaW50ZXJhY3RhYmxlcy5zaWduYWxzLm9uKCduZXcnLCAoeyBpbnRlcmFjdGFibGUgfSkgPT4ge1xuICAgIGludGVyYWN0YWJsZS5ldmVudHMuZ2V0UmVjdCA9IGZ1bmN0aW9uIChlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50KSB7XG4gICAgICByZXR1cm4gaW50ZXJhY3RhYmxlLmdldFJlY3QoZWxlbWVudClcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3RhYmxlcy5zaWduYWxzLm9uKCdzZXQnLCAoeyBpbnRlcmFjdGFibGUsIG9wdGlvbnMgfSkgPT4ge1xuICAgIGV4dGVuZChpbnRlcmFjdGFibGUuZXZlbnRzLm9wdGlvbnMsIHBvaW50ZXJFdmVudHMuZGVmYXVsdHMpXG4gICAgZXh0ZW5kKGludGVyYWN0YWJsZS5ldmVudHMub3B0aW9ucywgb3B0aW9ucy5wb2ludGVyRXZlbnRzIHx8IHt9KVxuICB9KVxuXG4gIG1lcmdlKGFjdGlvbnMuZXZlbnRUeXBlcywgcG9pbnRlckV2ZW50cy50eXBlcylcblxuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLnBvaW50ZXJFdmVudHMgPSBwb2ludGVyRXZlbnRzTWV0aG9kXG5cbiAgY29uc3QgX19iYWNrQ29tcGF0T3B0aW9uID0gSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5fYmFja0NvbXBhdE9wdGlvblxuXG4gIEludGVyYWN0YWJsZS5wcm90b3R5cGUuX2JhY2tDb21wYXRPcHRpb24gPSBmdW5jdGlvbiAob3B0aW9uTmFtZSwgbmV3VmFsdWUpIHtcbiAgICBjb25zdCByZXQgPSBfX2JhY2tDb21wYXRPcHRpb24uY2FsbCh0aGlzLCBvcHRpb25OYW1lLCBuZXdWYWx1ZSlcblxuICAgIGlmIChyZXQgPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuZXZlbnRzLm9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWx1ZVxuICAgIH1cblxuICAgIHJldHVybiByZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2ludGVyRXZlbnRzTWV0aG9kICh0aGlzOiBJbnRlcmFjdGFibGUsIG9wdGlvbnM6IGFueSkge1xuICBleHRlbmQodGhpcy5ldmVudHMub3B0aW9ucywgb3B0aW9ucylcblxuICByZXR1cm4gdGhpc1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlkOiAncG9pbnRlci1ldmVudHMvaW50ZXJhY3RhYmxlVGFyZ2V0cycsXG4gIGluc3RhbGwsXG59XG4iXX0= \ No newline at end of file +export default plugin; +//# sourceMappingURL=interactableTargets.js.map \ No newline at end of file diff --git a/packages/pointer-events/interactableTargets.js.map b/packages/pointer-events/interactableTargets.js.map new file mode 100644 index 000000000..87b798b01 --- /dev/null +++ b/packages/pointer-events/interactableTargets.js.map @@ -0,0 +1,49 @@ +{ + "version": 3, + "sources": [ + "interactableTargets.ts" + ], + "names": [ + "merge", + "extend", + "install", + "scope", + "pointerEvents", + "actions", + "Interactable", + "eventTypes", + "types", + "prototype", + "pointerEventsMethod", + "__backCompatOption", + "_backCompatOption", + "optionName", + "newValue", + "ret", + "call", + "events", + "options", + "plugin", + "id", + "listeners", + "targets", + "node", + "type", + "eventTarget", + "interactables", + "forEachMatch", + "interactable", + "eventable", + "length", + "testIgnoreAllow", + "push", + "props", + "getRect", + "element", + "defaults" + ], + "mappings": "AACA,SAASA,KAAT;AACA,OAAOC,MAAP;;AAWA,SAASC,OAAT,CAAkBC,KAAlB,EAAgC;AAC9B,QAAM;AACJC,IAAAA,aADI;AAEJC,IAAAA,OAFI;AAGJC,IAAAA;AAHI,MAIFH,KAJJ;AAMAH,EAAAA,KAAK,CAACK,OAAO,CAACE,UAAT,EAAqBH,aAAa,CAACI,KAAnC,CAAL;AAEAF,EAAAA,YAAY,CAACG,SAAb,CAAuBL,aAAvB,GAAuCM,mBAAvC;AAEA,QAAMC,kBAAkB,GAAGL,YAAY,CAACG,SAAb,CAAuBG,iBAAlD;;AAEAN,EAAAA,YAAY,CAACG,SAAb,CAAuBG,iBAAvB,GAA2C,UAAUC,UAAV,EAAsBC,QAAtB,EAAgC;AACzE,UAAMC,GAAG,GAAGJ,kBAAkB,CAACK,IAAnB,CAAwB,IAAxB,EAA8BH,UAA9B,EAA0CC,QAA1C,CAAZ;;AAEA,QAAIC,GAAG,KAAK,IAAZ,EAAkB;AAChB,WAAKE,MAAL,CAAYC,OAAZ,CAAoBL,UAApB,IAAkCC,QAAlC;AACD;;AAED,WAAOC,GAAP;AACD,GARD;AASD;;AAED,SAASL,mBAAT,CAA2DQ,OAA3D,EAAyE;AACvEjB,EAAAA,MAAM,CAAC,KAAKgB,MAAL,CAAYC,OAAb,EAAsBA,OAAtB,CAAN;AAEA,SAAO,IAAP;AACD;;AAED,MAAMC,MAAuB,GAAG;AAC9BC,EAAAA,EAAE,EAAE,oCAD0B;AAE9BlB,EAAAA,OAF8B;AAG9BmB,EAAAA,SAAS,EAAE;AACT,qCAAiC,CAAC;AAChCC,MAAAA,OADgC;AAEhCC,MAAAA,IAFgC;AAGhCC,MAAAA,IAHgC;AAIhCC,MAAAA;AAJgC,KAAD,EAK9BtB,KAL8B,KAKpB;AACXA,MAAAA,KAAK,CAACuB,aAAN,CAAoBC,YAApB,CAAiCJ,IAAjC,EAAwCK,YAAD,IAAgC;AACrE,cAAMC,SAAS,GAAGD,YAAY,CAACX,MAA/B;AACA,cAAMC,OAAO,GAAGW,SAAS,CAACX,OAA1B;;AAEA,YACEW,SAAS,CAACrB,KAAV,CAAgBgB,IAAhB,KACAK,SAAS,CAACrB,KAAV,CAAgBgB,IAAhB,EAAsBM,MADtB,IAEFF,YAAY,CAACG,eAAb,CAA6Bb,OAA7B,EAAsCK,IAAtC,EAA4CE,WAA5C,CAHA,EAG0D;AACxDH,UAAAA,OAAO,CAACU,IAAR,CAAa;AACXT,YAAAA,IADW;AAEXM,YAAAA,SAFW;AAGXI,YAAAA,KAAK,EAAE;AAAEL,cAAAA;AAAF;AAHI,WAAb;AAKD;AACF,OAdD;AAeD,KAtBQ;AAwBT,wBAAoB,CAAC;AAAEA,MAAAA;AAAF,KAAD,KAAsB;AACxCA,MAAAA,YAAY,CAACX,MAAb,CAAoBiB,OAApB,GAA8B,UAAUC,OAAV,EAAqC;AACjE,eAAOP,YAAY,CAACM,OAAb,CAAqBC,OAArB,CAAP;AACD,OAFD;AAGD,KA5BQ;AA8BT,wBAAoB,CAAC;AAAEP,MAAAA,YAAF;AAAgBV,MAAAA;AAAhB,KAAD,EAA4Bf,KAA5B,KAAsC;AACxDF,MAAAA,MAAM,CAAC2B,YAAY,CAACX,MAAb,CAAoBC,OAArB,EAA8Bf,KAAK,CAACC,aAAN,CAAoBgC,QAAlD,CAAN;AACAnC,MAAAA,MAAM,CAAC2B,YAAY,CAACX,MAAb,CAAoBC,OAArB,EAA8BA,OAAO,CAACd,aAAR,IAAyB,EAAvD,CAAN;AACD;AAjCQ;AAHmB,CAAhC;AAwCA,eAAee,MAAf", + "sourcesContent": [ + "import { Scope } from '../core/scope'\nimport { merge } from '../utils/arr'\nimport extend from '../utils/extend'\n\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 } = scope\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: Interact.Interactable, options: any) {\n extend(this.events.options, options)\n\n return this\n}\n\nconst plugin: Interact.Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({\n targets,\n node,\n type,\n eventTarget,\n }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Interact.Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n" + ] +} \ No newline at end of file diff --git a/packages/reflow/index.d.ts b/packages/reflow/index.d.ts index 2674d0ef9..e87cfa034 100644 --- a/packages/reflow/index.d.ts +++ b/packages/reflow/index.d.ts @@ -1,6 +1,6 @@ -import Interactable from '@interactjs/core/Interactable'; -import { ActionProps } from '@interactjs/core/Interaction'; -import { Scope } from '@interactjs/core/scope'; +import Interactable from '../core/Interactable'; +import { ActionProps } from '../core/Interaction'; +import { Scope } from '../core/scope'; declare module '@interactjs/core/Interactable' { interface Interactable { reflow: (action: ActionProps) => ReturnType; diff --git a/packages/reflow/index.js b/packages/reflow/index.js index edf841907..11e069b4d 100644 --- a/packages/reflow/index.js +++ b/packages/reflow/index.js @@ -1,122 +1,147 @@ -import { EventPhase } from '@interactjs/core/InteractEvent'; -import { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'; +import Interactable from "../core/Interactable.js"; +import { EventPhase } from "../core/InteractEvent.js"; +import { Interaction } from "../core/Interaction.js"; +import { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from "../utils/index.js"; EventPhase.Reflow = 'reflow'; export function install(scope) { - const { actions, interactions, + const { + actions, + /** @lends Interactable */ // eslint-disable-next-line no-shadow - Interactable, } = scope; - // add action reflow event types - for (const actionName of actions.names) { - actions.eventTypes.push(`${actionName}reflow`); - } - // remove completed reflow interactions - interactions.signals.on('stop', ({ interaction }) => { - if (interaction.pointerType === EventPhase.Reflow) { - if (interaction._reflowResolve) { - interaction._reflowResolve(); - } - arr.remove(scope.interactions.list, interaction); - } - }); - /** - * ```js - * const interactable = interact(target) - * const drag = { name: drag, axis: 'x' } - * const resize = { name: resize, edges: { left: true, bottom: true } - * - * interactable.reflow(drag) - * interactable.reflow(resize) - * ``` - * - * Start an action sequence to re-apply modifiers, check drops, etc. - * - * @param { Object } action The action to begin - * @param { string } action.name The name of the action - * @returns { Promise } - */ - Interactable.prototype.reflow = function (action) { - return reflow(this, action, scope); - }; + Interactable + } = scope; // add action reflow event types + + for (const actionName of actions.names) { + actions.eventTypes.push(`${actionName}reflow`); + } + /** + * ```js + * const interactable = interact(target) + * const drag = { name: drag, axis: 'x' } + * const resize = { name: resize, edges: { left: true, bottom: true } + * + * interactable.reflow(drag) + * interactable.reflow(resize) + * ``` + * + * Start an action sequence to re-apply modifiers, check drops, etc. + * + * @param { Object } action The action to begin + * @param { string } action.name The name of the action + * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended + */ + + + Interactable.prototype.reflow = function (action) { + return reflow(this, action, scope); + }; } + function reflow(interactable, action, scope) { - const elements = is.string(interactable.target) - ? arr.from(interactable._context.querySelectorAll(interactable.target)) - : [interactable.target]; - // tslint:disable-next-line variable-name - const Promise = win.window.Promise; - const promises = Promise ? [] : null; - for (const element of elements) { - const rect = interactable.getRect(element); - if (!rect) { - break; - } - const runningInteraction = arr.find(scope.interactions.list, (interaction) => { - return interaction.interacting() && - interaction.interactable === interactable && - interaction.element === element && - interaction.prepared.name === action.name; + const elements = is.string(interactable.target) ? arr.from(interactable._context.querySelectorAll(interactable.target)) : [interactable.target]; // tslint:disable-next-line variable-name + + const Promise = win.window.Promise; + const promises = Promise ? [] : null; + + for (const element of elements) { + const rect = interactable.getRect(element); + + if (!rect) { + break; + } + + const runningInteraction = arr.find(scope.interactions.list, interaction => { + return interaction.interacting() && interaction.interactable === interactable && interaction.element === element && interaction.prepared.name === action.name; + }); + let reflowPromise; + + if (runningInteraction) { + runningInteraction.move(); + + if (promises) { + reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => { + runningInteraction._reflowResolve = resolve; }); - let reflowPromise; - if (runningInteraction) { - runningInteraction.move(); - if (promises) { - reflowPromise = runningInteraction._reflowPromise || new Promise((resolve) => { - runningInteraction._reflowResolve = resolve; - }); - } - } - else { - const xywh = rectUtils.tlbrToXywh(rect); - const coords = { - page: { x: xywh.x, y: xywh.y }, - client: { x: xywh.x, y: xywh.y }, - timeStamp: scope.now(), - }; - const event = pointerUtils.coordsToEvent(coords); - reflowPromise = startReflow(scope, interactable, element, action, event); - } - if (promises) { - promises.push(reflowPromise); - } + } + } else { + const xywh = rectUtils.tlbrToXywh(rect); + const coords = { + page: { + x: xywh.x, + y: xywh.y + }, + client: { + x: xywh.x, + y: xywh.y + }, + timeStamp: scope.now() + }; + const event = pointerUtils.coordsToEvent(coords); + reflowPromise = startReflow(scope, interactable, element, action, event); } - return promises && Promise.all(promises).then(() => interactable); + + if (promises) { + promises.push(reflowPromise); + } + } + + return promises && Promise.all(promises).then(() => interactable); } + function startReflow(scope, interactable, element, action, event) { - const interaction = scope.interactions.new({ pointerType: 'reflow' }); - const signalArg = { - interaction, - event, - pointer: event, - eventTarget: element, - phase: EventPhase.Reflow, - }; - interaction.interactable = interactable; - interaction.element = element; - interaction.prepared = extend({}, action); - interaction.prevEvent = event; - interaction.updatePointer(event, event, element, true); - interaction._doPhase(signalArg); - const reflowPromise = win.window.Promise - ? new win.window.Promise((resolve) => { - interaction._reflowResolve = resolve; - }) - : null; - interaction._reflowPromise = reflowPromise; - interaction.start(action, interactable, element); - if (interaction._interacting) { - interaction.move(signalArg); - interaction.end(event); - } - else { - interaction.stop(); - } - interaction.removePointer(event, event); - interaction.pointerIsDown = false; - return reflowPromise; + const interaction = scope.interactions.new({ + pointerType: 'reflow' + }); + const signalArg = { + interaction, + event, + pointer: event, + eventTarget: element, + phase: EventPhase.Reflow + }; + interaction.interactable = interactable; + interaction.element = element; + interaction.prepared = extend({}, action); + interaction.prevEvent = event; + interaction.updatePointer(event, event, element, true); + + interaction._doPhase(signalArg); + + const reflowPromise = win.window.Promise ? new win.window.Promise(resolve => { + interaction._reflowResolve = resolve; + }) : null; + interaction._reflowPromise = reflowPromise; + interaction.start(action, interactable, element); + + if (interaction._interacting) { + interaction.move(signalArg); + interaction.end(event); + } else { + interaction.stop(); + } + + interaction.removePointer(event, event); + interaction.pointerIsDown = false; + return reflowPromise; } + export default { - id: 'reflow', - install, + id: 'reflow', + install, + listeners: { + // remove completed reflow interactions + 'interactions:stop': ({ + interaction + }, scope) => { + if (interaction.pointerType === EventPhase.Reflow) { + if (interaction._reflowResolve) { + interaction._reflowResolve(); + } + + arr.remove(scope.interactions.list, interaction); + } + } + } }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFHM0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQXNCbkcsVUFBa0IsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFBO0FBRXJDLE1BQU0sVUFBVSxPQUFPLENBQUUsS0FBWTtJQUNuQyxNQUFNLEVBQ0osT0FBTyxFQUNQLFlBQVk7SUFDWiwwQkFBMEI7SUFDMUIscUNBQXFDO0lBQ3JDLFlBQVksR0FDYixHQUFHLEtBQUssQ0FBQTtJQUVULGdDQUFnQztJQUNoQyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7UUFDdEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLFFBQVEsQ0FBQyxDQUFBO0tBQy9DO0lBRUQsdUNBQXVDO0lBQ3ZDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUNsRCxJQUFJLFdBQVcsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNqRCxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUU7Z0JBQzlCLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQTthQUM3QjtZQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7U0FDakQ7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFB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LFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtLQUNuQjtJQUVELFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3ZDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFBO0lBRWpDLE9BQU8sYUFBYSxDQUFBO0FBQ3RCLENBQUM7QUFFRCxlQUFlO0lBQ2IsRUFBRSxFQUFFLFFBQVE7SUFDWixPQUFPO0NBQ1csQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJbnRlcmFjdGFibGUgZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGFibGUnXG5pbXBvcnQgeyBFdmVudFBoYXNlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdEV2ZW50J1xuaW1wb3J0IHsgQWN0aW9uUHJvcHMsIEludGVyYWN0aW9uIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbidcbmltcG9ydCB7IFNjb3BlIH0gZnJvbSAnQGludGVyYWN0anMvY29yZS9zY29wZSdcbmltcG9ydCB7IGFyciwgZXh0ZW5kLCBpcywgcG9pbnRlciBhcyBwb2ludGVyVXRpbHMsIHJlY3QgYXMgcmVjdFV0aWxzLCB3aW4gfSBmcm9tICdAaW50ZXJhY3Rqcy91dGlscydcblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvSW50ZXJhY3RhYmxlJyB7XG4gIGludGVyZmFjZSBJbnRlcmFjdGFibGUge1xuICAgIHJlZmxvdzogKGFjdGlvbjogQWN0aW9uUHJvcHMpID0+IFJldHVyblR5cGU8dHlwZW9mIHJlZmxvdz5cbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIF9yZWZsb3dQcm9taXNlOiBQcm9taXNlPHZvaWQ+XG4gICAgX3JlZmxvd1Jlc29sdmU6ICgpID0+IHZvaWRcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdEV2ZW50JyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgZW51bSBFdmVudFBoYXNlIHtcbiAgICBSZWZsb3cgPSAncmVmbG93JyxcbiAgfVxufVxuXG4oRXZlbnRQaGFzZSBhcyBhbnkpLlJlZmxvdyA9ICdyZWZsb3cnXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsIChzY29wZTogU2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgaW50ZXJhY3Rpb25zLFxuICAgIC8qKiBAbGVuZHMgSW50ZXJhY3RhYmxlICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICAgIEludGVyYWN0YWJsZSxcbiAgfSA9IHNjb3BlXG5cbiAgLy8gYWRkIGFjdGlvbiByZWZsb3cgZXZlbnQgdHlwZXNcbiAgZm9yIChjb25zdCBhY3Rpb25OYW1lIG9mIGFjdGlvbnMubmFtZXMpIHtcbiAgICBhY3Rpb25zLmV2ZW50VHlwZXMucHVzaChgJHthY3Rpb25OYW1lfXJlZmxvd2ApXG4gIH1cblxuICAvLyByZW1vdmUgY29tcGxldGVkIHJlZmxvdyBpbnRlcmFjdGlvbnNcbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3N0b3AnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJUeXBlID09PSBFdmVudFBoYXNlLlJlZmxvdykge1xuICAgICAgaWYgKGludGVyYWN0aW9uLl9yZWZsb3dSZXNvbHZlKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9yZWZsb3dSZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgYXJyLnJlbW92ZShzY29wZS5pbnRlcmFjdGlvbnMubGlzdCwgaW50ZXJhY3Rpb24pXG4gICAgfVxuICB9KVxuXG4gIC8qKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCBpbnRlcmFjdGFibGUgPSBpbnRlcmFjdCh0YXJnZXQpXG4gICAqIGNvbnN0IGRyYWcgPSB7IG5hbWU6IGRyYWcsIGF4aXM6ICd4JyB9XG4gICAqIGNvbnN0IHJlc2l6ZSA9IHsgbmFtZTogcmVzaXplLCBlZGdlczogeyBsZWZ0OiB0cnVlLCBib3R0b206IHRydWUgfVxuICAgKlxuICAgKiBpbnRlcmFjdGFibGUucmVmbG93KGRyYWcpXG4gICAqIGludGVyYWN0YWJsZS5yZWZsb3cocmVzaXplKVxuICAgKiBgYGBcbiAgICpcbiAgICogU3RhcnQgYW4gYWN0aW9uIHNlcXVlbmNlIHRvIHJlLWFwcGx5IG1vZGlmaWVycywgY2hlY2sgZHJvcHMsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHsgT2JqZWN0IH0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gYmVnaW5cbiAgICogQHBhcmFtIHsgc3RyaW5nIH0gYWN0aW9uLm5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICAgKiBAcmV0dXJucyB7IFByb21pc2U8SW50ZXJhY3RhYmxlPiB9XG4gICAqL1xuICBJbnRlcmFjdGFibGUucHJvdG90eXBlLnJlZmxvdyA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICByZXR1cm4gcmVmbG93KHRoaXMsIGFjdGlvbiwgc2NvcGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVmbG93IChpbnRlcmFjdGFibGU6IEludGVyYWN0YWJsZSwgYWN0aW9uOiBBY3Rpb25Qcm9wcywgc2NvcGU6IFNjb3BlKTogUHJvbWlzZTxJbnRlcmFjdGFibGU+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBpcy5zdHJpbmcoaW50ZXJhY3RhYmxlLnRhcmdldClcbiAgICA/IGFyci5mcm9tKGludGVyYWN0YWJsZS5fY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKGludGVyYWN0YWJsZS50YXJnZXQpKVxuICAgIDogW2ludGVyYWN0YWJsZS50YXJnZXRdXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHZhcmlhYmxlLW5hbWVcbiAgY29uc3QgUHJvbWlzZSA9ICh3aW4ud2luZG93IGFzIGFueSkuUHJvbWlzZVxuICBjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxudWxsPj4gfCBudWxsID0gUHJvbWlzZSA/IFtdIDogbnVsbFxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IHJlY3QgPSBpbnRlcmFjdGFibGUuZ2V0UmVjdChlbGVtZW50KVxuXG4gICAgaWYgKCFyZWN0KSB7IGJyZWFrIH1cblxuICAgIGNvbnN0IHJ1bm5pbmdJbnRlcmFjdGlvbiA9IGFyci5maW5kKFxuICAgICAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QsXG4gICAgICAoaW50ZXJhY3Rpb246IEludGVyYWN0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmXG4gICAgICAgICAgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlID09PSBpbnRlcmFjdGFibGUgJiZcbiAgICAgICAgICBpbnRlcmFjdGlvbi5lbGVtZW50ID09PSBlbGVtZW50ICYmXG4gICAgICAgICAgaW50ZXJhY3Rpb24ucHJlcGFyZWQubmFtZSA9PT0gYWN0aW9uLm5hbWVcbiAgICAgIH0pXG4gICAgbGV0IHJlZmxvd1Byb21pc2U6IFByb21pc2U8bnVsbD5cblxuICAgIGlmIChydW5uaW5nSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJ1bm5pbmdJbnRlcmFjdGlvbi5tb3ZlKClcblxuICAgICAgaWYgKHByb21pc2VzKSB7XG4gICAgICAgIHJlZmxvd1Byb21pc2UgPSBydW5uaW5nSW50ZXJhY3Rpb24uX3JlZmxvd1Byb21pc2UgfHwgbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSkgPT4ge1xuICAgICAgICAgIHJ1bm5pbmdJbnRlcmFjdGlvbi5fcmVmbG93UmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB4eXdoID0gcmVjdFV0aWxzLnRsYnJUb1h5d2gocmVjdClcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgcGFnZSAgICAgOiB7IHg6IHh5d2gueCwgeTogeHl3aC55IH0sXG4gICAgICAgIGNsaWVudCAgIDogeyB4OiB4eXdoLngsIHk6IHh5d2gueSB9LFxuICAgICAgICB0aW1lU3RhbXA6IHNjb3BlLm5vdygpLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBldmVudCA9IHBvaW50ZXJVdGlscy5jb29yZHNUb0V2ZW50KGNvb3JkcylcbiAgICAgIHJlZmxvd1Byb21pc2UgPSBzdGFydFJlZmxvdyhzY29wZSwgaW50ZXJhY3RhYmxlLCBlbGVtZW50LCBhY3Rpb24sIGV2ZW50KVxuICAgIH1cblxuICAgIGlmIChwcm9taXNlcykge1xuICAgICAgcHJvbWlzZXMucHVzaChyZWZsb3dQcm9taXNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9taXNlcyAmJiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiBpbnRlcmFjdGFibGUpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0UmVmbG93IChzY29wZTogU2NvcGUsIGludGVyYWN0YWJsZTogSW50ZXJhY3RhYmxlLCBlbGVtZW50OiBJbnRlcmFjdC5FbGVtZW50LCBhY3Rpb246IEFjdGlvblByb3BzLCBldmVudDogYW55KSB7XG4gIGNvbnN0IGludGVyYWN0aW9uID0gc2NvcGUuaW50ZXJhY3Rpb25zLm5ldyh7IHBvaW50ZXJUeXBlOiAncmVmbG93JyB9KVxuICBjb25zdCBzaWduYWxBcmcgPSB7XG4gICAgaW50ZXJhY3Rpb24sXG4gICAgZXZlbnQsXG4gICAgcG9pbnRlcjogZXZlbnQsXG4gICAgZXZlbnRUYXJnZXQ6IGVsZW1lbnQsXG4gICAgcGhhc2U6IEV2ZW50UGhhc2UuUmVmbG93LFxuICB9XG5cbiAgaW50ZXJhY3Rpb24uaW50ZXJhY3RhYmxlID0gaW50ZXJhY3RhYmxlXG4gIGludGVyYWN0aW9uLmVsZW1lbnQgPSBlbGVtZW50XG4gIGludGVyYWN0aW9uLnByZXBhcmVkID0gZXh0ZW5kKHt9LCBhY3Rpb24pXG4gIGludGVyYWN0aW9uLnByZXZFdmVudCA9IGV2ZW50XG4gIGludGVyYWN0aW9uLnVwZGF0ZVBvaW50ZXIoZXZlbnQsIGV2ZW50LCBlbGVtZW50LCB0cnVlKVxuXG4gIGludGVyYWN0aW9uLl9kb1BoYXNlKHNpZ25hbEFyZylcblxuICBjb25zdCByZWZsb3dQcm9taXNlID0gKHdpbi53aW5kb3cgYXMgdW5rbm93biBhcyBhbnkpLlByb21pc2VcbiAgICA/IG5ldyAod2luLndpbmRvdyBhcyB1bmtub3duIGFzIGFueSkuUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XG4gICAgICBpbnRlcmFjdGlvbi5fcmVmbG93UmVzb2x2ZSA9IHJlc29sdmVcbiAgICB9KVxuICAgIDogbnVsbFxuXG4gIGludGVyYWN0aW9uLl9yZWZsb3dQcm9taXNlID0gcmVmbG93UHJvbWlzZVxuICBpbnRlcmFjdGlvbi5zdGFydChhY3Rpb24sIGludGVyYWN0YWJsZSwgZWxlbWVudClcblxuICBpZiAoaW50ZXJhY3Rpb24uX2ludGVyYWN0aW5nKSB7XG4gICAgaW50ZXJhY3Rpb24ubW92ZShzaWduYWxBcmcpXG4gICAgaW50ZXJhY3Rpb24uZW5kKGV2ZW50KVxuICB9XG4gIGVsc2Uge1xuICAgIGludGVyYWN0aW9uLnN0b3AoKVxuICB9XG5cbiAgaW50ZXJhY3Rpb24ucmVtb3ZlUG9pbnRlcihldmVudCwgZXZlbnQpXG4gIGludGVyYWN0aW9uLnBvaW50ZXJJc0Rvd24gPSBmYWxzZVxuXG4gIHJldHVybiByZWZsb3dQcm9taXNlXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaWQ6ICdyZWZsb3cnLFxuICBpbnN0YWxsLFxufSBhcyBJbnRlcmFjdC5QbHVnaW5cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/reflow/index.js.map b/packages/reflow/index.js.map new file mode 100644 index 000000000..2d6775ae9 --- /dev/null +++ b/packages/reflow/index.js.map @@ -0,0 +1,90 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "Interactable", + "EventPhase", + "Interaction", + "arr", + "extend", + "is", + "pointer", + "pointerUtils", + "rect", + "rectUtils", + "win", + "Reflow", + "install", + "scope", + "actions", + "actionName", + "names", + "eventTypes", + "push", + "prototype", + "reflow", + "action", + "interactable", + "elements", + "string", + "target", + "from", + "_context", + "querySelectorAll", + "Promise", + "window", + "promises", + "element", + "getRect", + "runningInteraction", + "find", + "interactions", + "list", + "interaction", + "interacting", + "prepared", + "name", + "reflowPromise", + "move", + "_reflowPromise", + "resolve", + "_reflowResolve", + "xywh", + "tlbrToXywh", + "coords", + "page", + "x", + "y", + "client", + "timeStamp", + "now", + "event", + "coordsToEvent", + "startReflow", + "all", + "then", + "new", + "pointerType", + "signalArg", + "eventTarget", + "phase", + "prevEvent", + "updatePointer", + "_doPhase", + "start", + "_interacting", + "end", + "stop", + "removePointer", + "pointerIsDown", + "id", + "listeners", + "remove" + ], + "mappings": "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", + "sourcesContent": [ + "import Interactable from '../core/Interactable'\nimport { EventPhase } from '../core/InteractEvent'\nimport { ActionProps, Interaction } from '../core/Interaction'\nimport { Scope } from '../core/scope'\nimport { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '../utils/index'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n reflow: (action: ActionProps) => ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: () => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n // eslint-disable-next-line no-shadow\n enum EventPhase {\n Reflow = 'reflow',\n }\n}\n\n(EventPhase as any).Reflow = 'reflow'\n\nexport function install (scope: Scope) {\n const {\n actions,\n /** @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 /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n Interactable.prototype.reflow = function (action) {\n return reflow(this, action, scope)\n }\n}\n\nfunction reflow (interactable: Interactable, action: ActionProps, scope: Scope): Promise {\n const elements = is.string(interactable.target)\n ? arr.from(interactable._context.querySelectorAll(interactable.target))\n : [interactable.target]\n\n // tslint:disable-next-line variable-name\n const Promise = (win.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element)\n\n if (!rect) { break }\n\n const runningInteraction = arr.find(\n scope.interactions.list,\n (interaction: Interaction) => {\n return interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise = runningInteraction._reflowPromise || new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n }\n else {\n const xywh = rectUtils.tlbrToXywh(rect)\n const coords = {\n page : { x: xywh.x, y: xywh.y },\n client : { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow (scope: Scope, interactable: Interactable, element: Interact.Element, action: ActionProps, event: any) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: EventPhase.Reflow,\n }\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prepared = extend({}, action)\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n\n interaction._doPhase(signalArg)\n\n const reflowPromise = (win.window as unknown as any).Promise\n ? new (win.window as unknown as any).Promise((resolve: any) => {\n interaction._reflowResolve = resolve\n })\n : null\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n }\n else {\n interaction.stop()\n }\n\n interaction.removePointer(event, event)\n interaction.pointerIsDown = false\n\n return reflowPromise\n}\n\nexport default {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === EventPhase.Reflow) {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n} as Interact.Plugin\n" + ] +} \ No newline at end of file diff --git a/packages/reflow/reflow.spec.js b/packages/reflow/reflow.spec.js deleted file mode 100644 index 4cf167568..000000000 --- a/packages/reflow/reflow.spec.js +++ /dev/null @@ -1,79 +0,0 @@ -import test from '@interactjs/_dev/test/test'; -import * as helpers from '@interactjs/core/tests/_helpers'; -import PromisePolyfill from 'promise-polyfill'; -import reflow from './'; -test('reflow', t => { - const rect = Object.freeze({ top: 100, left: 200, bottom: 300, right: 400 }); - const { scope, interactable, } = helpers.testEnv({ plugins: [reflow], rect }); - Object.assign(scope.actions, { TEST: {}, names: ['TEST'] }); - t.ok(scope.Interactable.prototype.reflow instanceof Function, 'reflow method is added to Interactable.prototype'); - const fired = []; - interactable.fire = (iEvent => { fired.push(iEvent); }); - interactable.target = {}; - interactable.options.TEST = { enabled: true }; - 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(); - Object.assign(scope.actions, { TEST: {}, names: ['TEST'] }); - let reflowEvent; - let promise; - const interactable = scope.interactables.new(scope.window); - const rect = Object.freeze({ top: 100, left: 200, bottom: 300, right: 400 }); - interactable.rectChecker(() => ({ ...rect })); - interactable.fire = (iEvent => { reflowEvent = iEvent; }); - interactable.options.TEST = { enabled: true }; - scope.usePlugin(reflow); - // test with Promise implementation - scope.window.Promise = PromisePolyfill; - promise = interactable.reflow({ name: 'TEST' }); - t.ok(promise instanceof scope.window.Promise, 'method returns a Promise if available'); - t.notOk(reflowEvent.interaction.interacting(), 'reflow may end synchronously'); - t.equal(await promise, interactable, 'returned Promise resolves to interactable'); - let stoppedFromTimeout; - // block the end of the reflow interaction and stop it after a timeout - scope.interactions.signals.on('before-action-end', ({ interaction }) => { - setTimeout(() => { interaction.stop(); stoppedFromTimeout = true; }, 0); - return false; - }); - stoppedFromTimeout = false; - promise = interactable.reflow({ name: 'TEST' }); - t.ok(reflowEvent.interaction.interacting() && !stoppedFromTimeout, 'interaction continues if end is blocked'); - await promise; - t.notOk(reflowEvent.interaction.interacting() && stoppedFromTimeout, 'interaction is stopped after promise is resolved'); - // test without Promise implementation - stoppedFromTimeout = false; - scope.window.Promise = undefined; - promise = interactable.reflow({ name: 'TEST' }); - t.equal(promise, null, 'method returns null if no Proise is avilable'); - t.ok(reflowEvent.interaction.interacting() && !stoppedFromTimeout, 'interaction continues if end is blocked without Promise'); - setTimeout(() => { - t.notOk(reflowEvent.interaction.interacting() || !stoppedFromTimeout, 'interaction is stopped after timeout without Promised'); - }, 0); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmbG93LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWZsb3cuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssT0FBTyxNQUFNLGlDQUFpQyxDQUFBO0FBQzFELE9BQU8sZUFBZSxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sTUFBTSxNQUFNLElBQUksQ0FBQTtBQUV2QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUU1RSxNQUFNLEVBQ0osS0FBSyxFQUNMLFlBQVksR0FDYixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRWhELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRTNELENBQUMsQ0FBQyxFQUFFLENBQ0YsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxZQUFZLFFBQVEsRUFDdkQsa0RBQWtELENBQ25ELENBQUE7SUFFRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7SUFFaEIsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBUSxDQUFBO0lBQzVELFlBQVksQ0FBQyxNQUFjLEdBQUcsRUFBRSxDQUNoQztJQUFDLFlBQVksQ0FBQyxPQUFlLENBQUMsSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3ZELFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRTdDLHFCQUFxQjtJQUNyQixLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7UUFDdEUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHO1lBQzVCLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUc7WUFDbEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtTQUNqQixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFFckMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUVqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsVUFBVSxLQUFLLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQTtLQUMxRTtJQUVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUE7SUFFekMsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQzdCO1FBQ0UsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ1osQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHO0tBQ1osRUFDRCx3Q0FBd0MsQ0FDekMsQ0FBQTtJQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUUzQixDQUFDLENBQUMsU0FBUyxDQUNULFVBQVUsQ0FBQyxLQUFLLEVBQ2hCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFDbEIsd0RBQXdELENBQ3pELENBQUE7SUFFRCxDQUFDLENBQUMsS0FBSyxDQUNMLFdBQVcsQ0FBQyxhQUFhLEVBQ3pCLDJCQUEyQixDQUM1QixDQUFBO0lBRUQsQ0FBQyxDQUFDLEtBQUssQ0FDTCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFDM0IsQ0FBQyxFQUNELDZDQUE2QyxDQUM5QyxDQUFBO0lBRUQsQ0FBQyxDQUFDLEtBQUssQ0FDTCxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQzdDLGtDQUFrQyxDQUNuQyxDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRTtJQUM3QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUE7SUFFakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFM0QsSUFBSSxXQUFXLENBQUE7SUFDZixJQUFJLE9BQU8sQ0FBQTtJQUVYLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDNUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDN0MsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQSxDQUFDLENBQUMsQ0FBUSxDQUFBO0lBQy9ELFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO0lBRTdDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFdkIsbUNBQW1DO0lBQ25DLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQTtJQUV0QyxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQy9DLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLHVDQUF1QyxDQUFDLENBQUE7SUFDdEYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLDhCQUE4QixDQUFDLENBQUE7SUFFOUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLE9BQU8sRUFBRSxZQUFZLEVBQUUsMkNBQTJDLENBQUMsQ0FBQTtJQUVqRixJQUFJLGtCQUFrQixDQUFBO0lBQ3RCLHNFQUFzRTtJQUN0RSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7UUFDckUsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN0RSxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUMsQ0FBQyxDQUFBO0lBRUYsa0JBQWtCLEdBQUcsS0FBSyxDQUFBO0lBQzFCLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFFL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtJQUM3RyxNQUFNLE9BQU8sQ0FBQTtJQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxrQkFBa0IsRUFBRSxrREFBa0QsQ0FBQyxDQUFBO0lBRXhILHNDQUFzQztJQUN0QyxrQkFBa0IsR0FBRyxLQUFLLENBQUE7SUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO0lBRWhDLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDL0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLDhDQUE4QyxDQUFDLENBQUE7SUFDdEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUseURBQXlELENBQUMsQ0FBQTtJQUU3SCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsdURBQXVELENBQUMsQ0FBQTtJQUNoSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFTCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7QUFDVCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC90ZXN0J1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Rlc3RzL19oZWxwZXJzJ1xuaW1wb3J0IFByb21pc2VQb2x5ZmlsbCBmcm9tICdwcm9taXNlLXBvbHlmaWxsJ1xuaW1wb3J0IHJlZmxvdyBmcm9tICcuLydcblxudGVzdCgncmVmbG93JywgdCA9PiB7XG4gIGNvbnN0IHJlY3QgPSBPYmplY3QuZnJlZXplKHsgdG9wOiAxMDAsIGxlZnQ6IDIwMCwgYm90dG9tOiAzMDAsIHJpZ2h0OiA0MDAgfSlcblxuICBjb25zdCB7XG4gICAgc2NvcGUsXG4gICAgaW50ZXJhY3RhYmxlLFxuICB9ID0gaGVscGVycy50ZXN0RW52KHsgcGx1Z2luczogW3JlZmxvd10sIHJlY3QgfSlcblxuICBPYmplY3QuYXNzaWduKHNjb3BlLmFjdGlvbnMsIHsgVEVTVDoge30sIG5hbWVzOiBbJ1RFU1QnXSB9KVxuXG4gIHQub2soXG4gICAgc2NvcGUuSW50ZXJhY3RhYmxlLnByb3RvdHlwZS5yZWZsb3cgaW5zdGFuY2VvZiBGdW5jdGlvbixcbiAgICAncmVmbG93IG1ldGhvZCBpcyBhZGRlZCB0byBJbnRlcmFjdGFibGUucHJvdG90eXBlJ1xuICApXG5cbiAgY29uc3QgZmlyZWQgPSBbXVxuXG4gIGludGVyYWN0YWJsZS5maXJlID0gKGlFdmVudCA9PiB7IGZpcmVkLnB1c2goaUV2ZW50KSB9KSBhcyBhbnlcbiAgKGludGVyYWN0YWJsZS50YXJnZXQgYXMgYW55KSA9IHt9XG4gIDsoaW50ZXJhY3RhYmxlLm9wdGlvbnMgYXMgYW55KS5URVNUID0geyBlbmFibGVkOiB0cnVlIH1cbiAgaW50ZXJhY3RhYmxlLnJlY3RDaGVja2VyKCgpID0+ICh7IC4uLnJlY3QgfSkpXG5cbiAgLy8gbW9kaWZ5IG1vdmUgY29vcmRzXG4gIHNjb3BlLmludGVyYWN0aW9ucy5zaWduYWxzLm9uKCdiZWZvcmUtYWN0aW9uLW1vdmUnLCAoeyBpbnRlcmFjdGlvbiB9KSA9PiB7XG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLmN1ci5wYWdlID0ge1xuICAgICAgeDogcmVjdC5sZWZ0ICsgMTAwLFxuICAgICAgeTogcmVjdC50b3AgLSA1MCxcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3RhYmxlLnJlZmxvdyh7IG5hbWU6ICdURVNUJyB9KVxuXG4gIGNvbnN0IHBoYXNlcyA9IFsncmVmbG93JywgJ3N0YXJ0JywgJ21vdmUnLCAnZW5kJ11cblxuICBmb3IgKGNvbnN0IGluZGV4IGluIHBoYXNlcykge1xuICAgIGNvbnN0IHBoYXNlID0gcGhhc2VzW2luZGV4XVxuICAgIHQuZXF1YWwoZmlyZWRbaW5kZXhdLnR5cGUsIGBURVNUJHtwaGFzZX1gLCBgZXZlbnQgIyR7aW5kZXh9IGlzICR7cGhhc2V9YClcbiAgfVxuXG4gIGNvbnN0IGludGVyYWN0aW9uID0gZmlyZWRbMF0uX2ludGVyYWN0aW9uXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgaW50ZXJhY3Rpb24uY29vcmRzLnN0YXJ0LnBhZ2UsXG4gICAge1xuICAgICAgeDogcmVjdC5sZWZ0LFxuICAgICAgeTogcmVjdC50b3AsXG4gICAgfSxcbiAgICAndXNlcyBlbGVtZW50IHRvcCBsZWZ0IGZvciBldmVudCBjb29yZHMnXG4gIClcblxuICBjb25zdCByZWZsb3dNb3ZlID0gZmlyZWRbMl1cblxuICB0LmRlZXBFcXVhbChcbiAgICByZWZsb3dNb3ZlLmRlbHRhLFxuICAgIHsgeDogMTAwLCB5OiAtNTAgfSxcbiAgICAnbW92ZSBkZWx0YSBpcyBjb3JyZWN0IHdpdGggbW9kaWZpZWQgaW50ZXJhY3Rpb24gY29vcmRzJ1xuICApXG5cbiAgdC5ub3RPayhcbiAgICBpbnRlcmFjdGlvbi5wb2ludGVySXNEb3duLFxuICAgICdyZWZsb3cgcG9pbnRlciB3YXMgbGlmdGVkJ1xuICApXG5cbiAgdC5lcXVhbChcbiAgICBpbnRlcmFjdGlvbi5wb2ludGVycy5sZW5ndGgsXG4gICAgMCxcbiAgICAncmVmbG93IHBvaW50ZXIgd2FzIHJlbW92ZWQgZnJvbSBpbnRlcmFjdGlvbidcbiAgKVxuXG4gIHQubm90T2soXG4gICAgc2NvcGUuaW50ZXJhY3Rpb25zLmxpc3QuaW5jbHVkZXMoaW50ZXJhY3Rpb24pLFxuICAgICdpbnRlcmFjdGlvbiBpcyByZW1vdmVkIGZyb20gbGlzdCdcbiAgKVxuXG4gIHQuZW5kKClcbn0pXG5cbnRlc3QoJ2FzeW5jIHJlZmxvdycsIGFzeW5jIHQgPT4ge1xuICBjb25zdCBzY29wZSA9IGhlbHBlcnMubW9ja1Njb3BlKClcblxuICBPYmplY3QuYXNzaWduKHNjb3BlLmFjdGlvbnMsIHsgVEVTVDoge30sIG5hbWVzOiBbJ1RFU1QnXSB9KVxuXG4gIGxldCByZWZsb3dFdmVudFxuICBsZXQgcHJvbWlzZVxuXG4gIGNvbnN0IGludGVyYWN0YWJsZSA9IHNjb3BlLmludGVyYWN0YWJsZXMubmV3KHNjb3BlLndpbmRvdylcbiAgY29uc3QgcmVjdCA9IE9iamVjdC5mcmVlemUoeyB0b3A6IDEwMCwgbGVmdDogMjAwLCBib3R0b206IDMwMCwgcmlnaHQ6IDQwMCB9KVxuICBpbnRlcmFjdGFibGUucmVjdENoZWNrZXIoKCkgPT4gKHsgLi4ucmVjdCB9KSlcbiAgaW50ZXJhY3RhYmxlLmZpcmUgPSAoaUV2ZW50ID0+IHsgcmVmbG93RXZlbnQgPSBpRXZlbnQgfSkgYXMgYW55XG4gIGludGVyYWN0YWJsZS5vcHRpb25zLlRFU1QgPSB7IGVuYWJsZWQ6IHRydWUgfVxuXG4gIHNjb3BlLnVzZVBsdWdpbihyZWZsb3cpXG5cbiAgLy8gdGVzdCB3aXRoIFByb21pc2UgaW1wbGVtZW50YXRpb25cbiAgc2NvcGUud2luZG93LlByb21pc2UgPSBQcm9taXNlUG9seWZpbGxcblxuICBwcm9taXNlID0gaW50ZXJhY3RhYmxlLnJlZmxvdyh7IG5hbWU6ICdURVNUJyB9KVxuICB0Lm9rKHByb21pc2UgaW5zdGFuY2VvZiBzY29wZS53aW5kb3cuUHJvbWlzZSwgJ21ldGhvZCByZXR1cm5zIGEgUHJvbWlzZSBpZiBhdmFpbGFibGUnKVxuICB0Lm5vdE9rKHJlZmxvd0V2ZW50LmludGVyYWN0aW9uLmludGVyYWN0aW5nKCksICdyZWZsb3cgbWF5IGVuZCBzeW5jaHJvbm91c2x5JylcblxuICB0LmVxdWFsKGF3YWl0IHByb21pc2UsIGludGVyYWN0YWJsZSwgJ3JldHVybmVkIFByb21pc2UgcmVzb2x2ZXMgdG8gaW50ZXJhY3RhYmxlJylcblxuICBsZXQgc3RvcHBlZEZyb21UaW1lb3V0XG4gIC8vIGJsb2NrIHRoZSBlbmQgb2YgdGhlIHJlZmxvdyBpbnRlcmFjdGlvbiBhbmQgc3RvcCBpdCBhZnRlciBhIHRpbWVvdXRcbiAgc2NvcGUuaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2JlZm9yZS1hY3Rpb24tZW5kJywgKHsgaW50ZXJhY3Rpb24gfSkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyBpbnRlcmFjdGlvbi5zdG9wKCk7IHN0b3BwZWRGcm9tVGltZW91dCA9IHRydWUgfSwgMClcbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcblxuICBzdG9wcGVkRnJvbVRpbWVvdXQgPSBmYWxzZVxuICBwcm9taXNlID0gaW50ZXJhY3RhYmxlLnJlZmxvdyh7IG5hbWU6ICdURVNUJyB9KVxuXG4gIHQub2socmVmbG93RXZlbnQuaW50ZXJhY3Rpb24uaW50ZXJhY3RpbmcoKSAmJiAhc3RvcHBlZEZyb21UaW1lb3V0LCAnaW50ZXJhY3Rpb24gY29udGludWVzIGlmIGVuZCBpcyBibG9ja2VkJylcbiAgYXdhaXQgcHJvbWlzZVxuICB0Lm5vdE9rKHJlZmxvd0V2ZW50LmludGVyYWN0aW9uLmludGVyYWN0aW5nKCkgJiYgc3RvcHBlZEZyb21UaW1lb3V0LCAnaW50ZXJhY3Rpb24gaXMgc3RvcHBlZCBhZnRlciBwcm9taXNlIGlzIHJlc29sdmVkJylcblxuICAvLyB0ZXN0IHdpdGhvdXQgUHJvbWlzZSBpbXBsZW1lbnRhdGlvblxuICBzdG9wcGVkRnJvbVRpbWVvdXQgPSBmYWxzZVxuICBzY29wZS53aW5kb3cuUHJvbWlzZSA9IHVuZGVmaW5lZFxuXG4gIHByb21pc2UgPSBpbnRlcmFjdGFibGUucmVmbG93KHsgbmFtZTogJ1RFU1QnIH0pXG4gIHQuZXF1YWwocHJvbWlzZSwgbnVsbCwgJ21ldGhvZCByZXR1cm5zIG51bGwgaWYgbm8gUHJvaXNlIGlzIGF2aWxhYmxlJylcbiAgdC5vayhyZWZsb3dFdmVudC5pbnRlcmFjdGlvbi5pbnRlcmFjdGluZygpICYmICFzdG9wcGVkRnJvbVRpbWVvdXQsICdpbnRlcmFjdGlvbiBjb250aW51ZXMgaWYgZW5kIGlzIGJsb2NrZWQgd2l0aG91dCBQcm9taXNlJylcblxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0Lm5vdE9rKHJlZmxvd0V2ZW50LmludGVyYWN0aW9uLmludGVyYWN0aW5nKCkgfHwgIXN0b3BwZWRGcm9tVGltZW91dCwgJ2ludGVyYWN0aW9uIGlzIHN0b3BwZWQgYWZ0ZXIgdGltZW91dCB3aXRob3V0IFByb21pc2VkJylcbiAgfSwgMClcblxuICB0LmVuZCgpXG59KVxuIl19 \ No newline at end of file diff --git a/packages/types/index.js b/packages/types/index.js index f304e27ee..77c678825 100644 --- a/packages/types/index.js +++ b/packages/types/index.js @@ -1,2 +1,2 @@ /// -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi90eXBlcy5kLnRzXCIgLz5cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/types/index.js.map b/packages/types/index.js.map new file mode 100644 index 000000000..fdb992c59 --- /dev/null +++ b/packages/types/index.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [], + "mappings": "AAAA", + "sourcesContent": [ + "/// \n" + ] +} \ No newline at end of file diff --git a/packages/types/interactjs-test.js b/packages/types/interactjs-test.js index dc9f2f1ea..d78e61285 100644 --- a/packages/types/interactjs-test.js +++ b/packages/types/interactjs-test.js @@ -1,201 +1,230 @@ // eslint-disable-next-line node/no-extraneous-import -import interact from '../interactjs/index'; -// Interactables +import interact from "../interactjs/index.js"; // Interactables + interact(document.body); interact(document); interact(window); -interact('.drag-and-resize') - .draggable({ - modifiers: [ - interact.modifiers.snap({ - targets: [ - { x: 100, y: 200 }, - (x, y) => ({ x: x % 20, y }), - ], - offset: 'startCoords', - relativePoints: [{ x: 0, y: 1 }], - endOnly: true, - }), - interact.modifiers.snapSize({ - targets: [ - { x: 100, y: 200 }, - (x, y) => ({ x: x % 20, y }), - ], - endOnly: true, - }), - interact.modifiers.restrictRect({ - restriction: 'parent', - endOnly: true, - }), - interact.modifiers.restrict({ - restriction: _ => ({ top: 0, left: 0, bottom: 1, right: 1 }), - }), - interact.modifiers.restrict({ - restriction: _ => document.body, - }), - interact.modifiers.restrictSize({ - min: document.body, - max: 'parent', - }), - interact.modifiers.restrictEdges({ - inner: document.body, - outer: 'parent', - }), - ], -}) - .resizable({ - inertia: true, -}); -// Selector context +interact('.drag-and-resize').draggable({ + modifiers: [interact.modifiers.snap({ + targets: [{ + x: 100, + y: 200 + }, (x, y) => ({ + x: x % 20, + y + })], + offset: 'startCoords', + relativePoints: [{ + x: 0, + y: 1 + }], + endOnly: true + }), interact.modifiers.snapSize({ + targets: [{ + x: 100, + y: 200 + }, (x, y) => ({ + x: x % 20, + y + })], + endOnly: true + }), interact.modifiers.restrictRect({ + restriction: 'parent', + endOnly: true + }), interact.modifiers.restrict({ + restriction: _ => ({ + top: 0, + left: 0, + bottom: 1, + right: 1 + }) + }), interact.modifiers.restrict({ + restriction: _ => document.body + }), interact.modifiers.restrictSize({ + min: document.body, + max: 'parent' + }), interact.modifiers.restrictEdges({ + inner: document.body, + outer: 'parent' + })] +}).resizable({ + inertia: true +}); // Selector context + const myList = document.querySelector('#my-list'); interact('li', { - context: myList, -}) - .draggable({ /* ... */}); -// Action options + context: myList +}).draggable({ + /* ... */ +}); // Action options + const target = 'li'; -interact(target) - .draggable({ - max: 1, - maxPerElement: 2, - manualStart: true, - modifiers: [], - inertia: { /* ... */}, - autoScroll: { /* ... */}, - lockAxis: 'x' || 'y' || 'start', - startAxis: 'x' || 'y', -}) - .resizable({ - max: 1, - maxPerElement: 2, - manualStart: true, - modifiers: [], - inertia: { /* ... */}, - autoScroll: { /* ... */}, - margin: 50, - square: true || false, - axis: 'x' || 'y', -}) - .gesturable({ - max: 1, - maxPerElement: 2, - manualStart: true, - modifiers: [], -}); -// autoscroll +interact(target).draggable({ + max: 1, + maxPerElement: 2, + manualStart: true, + modifiers: [], + inertia: { + /* ... */ + }, + autoScroll: { + /* ... */ + }, + lockAxis: 'x' || 'y' || 'start', + startAxis: 'x' || 'y' +}).resizable({ + max: 1, + maxPerElement: 2, + manualStart: true, + modifiers: [], + inertia: { + /* ... */ + }, + autoScroll: { + /* ... */ + }, + margin: 50, + square: true || false, + axis: 'x' || 'y' +}).gesturable({ + max: 1, + maxPerElement: 2, + manualStart: true, + modifiers: [] +}); // autoscroll + const element = 'li'; -interact(element) - .draggable({ - autoScroll: true, -}) - .resizable({ - autoScroll: { - container: document.body, - margin: 50, - distance: 5, - interval: 10, - }, -}); -// axis +interact(element).draggable({ + autoScroll: true +}).resizable({ + autoScroll: { + container: document.body, + margin: 50, + distance: 5, + interval: 10 + } +}); // axis + interact(target).draggable({ - startAxis: 'x', - lockAxis: 'y', + startAxis: 'x', + lockAxis: 'y' }).draggable({ - startAxis: 'xy', - lockAxis: 'x', + startAxis: 'xy', + lockAxis: 'x' }); interact(target).resizable({ - axis: 'x', + axis: 'x' }); const handleEl = 'li'; interact(target).resizable({ - edges: { - top: true, - left: false, - bottom: '.resize-s', - right: handleEl, - }, -}); -// resize invert + edges: { + top: true, + // Use pointer coords to check for resize. + left: false, + // Disable resizing from left edge. + bottom: '.resize-s', + // Resize if pointer target matches selector + right: handleEl // Resize if pointer target is the given Element + + } +}); // resize invert + interact(target).resizable({ - edges: { bottom: true, right: true }, - invert: 'reposition', -}); -// resize square + edges: { + bottom: true, + right: true + }, + invert: 'reposition' +}); // resize square + interact(target).resizable({ - squareResize: true, -}); -// dropzone accept + squareResize: true +}); // dropzone accept + interact(target).dropzone({ - accept: '.drag0, .drag1', -}); -// dropzone overlap + accept: '.drag0, .drag1' +}); // dropzone overlap + interact(target).dropzone({ - overlap: 0.25, -}); -// dropzone checker + overlap: 0.25 +}); // dropzone checker + interact(target).dropzone({ - checker(_dragEvent, // related dragmove or dragend - _event, // Touch, Pointer or Mouse Event - dropped, // bool default checker result - _dropzone, // dropzone Interactable - dropElement, // dropzone elemnt - _draggable, // draggable Interactable - _draggableElement) { - // only allow drops into empty dropzone elements - return dropped && !dropElement.hasChildNodes(); - }, + checker(_dragEvent, // related dragmove or dragend + _event, // Touch, Pointer or Mouse Event + dropped, // bool default checker result + _dropzone, // dropzone Interactable + dropElement, // dropzone elemnt + _draggable, // draggable Interactable + _draggableElement) { + // draggable element + // only allow drops into empty dropzone elements + return dropped && !dropElement.hasChildNodes(); + } + }); interact.dynamicDrop(); -interact.dynamicDrop(false); -// Events +interact.dynamicDrop(false); // Events + function listener(event) { - const { type, pageX, pageY } = event; - alert({ type, pageX, pageY }); + const { + type, + pageX, + pageY + } = event; + alert({ + type, + pageX, + pageY + }); } -interact(target) - .on('dragstart', listener) - .on('dragmove dragend', listener) - .on(['resizemove', 'resizeend'], listener) - .on({ - gesturestart: listener, - gestureend: listener, -}); -interact.on('resize', (event) => { - const { rect, deltaRect } = event; - alert(JSON.stringify({ rect, deltaRect })); + +interact(target).on('dragstart', listener).on('dragmove dragend', listener).on(['resizemove', 'resizeend'], listener).on({ + gesturestart: listener, + gestureend: listener +}); +interact.on('resize', event => { + const { + rect, + deltaRect + } = event; + alert(JSON.stringify({ + rect, + deltaRect + })); }); interact(target).resizable({ - listeners: [ - { start: listener, move: listener }, - ], + listeners: [{ + start: listener, + move: listener + }] }); interact(target).draggable({ - listeners: { start: listener, end: listener }, + listeners: { + start: listener, + end: listener + } }); interact(target).draggable({ - onstart: listener, - onmove: listener, - onend: listener, + onstart: listener, + onmove: listener, + onend: listener }); interact.on(['dragmove', 'resizestart'], listener); -const dropTarget = 'div'; -// Drop Events -interact(dropTarget) - .dropzone({ - ondrop(event) { - alert(event.relatedTarget.id + - ' was dropped into ' + - event.target.id); - }, -}) - .on('dropactivate', event => { - event.target.classList.add('drop-activated'); -}); -interact(target).on('up', _event => { }); -// fast click +const dropTarget = 'div'; // Drop Events + +interact(dropTarget).dropzone({ + ondrop(event) { + alert(event.relatedTarget.id + ' was dropped into ' + event.target.id); + } + +}).on('dropactivate', event => { + event.target.classList.add('drop-activated'); +}); +interact(target).on('up', _event => {}); // fast click + interact('a[href]').on('tap', event => { - window.location.href = event.currentTarget.href; - event.preventDefault(); + window.location.href = event.currentTarget.href; + event.preventDefault(); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rqcy10ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZXJhY3Rqcy10ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxPQUFPLFFBQVEsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxnQkFBZ0I7QUFDaEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN2QixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDbEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBRWhCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztLQUN6QixTQUFTLENBQUM7SUFDVCxTQUFTLEVBQUU7UUFDVCxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzdDO1lBQ0QsTUFBTSxFQUFFLGFBQWE7WUFDckIsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7UUFDRixRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUMxQixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzdDO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO1FBQ0Ys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QU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFBO0lBRS9DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQTtBQUN4QixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLWV4dHJhbmVvdXMtaW1wb3J0XG5pbXBvcnQgaW50ZXJhY3QgZnJvbSAnLi4vaW50ZXJhY3Rqcy9pbmRleCdcblxuLy8gSW50ZXJhY3RhYmxlc1xuaW50ZXJhY3QoZG9jdW1lbnQuYm9keSlcbmludGVyYWN0KGRvY3VtZW50KVxuaW50ZXJhY3Qod2luZG93KVxuXG5pbnRlcmFjdCgnLmRyYWctYW5kLXJlc2l6ZScpXG4gIC5kcmFnZ2FibGUoe1xuICAgIG1vZGlmaWVyczogW1xuICAgICAgaW50ZXJhY3QubW9kaWZpZXJzLnNuYXAoe1xuICAgICAgICB0YXJnZXRzOiBbXG4gICAgICAgICAgeyB4OiAxMDAsIHk6IDIwMCB9LFxuICAgICAgICAgICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gKHsgeDogeCAlIDIwLCB5IH0pLFxuICAgICAgICBdLFxuICAgICAgICBvZmZzZXQ6ICdzdGFydENvb3JkcycsXG4gICAgICAgIHJlbGF0aXZlUG9pbnRzOiBbeyB4OiAwLCB5OiAxIH1dLFxuICAgICAgICBlbmRPbmx5OiB0cnVlLFxuICAgICAgfSksXG4gICAgICBpbnRlcmFjdC5tb2RpZmllcnMuc25hcFNpemUoe1xuICAgICAgICB0YXJnZXRzOiBbXG4gICAgICAgICAgeyB4OiAxMDAsIHk6IDIwMCB9LFxuICAgICAgICAgICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gKHsgeDogeCAlIDIwLCB5IH0pLFxuICAgICAgICBdLFxuICAgICAgICBlbmRPbmx5OiB0cnVlLFxuICAgICAgfSksXG4gICAgICBpbnRlcmFjdC5tb2RpZmllcnMucmVzdHJpY3RSZWN0KHtcbiAgICAgICAgcmVzdHJpY3Rpb246ICdwYXJlbnQnLFxuICAgICAgICBlbmRPbmx5OiB0cnVlLFxuICAgICAgfSksXG4gICAgICBpbnRlcmFjdC5tb2RpZmllcnMucmVzdHJpY3Qoe1xuICAgICAgICByZXN0cmljdGlvbjogXyA9PiAoeyB0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogMSwgcmlnaHQ6IDEgfSksXG4gICAgICB9KSxcbiAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdCh7XG4gICAgICAgIHJlc3RyaWN0aW9uOiBfID0+IGRvY3VtZW50LmJvZHksXG4gICAgICB9KSxcbiAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdFNpemUoe1xuICAgICAgICBtaW46IGRvY3VtZW50LmJvZHksXG4gICAgICAgIG1heDogJ3BhcmVudCcsXG4gICAgICB9KSxcbiAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdEVkZ2VzKHtcbiAgICAgICAgaW5uZXI6IGRvY3VtZW50LmJvZHksXG4gICAgICAgIG91dGVyOiAncGFyZW50JyxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pXG4gIC5yZXNpemFibGUoe1xuICAgIGluZXJ0aWE6IHRydWUsXG4gIH0pXG5cbi8vIFNlbGVjdG9yIGNvbnRleHRcbmNvbnN0IG15TGlzdDogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI215LWxpc3QnKVxuXG5pbnRlcmFjdCgnbGknLCB7XG4gIGNvbnRleHQ6IG15TGlzdCxcbn0pXG4gIC5kcmFnZ2FibGUoeyAvKiAuLi4gKi8gfSlcblxuLy8gQWN0aW9uIG9wdGlvbnNcbmNvbnN0IHRhcmdldCA9ICdsaSdcbmludGVyYWN0KHRhcmdldClcbiAgLmRyYWdnYWJsZSh7XG4gICAgbWF4ICAgICAgICAgIDogMSxcbiAgICBtYXhQZXJFbGVtZW50OiAyLFxuICAgIG1hbnVhbFN0YXJ0ICA6IHRydWUsXG4gICAgbW9kaWZpZXJzICAgIDogW10sXG4gICAgaW5lcnRpYSAgICAgIDogey8qIC4uLiAqL30sXG4gICAgYXV0b1Njcm9sbCAgIDogey8qIC4uLiAqL30sXG5cbiAgICBsb2NrQXhpcyAgICAgOiAneCcgfHwgJ3knIHx8ICdzdGFydCcsXG4gICAgc3RhcnRBeGlzICAgIDogJ3gnIHx8ICd5JyxcbiAgfSlcbiAgLnJlc2l6YWJsZSh7XG4gICAgbWF4ICAgICAgICAgIDogMSxcbiAgICBtYXhQZXJFbGVtZW50OiAyLFxuICAgIG1hbnVhbFN0YXJ0ICA6IHRydWUsXG4gICAgbW9kaWZpZXJzICAgIDogW10sXG4gICAgaW5lcnRpYSAgICAgIDogey8qIC4uLiAqL30sXG4gICAgYXV0b1Njcm9sbCAgIDogey8qIC4uLiAqL30sXG4gICAgbWFyZ2luICAgICAgIDogNTAsXG5cbiAgICBzcXVhcmUgICAgICAgOiB0cnVlIHx8IGZhbHNlLFxuICAgIGF4aXMgICAgICAgICA6ICd4JyB8fCAneScsXG4gIH0pXG4gIC5nZXN0dXJhYmxlKHtcbiAgICBtYXggICAgICAgICAgOiAxLFxuICAgIG1heFBlckVsZW1lbnQ6IDIsXG4gICAgbWFudWFsU3RhcnQgIDogdHJ1ZSxcbiAgICBtb2RpZmllcnMgICAgOiBbXSxcbiAgfSlcblxuLy8gYXV0b3Njcm9sbFxuY29uc3QgZWxlbWVudCA9ICdsaSdcbmludGVyYWN0KGVsZW1lbnQpXG4gIC5kcmFnZ2FibGUoe1xuICAgIGF1dG9TY3JvbGw6IHRydWUsXG4gIH0pXG4gIC5yZXNpemFibGUoe1xuICAgIGF1dG9TY3JvbGw6IHtcbiAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keSxcbiAgICAgIG1hcmdpbjogNTAsXG4gICAgICBkaXN0YW5jZTogNSxcbiAgICAgIGludGVydmFsOiAxMCxcbiAgICB9LFxuICB9KVxuXG4vLyBheGlzXG5pbnRlcmFjdCh0YXJnZXQpLmRyYWdnYWJsZSh7XG4gIHN0YXJ0QXhpczogJ3gnLFxuICBsb2NrQXhpczogJ3knLFxufSkuZHJhZ2dhYmxlKHtcbiAgc3RhcnRBeGlzOiAneHknLFxuICBsb2NrQXhpczogJ3gnLFxufSlcblxuaW50ZXJhY3QodGFyZ2V0KS5yZXNpemFibGUoe1xuICBheGlzOiAneCcsXG59KVxuXG5jb25zdCBoYW5kbGVFbCA9ICdsaSdcbmludGVyYWN0KHRhcmdldCkucmVzaXphYmxlKHtcbiAgZWRnZXM6IHtcbiAgICB0b3AgICA6IHRydWUsICAgICAgIC8vIFVzZSBwb2ludGVyIGNvb3JkcyB0byBjaGVjayBmb3IgcmVzaXplLlxuICAgIGxlZnQgIDogZmFsc2UsICAgICAgLy8gRGlzYWJsZSByZXNpemluZyBmcm9tIGxlZnQgZWRnZS5cbiAgICBib3R0b206ICcucmVzaXplLXMnLCAvLyBSZXNpemUgaWYgcG9pbnRlciB0YXJnZXQgbWF0Y2hlcyBzZWxlY3RvclxuICAgIHJpZ2h0IDogaGFuZGxlRWwsICAgIC8vIFJlc2l6ZSBpZiBwb2ludGVyIHRhcmdldCBpcyB0aGUgZ2l2ZW4gRWxlbWVudFxuICB9LFxufSlcblxuLy8gcmVzaXplIGludmVydFxuaW50ZXJhY3QodGFyZ2V0KS5yZXNpemFibGUoe1xuICBlZGdlczogeyBib3R0b206IHRydWUsIHJpZ2h0OiB0cnVlIH0sXG4gIGludmVydDogJ3JlcG9zaXRpb24nLFxufSlcblxuLy8gcmVzaXplIHNxdWFyZVxuaW50ZXJhY3QodGFyZ2V0KS5yZXNpemFibGUoe1xuICBzcXVhcmVSZXNpemU6IHRydWUsXG59KVxuXG4vLyBkcm9wem9uZSAgYWNjZXB0XG5pbnRlcmFjdCh0YXJnZXQpLmRyb3B6b25lKHtcbiAgYWNjZXB0OiAnLmRyYWcwLCAuZHJhZzEnLFxufSlcblxuLy8gZHJvcHpvbmUgb3ZlcmxhcFxuaW50ZXJhY3QodGFyZ2V0KS5kcm9wem9uZSh7XG4gIG92ZXJsYXA6IDAuMjUsXG59KVxuXG4vLyBkcm9wem9uZSBjaGVja2VyXG5pbnRlcmFjdCh0YXJnZXQpLmRyb3B6b25lKHtcbiAgY2hlY2tlciAoXG4gICAgX2RyYWdFdmVudDogSW50ZXJhY3QuRWxlbWVudCwgICAgICAgICAgIC8vIHJlbGF0ZWQgZHJhZ21vdmUgb3IgZHJhZ2VuZFxuICAgIF9ldmVudDogRXZlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3VjaCwgUG9pbnRlciBvciBNb3VzZSBFdmVudFxuICAgIGRyb3BwZWQ6IGJvb2xlYW4sICAgICAgICAgICAgICAgICAgICAgICAvLyBib29sIGRlZmF1bHQgY2hlY2tlciByZXN1bHRcbiAgICBfZHJvcHpvbmU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgICAgICAgLy8gZHJvcHpvbmUgSW50ZXJhY3RhYmxlXG4gICAgZHJvcEVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQsICAgICAgICAgIC8vIGRyb3B6b25lIGVsZW1udFxuICAgIF9kcmFnZ2FibGU6IEludGVyYWN0LkludGVyYWN0YWJsZSwgICAgICAvLyBkcmFnZ2FibGUgSW50ZXJhY3RhYmxlXG4gICAgX2RyYWdnYWJsZUVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQpIHsgIC8vIGRyYWdnYWJsZSBlbGVtZW50XG4gICAgLy8gb25seSBhbGxvdyBkcm9wcyBpbnRvIGVtcHR5IGRyb3B6b25lIGVsZW1lbnRzXG4gICAgcmV0dXJuIGRyb3BwZWQgJiYgIWRyb3BFbGVtZW50Lmhhc0NoaWxkTm9kZXMoKVxuICB9LFxufSlcblxuaW50ZXJhY3QuZHluYW1pY0Ryb3AoKVxuaW50ZXJhY3QuZHluYW1pY0Ryb3AoZmFsc2UpXG5cbi8vIEV2ZW50c1xuZnVuY3Rpb24gbGlzdGVuZXIgKGV2ZW50KSB7XG4gIGNvbnN0IHsgdHlwZSwgcGFnZVgsIHBhZ2VZIH0gPSBldmVudFxuICBhbGVydCh7IHR5cGUsIHBhZ2VYLCBwYWdlWSB9KVxufVxuXG5pbnRlcmFjdCh0YXJnZXQpXG4gIC5vbignZHJhZ3N0YXJ0JywgbGlzdGVuZXIpXG4gIC5vbignZHJhZ21vdmUgZHJhZ2VuZCcsIGxpc3RlbmVyKVxuICAub24oWydyZXNpemVtb3ZlJywgJ3Jlc2l6ZWVuZCddLCBsaXN0ZW5lcilcbiAgLm9uKHtcbiAgICBnZXN0dXJlc3RhcnQ6IGxpc3RlbmVyLFxuICAgIGdlc3R1cmVlbmQ6IGxpc3RlbmVyLFxuICB9KVxuXG5pbnRlcmFjdC5vbigncmVzaXplJywgKGV2ZW50OiBJbnRlcmFjdC5SZXNpemVFdmVudCkgPT4ge1xuICBjb25zdCB7IHJlY3QsIGRlbHRhUmVjdCB9ID0gZXZlbnRcbiAgYWxlcnQoSlNPTi5zdHJpbmdpZnkoeyByZWN0LCBkZWx0YVJlY3QgfSkpXG59KVxuXG5pbnRlcmFjdCh0YXJnZXQpLnJlc2l6YWJsZSh7XG4gIGxpc3RlbmVyczogW1xuICAgIHsgc3RhcnQ6IGxpc3RlbmVyLCBtb3ZlOiBsaXN0ZW5lciB9LFxuICBdLFxufSlcblxuaW50ZXJhY3QodGFyZ2V0KS5kcmFnZ2FibGUoe1xuICBsaXN0ZW5lcnM6IHsgc3RhcnQ6IGxpc3RlbmVyLCBlbmQ6IGxpc3RlbmVyIH0sXG59KVxuXG5pbnRlcmFjdCh0YXJnZXQpLmRyYWdnYWJsZSh7XG4gIG9uc3RhcnQ6IGxpc3RlbmVyLFxuICBvbm1vdmU6IGxpc3RlbmVyLFxuICBvbmVuZDogbGlzdGVuZXIsXG59KVxuXG5pbnRlcmFjdC5vbihbJ2RyYWdtb3ZlJywgJ3Jlc2l6ZXN0YXJ0J10sIGxpc3RlbmVyKVxuXG5jb25zdCBkcm9wVGFyZ2V0ID0gJ2Rpdidcbi8vIERyb3AgRXZlbnRzXG5pbnRlcmFjdChkcm9wVGFyZ2V0KVxuICAuZHJvcHpvbmUoe1xuICAgIG9uZHJvcCAoZXZlbnQpIHtcbiAgICAgIGFsZXJ0KGV2ZW50LnJlbGF0ZWRUYXJnZXQuaWQgK1xuICAgICAgICAgICAgJyB3YXMgZHJvcHBlZCBpbnRvICcgK1xuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmlkKVxuICAgIH0sXG4gIH0pXG4gIC5vbignZHJvcGFjdGl2YXRlJywgZXZlbnQgPT4ge1xuICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdkcm9wLWFjdGl2YXRlZCcpXG4gIH0pXG5cbmludGVyYWN0KHRhcmdldCkub24oJ3VwJywgX2V2ZW50ID0+IHt9KVxuXG4vLyBmYXN0IGNsaWNrXG5pbnRlcmFjdCgnYVtocmVmXScpLm9uKCd0YXAnLCBldmVudCA9PiB7XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZXZlbnQuY3VycmVudFRhcmdldC5ocmVmXG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxufSlcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=interactjs-test.js.map \ No newline at end of file diff --git a/packages/types/interactjs-test.js.map b/packages/types/interactjs-test.js.map new file mode 100644 index 000000000..e6a99467b --- /dev/null +++ b/packages/types/interactjs-test.js.map @@ -0,0 +1,106 @@ +{ + "version": 3, + "sources": [ + "interactjs-test.ts" + ], + "names": [ + "interact", + "document", + "body", + "window", + "draggable", + "modifiers", + "snap", + "targets", + "x", + "y", + "offset", + "relativePoints", + "endOnly", + "snapSize", + "restrictRect", + "restriction", + "restrict", + "_", + "top", + "left", + "bottom", + "right", + "restrictSize", + "min", + "max", + "restrictEdges", + "inner", + "outer", + "resizable", + "inertia", + "myList", + "querySelector", + "context", + "target", + "maxPerElement", + "manualStart", + "autoScroll", + "lockAxis", + "startAxis", + "margin", + "square", + "axis", + "gesturable", + "element", + "container", + "distance", + "interval", + "handleEl", + "edges", + "invert", + "squareResize", + "dropzone", + "accept", + "overlap", + "checker", + "_dragEvent", + "_event", + "dropped", + "_dropzone", + "dropElement", + "_draggable", + "_draggableElement", + "hasChildNodes", + "dynamicDrop", + "listener", + "event", + "type", + "pageX", + "pageY", + "alert", + "on", + "gesturestart", + "gestureend", + "rect", + "deltaRect", + "JSON", + "stringify", + "listeners", + "start", + "move", + "end", + "onstart", + "onmove", + "onend", + "dropTarget", + "ondrop", + "relatedTarget", + "id", + "classList", + "add", + "location", + "href", + "currentTarget", + "preventDefault" + ], + "mappings": "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", + "sourcesContent": [ + "// eslint-disable-next-line node/no-extraneous-import\nimport interact from '../interactjs/index'\n\n// Interactables\ninteract(document.body)\ninteract(document)\ninteract(window)\n\ninteract('.drag-and-resize')\n .draggable({\n modifiers: [\n interact.modifiers.snap({\n targets: [\n { x: 100, y: 200 },\n (x: number, y: number) => ({ x: x % 20, y }),\n ],\n offset: 'startCoords',\n relativePoints: [{ x: 0, y: 1 }],\n endOnly: true,\n }),\n interact.modifiers.snapSize({\n targets: [\n { x: 100, y: 200 },\n (x: number, y: number) => ({ x: x % 20, y }),\n ],\n endOnly: true,\n }),\n interact.modifiers.restrictRect({\n restriction: 'parent',\n endOnly: true,\n }),\n interact.modifiers.restrict({\n restriction: _ => ({ top: 0, left: 0, bottom: 1, right: 1 }),\n }),\n interact.modifiers.restrict({\n restriction: _ => document.body,\n }),\n interact.modifiers.restrictSize({\n min: document.body,\n max: 'parent',\n }),\n interact.modifiers.restrictEdges({\n inner: document.body,\n outer: 'parent',\n }),\n ],\n })\n .resizable({\n inertia: true,\n })\n\n// Selector context\nconst myList: HTMLElement | SVGElement = document.querySelector('#my-list')\n\ninteract('li', {\n context: myList,\n})\n .draggable({ /* ... */ })\n\n// Action options\nconst target = 'li'\ninteract(target)\n .draggable({\n max : 1,\n maxPerElement: 2,\n manualStart : true,\n modifiers : [],\n inertia : {/* ... */},\n autoScroll : {/* ... */},\n\n lockAxis : 'x' || 'y' || 'start',\n startAxis : 'x' || 'y',\n })\n .resizable({\n max : 1,\n maxPerElement: 2,\n manualStart : true,\n modifiers : [],\n inertia : {/* ... */},\n autoScroll : {/* ... */},\n margin : 50,\n\n square : true || false,\n axis : 'x' || 'y',\n })\n .gesturable({\n max : 1,\n maxPerElement: 2,\n manualStart : true,\n modifiers : [],\n })\n\n// autoscroll\nconst element = 'li'\ninteract(element)\n .draggable({\n autoScroll: true,\n })\n .resizable({\n autoScroll: {\n container: document.body,\n margin: 50,\n distance: 5,\n interval: 10,\n },\n })\n\n// axis\ninteract(target).draggable({\n startAxis: 'x',\n lockAxis: 'y',\n}).draggable({\n startAxis: 'xy',\n lockAxis: 'x',\n})\n\ninteract(target).resizable({\n axis: 'x',\n})\n\nconst handleEl = 'li'\ninteract(target).resizable({\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\n// resize invert\ninteract(target).resizable({\n edges: { bottom: true, right: true },\n invert: 'reposition',\n})\n\n// resize square\ninteract(target).resizable({\n squareResize: true,\n})\n\n// dropzone accept\ninteract(target).dropzone({\n accept: '.drag0, .drag1',\n})\n\n// dropzone overlap\ninteract(target).dropzone({\n overlap: 0.25,\n})\n\n// dropzone checker\ninteract(target).dropzone({\n checker (\n _dragEvent: Interact.Element, // related dragmove or dragend\n _event: Event, // Touch, Pointer or Mouse Event\n dropped: boolean, // bool default checker result\n _dropzone: Interact.Interactable, // dropzone Interactable\n dropElement: Interact.Element, // dropzone elemnt\n _draggable: Interact.Interactable, // draggable Interactable\n _draggableElement: Interact.Element) { // draggable element\n // only allow drops into empty dropzone elements\n return dropped && !dropElement.hasChildNodes()\n },\n})\n\ninteract.dynamicDrop()\ninteract.dynamicDrop(false)\n\n// Events\nfunction listener (event) {\n const { type, pageX, pageY } = event\n alert({ type, pageX, pageY })\n}\n\ninteract(target)\n .on('dragstart', listener)\n .on('dragmove dragend', listener)\n .on(['resizemove', 'resizeend'], listener)\n .on({\n gesturestart: listener,\n gestureend: listener,\n })\n\ninteract.on('resize', (event: Interact.ResizeEvent) => {\n const { rect, deltaRect } = event\n alert(JSON.stringify({ rect, deltaRect }))\n})\n\ninteract(target).resizable({\n listeners: [\n { start: listener, move: listener },\n ],\n})\n\ninteract(target).draggable({\n listeners: { start: listener, end: listener },\n})\n\ninteract(target).draggable({\n onstart: listener,\n onmove: listener,\n onend: listener,\n})\n\ninteract.on(['dragmove', 'resizestart'], listener)\n\nconst dropTarget = 'div'\n// Drop Events\ninteract(dropTarget)\n .dropzone({\n ondrop (event) {\n alert(event.relatedTarget.id +\n ' was dropped into ' +\n event.target.id)\n },\n })\n .on('dropactivate', event => {\n event.target.classList.add('drop-activated')\n })\n\ninteract(target).on('up', _event => {})\n\n// fast click\ninteract('a[href]').on('tap', event => {\n window.location.href = event.currentTarget.href\n\n event.preventDefault()\n})\n" + ] +} \ No newline at end of file diff --git a/packages/types/types.spec.js b/packages/types/types.spec.js deleted file mode 100644 index d73a44617..000000000 --- a/packages/types/types.spec.js +++ /dev/null @@ -1,19 +0,0 @@ -import { JSDOM } from '@interactjs/_dev/test/domator'; -import test from '@interactjs/_dev/test/test'; -test('typings', async (t) => { - let error; - const { window } = new JSDOM(''); - global.window = window; - global.document = window.document; - try { - require('./interactjs-test'); - } - catch (e) { - error = e; - } - delete global.window; - delete global.document; - t.error(error, 'interactjs-test.ts compiles without error'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGVzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ3JELE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBRTdDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFO0lBQ3hCLElBQUksS0FBSyxDQUFBO0lBRVQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUUvQjtJQUFDLE1BQWMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUMvQjtJQUFDLE1BQWMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtJQUUzQyxJQUFJO1FBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUE7S0FBRTtJQUNwQyxPQUFPLENBQUMsRUFBRTtRQUFFLEtBQUssR0FBRyxDQUFDLENBQUE7S0FBRTtJQUV2QixPQUFRLE1BQWMsQ0FBQyxNQUFNLENBQUE7SUFDN0IsT0FBUSxNQUFjLENBQUMsUUFBUSxDQUFBO0lBRS9CLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLDJDQUEyQyxDQUFDLENBQUE7SUFDM0QsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKU0RPTSB9IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC9kb21hdG9yJ1xuaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5cbnRlc3QoJ3R5cGluZ3MnLCBhc3luYyB0ID0+IHtcbiAgbGV0IGVycm9yXG5cbiAgY29uc3QgeyB3aW5kb3cgfSA9IG5ldyBKU0RPTSgnJylcblxuICA7KGdsb2JhbCBhcyBhbnkpLndpbmRvdyA9IHdpbmRvd1xuICA7KGdsb2JhbCBhcyBhbnkpLmRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50XG5cbiAgdHJ5IHsgcmVxdWlyZSgnLi9pbnRlcmFjdGpzLXRlc3QnKSB9XG4gIGNhdGNoIChlKSB7IGVycm9yID0gZSB9XG5cbiAgZGVsZXRlIChnbG9iYWwgYXMgYW55KS53aW5kb3dcbiAgZGVsZXRlIChnbG9iYWwgYXMgYW55KS5kb2N1bWVudFxuXG4gIHQuZXJyb3IoZXJyb3IsICdpbnRlcmFjdGpzLXRlc3QudHMgY29tcGlsZXMgd2l0aG91dCBlcnJvcicpXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/utils/Signals.js b/packages/utils/Signals.js deleted file mode 100644 index 74eb8fe6f..000000000 --- a/packages/utils/Signals.js +++ /dev/null @@ -1,34 +0,0 @@ -class Signals { - constructor() { - this.listeners = {}; - } - on(name, listener) { - if (!this.listeners[name]) { - this.listeners[name] = [listener]; - return; - } - this.listeners[name].push(listener); - } - off(name, listener) { - if (!this.listeners[name]) { - return; - } - const index = this.listeners[name].indexOf(listener); - if (index !== -1) { - this.listeners[name].splice(index, 1); - } - } - fire(name, arg) { - const targetListeners = this.listeners[name]; - if (!targetListeners) { - return; - } - for (const listener of targetListeners) { - if (listener(arg, name) === false) { - return false; - } - } - } -} -export default Signals; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlNpZ25hbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxPQUFPO0lBQWI7UUFDRSxjQUFTLEdBRUwsRUFBRSxDQUFBO0lBZ0NSLENBQUM7SUE5QkMsRUFBRSxDQUFFLElBQVksRUFBRSxRQUF3QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDakMsT0FBTTtTQUNQO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELEdBQUcsQ0FBRSxJQUFZLEVBQUUsUUFBd0I7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFcEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBRSxJQUFZLEVBQUUsR0FBdUI7UUFDekMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU1QyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRWhDLEtBQUssTUFBTSxRQUFRLElBQUksZUFBZSxFQUFFO1lBQ3RDLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQ2pDLE9BQU8sS0FBSyxDQUFBO2FBQ2I7U0FDRjtJQUNILENBQUM7Q0FDRjtBQUVELGVBQWUsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgU2lnbmFsTGlzdGVuZXIgPSAoc2lnbmFsQXJnOiBQYXJ0aWFsU2lnbmFsQXJnLCBzaW5hbE5hbWU/OiBzdHJpbmcpID0+ICh2b2lkIHwgYm9vbGVhbilcblxuZXhwb3J0IGludGVyZmFjZSBTaWduYWxBcmc8VCBleHRlbmRzIEludGVyYWN0LkFjdGlvbk5hbWUgPSBhbnk+IHtcbiAgaW50ZXJhY3Rpb246IEludGVyYWN0LkludGVyYWN0aW9uPFQ+XG4gIGludGVyYWN0YWJsZTogSW50ZXJhY3QuSW50ZXJhY3RhYmxlXG4gIGlFdmVudDogSW50ZXJhY3QuSW50ZXJhY3RFdmVudDxUPlxuICBlbGVtZW50OiBJbnRlcmFjdC5FdmVudFRhcmdldFxuICBjb29yZHM6IEludGVyYWN0LlBvaW50XG4gIGV2ZW50OiBJbnRlcmFjdC5Qb2ludGVyRXZlbnRUeXBlXG4gIHBoYXNlOiBJbnRlcmFjdC5FdmVudFBoYXNlXG4gIFtpbmRleDogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxTaWduYWxBcmcgPSBQYXJ0aWFsPFNpZ25hbEFyZz5cblxuY2xhc3MgU2lnbmFscyB7XG4gIGxpc3RlbmVyczoge1xuICAgIFtzaWduYWxOYW1lOiBzdHJpbmddOiBTaWduYWxMaXN0ZW5lcltdXG4gIH0gPSB7fVxuXG4gIG9uIChuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBTaWduYWxMaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZV0pIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVdID0gW2xpc3RlbmVyXVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5saXN0ZW5lcnNbbmFtZV0ucHVzaChsaXN0ZW5lcilcbiAgfVxuXG4gIG9mZiAobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogU2lnbmFsTGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVdKSB7IHJldHVybiB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzW25hbWVdLmluZGV4T2YobGlzdGVuZXIpXG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lXS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG5cbiAgZmlyZSAobmFtZTogc3RyaW5nLCBhcmc6IFBhcnRpYWw8U2lnbmFsQXJnPik6IHZvaWQgfCBmYWxzZSB7XG4gICAgY29uc3QgdGFyZ2V0TGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbbmFtZV1cblxuICAgIGlmICghdGFyZ2V0TGlzdGVuZXJzKSB7IHJldHVybiB9XG5cbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRhcmdldExpc3RlbmVycykge1xuICAgICAgaWYgKGxpc3RlbmVyKGFyZywgbmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWduYWxzXG4iXX0= \ No newline at end of file diff --git a/packages/utils/arr.js b/packages/utils/arr.js index 309bc66b4..81f52fea2 100644 --- a/packages/utils/arr.js +++ b/packages/utils/arr.js @@ -1,27 +1,29 @@ export function contains(array, target) { - return array.indexOf(target) !== -1; + return array.indexOf(target) !== -1; } export function remove(array, target) { - return array.splice(array.indexOf(target), 1); + return array.splice(array.indexOf(target), 1); } export function merge(target, source) { - for (const item of source) { - target.push(item); - } - return target; + for (const item of source) { + target.push(item); + } + + return target; } export function from(source) { - return merge([], source); + return merge([], source); } export function findIndex(array, func) { - for (let i = 0; i < array.length; i++) { - if (func(array[i], i, array)) { - return i; - } + for (let i = 0; i < array.length; i++) { + if (func(array[i], i, array)) { + return i; } - return -1; + } + + return -1; } export function find(array, func) { - return array[findIndex(array, func)]; + return array[findIndex(array, func)]; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxRQUFRLENBQUUsS0FBSyxFQUFFLE1BQU07SUFDckMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3JDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFFLEtBQUssRUFBRSxNQUFNO0lBQ25DLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFFLE1BQU0sRUFBRSxNQUFNO0lBQ25DLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDbEI7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFFLE1BQU07SUFDMUIsT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFFLEtBQUssRUFBRSxJQUFJO0lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxDQUFDLENBQUE7U0FDVDtLQUNGO0lBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFFLEtBQUssRUFBRSxJQUFJO0lBQy9CLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zIChhcnJheSwgdGFyZ2V0KSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKHRhcmdldCkgIT09IC0xXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmUgKGFycmF5LCB0YXJnZXQpIHtcbiAgcmV0dXJuIGFycmF5LnNwbGljZShhcnJheS5pbmRleE9mKHRhcmdldCksIDEpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIHNvdXJjZSkge1xuICAgIHRhcmdldC5wdXNoKGl0ZW0pXG4gIH1cblxuICByZXR1cm4gdGFyZ2V0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tIChzb3VyY2UpIHtcbiAgcmV0dXJuIG1lcmdlKFtdLCBzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW5kZXggKGFycmF5LCBmdW5jKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZnVuYyhhcnJheVtpXSwgaSwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZCAoYXJyYXksIGZ1bmMpIHtcbiAgcmV0dXJuIGFycmF5W2ZpbmRJbmRleChhcnJheSwgZnVuYyldXG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=arr.js.map \ No newline at end of file diff --git a/packages/utils/arr.js.map b/packages/utils/arr.js.map new file mode 100644 index 000000000..b79bdfc9d --- /dev/null +++ b/packages/utils/arr.js.map @@ -0,0 +1,28 @@ +{ + "version": 3, + "sources": [ + "arr.ts" + ], + "names": [ + "contains", + "array", + "target", + "indexOf", + "remove", + "splice", + "merge", + "source", + "item", + "push", + "from", + "findIndex", + "func", + "i", + "length", + "find" + ], + "mappings": "AAAA,OAAO,SAASA,QAAT,CAAmBC,KAAnB,EAA0BC,MAA1B,EAAkC;AACvC,SAAOD,KAAK,CAACE,OAAN,CAAcD,MAAd,MAA0B,CAAC,CAAlC;AACD;AAED,OAAO,SAASE,MAAT,CAAiBH,KAAjB,EAAwBC,MAAxB,EAAgC;AACrC,SAAOD,KAAK,CAACI,MAAN,CAAaJ,KAAK,CAACE,OAAN,CAAcD,MAAd,CAAb,EAAoC,CAApC,CAAP;AACD;AAED,OAAO,SAASI,KAAT,CAAgBJ,MAAhB,EAAwBK,MAAxB,EAAgC;AACrC,OAAK,MAAMC,IAAX,IAAmBD,MAAnB,EAA2B;AACzBL,IAAAA,MAAM,CAACO,IAAP,CAAYD,IAAZ;AACD;;AAED,SAAON,MAAP;AACD;AAED,OAAO,SAASQ,IAAT,CAAeH,MAAf,EAAuB;AAC5B,SAAOD,KAAK,CAAC,EAAD,EAAKC,MAAL,CAAZ;AACD;AAED,OAAO,SAASI,SAAT,CAAoBV,KAApB,EAA2BW,IAA3B,EAAiC;AACtC,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGZ,KAAK,CAACa,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;AACrC,QAAID,IAAI,CAACX,KAAK,CAACY,CAAD,CAAN,EAAWA,CAAX,EAAcZ,KAAd,CAAR,EAA8B;AAC5B,aAAOY,CAAP;AACD;AACF;;AAED,SAAO,CAAC,CAAR;AACD;AAED,OAAO,SAASE,IAAT,CAAed,KAAf,EAAsBW,IAAtB,EAA4B;AACjC,SAAOX,KAAK,CAACU,SAAS,CAACV,KAAD,EAAQW,IAAR,CAAV,CAAZ;AACD", + "sourcesContent": [ + "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" + ] +} \ No newline at end of file diff --git a/packages/utils/browser.js b/packages/utils/browser.js index 2acfb8e5f..9cfb27f8c 100644 --- a/packages/utils/browser.js +++ b/packages/utils/browser.js @@ -1,66 +1,52 @@ -import domObjects from './domObjects'; -import * as is from './is'; -import win from './window'; +import domObjects from "./domObjects.js"; +import * as is from "./is.js"; +import win from "./window.js"; const browser = { - init, - supportsTouch: null, - supportsPointerEvent: null, - isIOS7: null, - isIOS: null, - isIe9: null, - isOperaMobile: null, - prefixedMatchesSelector: null, - pEventTypes: null, - wheelEvent: null, + init, + supportsTouch: null, + supportsPointerEvent: null, + isIOS7: null, + isIOS: null, + isIe9: null, + isOperaMobile: null, + prefixedMatchesSelector: null, + pEventTypes: null, + wheelEvent: null }; + function init(window) { - const Element = domObjects.Element; - const navigator = win.window.navigator; - // Does the browser support touch input? - browser.supportsTouch = ('ontouchstart' in window) || - (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch); - // Does the browser support PointerEvents - browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent; - browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform)); - // scrolling doesn't change the result of getClientRects on iOS 7 - browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) && - /OS 7[^\d]/.test(navigator.appVersion)); - browser.isIe9 = /MSIE 9/.test(navigator.userAgent); - // Opera Mobile must be handled differently - browser.isOperaMobile = (navigator.appName === 'Opera' && - browser.supportsTouch && - /Presto/.test(navigator.userAgent)); - // prefix matchesSelector - browser.prefixedMatchesSelector = 'matches' in Element.prototype - ? 'matches' - : 'webkitMatchesSelector' in Element.prototype - ? 'webkitMatchesSelector' - : 'mozMatchesSelector' in Element.prototype - ? 'mozMatchesSelector' - : 'oMatchesSelector' in Element.prototype - ? 'oMatchesSelector' - : 'msMatchesSelector'; - browser.pEventTypes = (browser.supportsPointerEvent - ? (domObjects.PointerEvent === window.MSPointerEvent - ? { - up: 'MSPointerUp', - down: 'MSPointerDown', - over: 'mouseover', - out: 'mouseout', - move: 'MSPointerMove', - cancel: 'MSPointerCancel', - } - : { - up: 'pointerup', - down: 'pointerdown', - over: 'pointerover', - out: 'pointerout', - move: 'pointermove', - cancel: 'pointercancel', - }) - : null); - // because Webkit and Opera still use 'mousewheel' event type - browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'; + const Element = domObjects.Element; + const navigator = win.window.navigator; // Does the browser support touch input? + + browser.supportsTouch = 'ontouchstart' in window || is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch; // Does the browser support PointerEvents + + browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent; + browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform); // scrolling doesn't change the result of getClientRects on iOS 7 + + browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\d]/.test(navigator.appVersion); + browser.isIe9 = /MSIE 9/.test(navigator.userAgent); // Opera Mobile must be handled differently + + browser.isOperaMobile = navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent); // prefix matchesSelector + + browser.prefixedMatchesSelector = 'matches' in Element.prototype ? 'matches' : 'webkitMatchesSelector' in Element.prototype ? 'webkitMatchesSelector' : 'mozMatchesSelector' in Element.prototype ? 'mozMatchesSelector' : 'oMatchesSelector' in Element.prototype ? 'oMatchesSelector' : 'msMatchesSelector'; + browser.pEventTypes = browser.supportsPointerEvent ? domObjects.PointerEvent === window.MSPointerEvent ? { + up: 'MSPointerUp', + down: 'MSPointerDown', + over: 'mouseover', + out: 'mouseout', + move: 'MSPointerMove', + cancel: 'MSPointerCancel' + } : { + up: 'pointerup', + down: 'pointerdown', + over: 'pointerover', + out: 'pointerout', + move: 'pointermove', + cancel: 'pointercancel' + } : null; // because Webkit and Opera still use 'mousewheel' event type + + browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'; } + export default browser; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxVQUFVLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFCLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUUxQixNQUFNLE9BQU8sR0FBRztJQUNkLElBQUk7SUFDSixhQUFhLEVBQUUsSUFBZTtJQUM5QixvQkFBb0IsRUFBRSxJQUFlO0lBQ3JDLE1BQU0sRUFBRSxJQUFlO0lBQ3ZCLEtBQUssRUFBRSxJQUFlO0lBQ3RCLEtBQUssRUFBRSxJQUFlO0lBQ3RCLGFBQWEsRUFBRSxJQUFlO0lBQzlCLHVCQUF1QixFQUFFLElBQWM7SUFDdkMsV0FBVyxFQUFFLElBT1o7SUFDRCxVQUFVLEVBQUUsSUFBYztDQUMzQixDQUFBO0FBRUQsU0FBUyxJQUFJLENBQUUsTUFBTTtJQUNuQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFBO0lBQ2xDLE1BQU0sU0FBUyxHQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFBO0lBRXZDLHdDQUF3QztJQUN4QyxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQztRQUNoRCxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFlBQVksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRXhGLHlDQUF5QztJQUN6QyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLGNBQWMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUE7SUFFOUYsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUUzRCxpRUFBaUU7SUFDakUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFFaEQsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUVsRCwyQ0FBMkM7SUFDM0MsT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEtBQUssT0FBTztRQUNwRCxPQUFPLENBQUMsYUFBYTtRQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBRXJDLHlCQUF5QjtJQUN6QixPQUFPLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTO1FBQzlELENBQUMsQ0FBQyxTQUFTO1FBQ1gsQ0FBQyxDQUFDLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxTQUFTO1lBQzVDLENBQUMsQ0FBQyx1QkFBdUI7WUFDekIsQ0FBQyxDQUFDLG9CQUFvQixJQUFJLE9BQU8sQ0FBQyxTQUFTO2dCQUN6QyxDQUFDLENBQUMsb0JBQW9CO2dCQUN0QixDQUFDLENBQUMsa0JBQWtCLElBQUksT0FBTyxDQUFDLFNBQVM7b0JBQ3ZDLENBQUMsQ0FBQyxrQkFBa0I7b0JBQ3BCLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQTtJQUU3QixPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtRQUNqRCxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxjQUFjO1lBQ2xELENBQUMsQ0FBQztnQkFDQSxFQUFFLEVBQU0sYUFBYTtnQkFDckIsSUFBSSxFQUFJLGVBQWU7Z0JBQ3ZCLElBQUksRUFBSSxXQUFXO2dCQUNuQixHQUFHLEVBQUssVUFBVTtnQkFDbEIsSUFBSSxFQUFJLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxpQkFBaUI7YUFDMUI7WUFDRCxDQUFDLENBQUM7Z0JBQ0EsRUFBRSxFQUFNLFdBQVc7Z0JBQ25CLElBQUksRUFBSSxhQUFhO2dCQUNyQixJQUFJLEVBQUksYUFBYTtnQkFDckIsR0FBRyxFQUFLLFlBQVk7Z0JBQ3BCLElBQUksRUFBSSxhQUFhO2dCQUNyQixNQUFNLEVBQUUsZUFBZTthQUN4QixDQUFDO1FBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRVQsNkRBQTZEO0lBQzdELE9BQU8sQ0FBQyxVQUFVLEdBQUcsY0FBYyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO0FBQ3JGLENBQUM7QUFFRCxlQUFlLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb21PYmplY3RzIGZyb20gJy4vZG9tT2JqZWN0cydcbmltcG9ydCAqIGFzIGlzIGZyb20gJy4vaXMnXG5pbXBvcnQgd2luIGZyb20gJy4vd2luZG93J1xuXG5jb25zdCBicm93c2VyID0ge1xuICBpbml0LFxuICBzdXBwb3J0c1RvdWNoOiBudWxsIGFzIGJvb2xlYW4sXG4gIHN1cHBvcnRzUG9pbnRlckV2ZW50OiBudWxsIGFzIGJvb2xlYW4sXG4gIGlzSU9TNzogbnVsbCBhcyBib29sZWFuLFxuICBpc0lPUzogbnVsbCBhcyBib29sZWFuLFxuICBpc0llOTogbnVsbCBhcyBib29sZWFuLFxuICBpc09wZXJhTW9iaWxlOiBudWxsIGFzIGJvb2xlYW4sXG4gIHByZWZpeGVkTWF0Y2hlc1NlbGVjdG9yOiBudWxsIGFzIHN0cmluZyxcbiAgcEV2ZW50VHlwZXM6IG51bGwgYXMge1xuICAgIHVwOiBzdHJpbmdcbiAgICBkb3duOiBzdHJpbmdcbiAgICBvdmVyOiBzdHJpbmdcbiAgICBvdXQ6IHN0cmluZ1xuICAgIG1vdmU6IHN0cmluZ1xuICAgIGNhbmNlbDogc3RyaW5nXG4gIH0sXG4gIHdoZWVsRXZlbnQ6IG51bGwgYXMgc3RyaW5nLFxufVxuXG5mdW5jdGlvbiBpbml0ICh3aW5kb3cpIHtcbiAgY29uc3QgRWxlbWVudCA9IGRvbU9iamVjdHMuRWxlbWVudFxuICBjb25zdCBuYXZpZ2F0b3IgID0gd2luLndpbmRvdy5uYXZpZ2F0b3JcblxuICAvLyBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgdG91Y2ggaW5wdXQ/XG4gIGJyb3dzZXIuc3VwcG9ydHNUb3VjaCA9ICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHx8XG4gICAgKGlzLmZ1bmMod2luZG93LkRvY3VtZW50VG91Y2gpICYmIGRvbU9iamVjdHMuZG9jdW1lbnQgaW5zdGFuY2VvZiB3aW5kb3cuRG9jdW1lbnRUb3VjaClcblxuICAvLyBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgUG9pbnRlckV2ZW50c1xuICBicm93c2VyLnN1cHBvcnRzUG9pbnRlckV2ZW50ID0gbmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkICE9PSBmYWxzZSAmJiAhIWRvbU9iamVjdHMuUG9pbnRlckV2ZW50XG5cbiAgYnJvd3Nlci5pc0lPUyA9ICgvaVAoaG9uZXxvZHxhZCkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSlcblxuICAvLyBzY3JvbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cyBvbiBpT1MgN1xuICBicm93c2VyLmlzSU9TNyA9ICgvaVAoaG9uZXxvZHxhZCkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSAmJlxuICAgICAgICAgICAvT1MgN1teXFxkXS8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbikpXG5cbiAgYnJvd3Nlci5pc0llOSA9IC9NU0lFIDkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudClcblxuICAvLyBPcGVyYSBNb2JpbGUgbXVzdCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5XG4gIGJyb3dzZXIuaXNPcGVyYU1vYmlsZSA9IChuYXZpZ2F0b3IuYXBwTmFtZSA9PT0gJ09wZXJhJyAmJlxuICAgIGJyb3dzZXIuc3VwcG9ydHNUb3VjaCAmJlxuICAgIC9QcmVzdG8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG5cbiAgLy8gcHJlZml4IG1hdGNoZXNTZWxlY3RvclxuICBicm93c2VyLnByZWZpeGVkTWF0Y2hlc1NlbGVjdG9yID0gJ21hdGNoZXMnIGluIEVsZW1lbnQucHJvdG90eXBlXG4gICAgPyAnbWF0Y2hlcydcbiAgICA6ICd3ZWJraXRNYXRjaGVzU2VsZWN0b3InIGluIEVsZW1lbnQucHJvdG90eXBlXG4gICAgICA/ICd3ZWJraXRNYXRjaGVzU2VsZWN0b3InXG4gICAgICA6ICdtb3pNYXRjaGVzU2VsZWN0b3InIGluIEVsZW1lbnQucHJvdG90eXBlXG4gICAgICAgID8gJ21vek1hdGNoZXNTZWxlY3RvcidcbiAgICAgICAgOiAnb01hdGNoZXNTZWxlY3RvcicgaW4gRWxlbWVudC5wcm90b3R5cGVcbiAgICAgICAgICA/ICdvTWF0Y2hlc1NlbGVjdG9yJ1xuICAgICAgICAgIDogJ21zTWF0Y2hlc1NlbGVjdG9yJ1xuXG4gIGJyb3dzZXIucEV2ZW50VHlwZXMgPSAoYnJvd3Nlci5zdXBwb3J0c1BvaW50ZXJFdmVudFxuICAgID8gKGRvbU9iamVjdHMuUG9pbnRlckV2ZW50ID09PSB3aW5kb3cuTVNQb2ludGVyRXZlbnRcbiAgICAgID8ge1xuICAgICAgICB1cDogICAgICdNU1BvaW50ZXJVcCcsXG4gICAgICAgIGRvd246ICAgJ01TUG9pbnRlckRvd24nLFxuICAgICAgICBvdmVyOiAgICdtb3VzZW92ZXInLFxuICAgICAgICBvdXQ6ICAgICdtb3VzZW91dCcsXG4gICAgICAgIG1vdmU6ICAgJ01TUG9pbnRlck1vdmUnLFxuICAgICAgICBjYW5jZWw6ICdNU1BvaW50ZXJDYW5jZWwnLFxuICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgIHVwOiAgICAgJ3BvaW50ZXJ1cCcsXG4gICAgICAgIGRvd246ICAgJ3BvaW50ZXJkb3duJyxcbiAgICAgICAgb3ZlcjogICAncG9pbnRlcm92ZXInLFxuICAgICAgICBvdXQ6ICAgICdwb2ludGVyb3V0JyxcbiAgICAgICAgbW92ZTogICAncG9pbnRlcm1vdmUnLFxuICAgICAgICBjYW5jZWw6ICdwb2ludGVyY2FuY2VsJyxcbiAgICAgIH0pXG4gICAgOiBudWxsKVxuXG4gIC8vIGJlY2F1c2UgV2Via2l0IGFuZCBPcGVyYSBzdGlsbCB1c2UgJ21vdXNld2hlZWwnIGV2ZW50IHR5cGVcbiAgYnJvd3Nlci53aGVlbEV2ZW50ID0gJ29ubW91c2V3aGVlbCcgaW4gZG9tT2JqZWN0cy5kb2N1bWVudCA/ICdtb3VzZXdoZWVsJyA6ICd3aGVlbCdcbn1cblxuZXhwb3J0IGRlZmF1bHQgYnJvd3NlclxuIl19 \ No newline at end of file +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/packages/utils/browser.js.map b/packages/utils/browser.js.map new file mode 100644 index 000000000..7abab29fa --- /dev/null +++ b/packages/utils/browser.js.map @@ -0,0 +1,47 @@ +{ + "version": 3, + "sources": [ + "browser.ts" + ], + "names": [ + "domObjects", + "is", + "win", + "browser", + "init", + "supportsTouch", + "supportsPointerEvent", + "isIOS7", + "isIOS", + "isIe9", + "isOperaMobile", + "prefixedMatchesSelector", + "pEventTypes", + "wheelEvent", + "window", + "Element", + "navigator", + "func", + "DocumentTouch", + "document", + "pointerEnabled", + "PointerEvent", + "test", + "platform", + "appVersion", + "userAgent", + "appName", + "prototype", + "MSPointerEvent", + "up", + "down", + "over", + "out", + "move", + "cancel" + ], + "mappings": "AAAA,OAAOA,UAAP;AACA,OAAO,KAAKC,EAAZ;AACA,OAAOC,GAAP;AAEA,MAAMC,OAAO,GAAG;AACdC,EAAAA,IADc;AAEdC,EAAAA,aAAa,EAAE,IAFD;AAGdC,EAAAA,oBAAoB,EAAE,IAHR;AAIdC,EAAAA,MAAM,EAAE,IAJM;AAKdC,EAAAA,KAAK,EAAE,IALO;AAMdC,EAAAA,KAAK,EAAE,IANO;AAOdC,EAAAA,aAAa,EAAE,IAPD;AAQdC,EAAAA,uBAAuB,EAAE,IARX;AASdC,EAAAA,WAAW,EAAE,IATC;AAiBdC,EAAAA,UAAU,EAAE;AAjBE,CAAhB;;AAoBA,SAAST,IAAT,CAAeU,MAAf,EAAuB;AACrB,QAAMC,OAAO,GAAGf,UAAU,CAACe,OAA3B;AACA,QAAMC,SAAS,GAAId,GAAG,CAACY,MAAJ,CAAWE,SAA9B,CAFqB,CAIrB;;AACAb,EAAAA,OAAO,CAACE,aAAR,GAAyB,kBAAkBS,MAAnB,IACrBb,EAAE,CAACgB,IAAH,CAAQH,MAAM,CAACI,aAAf,KAAiClB,UAAU,CAACmB,QAAX,YAA+BL,MAAM,CAACI,aAD1E,CALqB,CAQrB;;AACAf,EAAAA,OAAO,CAACG,oBAAR,GAA+BU,SAAS,CAACI,cAAV,KAA6B,KAA7B,IAAsC,CAAC,CAACpB,UAAU,CAACqB,YAAlF;AAEAlB,EAAAA,OAAO,CAACK,KAAR,GAAiB,iBAAiBc,IAAjB,CAAsBN,SAAS,CAACO,QAAhC,CAAjB,CAXqB,CAarB;;AACApB,EAAAA,OAAO,CAACI,MAAR,GAAkB,iBAAiBe,IAAjB,CAAsBN,SAAS,CAACO,QAAhC,KACT,YAAYD,IAAZ,CAAiBN,SAAS,CAACQ,UAA3B,CADT;AAGArB,EAAAA,OAAO,CAACM,KAAR,GAAgB,SAASa,IAAT,CAAcN,SAAS,CAACS,SAAxB,CAAhB,CAjBqB,CAmBrB;;AACAtB,EAAAA,OAAO,CAACO,aAAR,GAAyBM,SAAS,CAACU,OAAV,KAAsB,OAAtB,IACvBvB,OAAO,CAACE,aADe,IAEvB,SAASiB,IAAT,CAAcN,SAAS,CAACS,SAAxB,CAFF,CApBqB,CAwBrB;;AACAtB,EAAAA,OAAO,CAACQ,uBAAR,GAAkC,aAAaI,OAAO,CAACY,SAArB,GAC9B,SAD8B,GAE9B,2BAA2BZ,OAAO,CAACY,SAAnC,GACE,uBADF,GAEE,wBAAwBZ,OAAO,CAACY,SAAhC,GACE,oBADF,GAEE,sBAAsBZ,OAAO,CAACY,SAA9B,GACE,kBADF,GAEE,mBARV;AAUAxB,EAAAA,OAAO,CAACS,WAAR,GAAuBT,OAAO,CAACG,oBAAR,GAClBN,UAAU,CAACqB,YAAX,KAA4BP,MAAM,CAACc,cAAnC,GACC;AACAC,IAAAA,EAAE,EAAM,aADR;AAEAC,IAAAA,IAAI,EAAI,eAFR;AAGAC,IAAAA,IAAI,EAAI,WAHR;AAIAC,IAAAA,GAAG,EAAK,UAJR;AAKAC,IAAAA,IAAI,EAAI,eALR;AAMAC,IAAAA,MAAM,EAAE;AANR,GADD,GASC;AACAL,IAAAA,EAAE,EAAM,WADR;AAEAC,IAAAA,IAAI,EAAI,aAFR;AAGAC,IAAAA,IAAI,EAAI,aAHR;AAIAC,IAAAA,GAAG,EAAK,YAJR;AAKAC,IAAAA,IAAI,EAAI,aALR;AAMAC,IAAAA,MAAM,EAAE;AANR,GAViB,GAkBnB,IAlBJ,CAnCqB,CAuDrB;;AACA/B,EAAAA,OAAO,CAACU,UAAR,GAAqB,kBAAkBb,UAAU,CAACmB,QAA7B,GAAwC,YAAxC,GAAuD,OAA5E;AACD;;AAED,eAAehB,OAAf", + "sourcesContent": [ + "import domObjects from './domObjects'\nimport * as is from './is'\nimport win from './window'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as string,\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init (window) {\n const Element = domObjects.Element\n const navigator = win.window.navigator\n\n // Does the browser support touch input?\n browser.supportsTouch = ('ontouchstart' in window) ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = (/iP(hone|od|ad)/.test(navigator.platform))\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform) &&\n /OS 7[^\\d]/.test(navigator.appVersion))\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile = (navigator.appName === 'Opera' &&\n browser.supportsTouch &&\n /Presto/.test(navigator.userAgent))\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n\n browser.pEventTypes = (browser.supportsPointerEvent\n ? (domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n })\n : null)\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n" + ] +} \ No newline at end of file diff --git a/packages/utils/clone.js b/packages/utils/clone.js index 38069bd1d..e10184d55 100644 --- a/packages/utils/clone.js +++ b/packages/utils/clone.js @@ -1,19 +1,20 @@ -import * as arr from './arr'; -import * as is from './is'; +import * as arr from "./arr.js"; +import * as is from "./is.js"; export default function clone(source) { - const dest = {}; - for (const prop in source) { - const value = source[prop]; - if (is.plainObject(value)) { - dest[prop] = clone(value); - } - else if (is.array(value)) { - dest[prop] = arr.from(value); - } - else { - dest[prop] = value; - } + const dest = {}; + + for (const prop in source) { + const value = source[prop]; + + if (is.plainObject(value)) { + dest[prop] = clone(value); + } else if (is.array(value)) { + dest[prop] = arr.from(value); + } else { + dest[prop] = value; } - return dest; + } + + return dest; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQTtBQUM1QixPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUUxQixNQUFNLENBQUMsT0FBTyxVQUFVLEtBQUssQ0FBb0MsTUFBUztJQUN4RSxNQUFNLElBQUksR0FBRyxFQUFnQixDQUFBO0lBRTdCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUUxQixJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQVEsQ0FBQTtTQUNqQzthQUNJLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUM3QjthQUNJO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTtTQUNuQjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXJyIGZyb20gJy4vYXJyJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnLi9pcydcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmU8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+IChzb3VyY2U6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgZGVzdCA9IHt9IGFzIFBhcnRpYWw8VD5cblxuICBmb3IgKGNvbnN0IHByb3AgaW4gc291cmNlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2VbcHJvcF1cblxuICAgIGlmIChpcy5wbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIGRlc3RbcHJvcF0gPSBjbG9uZSh2YWx1ZSkgYXMgYW55XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzLmFycmF5KHZhbHVlKSkge1xuICAgICAgZGVzdFtwcm9wXSA9IGFyci5mcm9tKHZhbHVlKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRlc3RbcHJvcF0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=clone.js.map \ No newline at end of file diff --git a/packages/utils/clone.js.map b/packages/utils/clone.js.map new file mode 100644 index 000000000..5cc190d47 --- /dev/null +++ b/packages/utils/clone.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "sources": [ + "clone.ts" + ], + "names": [ + "arr", + "is", + "clone", + "source", + "dest", + "prop", + "value", + "plainObject", + "array", + "from" + ], + "mappings": "AAAA,OAAO,KAAKA,GAAZ;AACA,OAAO,KAAKC,EAAZ;AAEA,eAAe,SAASC,KAAT,CAAkDC,MAAlD,EAAyE;AACtF,QAAMC,IAAI,GAAG,EAAb;;AAEA,OAAK,MAAMC,IAAX,IAAmBF,MAAnB,EAA2B;AACzB,UAAMG,KAAK,GAAGH,MAAM,CAACE,IAAD,CAApB;;AAEA,QAAIJ,EAAE,CAACM,WAAH,CAAeD,KAAf,CAAJ,EAA2B;AACzBF,MAAAA,IAAI,CAACC,IAAD,CAAJ,GAAaH,KAAK,CAACI,KAAD,CAAlB;AACD,KAFD,MAGK,IAAIL,EAAE,CAACO,KAAH,CAASF,KAAT,CAAJ,EAAqB;AACxBF,MAAAA,IAAI,CAACC,IAAD,CAAJ,GAAaL,GAAG,CAACS,IAAJ,CAASH,KAAT,CAAb;AACD,KAFI,MAGA;AACHF,MAAAA,IAAI,CAACC,IAAD,CAAJ,GAAaC,KAAb;AACD;AACF;;AAED,SAAOF,IAAP;AACD", + "sourcesContent": [ + "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" + ] +} \ No newline at end of file diff --git a/packages/utils/domObjects.js b/packages/utils/domObjects.js index 6b68cacd6..3e2665432 100644 --- a/packages/utils/domObjects.js +++ b/packages/utils/domObjects.js @@ -1,30 +1,33 @@ const domObjects = { - init, - document: null, - DocumentFragment: null, - SVGElement: null, - SVGSVGElement: null, - // eslint-disable-next-line no-undef - SVGElementInstance: null, - Element: null, - HTMLElement: null, - Event: null, - Touch: null, - PointerEvent: null, + init, + document: null, + DocumentFragment: null, + SVGElement: null, + SVGSVGElement: null, + // eslint-disable-next-line no-undef + SVGElementInstance: null, + Element: null, + HTMLElement: null, + Event: null, + Touch: null, + PointerEvent: null }; -function blank() { } + +function blank() {} + export default domObjects; + function init(window) { - const win = window; - domObjects.document = win.document; - domObjects.DocumentFragment = win.DocumentFragment || blank; - domObjects.SVGElement = win.SVGElement || blank; - domObjects.SVGSVGElement = win.SVGSVGElement || blank; - domObjects.SVGElementInstance = win.SVGElementInstance || blank; - domObjects.Element = win.Element || blank; - domObjects.HTMLElement = win.HTMLElement || domObjects.Element; - domObjects.Event = win.Event; - domObjects.Touch = win.Touch || blank; - domObjects.PointerEvent = (win.PointerEvent || win.MSPointerEvent); + const win = window; + domObjects.document = win.document; + domObjects.DocumentFragment = win.DocumentFragment || blank; + domObjects.SVGElement = win.SVGElement || blank; + domObjects.SVGSVGElement = win.SVGSVGElement || blank; + domObjects.SVGElementInstance = win.SVGElementInstance || blank; + domObjects.Element = win.Element || blank; + domObjects.HTMLElement = win.HTMLElement || domObjects.Element; + domObjects.Event = win.Event; + domObjects.Touch = win.Touch || blank; + domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tT2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRvbU9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLEdBYWhCO0lBQ0UsSUFBSTtJQUNKLFFBQVEsRUFBRSxJQUFXO0lBQ3JCLGdCQUFnQixFQUFFLElBQVc7SUFDN0IsVUFBVSxFQUFFLElBQVc7SUFDdkIsYUFBYSxFQUFFLElBQVc7SUFDMUIsb0NBQW9DO0lBQ3BDLGtCQUFrQixFQUFFLElBQVc7SUFDL0IsT0FBTyxFQUFFLElBQVc7SUFDcEIsV0FBVyxFQUFFLElBQVc7SUFDeEIsS0FBSyxFQUFFLElBQVc7SUFDbEIsS0FBSyxFQUFFLElBQVc7SUFDbEIsWUFBWSxFQUFFLElBQVc7Q0FDMUIsQ0FBQTtBQUVELFNBQVMsS0FBSyxLQUFLLENBQUM7QUFFcEIsZUFBZSxVQUFVLENBQUE7QUFFekIsU0FBUyxJQUFJLENBQUUsTUFBYztJQUMzQixNQUFNLEdBQUcsR0FBRyxNQUFhLENBQUE7SUFFekIsVUFBVSxDQUFDLFFBQVEsR0FBYSxHQUFHLENBQUMsUUFBUSxDQUFBO0lBQzVDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQU0sS0FBSyxDQUFBO0lBQy9ELFVBQVUsQ0FBQyxVQUFVLEdBQVcsR0FBRyxDQUFDLFVBQVUsSUFBWSxLQUFLLENBQUE7SUFDL0QsVUFBVSxDQUFDLGFBQWEsR0FBUSxHQUFHLENBQUMsYUFBYSxJQUFTLEtBQUssQ0FBQTtJQUMvRCxVQUFVLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQTtJQUMvRCxVQUFVLENBQUMsT0FBTyxHQUFjLEdBQUcsQ0FBQyxPQUFPLElBQWUsS0FBSyxDQUFBO0lBQy9ELFVBQVUsQ0FBQyxXQUFXLEdBQVUsR0FBRyxDQUFDLFdBQVcsSUFBVyxVQUFVLENBQUMsT0FBTyxDQUFBO0lBRTVFLFVBQVUsQ0FBQyxLQUFLLEdBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQTtJQUNuQyxVQUFVLENBQUMsS0FBSyxHQUFVLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFBO0lBQzVDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZG9tT2JqZWN0czoge1xuICBpbml0OiBhbnlcbiAgZG9jdW1lbnQ6IERvY3VtZW50XG4gIERvY3VtZW50RnJhZ21lbnQ6IHR5cGVvZiBEb2N1bWVudEZyYWdtZW50XG4gIFNWR0VsZW1lbnQ6IHR5cGVvZiBTVkdFbGVtZW50XG4gIFNWR1NWR0VsZW1lbnQ6IHR5cGVvZiBTVkdTVkdFbGVtZW50XG4gIFNWR0VsZW1lbnRJbnN0YW5jZTogYW55XG4gIEVsZW1lbnQ6IHR5cGVvZiBFbGVtZW50XG4gIEhUTUxFbGVtZW50OiB0eXBlb2YgSFRNTEVsZW1lbnRcbiAgRXZlbnQ6IHR5cGVvZiBFdmVudFxuICBUb3VjaDogdHlwZW9mIFRvdWNoXG4gIFBvaW50ZXJFdmVudDogdHlwZW9mIFBvaW50ZXJFdmVudFxufSA9XG57XG4gIGluaXQsXG4gIGRvY3VtZW50OiBudWxsIGFzIGFueSxcbiAgRG9jdW1lbnRGcmFnbWVudDogbnVsbCBhcyBhbnksXG4gIFNWR0VsZW1lbnQ6IG51bGwgYXMgYW55LFxuICBTVkdTVkdFbGVtZW50OiBudWxsIGFzIGFueSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFNWR0VsZW1lbnRJbnN0YW5jZTogbnVsbCBhcyBhbnksXG4gIEVsZW1lbnQ6IG51bGwgYXMgYW55LFxuICBIVE1MRWxlbWVudDogbnVsbCBhcyBhbnksXG4gIEV2ZW50OiBudWxsIGFzIGFueSxcbiAgVG91Y2g6IG51bGwgYXMgYW55LFxuICBQb2ludGVyRXZlbnQ6IG51bGwgYXMgYW55LFxufVxuXG5mdW5jdGlvbiBibGFuayAoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBkb21PYmplY3RzXG5cbmZ1bmN0aW9uIGluaXQgKHdpbmRvdzogV2luZG93KSB7XG4gIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyBhbnlcblxuICBkb21PYmplY3RzLmRvY3VtZW50ICAgICAgICAgICA9IHdpbi5kb2N1bWVudFxuICBkb21PYmplY3RzLkRvY3VtZW50RnJhZ21lbnQgICA9IHdpbi5Eb2N1bWVudEZyYWdtZW50ICAgfHwgYmxhbmtcbiAgZG9tT2JqZWN0cy5TVkdFbGVtZW50ICAgICAgICAgPSB3aW4uU1ZHRWxlbWVudCAgICAgICAgIHx8IGJsYW5rXG4gIGRvbU9iamVjdHMuU1ZHU1ZHRWxlbWVudCAgICAgID0gd2luLlNWR1NWR0VsZW1lbnQgICAgICB8fCBibGFua1xuICBkb21PYmplY3RzLlNWR0VsZW1lbnRJbnN0YW5jZSA9IHdpbi5TVkdFbGVtZW50SW5zdGFuY2UgfHwgYmxhbmtcbiAgZG9tT2JqZWN0cy5FbGVtZW50ICAgICAgICAgICAgPSB3aW4uRWxlbWVudCAgICAgICAgICAgIHx8IGJsYW5rXG4gIGRvbU9iamVjdHMuSFRNTEVsZW1lbnQgICAgICAgID0gd2luLkhUTUxFbGVtZW50ICAgICAgICB8fCBkb21PYmplY3RzLkVsZW1lbnRcblxuICBkb21PYmplY3RzLkV2ZW50ICAgICAgICA9IHdpbi5FdmVudFxuICBkb21PYmplY3RzLlRvdWNoICAgICAgICA9IHdpbi5Ub3VjaCB8fCBibGFua1xuICBkb21PYmplY3RzLlBvaW50ZXJFdmVudCA9ICh3aW4uUG9pbnRlckV2ZW50IHx8IHdpbi5NU1BvaW50ZXJFdmVudClcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=domObjects.js.map \ No newline at end of file diff --git a/packages/utils/domObjects.js.map b/packages/utils/domObjects.js.map new file mode 100644 index 000000000..5a4a97459 --- /dev/null +++ b/packages/utils/domObjects.js.map @@ -0,0 +1,28 @@ +{ + "version": 3, + "sources": [ + "domObjects.ts" + ], + "names": [ + "domObjects", + "init", + "document", + "DocumentFragment", + "SVGElement", + "SVGSVGElement", + "SVGElementInstance", + "Element", + "HTMLElement", + "Event", + "Touch", + "PointerEvent", + "blank", + "window", + "win", + "MSPointerEvent" + ], + "mappings": "AAAA,MAAMA,UAYL,GACD;AACEC,EAAAA,IADF;AAEEC,EAAAA,QAAQ,EAAE,IAFZ;AAGEC,EAAAA,gBAAgB,EAAE,IAHpB;AAIEC,EAAAA,UAAU,EAAE,IAJd;AAKEC,EAAAA,aAAa,EAAE,IALjB;AAME;AACAC,EAAAA,kBAAkB,EAAE,IAPtB;AAQEC,EAAAA,OAAO,EAAE,IARX;AASEC,EAAAA,WAAW,EAAE,IATf;AAUEC,EAAAA,KAAK,EAAE,IAVT;AAWEC,EAAAA,KAAK,EAAE,IAXT;AAYEC,EAAAA,YAAY,EAAE;AAZhB,CAbA;;AA4BA,SAASC,KAAT,GAAkB,CAAE;;AAEpB,eAAeZ,UAAf;;AAEA,SAASC,IAAT,CAAeY,MAAf,EAA+B;AAC7B,QAAMC,GAAG,GAAGD,MAAZ;AAEAb,EAAAA,UAAU,CAACE,QAAX,GAAgCY,GAAG,CAACZ,QAApC;AACAF,EAAAA,UAAU,CAACG,gBAAX,GAAgCW,GAAG,CAACX,gBAAJ,IAA0BS,KAA1D;AACAZ,EAAAA,UAAU,CAACI,UAAX,GAAgCU,GAAG,CAACV,UAAJ,IAA0BQ,KAA1D;AACAZ,EAAAA,UAAU,CAACK,aAAX,GAAgCS,GAAG,CAACT,aAAJ,IAA0BO,KAA1D;AACAZ,EAAAA,UAAU,CAACM,kBAAX,GAAgCQ,GAAG,CAACR,kBAAJ,IAA0BM,KAA1D;AACAZ,EAAAA,UAAU,CAACO,OAAX,GAAgCO,GAAG,CAACP,OAAJ,IAA0BK,KAA1D;AACAZ,EAAAA,UAAU,CAACQ,WAAX,GAAgCM,GAAG,CAACN,WAAJ,IAA0BR,UAAU,CAACO,OAArE;AAEAP,EAAAA,UAAU,CAACS,KAAX,GAA0BK,GAAG,CAACL,KAA9B;AACAT,EAAAA,UAAU,CAACU,KAAX,GAA0BI,GAAG,CAACJ,KAAJ,IAAaE,KAAvC;AACAZ,EAAAA,UAAU,CAACW,YAAX,GAA2BG,GAAG,CAACH,YAAJ,IAAoBG,GAAG,CAACC,cAAnD;AACD", + "sourcesContent": [ + "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" + ] +} \ No newline at end of file diff --git a/packages/utils/domUtils.d.ts b/packages/utils/domUtils.d.ts index 26f232519..54758dd95 100644 --- a/packages/utils/domUtils.d.ts +++ b/packages/utils/domUtils.d.ts @@ -1,4 +1,4 @@ -export declare function nodeContains(parent: Node, child: Node): boolean; +export declare function nodeContains(parent: Node | Interact.EventTarget, child: Node | Interact.EventTarget): boolean; export declare function closest(element: any, selector: any): import("../types/types").Element; export declare function parentNode(node: any): any; export declare function matchesSelector(element: any, selector: any): any; diff --git a/packages/utils/domUtils.js b/packages/utils/domUtils.js index 01fcd1d70..4ef91757f 100644 --- a/packages/utils/domUtils.js +++ b/packages/utils/domUtils.js @@ -1,200 +1,222 @@ -import browser from './browser'; -import domObjects from './domObjects'; -import * as is from './is'; -import win, { getWindow } from './window'; +import browser from "./browser.js"; +import domObjects from "./domObjects.js"; +import * as is from "./is.js"; +import win, { getWindow } from "./window.js"; export function nodeContains(parent, child) { - while (child) { - if (child === parent) { - return true; - } - child = child.parentNode; + while (child) { + if (child === parent) { + return true; } - return false; + + child = child.parentNode; + } + + return false; } export function closest(element, selector) { - while (is.element(element)) { - if (matchesSelector(element, selector)) { - return element; - } - element = parentNode(element); + while (is.element(element)) { + if (matchesSelector(element, selector)) { + return element; } - return null; + + element = parentNode(element); + } + + return null; } export function parentNode(node) { - let parent = node.parentNode; - if (is.docFrag(parent)) { - // skip past #shado-root fragments - // tslint:disable-next-line - while ((parent = parent.host) && is.docFrag(parent)) { - continue; - } - return parent; + let parent = node.parentNode; + + if (is.docFrag(parent)) { + // skip past #shado-root fragments + // tslint:disable-next-line + while ((parent = parent.host) && is.docFrag(parent)) { + continue; } + return parent; + } + + return parent; } export function matchesSelector(element, selector) { - // remove /deep/ from selectors if shadowDOM polyfill is used - if (win.window !== win.realWindow) { - selector = selector.replace(/\/deep\//g, ' '); - } - return element[browser.prefixedMatchesSelector](selector); + // remove /deep/ from selectors if shadowDOM polyfill is used + if (win.window !== win.realWindow) { + selector = selector.replace(/\/deep\//g, ' '); + } + + return element[browser.prefixedMatchesSelector](selector); } -const getParent = el => el.parentNode ? el.parentNode : el.host; -// Test for the element that's "above" all other qualifiers + +const getParent = el => el.parentNode ? el.parentNode : el.host; // Test for the element that's "above" all other qualifiers + + export function indexOfDeepestElement(elements) { - let deepestZoneParents = []; - let deepestZone = elements[0]; - let index = deepestZone ? 0 : -1; - let i; - let n; - for (i = 1; i < elements.length; i++) { - const dropzone = elements[i]; - // an element might belong to multiple selector dropzones - if (!dropzone || dropzone === deepestZone) { - continue; - } - if (!deepestZone) { - deepestZone = dropzone; - index = i; - continue; - } - // check if the deepest or current are document.documentElement or document.rootElement - // - if the current dropzone is, do nothing and continue - if (dropzone.parentNode === dropzone.ownerDocument) { - continue; - } - // - if deepest is, update with the current dropzone and continue to next - else if (deepestZone.parentNode === dropzone.ownerDocument) { - deepestZone = dropzone; - index = i; - continue; - } - // compare zIndex of siblings - if (dropzone.parentNode === deepestZone.parentNode) { - const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0; - const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0; - if (dropzoneZIndex >= deepestZIndex) { - deepestZone = dropzone; - index = i; - } - continue; - } - // populate the ancestry array for the latest deepest dropzone - if (!deepestZoneParents.length) { - let parent = deepestZone; - let parentParent; - while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) { - deepestZoneParents.unshift(parent); - parent = parentParent; - } - } - let parent; - // if this element is an svg element and the current deepest is an - // HTMLElement - if (deepestZone instanceof domObjects.HTMLElement && - dropzone instanceof domObjects.SVGElement && - !(dropzone instanceof domObjects.SVGSVGElement)) { - if (dropzone === deepestZone.parentNode) { - continue; - } - parent = dropzone.ownerSVGElement; - } - else { - parent = dropzone; - } - const dropzoneParents = []; - while (parent.parentNode !== parent.ownerDocument) { - dropzoneParents.unshift(parent); - parent = getParent(parent); - } - n = 0; - // get (position of last common ancestor) + 1 - while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) { - n++; - } - const parents = [ - dropzoneParents[n - 1], - dropzoneParents[n], - deepestZoneParents[n], - ]; - let child = parents[0].lastChild; - while (child) { - if (child === parents[1]) { - deepestZone = dropzone; - index = i; - deepestZoneParents = dropzoneParents; - break; - } - else if (child === parents[2]) { - break; - } - child = child.previousSibling; - } + let deepestZoneParents = []; + let deepestZone = elements[0]; + let index = deepestZone ? 0 : -1; + let i; + let n; + + for (i = 1; i < elements.length; i++) { + const dropzone = elements[i]; // an element might belong to multiple selector dropzones + + if (!dropzone || dropzone === deepestZone) { + continue; + } + + if (!deepestZone) { + deepestZone = dropzone; + index = i; + continue; + } // check if the deepest or current are document.documentElement or document.rootElement + // - if the current dropzone is, do nothing and continue + + + if (dropzone.parentNode === dropzone.ownerDocument) { + continue; + } // - if deepest is, update with the current dropzone and continue to next + else if (deepestZone.parentNode === dropzone.ownerDocument) { + deepestZone = dropzone; + index = i; + continue; + } // compare zIndex of siblings + + + if (dropzone.parentNode === deepestZone.parentNode) { + const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0; + const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0; + + if (dropzoneZIndex >= deepestZIndex) { + deepestZone = dropzone; + index = i; + } + + continue; + } // populate the ancestry array for the latest deepest dropzone + + + if (!deepestZoneParents.length) { + let parent = deepestZone; + let parentParent; + + while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) { + deepestZoneParents.unshift(parent); + parent = parentParent; + } } - return index; + + let parent; // if this element is an svg element and the current deepest is an + // HTMLElement + + if (deepestZone instanceof domObjects.HTMLElement && dropzone instanceof domObjects.SVGElement && !(dropzone instanceof domObjects.SVGSVGElement)) { + if (dropzone === deepestZone.parentNode) { + continue; + } + + parent = dropzone.ownerSVGElement; + } else { + parent = dropzone; + } + + const dropzoneParents = []; + + while (parent.parentNode !== parent.ownerDocument) { + dropzoneParents.unshift(parent); + parent = getParent(parent); + } + + n = 0; // get (position of last common ancestor) + 1 + + while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) { + n++; + } + + const parents = [dropzoneParents[n - 1], dropzoneParents[n], deepestZoneParents[n]]; + let child = parents[0].lastChild; + + while (child) { + if (child === parents[1]) { + deepestZone = dropzone; + index = i; + deepestZoneParents = dropzoneParents; + break; + } else if (child === parents[2]) { + break; + } + + child = child.previousSibling; + } + } + + return index; } export function matchesUpTo(element, selector, limit) { - while (is.element(element)) { - if (matchesSelector(element, selector)) { - return true; - } - element = parentNode(element); - if (element === limit) { - return matchesSelector(element, selector); - } + while (is.element(element)) { + if (matchesSelector(element, selector)) { + return true; } - return false; + + element = parentNode(element); + + if (element === limit) { + return matchesSelector(element, selector); + } + } + + return false; } export function getActualElement(element) { - return (element instanceof domObjects.SVGElementInstance - ? element.correspondingUseElement - : element); + return element instanceof domObjects.SVGElementInstance ? element.correspondingUseElement : element; } export function getScrollXY(relevantWindow) { - relevantWindow = relevantWindow || win.window; - return { - x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft, - y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop, - }; + relevantWindow = relevantWindow || win.window; + return { + x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft, + y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop + }; } export function getElementClientRect(element) { - const clientRect = (element instanceof domObjects.SVGElement - ? element.getBoundingClientRect() - : element.getClientRects()[0]); - return clientRect && { - left: clientRect.left, - right: clientRect.right, - top: clientRect.top, - bottom: clientRect.bottom, - width: clientRect.width || clientRect.right - clientRect.left, - height: clientRect.height || clientRect.bottom - clientRect.top, - }; + const clientRect = element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]; + return clientRect && { + left: clientRect.left, + right: clientRect.right, + top: clientRect.top, + bottom: clientRect.bottom, + width: clientRect.width || clientRect.right - clientRect.left, + height: clientRect.height || clientRect.bottom - clientRect.top + }; } export function getElementRect(element) { - const clientRect = getElementClientRect(element); - if (!browser.isIOS7 && clientRect) { - const scroll = getScrollXY(win.getWindow(element)); - clientRect.left += scroll.x; - clientRect.right += scroll.x; - clientRect.top += scroll.y; - clientRect.bottom += scroll.y; - } - return clientRect; + const clientRect = getElementClientRect(element); + + if (!browser.isIOS7 && clientRect) { + const scroll = getScrollXY(win.getWindow(element)); + clientRect.left += scroll.x; + clientRect.right += scroll.x; + clientRect.top += scroll.y; + clientRect.bottom += scroll.y; + } + + return clientRect; } export function getPath(node) { - const path = []; - while (node) { - path.push(node); - node = parentNode(node); - } - return path; + const path = []; + + while (node) { + path.push(node); + node = parentNode(node); + } + + return path; } export function trySelector(value) { - if (!is.string(value)) { - return false; - } - // an exception will be raised if it is invalid - domObjects.document.querySelector(value); - return true; + if (!is.string(value)) { + return false; + } // an exception will be raised if it is invalid + + + domObjects.document.querySelector(value); + return true; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkb21VdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSxXQUFXLENBQUE7QUFDL0IsT0FBTyxVQUFVLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFCLE9BQU8sR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXpDLE1BQU0sVUFBVSxZQUFZLENBQUUsTUFBWSxFQUFFLEtBQVc7SUFDckQsT0FBTyxLQUFLLEVBQUU7UUFDWixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO0tBQ3pCO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBRSxPQUFPLEVBQUUsUUFBUTtJQUN4QyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUIsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQUUsT0FBTyxPQUFPLENBQUE7U0FBRTtRQUUxRCxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlCO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBRSxJQUFJO0lBQzlCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUE7SUFFNUIsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3RCLGtDQUFrQztRQUNsQywyQkFBMkI7UUFDM0IsT0FBTyxDQUFDLE1BQU0sR0FBSSxNQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1RCxTQUFRO1NBQ1Q7UUFFRCxPQUFPLE1BQU0sQ0FBQTtLQUNkO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBRSxPQUFPLEVBQUUsUUFBUTtJQUNoRCw2REFBNkQ7SUFDN0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLEVBQUU7UUFDakMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0tBQzlDO0lBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQTtBQUUvRCwyREFBMkQ7QUFDM0QsTUFBTSxVQUFVLHFCQUFxQixDQUFFLFFBQWtEO0lBQ3ZGLElBQUksa0JBQWtCLEdBQUcsRUFBRSxDQUFBO0lBQzNCLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3QixJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEMsSUFBSSxDQUFDLENBQUE7SUFDTCxJQUFJLENBQUMsQ0FBQTtJQUVMLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFNUIseURBQXlEO1FBQ3pELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUN6QyxTQUFRO1NBQ1Q7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLFdBQVcsR0FBRyxRQUFRLENBQUE7WUFDdEIsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUNULFNBQVE7U0FDVDtRQUVELHVGQUF1RjtRQUN2Rix3REFBd0Q7UUFDeEQsSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDbEQsU0FBUTtTQUNUO1FBQ0QseUVBQXlFO2FBQ3BFLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsYUFBYSxFQUFFO1lBQzFELFdBQVcsR0FBRyxRQUFRLENBQUE7WUFDdEIsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUNULFNBQVE7U0FDVDtRQUVELDZCQUE2QjtRQUM3QixJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUNsRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDcEcsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRS9GLElBQUksY0FBYyxJQUFJLGFBQWEsRUFBRTtnQkFDbkMsV0FBVyxHQUFHLFFBQVEsQ0FBQTtnQkFDdEIsS0FBSyxHQUFHLENBQUMsQ0FBQTthQUNWO1lBRUQsU0FBUTtTQUNUO1FBRUQsOERBQThEO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFBO1lBQ3hCLElBQUksWUFBWSxDQUFBO1lBRWhCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksWUFBWSxLQUFLLE1BQU0sQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDbEMsTUFBTSxHQUFHLFlBQVksQ0FBQTthQUN0QjtTQUNGO1FBRUQsSUFBSSxNQUFNLENBQUE7UUFFVixrRUFBa0U7UUFDbEUsY0FBYztRQUNkLElBQUksV0FBVyxZQUFZLFVBQVUsQ0FBQyxXQUFXO1lBQzdDLFFBQVEsWUFBWSxVQUFVLENBQUMsVUFBVTtZQUN6QyxDQUFDLENBQUMsUUFBUSxZQUFZLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNuRCxJQUFJLFFBQVEsS0FBSyxXQUFXLENBQUMsVUFBVSxFQUFFO2dCQUN2QyxTQUFRO2FBQ1Q7WUFFRCxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQTtTQUNsQzthQUNJO1lBQ0gsTUFBTSxHQUFHLFFBQVEsQ0FBQTtTQUNsQjtRQUVELE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQTtRQUUxQixPQUFPLE1BQU0sQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUNqRCxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9CLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDM0I7UUFFRCxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRUwsNkNBQTZDO1FBQzdDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6RSxDQUFDLEVBQUUsQ0FBQTtTQUNKO1FBRUQsTUFBTSxPQUFPLEdBQUc7WUFDZCxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLGtCQUFrQixDQUFDLENBQUMsQ0FBQztTQUN0QixDQUFBO1FBRUQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUVoQyxPQUFPLEtBQUssRUFBRTtZQUNaLElBQUksS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEIsV0FBVyxHQUFHLFFBQVEsQ0FBQTtnQkFDdEIsS0FBSyxHQUFHLENBQUMsQ0FBQTtnQkFDVCxrQkFBa0IsR0FBRyxlQUFlLENBQUE7Z0JBRXBDLE1BQUs7YUFDTjtpQkFDSSxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLE1BQUs7YUFDTjtZQUVELEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFBO1NBQzlCO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFFLE9BQXlCLEVBQUUsUUFBZ0IsRUFBRSxLQUFXO0lBQ25GLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxQixJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDdEMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFN0IsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQ3JCLE9BQU8sZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQTtTQUMxQztLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFFLE9BQU87SUFDdkMsT0FBTyxDQUFDLE9BQU8sWUFBWSxVQUFVLENBQUMsa0JBQWtCO1FBQ3RELENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCO1FBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFFLGNBQWM7SUFDekMsY0FBYyxHQUFHLGNBQWMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFBO0lBQzdDLE9BQU87UUFDTCxDQUFDLEVBQUUsY0FBYyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVO1FBQy9FLENBQUMsRUFBRSxjQUFjLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVM7S0FDL0UsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUUsT0FBTztJQUMzQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sWUFBWSxVQUFVLENBQUMsVUFBVTtRQUMxRCxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO1FBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVoQyxPQUFPLFVBQVUsSUFBSTtRQUNuQixJQUFJLEVBQUksVUFBVSxDQUFDLElBQUk7UUFDdkIsS0FBSyxFQUFHLFVBQVUsQ0FBQyxLQUFLO1FBQ3hCLEdBQUcsRUFBSyxVQUFVLENBQUMsR0FBRztRQUN0QixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsS0FBSyxFQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUssVUFBVSxDQUFDLEtBQUssR0FBSSxVQUFVLENBQUMsSUFBSTtRQUNoRSxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHO0tBQ2hFLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBRSxPQUFPO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRWhELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBRWxELFVBQVUsQ0FBQyxJQUFJLElBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUM3QixVQUFVLENBQUMsS0FBSyxJQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDN0IsVUFBVSxDQUFDLEdBQUcsSUFBTyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzdCLFVBQVUsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQTtLQUM5QjtJQUVELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFFLElBQUk7SUFDM0IsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRWYsT0FBTyxJQUFJLEVBQUU7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2YsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUN4QjtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUUsS0FBSztJQUNoQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUFFLE9BQU8sS0FBSyxDQUFBO0tBQUU7SUFFdkMsK0NBQStDO0lBQy9DLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBicm93c2VyIGZyb20gJy4vYnJvd3NlcidcbmltcG9ydCBkb21PYmplY3RzIGZyb20gJy4vZG9tT2JqZWN0cydcbmltcG9ydCAqIGFzIGlzIGZyb20gJy4vaXMnXG5pbXBvcnQgd2luLCB7IGdldFdpbmRvdyB9IGZyb20gJy4vd2luZG93J1xuXG5leHBvcnQgZnVuY3Rpb24gbm9kZUNvbnRhaW5zIChwYXJlbnQ6IE5vZGUsIGNoaWxkOiBOb2RlKSB7XG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZXN0IChlbGVtZW50LCBzZWxlY3Rvcikge1xuICB3aGlsZSAoaXMuZWxlbWVudChlbGVtZW50KSkge1xuICAgIGlmIChtYXRjaGVzU2VsZWN0b3IoZWxlbWVudCwgc2VsZWN0b3IpKSB7IHJldHVybiBlbGVtZW50IH1cblxuICAgIGVsZW1lbnQgPSBwYXJlbnROb2RlKGVsZW1lbnQpXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlXG5cbiAgaWYgKGlzLmRvY0ZyYWcocGFyZW50KSkge1xuICAgIC8vIHNraXAgcGFzdCAjc2hhZG8tcm9vdCBmcmFnbWVudHNcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB3aGlsZSAoKHBhcmVudCA9IChwYXJlbnQgYXMgYW55KS5ob3N0KSAmJiBpcy5kb2NGcmFnKHBhcmVudCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFxuICB9XG5cbiAgcmV0dXJuIHBhcmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc1NlbGVjdG9yIChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAvLyByZW1vdmUgL2RlZXAvIGZyb20gc2VsZWN0b3JzIGlmIHNoYWRvd0RPTSBwb2x5ZmlsbCBpcyB1c2VkXG4gIGlmICh3aW4ud2luZG93ICE9PSB3aW4ucmVhbFdpbmRvdykge1xuICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSgvXFwvZGVlcFxcLy9nLCAnICcpXG4gIH1cblxuICByZXR1cm4gZWxlbWVudFticm93c2VyLnByZWZpeGVkTWF0Y2hlc1NlbGVjdG9yXShzZWxlY3Rvcilcbn1cblxuY29uc3QgZ2V0UGFyZW50ID0gZWwgPT4gZWwucGFyZW50Tm9kZSA/IGVsLnBhcmVudE5vZGUgOiBlbC5ob3N0XG5cbi8vIFRlc3QgZm9yIHRoZSBlbGVtZW50IHRoYXQncyBcImFib3ZlXCIgYWxsIG90aGVyIHF1YWxpZmllcnNcbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mRGVlcGVzdEVsZW1lbnQgKGVsZW1lbnRzOiBJbnRlcmFjdC5FbGVtZW50W10gfCBOb2RlTGlzdE9mPEVsZW1lbnQ+KSB7XG4gIGxldCBkZWVwZXN0Wm9uZVBhcmVudHMgPSBbXVxuICBsZXQgZGVlcGVzdFpvbmUgPSBlbGVtZW50c1swXVxuICBsZXQgaW5kZXggPSBkZWVwZXN0Wm9uZSA/IDAgOiAtMVxuICBsZXQgaVxuICBsZXQgblxuXG4gIGZvciAoaSA9IDE7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRyb3B6b25lID0gZWxlbWVudHNbaV1cblxuICAgIC8vIGFuIGVsZW1lbnQgbWlnaHQgYmVsb25nIHRvIG11bHRpcGxlIHNlbGVjdG9yIGRyb3B6b25lc1xuICAgIGlmICghZHJvcHpvbmUgfHwgZHJvcHpvbmUgPT09IGRlZXBlc3Rab25lKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICghZGVlcGVzdFpvbmUpIHtcbiAgICAgIGRlZXBlc3Rab25lID0gZHJvcHpvbmVcbiAgICAgIGluZGV4ID0gaVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgZGVlcGVzdCBvciBjdXJyZW50IGFyZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgb3IgZG9jdW1lbnQucm9vdEVsZW1lbnRcbiAgICAvLyAtIGlmIHRoZSBjdXJyZW50IGRyb3B6b25lIGlzLCBkbyBub3RoaW5nIGFuZCBjb250aW51ZVxuICAgIGlmIChkcm9wem9uZS5wYXJlbnROb2RlID09PSBkcm9wem9uZS5vd25lckRvY3VtZW50KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvLyAtIGlmIGRlZXBlc3QgaXMsIHVwZGF0ZSB3aXRoIHRoZSBjdXJyZW50IGRyb3B6b25lIGFuZCBjb250aW51ZSB0byBuZXh0XG4gICAgZWxzZSBpZiAoZGVlcGVzdFpvbmUucGFyZW50Tm9kZSA9PT0gZHJvcHpvbmUub3duZXJEb2N1bWVudCkge1xuICAgICAgZGVlcGVzdFpvbmUgPSBkcm9wem9uZVxuICAgICAgaW5kZXggPSBpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgekluZGV4IG9mIHNpYmxpbmdzXG4gICAgaWYgKGRyb3B6b25lLnBhcmVudE5vZGUgPT09IGRlZXBlc3Rab25lLnBhcmVudE5vZGUpIHtcbiAgICAgIGNvbnN0IGRlZXBlc3RaSW5kZXggPSBwYXJzZUludChnZXRXaW5kb3coZGVlcGVzdFpvbmUpLmdldENvbXB1dGVkU3R5bGUoZGVlcGVzdFpvbmUpLnpJbmRleCwgMTApIHx8IDBcbiAgICAgIGNvbnN0IGRyb3B6b25lWkluZGV4ID0gcGFyc2VJbnQoZ2V0V2luZG93KGRyb3B6b25lKS5nZXRDb21wdXRlZFN0eWxlKGRyb3B6b25lKS56SW5kZXgsIDEwKSB8fCAwXG5cbiAgICAgIGlmIChkcm9wem9uZVpJbmRleCA+PSBkZWVwZXN0WkluZGV4KSB7XG4gICAgICAgIGRlZXBlc3Rab25lID0gZHJvcHpvbmVcbiAgICAgICAgaW5kZXggPSBpXG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gcG9wdWxhdGUgdGhlIGFuY2VzdHJ5IGFycmF5IGZvciB0aGUgbGF0ZXN0IGRlZXBlc3QgZHJvcHpvbmVcbiAgICBpZiAoIWRlZXBlc3Rab25lUGFyZW50cy5sZW5ndGgpIHtcbiAgICAgIGxldCBwYXJlbnQgPSBkZWVwZXN0Wm9uZVxuICAgICAgbGV0IHBhcmVudFBhcmVudFxuXG4gICAgICB3aGlsZSAoKHBhcmVudFBhcmVudCA9IGdldFBhcmVudChwYXJlbnQpKSAmJiBwYXJlbnRQYXJlbnQgIT09IHBhcmVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICAgIGRlZXBlc3Rab25lUGFyZW50cy51bnNoaWZ0KHBhcmVudClcbiAgICAgICAgcGFyZW50ID0gcGFyZW50UGFyZW50XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHBhcmVudFxuXG4gICAgLy8gaWYgdGhpcyBlbGVtZW50IGlzIGFuIHN2ZyBlbGVtZW50IGFuZCB0aGUgY3VycmVudCBkZWVwZXN0IGlzIGFuXG4gICAgLy8gSFRNTEVsZW1lbnRcbiAgICBpZiAoZGVlcGVzdFpvbmUgaW5zdGFuY2VvZiBkb21PYmplY3RzLkhUTUxFbGVtZW50ICYmXG4gICAgICAgIGRyb3B6b25lIGluc3RhbmNlb2YgZG9tT2JqZWN0cy5TVkdFbGVtZW50ICYmXG4gICAgICAgICEoZHJvcHpvbmUgaW5zdGFuY2VvZiBkb21PYmplY3RzLlNWR1NWR0VsZW1lbnQpKSB7XG4gICAgICBpZiAoZHJvcHpvbmUgPT09IGRlZXBlc3Rab25lLnBhcmVudE5vZGUpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gZHJvcHpvbmUub3duZXJTVkdFbGVtZW50XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcGFyZW50ID0gZHJvcHpvbmVcbiAgICB9XG5cbiAgICBjb25zdCBkcm9wem9uZVBhcmVudHMgPSBbXVxuXG4gICAgd2hpbGUgKHBhcmVudC5wYXJlbnROb2RlICE9PSBwYXJlbnQub3duZXJEb2N1bWVudCkge1xuICAgICAgZHJvcHpvbmVQYXJlbnRzLnVuc2hpZnQocGFyZW50KVxuICAgICAgcGFyZW50ID0gZ2V0UGFyZW50KHBhcmVudClcbiAgICB9XG5cbiAgICBuID0gMFxuXG4gICAgLy8gZ2V0IChwb3NpdGlvbiBvZiBsYXN0IGNvbW1vbiBhbmNlc3RvcikgKyAxXG4gICAgd2hpbGUgKGRyb3B6b25lUGFyZW50c1tuXSAmJiBkcm9wem9uZVBhcmVudHNbbl0gPT09IGRlZXBlc3Rab25lUGFyZW50c1tuXSkge1xuICAgICAgbisrXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50cyA9IFtcbiAgICAgIGRyb3B6b25lUGFyZW50c1tuIC0gMV0sXG4gICAgICBkcm9wem9uZVBhcmVudHNbbl0sXG4gICAgICBkZWVwZXN0Wm9uZVBhcmVudHNbbl0sXG4gICAgXVxuXG4gICAgbGV0IGNoaWxkID0gcGFyZW50c1swXS5sYXN0Q2hpbGRcblxuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkID09PSBwYXJlbnRzWzFdKSB7XG4gICAgICAgIGRlZXBlc3Rab25lID0gZHJvcHpvbmVcbiAgICAgICAgaW5kZXggPSBpXG4gICAgICAgIGRlZXBlc3Rab25lUGFyZW50cyA9IGRyb3B6b25lUGFyZW50c1xuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjaGlsZCA9PT0gcGFyZW50c1syXSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnByZXZpb3VzU2libGluZ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmRleFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc1VwVG8gKGVsZW1lbnQ6IEludGVyYWN0LkVsZW1lbnQsIHNlbGVjdG9yOiBzdHJpbmcsIGxpbWl0OiBOb2RlKSB7XG4gIHdoaWxlIChpcy5lbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgaWYgKG1hdGNoZXNTZWxlY3RvcihlbGVtZW50LCBzZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZWxlbWVudCA9IHBhcmVudE5vZGUoZWxlbWVudClcblxuICAgIGlmIChlbGVtZW50ID09PSBsaW1pdCkge1xuICAgICAgcmV0dXJuIG1hdGNoZXNTZWxlY3RvcihlbGVtZW50LCBzZWxlY3RvcilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdHVhbEVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgZG9tT2JqZWN0cy5TVkdFbGVtZW50SW5zdGFuY2VcbiAgICA/IGVsZW1lbnQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnRcbiAgICA6IGVsZW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxYWSAocmVsZXZhbnRXaW5kb3cpIHtcbiAgcmVsZXZhbnRXaW5kb3cgPSByZWxldmFudFdpbmRvdyB8fCB3aW4ud2luZG93XG4gIHJldHVybiB7XG4gICAgeDogcmVsZXZhbnRXaW5kb3cuc2Nyb2xsWCB8fCByZWxldmFudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICB5OiByZWxldmFudFdpbmRvdy5zY3JvbGxZIHx8IHJlbGV2YW50V2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRDbGllbnRSZWN0IChlbGVtZW50KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSAoZWxlbWVudCBpbnN0YW5jZW9mIGRvbU9iamVjdHMuU1ZHRWxlbWVudFxuICAgID8gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIDogZWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdKVxuXG4gIHJldHVybiBjbGllbnRSZWN0ICYmIHtcbiAgICBsZWZ0ICA6IGNsaWVudFJlY3QubGVmdCxcbiAgICByaWdodCA6IGNsaWVudFJlY3QucmlnaHQsXG4gICAgdG9wICAgOiBjbGllbnRSZWN0LnRvcCxcbiAgICBib3R0b206IGNsaWVudFJlY3QuYm90dG9tLFxuICAgIHdpZHRoIDogY2xpZW50UmVjdC53aWR0aCAgfHwgY2xpZW50UmVjdC5yaWdodCAgLSBjbGllbnRSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCB8fCBjbGllbnRSZWN0LmJvdHRvbSAtIGNsaWVudFJlY3QudG9wLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50UmVjdCAoZWxlbWVudCkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0RWxlbWVudENsaWVudFJlY3QoZWxlbWVudClcblxuICBpZiAoIWJyb3dzZXIuaXNJT1M3ICYmIGNsaWVudFJlY3QpIHtcbiAgICBjb25zdCBzY3JvbGwgPSBnZXRTY3JvbGxYWSh3aW4uZ2V0V2luZG93KGVsZW1lbnQpKVxuXG4gICAgY2xpZW50UmVjdC5sZWZ0ICAgKz0gc2Nyb2xsLnhcbiAgICBjbGllbnRSZWN0LnJpZ2h0ICArPSBzY3JvbGwueFxuICAgIGNsaWVudFJlY3QudG9wICAgICs9IHNjcm9sbC55XG4gICAgY2xpZW50UmVjdC5ib3R0b20gKz0gc2Nyb2xsLnlcbiAgfVxuXG4gIHJldHVybiBjbGllbnRSZWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChub2RlKSB7XG4gIGNvbnN0IHBhdGggPSBbXVxuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgcGF0aC5wdXNoKG5vZGUpXG4gICAgbm9kZSA9IHBhcmVudE5vZGUobm9kZSlcbiAgfVxuXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlTZWxlY3RvciAodmFsdWUpIHtcbiAgaWYgKCFpcy5zdHJpbmcodmFsdWUpKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgLy8gYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIGl0IGlzIGludmFsaWRcbiAgZG9tT2JqZWN0cy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHZhbHVlKVxuICByZXR1cm4gdHJ1ZVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=domUtils.js.map \ No newline at end of file diff --git a/packages/utils/domUtils.js.map b/packages/utils/domUtils.js.map new file mode 100644 index 000000000..672a14213 --- /dev/null +++ b/packages/utils/domUtils.js.map @@ -0,0 +1,94 @@ +{ + "version": 3, + "sources": [ + "domUtils.ts" + ], + "names": [ + "browser", + "domObjects", + "is", + "win", + "getWindow", + "nodeContains", + "parent", + "child", + "parentNode", + "closest", + "element", + "selector", + "matchesSelector", + "node", + "docFrag", + "host", + "window", + "realWindow", + "replace", + "prefixedMatchesSelector", + "getParent", + "el", + "indexOfDeepestElement", + "elements", + "deepestZoneParents", + "deepestZone", + "index", + "i", + "n", + "length", + "dropzone", + "ownerDocument", + "deepestZIndex", + "parseInt", + "getComputedStyle", + "zIndex", + "dropzoneZIndex", + "parentParent", + "unshift", + "HTMLElement", + "SVGElement", + "SVGSVGElement", + "ownerSVGElement", + "dropzoneParents", + "parents", + "lastChild", + "previousSibling", + "matchesUpTo", + "limit", + "getActualElement", + "SVGElementInstance", + "correspondingUseElement", + "getScrollXY", + "relevantWindow", + "x", + "scrollX", + "document", + "documentElement", + "scrollLeft", + "y", + "scrollY", + "scrollTop", + "getElementClientRect", + "clientRect", + "getBoundingClientRect", + "getClientRects", + "left", + "right", + "top", + "bottom", + "width", + "height", + "getElementRect", + "isIOS7", + "scroll", + "getPath", + "path", + "push", + "trySelector", + "value", + "string", + "querySelector" + ], + "mappings": "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", + "sourcesContent": [ + "import browser from './browser'\nimport domObjects from './domObjects'\nimport * as is from './is'\nimport win, { getWindow } from './window'\n\nexport function nodeContains (parent: Node | Interact.EventTarget, child: Node | Interact.EventTarget) {\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest (element, selector) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) { return element }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode (node) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector (element, selector) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = el => el.parentNode ? el.parentNode : el.host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement (elements: Interact.Element[] | NodeListOf) {\n let deepestZoneParents = []\n let deepestZone = elements[0]\n let index = deepestZone ? 0 : -1\n let i\n let n\n\n for (i = 1; i < elements.length; i++) {\n const dropzone = elements[i]\n\n // an element might belong to multiple selector dropzones\n if (!dropzone || dropzone === deepestZone) {\n continue\n }\n\n if (!deepestZone) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // check if the deepest or current are document.documentElement or document.rootElement\n // - if the current dropzone is, do nothing and continue\n if (dropzone.parentNode === dropzone.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current dropzone and continue to next\n else if (deepestZone.parentNode === dropzone.ownerDocument) {\n deepestZone = dropzone\n index = i\n continue\n }\n\n // compare zIndex of siblings\n if (dropzone.parentNode === deepestZone.parentNode) {\n const deepestZIndex = parseInt(getWindow(deepestZone).getComputedStyle(deepestZone).zIndex, 10) || 0\n const dropzoneZIndex = parseInt(getWindow(dropzone).getComputedStyle(dropzone).zIndex, 10) || 0\n\n if (dropzoneZIndex >= deepestZIndex) {\n deepestZone = dropzone\n index = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest dropzone\n if (!deepestZoneParents.length) {\n let parent = deepestZone\n let parentParent\n\n while ((parentParent = getParent(parent)) && parentParent !== parent.ownerDocument) {\n deepestZoneParents.unshift(parent)\n parent = parentParent\n }\n }\n\n let parent\n\n // if this element is an svg element and the current deepest is an\n // HTMLElement\n if (deepestZone instanceof domObjects.HTMLElement &&\n dropzone instanceof domObjects.SVGElement &&\n !(dropzone instanceof domObjects.SVGSVGElement)) {\n if (dropzone === deepestZone.parentNode) {\n continue\n }\n\n parent = dropzone.ownerSVGElement\n }\n else {\n parent = dropzone\n }\n\n const dropzoneParents = []\n\n while (parent.parentNode !== parent.ownerDocument) {\n dropzoneParents.unshift(parent)\n parent = getParent(parent)\n }\n\n n = 0\n\n // get (position of last common ancestor) + 1\n while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {\n n++\n }\n\n const parents = [\n dropzoneParents[n - 1],\n dropzoneParents[n],\n deepestZoneParents[n],\n ]\n\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestZone = dropzone\n index = i\n deepestZoneParents = dropzoneParents\n\n break\n }\n else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n\n return index\n}\n\nexport function matchesUpTo (element: Interact.Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element)\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement (element) {\n return (element instanceof domObjects.SVGElementInstance\n ? element.correspondingUseElement\n : element)\n}\n\nexport function getScrollXY (relevantWindow) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect (element) {\n const clientRect = (element instanceof domObjects.SVGElement\n ? element.getBoundingClientRect()\n : element.getClientRects()[0])\n\n return clientRect && {\n left : clientRect.left,\n right : clientRect.right,\n top : clientRect.top,\n bottom: clientRect.bottom,\n width : clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n}\n\nexport function getElementRect (element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath (node) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector (value) {\n if (!is.string(value)) { return false }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n" + ] +} \ No newline at end of file diff --git a/packages/utils/domUtils.spec.js b/packages/utils/domUtils.spec.js deleted file mode 100644 index 1fc176bd7..000000000 --- a/packages/utils/domUtils.spec.js +++ /dev/null @@ -1,105 +0,0 @@ -import { JSDOM } from '@interactjs/_dev/test/domator'; -import test from '@interactjs/_dev/test/test'; -import domObjects from './domObjects'; -import { indexOfDeepestElement } from './domUtils'; -test('utils/domUtils/indexOfDeepestElement', t => { - const doc1 = new JSDOM(`
-
-
-
-
`).window.document; - domObjects.init(doc1.defaultView); - const ownerDocument = { - name: 'Owner Document', - lastChild: null, - }; - const html = { - name: 'html', - lastChild: null, - ownerDocument, - parentNode: ownerDocument, - }; - const body = { - name: 'body', - lastChild: null, - ownerDocument, - parentNode: html, - }; - const wrapper = { - name: 'wrapper', - ownerDocument, - parentNode: body, - lastChild: null, - }; - const a = { - name: 'a', - ownerDocument, - parentNode: wrapper, - lastChild: null, - }; - const b1 = { - name: 'b1', - ownerDocument, - parentNode: a, - lastChild: null, - }; - const b2 = { - name: 'b2', - ownerDocument, - parentNode: a, - lastChild: null, - }; - const c1 = { - name: 'c1', - ownerDocument, - parentNode: b1, - lastChild: null, - }; - const c2 = { - name: 'c2', - ownerDocument, - parentNode: b1, - lastChild: null, - }; - const d1 = { - name: 'd1', - ownerDocument, - parentNode: c1, - lastChild: null, - }; - const d1Comp = { - name: 'd1_comp', - ownerDocument, - parentNode: d1, - lastChild: null, - }; - const d2Shadow = { - name: 'd2_shadow', - ownerDocument, - parentNode: null, - lastChild: null, - host: d1Comp, - }; - ownerDocument.lastChild = html; - html.lastChild = body; - body.lastChild = wrapper; - a.lastChild = b2; - b1.lastChild = c2; - b2.lastChild = null; - c1.lastChild = d1; - c2.lastChild = null; - d1.lastChild = d1; - wrapper.lastChild = a; - const deepestShadow = [null, d2Shadow, c1, b1, a]; - t.equal(indexOfDeepestElement(deepestShadow), deepestShadow.indexOf(d2Shadow), 'works with shadow root'); - const noShadow = [null, d1, c1, b1]; - t.equal(indexOfDeepestElement(noShadow), noShadow.indexOf(d1), 'only chooses elements that are passed in'); - const siblings = doc1.querySelectorAll('#topDiv > *'); - t.equal(indexOfDeepestElement(siblings), 2, 'last sibling is deepest with equal zIndex'); - siblings[0].style.zIndex = '2'; - siblings[1].style.zIndex = '2'; - siblings[2].style.zIndex = '1'; - t.equal(indexOfDeepestElement(siblings), 1, 'sibling with higher z-index is selected'); - t.end(); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tVXRpbHMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRvbVV0aWxzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ3JELE9BQU8sSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdDLE9BQU8sVUFBVSxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFbEQsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQy9DLE1BQU0sSUFBSSxHQUFhLElBQUksS0FBSyxDQUFDOzs7O1NBSTFCLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBRXhCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRWpDLE1BQU0sYUFBYSxHQUFHO1FBQ3BCLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQTtJQUNELE1BQU0sSUFBSSxHQUFHO1FBQ1gsSUFBSSxFQUFFLE1BQU07UUFDWixTQUFTLEVBQUUsSUFBSTtRQUNmLGFBQWE7UUFDYixVQUFVLEVBQUUsYUFBYTtLQUMxQixDQUFBO0lBRUQsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUUsTUFBTTtRQUNaLFNBQVMsRUFBRSxJQUFJO1FBQ2YsYUFBYTtRQUNiLFVBQVUsRUFBRSxJQUFJO0tBRWpCLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRztRQUNkLElBQUksRUFBRSxTQUFTO1FBQ2YsYUFBYTtRQUNiLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUE7SUFFRCxNQUFNLENBQUMsR0FBRztRQUNSLElBQUksRUFBRSxHQUFHO1FBQ1QsYUFBYTtRQUNiLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFNBQVMsRUFBRSxJQUFJO0tB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LEtBQUssQ0FDTCxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFDL0IsQ0FBQyxFQUNELHlDQUF5QyxDQUMxQyxDQUFBO0lBRUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKU0RPTSB9IGZyb20gJ0BpbnRlcmFjdGpzL19kZXYvdGVzdC9kb21hdG9yJ1xuaW1wb3J0IHRlc3QgZnJvbSAnQGludGVyYWN0anMvX2Rldi90ZXN0L3Rlc3QnXG5pbXBvcnQgZG9tT2JqZWN0cyBmcm9tICcuL2RvbU9iamVjdHMnXG5pbXBvcnQgeyBpbmRleE9mRGVlcGVzdEVsZW1lbnQgfSBmcm9tICcuL2RvbVV0aWxzJ1xuXG50ZXN0KCd1dGlscy9kb21VdGlscy9pbmRleE9mRGVlcGVzdEVsZW1lbnQnLCB0ID0+IHtcbiAgY29uc3QgZG9jMTogRG9jdW1lbnQgPSBuZXcgSlNET00oYDxkaXYgaWQ9XCJ0b3BEaXZcIj5cbiAgICA8ZGl2IGlkPVwic2liMFwiPjwvZGl2PlxuICAgIDxkaXYgaWQ9XCJzaWIxXCI+PC9kaXY+XG4gICAgPGRpdiBpZD1cInNpYjJcIj48L2Rpdj5cbiAgPC9kaXY+YCkud2luZG93LmRvY3VtZW50XG5cbiAgZG9tT2JqZWN0cy5pbml0KGRvYzEuZGVmYXVsdFZpZXcpXG5cbiAgY29uc3Qgb3duZXJEb2N1bWVudCA9IHtcbiAgICBuYW1lOiAnT3duZXIgRG9jdW1lbnQnLFxuICAgIGxhc3RDaGlsZDogbnVsbCxcbiAgfVxuICBjb25zdCBodG1sID0ge1xuICAgIG5hbWU6ICdodG1sJyxcbiAgICBsYXN0Q2hpbGQ6IG51bGwsXG4gICAgb3duZXJEb2N1bWVudCxcbiAgICBwYXJlbnROb2RlOiBvd25lckRvY3VtZW50LFxuICB9XG5cbiAgY29uc3QgYm9keSA9IHtcbiAgICBuYW1lOiAnYm9keScsXG4gICAgbGFzdENoaWxkOiBudWxsLFxuICAgIG93bmVyRG9jdW1lbnQsXG4gICAgcGFyZW50Tm9kZTogaHRtbCxcblxuICB9XG5cbiAgY29uc3Qgd3JhcHBlciA9IHtcbiAgICBuYW1lOiAnd3JhcHBlcicsXG4gICAgb3duZXJEb2N1bWVudCxcbiAgICBwYXJlbnROb2RlOiBib2R5LFxuICAgIGxhc3RDaGlsZDogbnVsbCxcbiAgfVxuXG4gIGNvbnN0IGEgPSB7XG4gICAgbmFtZTogJ2EnLFxuICAgIG93bmVyRG9jdW1lbnQsXG4gICAgcGFyZW50Tm9kZTogd3JhcHBlcixcbiAgICBsYXN0Q2hpbGQ6IG51bGwsXG4gIH1cblxuICBjb25zdCBiMSA9IHtcbiAgICBuYW1lOiAnYjEnLFxuICAgIG93bmVyRG9jdW1lbnQsXG4gICAgcGFyZW50Tm9kZTogYSxcbiAgICBsYXN0Q2hpbGQ6IG51bGwsXG4gIH1cblxuICBjb25zdCBiMiA9IHtcbiAgICBuYW1lOiAnYjInLFxuICAgIG93bmVyRG9jdW1lbnQsXG4gICAgcGFyZW50Tm9kZTogYSxcbiAgICBsYXN0Q2hpbGQ6IG51bGwsXG4gIH1cblxuICBjb25zdCBjMSA9IHtcbiAgICBuYW1lOiAnYzEnLFxuICAgIG93bmVyRG9jdW1lbnQsXG4gICAgcGFyZW50Tm9kZTogYjEsXG4gICAgbGFzdENoaWxkOiBudWxsLFxuICB9XG5cbiAgY29uc3QgYzIgPSB7XG4gICAgbmFtZTogJ2MyJyxcbiAgICBvd25lckRvY3VtZW50LFxuICAgIHBhcmVudE5vZGU6IGIxLFxuICAgIGxhc3RDaGlsZDogbnVsbCxcbiAgfVxuXG4gIGNvbnN0IGQxID0ge1xuICAgIG5hbWU6ICdkMScsXG4gICAgb3duZXJEb2N1bWVudCxcbiAgICBwYXJlbnROb2RlOiBjMSxcbiAgICBsYXN0Q2hpbGQ6IG51bGwsXG4gIH1cblxuICBjb25zdCBkMUNvbXAgPSB7XG4gICAgbmFtZTogJ2QxX2NvbXAnLFxuICAgIG93bmVyRG9jdW1lbnQsXG4gICAgcGFyZW50Tm9kZTogZDEsXG4gICAgbGFzdENoaWxkOiBudWxsLFxuICB9XG5cbiAgY29uc3QgZDJTaGFkb3cgPSB7XG4gICAgbmFtZTogJ2QyX3NoYWRvdycsXG4gICAgb3duZXJEb2N1bWVudCxcbiAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgIGxhc3RDaGlsZDogbnVsbCxcbiAgICBob3N0OiBkMUNvbXAsXG4gIH1cblxuICBvd25lckRvY3VtZW50Lmxhc3RDaGlsZCA9IGh0bWxcbiAgaHRtbC5sYXN0Q2hpbGQgPSBib2R5XG4gIGJvZHkubGFzdENoaWxkID0gd3JhcHBlclxuICBhLmxhc3RDaGlsZCA9IGIyXG4gIGIxLmxhc3RDaGlsZCA9IGMyXG4gIGIyLmxhc3RDaGlsZCA9IG51bGxcbiAgYzEubGFzdENoaWxkID0gZDFcbiAgYzIubGFzdENoaWxkID0gbnVsbFxuICBkMS5sYXN0Q2hpbGQgPSBkMVxuICB3cmFwcGVyLmxhc3RDaGlsZCA9IGFcblxuICBjb25zdCBkZWVwZXN0U2hhZG93ID0gW251bGwsIGQyU2hhZG93LCBjMSwgYjEsIGFdIGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnRbXVxuICB0LmVxdWFsKGluZGV4T2ZEZWVwZXN0RWxlbWVudChkZWVwZXN0U2hhZG93KSwgZGVlcGVzdFNoYWRvdy5pbmRleE9mKGQyU2hhZG93IGFzIGFueSksICd3b3JrcyB3aXRoIHNoYWRvdyByb290JylcblxuICBjb25zdCBub1NoYWRvdyA9IFtudWxsLCBkMSwgYzEsIGIxXSBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50W11cblxuICB0LmVxdWFsKFxuICAgIGluZGV4T2ZEZWVwZXN0RWxlbWVudChub1NoYWRvdyksXG4gICAgbm9TaGFkb3cuaW5kZXhPZihkMSBhcyBhbnkpLFxuICAgICdvbmx5IGNob29zZXMgZWxlbWVudHMgdGhhdCBhcmUgcGFzc2VkIGluJyxcbiAgKVxuXG4gIGNvbnN0IHNpYmxpbmdzOiBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PiA9IGRvYzEucXVlcnlTZWxlY3RvckFsbCgnI3RvcERpdiA+IConKVxuXG4gIHQuZXF1YWwoXG4gICAgaW5kZXhPZkRlZXBlc3RFbGVtZW50KHNpYmxpbmdzKSxcbiAgICAyLFxuICAgICdsYXN0IHNpYmxpbmcgaXMgZGVlcGVzdCB3aXRoIGVxdWFsIHpJbmRleCcsXG4gIClcblxuICBzaWJsaW5nc1swXS5zdHlsZS56SW5kZXggPSAnMidcbiAgc2libGluZ3NbMV0uc3R5bGUuekluZGV4ID0gJzInXG4gIHNpYmxpbmdzWzJdLnN0eWxlLnpJbmRleCA9ICcxJ1xuXG4gIHQuZXF1YWwoXG4gICAgaW5kZXhPZkRlZXBlc3RFbGVtZW50KHNpYmxpbmdzKSxcbiAgICAxLFxuICAgICdzaWJsaW5nIHdpdGggaGlnaGVyIHotaW5kZXggaXMgc2VsZWN0ZWQnLFxuICApXG5cbiAgdC5lbmQoKVxufSlcbiJdfQ== \ No newline at end of file diff --git a/packages/utils/events.js b/packages/utils/events.js index fa62bbdab..48b602771 100644 --- a/packages/utils/events.js +++ b/packages/utils/events.js @@ -1,221 +1,266 @@ -import { contains } from './arr'; -import * as domUtils from './domUtils'; -import * as is from './is'; -import pExtend from './pointerExtend'; -import pointerUtils from './pointerUtils'; +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +import { contains } from "./arr.js"; +import * as domUtils from "./domUtils.js"; +import * as is from "./is.js"; +import pExtend from "./pointerExtend.js"; +import pointerUtils from "./pointerUtils.js"; const elements = []; const targets = []; const delegatedEvents = {}; const documents = []; + function add(element, type, listener, optionalArg) { - const options = getOptions(optionalArg); - let elementIndex = elements.indexOf(element); - let target = targets[elementIndex]; - if (!target) { - target = { - events: {}, - typeCount: 0, - }; - elementIndex = elements.push(element) - 1; - targets.push(target); - } - if (!target.events[type]) { - target.events[type] = []; - target.typeCount++; - } - if (!contains(target.events[type], listener)) { - element.addEventListener(type, listener, events.supportsOptions ? options : !!options.capture); - target.events[type].push(listener); - } + const options = getOptions(optionalArg); + let elementIndex = elements.indexOf(element); + let target = targets[elementIndex]; + + if (!target) { + target = { + events: {}, + typeCount: 0 + }; + elementIndex = elements.push(element) - 1; + targets.push(target); + } + + if (!target.events[type]) { + target.events[type] = []; + target.typeCount++; + } + + if (!contains(target.events[type], listener)) { + element.addEventListener(type, listener, events.supportsOptions ? options : !!options.capture); + target.events[type].push(listener); + } } + function remove(element, type, listener, optionalArg) { - const options = getOptions(optionalArg); - const elementIndex = elements.indexOf(element); - const target = targets[elementIndex]; - if (!target || !target.events) { - return; + const options = getOptions(optionalArg); + const elementIndex = elements.indexOf(element); + const target = targets[elementIndex]; + + if (!target || !target.events) { + return; + } + + if (type === 'all') { + for (type in target.events) { + if (target.events.hasOwnProperty(type)) { + remove(element, type, 'all'); + } } - if (type === 'all') { - for (type in target.events) { - if (target.events.hasOwnProperty(type)) { - remove(element, type, 'all'); - } + + return; + } + + if (target.events[type]) { + const len = target.events[type].length; + + if (listener === 'all') { + for (let i = 0; i < len; i++) { + remove(element, type, target.events[type][i], options); + } + + return; + } else { + for (let i = 0; i < len; i++) { + if (target.events[type][i] === listener) { + element.removeEventListener(type, listener, events.supportsOptions ? options : !!options.capture); + target.events[type].splice(i, 1); + break; } - return; + } } - if (target.events[type]) { - const len = target.events[type].length; - if (listener === 'all') { - for (let i = 0; i < len; i++) { - remove(element, type, target.events[type][i], options); - } - return; - } - else { - for (let i = 0; i < len; i++) { - if (target.events[type][i] === listener) { - element.removeEventListener(type, listener, events.supportsOptions ? options : !!options.capture); - target.events[type].splice(i, 1); - break; - } - } - } - if (target.events[type] && target.events[type].length === 0) { - target.events[type] = null; - target.typeCount--; - } - } - if (!target.typeCount) { - targets.splice(elementIndex, 1); - elements.splice(elementIndex, 1); + + if (target.events[type] && target.events[type].length === 0) { + target.events[type] = null; + target.typeCount--; } + } + + if (!target.typeCount) { + targets.splice(elementIndex, 1); + elements.splice(elementIndex, 1); + } } + function addDelegate(selector, context, type, listener, optionalArg) { - const options = getOptions(optionalArg); - if (!delegatedEvents[type]) { - delegatedEvents[type] = { - contexts: [], - listeners: [], - selectors: [], - }; - // add delegate listener functions - for (const doc of documents) { - add(doc, type, delegateListener); - add(doc, type, delegateUseCapture, true); - } + const options = getOptions(optionalArg); + + if (!delegatedEvents[type]) { + delegatedEvents[type] = { + contexts: [], + listeners: [], + selectors: [] + }; // add delegate listener functions + + for (const doc of documents) { + add(doc, type, delegateListener); + add(doc, type, delegateUseCapture, true); } - const delegated = delegatedEvents[type]; - let index; - for (index = delegated.selectors.length - 1; index >= 0; index--) { - if (delegated.selectors[index] === selector && - delegated.contexts[index] === context) { - break; - } - } - if (index === -1) { - index = delegated.selectors.length; - delegated.selectors.push(selector); - delegated.contexts.push(context); - delegated.listeners.push([]); + } + + const delegated = delegatedEvents[type]; + let index; + + for (index = delegated.selectors.length - 1; index >= 0; index--) { + if (delegated.selectors[index] === selector && delegated.contexts[index] === context) { + break; } - // keep listener and capture and passive flags - delegated.listeners[index].push([listener, !!options.capture, options.passive]); + } + + if (index === -1) { + index = delegated.selectors.length; + delegated.selectors.push(selector); + delegated.contexts.push(context); + delegated.listeners.push([]); + } // keep listener and capture and passive flags + + + delegated.listeners[index].push([listener, !!options.capture, options.passive]); } + function removeDelegate(selector, context, type, listener, optionalArg) { - const options = getOptions(optionalArg); - const delegated = delegatedEvents[type]; - let matchFound = false; - let index; - if (!delegated) { - return; - } - // count from last index of delegated to 0 - for (index = delegated.selectors.length - 1; index >= 0; index--) { - // look for matching selector and context Node - if (delegated.selectors[index] === selector && - delegated.contexts[index] === context) { - const listeners = delegated.listeners[index]; - // each item of the listeners array is an array: [function, capture, passive] - for (let i = listeners.length - 1; i >= 0; i--) { - const [fn, capture, passive] = listeners[i]; - // check if the listener functions and capture and passive flags match - if (fn === listener && capture === !!options.capture && passive === options.passive) { - // remove the listener from the array of listeners - listeners.splice(i, 1); - // if all listeners for this interactable have been removed - // remove the interactable from the delegated arrays - if (!listeners.length) { - delegated.selectors.splice(index, 1); - delegated.contexts.splice(index, 1); - delegated.listeners.splice(index, 1); - // remove delegate function from context - remove(context, type, delegateListener); - remove(context, type, delegateUseCapture, true); - // remove the arrays if they are empty - if (!delegated.selectors.length) { - delegatedEvents[type] = null; - } - } - // only remove one listener - matchFound = true; - break; - } - } - if (matchFound) { - break; + const options = getOptions(optionalArg); + const delegated = delegatedEvents[type]; + let matchFound = false; + let index; + + if (!delegated) { + return; + } // count from last index of delegated to 0 + + + for (index = delegated.selectors.length - 1; index >= 0; index--) { + // look for matching selector and context Node + if (delegated.selectors[index] === selector && delegated.contexts[index] === context) { + const listeners = delegated.listeners[index]; // each item of the listeners array is an array: [function, capture, passive] + + for (let i = listeners.length - 1; i >= 0; i--) { + const [fn, capture, passive] = listeners[i]; // check if the listener functions and capture and passive flags match + + if (fn === listener && capture === !!options.capture && passive === options.passive) { + // remove the listener from the array of listeners + listeners.splice(i, 1); // if all listeners for this interactable have been removed + // remove the interactable from the delegated arrays + + if (!listeners.length) { + delegated.selectors.splice(index, 1); + delegated.contexts.splice(index, 1); + delegated.listeners.splice(index, 1); // remove delegate function from context + + remove(context, type, delegateListener); + remove(context, type, delegateUseCapture, true); // remove the arrays if they are empty + + if (!delegated.selectors.length) { + delegatedEvents[type] = null; } + } // only remove one listener + + + matchFound = true; + break; } + } + + if (matchFound) { + break; + } } -} -// bound to the interactable context when a DOM event + } +} // bound to the interactable context when a DOM event // listener is added to a selector interactable + + function delegateListener(event, optionalArg) { - const options = getOptions(optionalArg); - const fakeEvent = new FakeEvent(event); - const delegated = delegatedEvents[event.type]; - const [eventTarget] = (pointerUtils.getEventTargets(event)); - let element = eventTarget; - // climb up document tree looking for selector matches - while (is.element(element)) { - for (let i = 0; i < delegated.selectors.length; i++) { - const selector = delegated.selectors[i]; - const context = delegated.contexts[i]; - if (domUtils.matchesSelector(element, selector) && - domUtils.nodeContains(context, eventTarget) && - domUtils.nodeContains(context, element)) { - const listeners = delegated.listeners[i]; - fakeEvent.currentTarget = element; - for (const [fn, capture, passive] of listeners) { - if (capture === !!options.capture && passive === options.passive) { - fn(fakeEvent); - } - } - } + const options = getOptions(optionalArg); + const fakeEvent = new FakeEvent(event); + const delegated = delegatedEvents[event.type]; + const [eventTarget] = pointerUtils.getEventTargets(event); + let element = eventTarget; // climb up document tree looking for selector matches + + while (is.element(element)) { + for (let i = 0; i < delegated.selectors.length; i++) { + const selector = delegated.selectors[i]; + const context = delegated.contexts[i]; + + if (domUtils.matchesSelector(element, selector) && domUtils.nodeContains(context, eventTarget) && domUtils.nodeContains(context, element)) { + const listeners = delegated.listeners[i]; + fakeEvent.currentTarget = element; + + for (const [fn, capture, passive] of listeners) { + if (capture === !!options.capture && passive === options.passive) { + fn(fakeEvent); + } } - element = domUtils.parentNode(element); + } } + + element = domUtils.parentNode(element); + } } + function delegateUseCapture(event) { - return delegateListener.call(this, event, true); + return delegateListener.call(this, event, true); } + function getOptions(param) { - return is.object(param) ? param : { capture: param }; + return is.object(param) ? param : { + capture: param + }; } + export class FakeEvent { - constructor(originalEvent) { - this.originalEvent = originalEvent; - // duplicate the event so that currentTarget can be changed - pExtend(this, originalEvent); - } - preventOriginalDefault() { - this.originalEvent.preventDefault(); - } - stopPropagation() { - this.originalEvent.stopPropagation(); - } - stopImmediatePropagation() { - this.originalEvent.stopImmediatePropagation(); - } + constructor(originalEvent) { + this.originalEvent = originalEvent; + + _defineProperty(this, "currentTarget", void 0); + + // duplicate the event so that currentTarget can be changed + pExtend(this, originalEvent); + } + + preventOriginalDefault() { + this.originalEvent.preventDefault(); + } + + stopPropagation() { + this.originalEvent.stopPropagation(); + } + + stopImmediatePropagation() { + this.originalEvent.stopImmediatePropagation(); + } + } const events = { - add, - remove, - addDelegate, - removeDelegate, - delegateListener, - delegateUseCapture, - delegatedEvents, - documents, - supportsOptions: false, - supportsPassive: false, - _elements: elements, - _targets: targets, - init(window) { - window.document.createElement('div').addEventListener('test', null, { - get capture() { return (events.supportsOptions = true); }, - get passive() { return (events.supportsPassive = true); }, - }); - }, + add, + remove, + addDelegate, + removeDelegate, + delegateListener, + delegateUseCapture, + delegatedEvents, + documents, + supportsOptions: false, + supportsPassive: false, + _elements: elements, + _targets: targets, + + init(window) { + window.document.createElement('div').addEventListener('test', null, { + get capture() { + return events.supportsOptions = true; + }, + + get passive() { + return events.supportsPassive = true; + } + + }); + } + }; export default events; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDaEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDMUIsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUE7QUFDckMsT0FBTyxZQUFZLE1BQU0sZ0JBQWdCLENBQUE7QUFJekMsTUFBTSxRQUFRLEdBQWtCLEVBQUUsQ0FBQTtBQUNsQyxNQUFNLE9BQU8sR0FHUixFQUFFLENBQUE7QUFFUCxNQUFNLGVBQWUsR0FNakIsRUFBRSxDQUFBO0FBQ04sTUFBTSxTQUFTLEdBQWUsRUFBRSxDQUFBO0FBRWhDLFNBQVMsR0FBRyxDQUFFLE9BQW9CLEVBQUUsSUFBWSxFQUFFLFFBQWtCLEVBQUUsV0FBMkI7SUFDL0YsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3ZDLElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRWxDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLEdBQUc7WUFDUCxNQUFNLEVBQUUsRUFBRTtZQUNWLFNBQVMsRUFBRSxDQUFDO1NBQ2IsQ0FBQTtRQUVELFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQ3JCO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENB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LEVBQUUsS0FBSztJQUV0QixTQUFTLEVBQUUsUUFBUTtJQUNuQixRQUFRLEVBQUUsT0FBTztJQUVqQixJQUFJLENBQUUsTUFBYztRQUNsQixNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ2xFLElBQUksT0FBTyxLQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztZQUN6RCxJQUFJLE9BQU8sS0FBTSxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUM7U0FDMUQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGLENBQUE7QUFFRCxlQUFlLE1BQU0sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi9hcnInXG5pbXBvcnQgKiBhcyBkb21VdGlscyBmcm9tICcuL2RvbVV0aWxzJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnLi9pcydcbmltcG9ydCBwRXh0ZW5kIGZyb20gJy4vcG9pbnRlckV4dGVuZCdcbmltcG9ydCBwb2ludGVyVXRpbHMgZnJvbSAnLi9wb2ludGVyVXRpbHMnXG5cbnR5cGUgTGlzdGVuZXIgPSAoZXZlbnQ6IEV2ZW50IHwgRmFrZUV2ZW50KSA9PiBhbnlcblxuY29uc3QgZWxlbWVudHM6IEV2ZW50VGFyZ2V0W10gPSBbXVxuY29uc3QgdGFyZ2V0czogQXJyYXk8e1xuICBldmVudHM6IHsgW3R5cGU6IHN0cmluZ106IExpc3RlbmVyW10gfVxuICB0eXBlQ291bnQ6IG51bWJlclxufT4gPSBbXVxuXG5jb25zdCBkZWxlZ2F0ZWRFdmVudHM6IHtcbiAgW3R5cGU6IHN0cmluZ106IHtcbiAgICBzZWxlY3RvcnM6IHN0cmluZ1tdXG4gICAgY29udGV4dHM6IE5vZGVbXVxuICAgIGxpc3RlbmVyczogQXJyYXk8QXJyYXk8W0xpc3RlbmVyLCBib29sZWFuLCBib29sZWFuXT4+XG4gIH1cbn0gPSB7fVxuY29uc3QgZG9jdW1lbnRzOiBEb2N1bWVudFtdID0gW11cblxuZnVuY3Rpb24gYWRkIChlbGVtZW50OiBFdmVudFRhcmdldCwgdHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogTGlzdGVuZXIsIG9wdGlvbmFsQXJnPzogYm9vbGVhbiB8IGFueSkge1xuICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25hbEFyZylcbiAgbGV0IGVsZW1lbnRJbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudClcbiAgbGV0IHRhcmdldCA9IHRhcmdldHNbZWxlbWVudEluZGV4XVxuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGFyZ2V0ID0ge1xuICAgICAgZXZlbnRzOiB7fSxcbiAgICAgIHR5cGVDb3VudDogMCxcbiAgICB9XG5cbiAgICBlbGVtZW50SW5kZXggPSBlbGVtZW50cy5wdXNoKGVsZW1lbnQpIC0gMVxuICAgIHRhcmdldHMucHVzaCh0YXJnZXQpXG4gIH1cblxuICBpZiAoIXRhcmdldC5ldmVudHNbdHlwZV0pIHtcbiAgICB0YXJnZXQuZXZlbnRzW3R5cGVdID0gW11cbiAgICB0YXJnZXQudHlwZUNvdW50KytcbiAgfVxuXG4gIGlmICghY29udGFpbnModGFyZ2V0LmV2ZW50c1t0eXBlXSwgbGlzdGVuZXIpKSB7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyIGFzIGFueSwgZXZlbnRzLnN1cHBvcnRzT3B0aW9ucyA/IG9wdGlvbnMgOiAhIW9wdGlvbnMuY2FwdHVyZSlcbiAgICB0YXJnZXQuZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlIChlbGVtZW50OiBFdmVudFRhcmdldCwgdHlwZTogc3RyaW5nLCBsaXN0ZW5lcj86ICdhbGwnIHwgTGlzdGVuZXIsIG9wdGlvbmFsQXJnPzogYm9vbGVhbiB8IGFueSkge1xuICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25hbEFyZylcbiAgY29uc3QgZWxlbWVudEluZGV4ID0gZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KVxuICBjb25zdCB0YXJnZXQgPSB0YXJnZXRzW2VsZW1lbnRJbmRleF1cblxuICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LmV2ZW50cykge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdhbGwnKSB7XG4gICAgZm9yICh0eXBlIGluIHRhcmdldC5ldmVudHMpIHtcbiAgICAgIGlmICh0YXJnZXQuZXZlbnRzLmhhc093blByb3BlcnR5KHR5cGUpKSB7XG4gICAgICAgIHJlbW92ZShlbGVtZW50LCB0eXBlLCAnYWxsJylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodGFyZ2V0LmV2ZW50c1t0eXBlXSkge1xuICAgIGNvbnN0IGxlbiA9IHRhcmdldC5ldmVudHNbdHlwZV0ubGVuZ3RoXG5cbiAgICBpZiAobGlzdGVuZXIgPT09ICdhbGwnKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHJlbW92ZShlbGVtZW50LCB0eXBlLCB0YXJnZXQuZXZlbnRzW3R5cGVdW2ldLCBvcHRpb25zKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAodGFyZ2V0LmV2ZW50c1t0eXBlXVtpXSA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIgYXMgYW55LCBldmVudHMuc3VwcG9ydHNPcHRpb25zID8gb3B0aW9ucyA6ICEhb3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgIHRhcmdldC5ldmVudHNbdHlwZV0uc3BsaWNlKGksIDEpXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldC5ldmVudHNbdHlwZV0gJiYgdGFyZ2V0LmV2ZW50c1t0eXBlXS5sZW5ndGggPT09IDApIHtcbiAgICAgICh0YXJnZXQuZXZlbnRzW3R5cGVdIGFzIGFueSkgPSBudWxsXG4gICAgICB0YXJnZXQudHlwZUNvdW50LS1cbiAgICB9XG4gIH1cblxuICBpZiAoIXRhcmdldC50eXBlQ291bnQpIHtcbiAgICB0YXJnZXRzLnNwbGljZShlbGVtZW50SW5kZXgsIDEpXG4gICAgZWxlbWVudHMuc3BsaWNlKGVsZW1lbnRJbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGREZWxlZ2F0ZSAoc2VsZWN0b3I6IHN0cmluZywgY29udGV4dDogTm9kZSwgdHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogTGlzdGVuZXIsIG9wdGlvbmFsQXJnPzogYW55KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbmFsQXJnKVxuICBpZiAoIWRlbGVnYXRlZEV2ZW50c1t0eXBlXSkge1xuICAgIGRlbGVnYXRlZEV2ZW50c1t0eXBlXSA9IHtcbiAgICAgIGNvbnRleHRzIDogW10sXG4gICAgICBsaXN0ZW5lcnM6IFtdLFxuICAgICAgc2VsZWN0b3JzOiBbXSxcbiAgICB9XG5cbiAgICAvLyBhZGQgZGVsZWdhdGUgbGlzdGVuZXIgZnVuY3Rpb25zXG4gICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jdW1lbnRzKSB7XG4gICAgICBhZGQoZG9jLCB0eXBlLCBkZWxlZ2F0ZUxpc3RlbmVyKVxuICAgICAgYWRkKGRvYywgdHlwZSwgZGVsZWdhdGVVc2VDYXB0dXJlLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRlbGVnYXRlZCA9IGRlbGVnYXRlZEV2ZW50c1t0eXBlXVxuICBsZXQgaW5kZXhcblxuICBmb3IgKGluZGV4ID0gZGVsZWdhdGVkLnNlbGVjdG9ycy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgaWYgKGRlbGVnYXRlZC5zZWxlY3RvcnNbaW5kZXhdID09PSBzZWxlY3RvciAmJlxuICAgICAgICBkZWxlZ2F0ZWQuY29udGV4dHNbaW5kZXhdID09PSBjb250ZXh0KSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBpbmRleCA9IGRlbGVnYXRlZC5zZWxlY3RvcnMubGVuZ3RoXG5cbiAgICBkZWxlZ2F0ZWQuc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpXG4gICAgZGVsZWdhdGVkLmNvbnRleHRzLnB1c2goY29udGV4dClcbiAgICBkZWxlZ2F0ZWQubGlzdGVuZXJzLnB1c2goW10pXG4gIH1cblxuICAvLyBrZWVwIGxpc3RlbmVyIGFuZCBjYXB0dXJlIGFuZCBwYXNzaXZlIGZsYWdzXG4gIGRlbGVnYXRlZC5saXN0ZW5lcnNbaW5kZXhdLnB1c2goW2xpc3RlbmVyLCAhIW9wdGlvbnMuY2FwdHVyZSwgb3B0aW9ucy5wYXNzaXZlXSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGVsZWdhdGUgKHNlbGVjdG9yLCBjb250ZXh0LCB0eXBlLCBsaXN0ZW5lcj8sIG9wdGlvbmFsQXJnPzogYW55KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbmFsQXJnKVxuICBjb25zdCBkZWxlZ2F0ZWQgPSBkZWxlZ2F0ZWRFdmVudHNbdHlwZV1cbiAgbGV0IG1hdGNoRm91bmQgPSBmYWxzZVxuICBsZXQgaW5kZXhcblxuICBpZiAoIWRlbGVnYXRlZCkgeyByZXR1cm4gfVxuXG4gIC8vIGNvdW50IGZyb20gbGFzdCBpbmRleCBvZiBkZWxlZ2F0ZWQgdG8gMFxuICBmb3IgKGluZGV4ID0gZGVsZWdhdGVkLnNlbGVjdG9ycy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgLy8gbG9vayBmb3IgbWF0Y2hpbmcgc2VsZWN0b3IgYW5kIGNvbnRleHQgTm9kZVxuICAgIGlmIChkZWxlZ2F0ZWQuc2VsZWN0b3JzW2luZGV4XSA9PT0gc2VsZWN0b3IgJiZcbiAgICAgICAgZGVsZWdhdGVkLmNvbnRleHRzW2luZGV4XSA9PT0gY29udGV4dCkge1xuICAgICAgY29uc3QgbGlzdGVuZXJzID0gZGVsZWdhdGVkLmxpc3RlbmVyc1tpbmRleF1cblxuICAgICAgLy8gZWFjaCBpdGVtIG9mIHRoZSBsaXN0ZW5lcnMgYXJyYXkgaXMgYW4gYXJyYXk6IFtmdW5jdGlvbiwgY2FwdHVyZSwgcGFzc2l2ZV1cbiAgICAgIGZvciAobGV0IGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgW2ZuLCBjYXB0dXJlLCBwYXNzaXZlXSA9IGxpc3RlbmVyc1tpXVxuXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBsaXN0ZW5lciBmdW5jdGlvbnMgYW5kIGNhcHR1cmUgYW5kIHBhc3NpdmUgZmxhZ3MgbWF0Y2hcbiAgICAgICAgaWYgKGZuID09PSBsaXN0ZW5lciAmJiBjYXB0dXJlID09PSAhIW9wdGlvbnMuY2FwdHVyZSAmJiBwYXNzaXZlID09PSBvcHRpb25zLnBhc3NpdmUpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGxpc3RlbmVyIGZyb20gdGhlIGFycmF5IG9mIGxpc3RlbmVyc1xuICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSlcblxuICAgICAgICAgIC8vIGlmIGFsbCBsaXN0ZW5lcnMgZm9yIHRoaXMgaW50ZXJhY3RhYmxlIGhhdmUgYmVlbiByZW1vdmVkXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBpbnRlcmFjdGFibGUgZnJvbSB0aGUgZGVsZWdhdGVkIGFycmF5c1xuICAgICAgICAgIGlmICghbGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgZGVsZWdhdGVkLnNlbGVjdG9ycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICBkZWxlZ2F0ZWQuY29udGV4dHMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgICAgZGVsZWdhdGVkLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpXG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBkZWxlZ2F0ZSBmdW5jdGlvbiBmcm9tIGNvbnRleHRcbiAgICAgICAgICAgIHJlbW92ZShjb250ZXh0LCB0eXBlLCBkZWxlZ2F0ZUxpc3RlbmVyKVxuICAgICAgICAgICAgcmVtb3ZlKGNvbnRleHQsIHR5cGUsIGRlbGVnYXRlVXNlQ2FwdHVyZSwgdHJ1ZSlcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBhcnJheXMgaWYgdGhleSBhcmUgZW1wdHlcbiAgICAgICAgICAgIGlmICghZGVsZWdhdGVkLnNlbGVjdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZGVsZWdhdGVkRXZlbnRzW3R5cGVdID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBsaXN0ZW5lclxuICAgICAgICAgIG1hdGNoRm91bmQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hGb3VuZCkgeyBicmVhayB9XG4gICAgfVxuICB9XG59XG5cbi8vIGJvdW5kIHRvIHRoZSBpbnRlcmFjdGFibGUgY29udGV4dCB3aGVuIGEgRE9NIGV2ZW50XG4vLyBsaXN0ZW5lciBpcyBhZGRlZCB0byBhIHNlbGVjdG9yIGludGVyYWN0YWJsZVxuZnVuY3Rpb24gZGVsZWdhdGVMaXN0ZW5lciAoZXZlbnQ6IEV2ZW50LCBvcHRpb25hbEFyZz86IGFueSkge1xuICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25hbEFyZylcbiAgY29uc3QgZmFrZUV2ZW50ID0gbmV3IEZha2VFdmVudChldmVudClcbiAgY29uc3QgZGVsZWdhdGVkID0gZGVsZWdhdGVkRXZlbnRzW2V2ZW50LnR5cGVdXG4gIGNvbnN0IFtldmVudFRhcmdldF0gPSAocG9pbnRlclV0aWxzLmdldEV2ZW50VGFyZ2V0cyhldmVudCkpXG4gIGxldCBlbGVtZW50ID0gZXZlbnRUYXJnZXRcblxuICAvLyBjbGltYiB1cCBkb2N1bWVudCB0cmVlIGxvb2tpbmcgZm9yIHNlbGVjdG9yIG1hdGNoZXNcbiAgd2hpbGUgKGlzLmVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbGVnYXRlZC5zZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZGVsZWdhdGVkLnNlbGVjdG9yc1tpXVxuICAgICAgY29uc3QgY29udGV4dCA9IGRlbGVnYXRlZC5jb250ZXh0c1tpXVxuXG4gICAgICBpZiAoZG9tVXRpbHMubWF0Y2hlc1NlbGVjdG9yKGVsZW1lbnQsIHNlbGVjdG9yKSAmJlxuICAgICAgICAgIGRvbVV0aWxzLm5vZGVDb250YWlucyhjb250ZXh0LCBldmVudFRhcmdldCkgJiZcbiAgICAgICAgICBkb21VdGlscy5ub2RlQ29udGFpbnMoY29udGV4dCwgZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gZGVsZWdhdGVkLmxpc3RlbmVyc1tpXVxuXG4gICAgICAgIGZha2VFdmVudC5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudFxuXG4gICAgICAgIGZvciAoY29uc3QgW2ZuLCBjYXB0dXJlLCBwYXNzaXZlXSBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZSA9PT0gISFvcHRpb25zLmNhcHR1cmUgJiYgcGFzc2l2ZSA9PT0gb3B0aW9ucy5wYXNzaXZlKSB7XG4gICAgICAgICAgICBmbihmYWtlRXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxlbWVudCA9IGRvbVV0aWxzLnBhcmVudE5vZGUoZWxlbWVudClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWxlZ2F0ZVVzZUNhcHR1cmUgKGV2ZW50OiBFdmVudCkge1xuICByZXR1cm4gZGVsZWdhdGVMaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50LCB0cnVlKVxufVxuXG5mdW5jdGlvbiBnZXRPcHRpb25zIChwYXJhbSkge1xuICByZXR1cm4gaXMub2JqZWN0KHBhcmFtKSA/IHBhcmFtIDogeyBjYXB0dXJlOiBwYXJhbSB9XG59XG5cbmV4cG9ydCBjbGFzcyBGYWtlRXZlbnQgaW1wbGVtZW50cyBQYXJ0aWFsPEV2ZW50PiB7XG4gIGN1cnJlbnRUYXJnZXQ6IEV2ZW50VGFyZ2V0XG5cbiAgY29uc3RydWN0b3IgKHB1YmxpYyBvcmlnaW5hbEV2ZW50KSB7XG4gICAgLy8gZHVwbGljYXRlIHRoZSBldmVudCBzbyB0aGF0IGN1cnJlbnRUYXJnZXQgY2FuIGJlIGNoYW5nZWRcbiAgICBwRXh0ZW5kKHRoaXMsIG9yaWdpbmFsRXZlbnQpXG4gIH1cblxuICBwcmV2ZW50T3JpZ2luYWxEZWZhdWx0ICgpIHtcbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgc3RvcFByb3BhZ2F0aW9uICgpIHtcbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiAoKSB7XG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG4gIH1cbn1cblxuY29uc3QgZXZlbnRzID0ge1xuICBhZGQsXG4gIHJlbW92ZSxcblxuICBhZGREZWxlZ2F0ZSxcbiAgcmVtb3ZlRGVsZWdhdGUsXG5cbiAgZGVsZWdhdGVMaXN0ZW5lcixcbiAgZGVsZWdhdGVVc2VDYXB0dXJlLFxuICBkZWxlZ2F0ZWRFdmVudHMsXG4gIGRvY3VtZW50cyxcblxuICBzdXBwb3J0c09wdGlvbnM6IGZhbHNlLFxuICBzdXBwb3J0c1Bhc3NpdmU6IGZhbHNlLFxuXG4gIF9lbGVtZW50czogZWxlbWVudHMsXG4gIF90YXJnZXRzOiB0YXJnZXRzLFxuXG4gIGluaXQgKHdpbmRvdzogV2luZG93KSB7XG4gICAgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCB7XG4gICAgICBnZXQgY2FwdHVyZSAoKSB7IHJldHVybiAoZXZlbnRzLnN1cHBvcnRzT3B0aW9ucyA9IHRydWUpIH0sXG4gICAgICBnZXQgcGFzc2l2ZSAoKSB7IHJldHVybiAoZXZlbnRzLnN1cHBvcnRzUGFzc2l2ZSA9IHRydWUpIH0sXG4gICAgfSlcbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXZlbnRzXG4iXX0= \ No newline at end of file +//# sourceMappingURL=events.js.map \ No newline at end of file diff --git a/packages/utils/events.js.map b/packages/utils/events.js.map new file mode 100644 index 000000000..d074c8bc1 --- /dev/null +++ b/packages/utils/events.js.map @@ -0,0 +1,84 @@ +{ + "version": 3, + "sources": [ + "events.ts" + ], + "names": [ + "contains", + "domUtils", + "is", + "pExtend", + "pointerUtils", + "elements", + "targets", + "delegatedEvents", + "documents", + "add", + "element", + "type", + "listener", + "optionalArg", + "options", + "getOptions", + "elementIndex", + "indexOf", + "target", + "events", + "typeCount", + "push", + "addEventListener", + "supportsOptions", + "capture", + "remove", + "hasOwnProperty", + "len", + "length", + "i", + "removeEventListener", + "splice", + "addDelegate", + "selector", + "context", + "contexts", + "listeners", + "selectors", + "doc", + "delegateListener", + "delegateUseCapture", + "delegated", + "index", + "passive", + "removeDelegate", + "matchFound", + "fn", + "event", + "fakeEvent", + "FakeEvent", + "eventTarget", + "getEventTargets", + "matchesSelector", + "nodeContains", + "currentTarget", + "parentNode", + "call", + "param", + "object", + "constructor", + "originalEvent", + "preventOriginalDefault", + "preventDefault", + "stopPropagation", + "stopImmediatePropagation", + "supportsPassive", + "_elements", + "_targets", + "init", + "window", + "document", + "createElement" + ], + "mappings": "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", + "sourcesContent": [ + "import { contains } from './arr'\nimport * as domUtils from './domUtils'\nimport * as is from './is'\nimport pExtend from './pointerExtend'\nimport pointerUtils from './pointerUtils'\n\ntype Listener = (event: Event | FakeEvent) => any\n\nconst elements: EventTarget[] = []\nconst targets: Array<{\n events: { [type: string]: Listener[] }\n typeCount: number\n}> = []\n\nconst delegatedEvents: {\n [type: string]: {\n selectors: string[]\n contexts: Node[]\n listeners: Array>\n }\n} = {}\nconst documents: Document[] = []\n\nfunction add (element: EventTarget, type: string, listener: Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n let elementIndex = elements.indexOf(element)\n let target = targets[elementIndex]\n\n if (!target) {\n target = {\n events: {},\n typeCount: 0,\n }\n\n elementIndex = elements.push(element) - 1\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n target.typeCount++\n }\n\n if (!contains(target.events[type], listener)) {\n element.addEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].push(listener)\n }\n}\n\nfunction remove (element: EventTarget, type: string, listener?: 'all' | Listener, optionalArg?: boolean | any) {\n const options = getOptions(optionalArg)\n const elementIndex = elements.indexOf(element)\n const target = targets[elementIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(element, type, 'all')\n }\n }\n return\n }\n\n if (target.events[type]) {\n const len = target.events[type].length\n\n if (listener === 'all') {\n for (let i = 0; i < len; i++) {\n remove(element, type, target.events[type][i], options)\n }\n return\n }\n else {\n for (let i = 0; i < len; i++) {\n if (target.events[type][i] === listener) {\n element.removeEventListener(type, listener as any, events.supportsOptions ? options : !!options.capture)\n target.events[type].splice(i, 1)\n\n break\n }\n }\n }\n\n if (target.events[type] && target.events[type].length === 0) {\n (target.events[type] as any) = null\n target.typeCount--\n }\n }\n\n if (!target.typeCount) {\n targets.splice(elementIndex, 1)\n elements.splice(elementIndex, 1)\n }\n}\n\nfunction addDelegate (selector: string, context: Node, type: string, listener: Listener, optionalArg?: any) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = {\n contexts : [],\n listeners: [],\n selectors: [],\n }\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegated = delegatedEvents[type]\n let index\n\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n break\n }\n }\n\n if (index === -1) {\n index = delegated.selectors.length\n\n delegated.selectors.push(selector)\n delegated.contexts.push(context)\n delegated.listeners.push([])\n }\n\n // keep listener and capture and passive flags\n delegated.listeners[index].push([listener, !!options.capture, options.passive])\n}\n\nfunction removeDelegate (selector, context, type, listener?, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const delegated = delegatedEvents[type]\n let matchFound = false\n let index\n\n if (!delegated) { return }\n\n // count from last index of delegated to 0\n for (index = delegated.selectors.length - 1; index >= 0; index--) {\n // look for matching selector and context Node\n if (delegated.selectors[index] === selector &&\n delegated.contexts[index] === context) {\n const listeners = delegated.listeners[index]\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const [fn, capture, passive] = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (fn === listener && capture === !!options.capture && passive === options.passive) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this interactable have been removed\n // remove the interactable from the delegated arrays\n if (!listeners.length) {\n delegated.selectors.splice(index, 1)\n delegated.contexts.splice(index, 1)\n delegated.listeners.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n\n // remove the arrays if they are empty\n if (!delegated.selectors.length) {\n delegatedEvents[type] = null\n }\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) { break }\n }\n }\n}\n\n// bound to the interactable context when a DOM event\n// listener is added to a selector interactable\nfunction delegateListener (event: Event, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event)\n const delegated = delegatedEvents[event.type]\n const [eventTarget] = (pointerUtils.getEventTargets(event))\n let element = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegated.selectors.length; i++) {\n const selector = delegated.selectors[i]\n const context = delegated.contexts[i]\n\n if (domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)) {\n const listeners = delegated.listeners[i]\n\n fakeEvent.currentTarget = element\n\n for (const [fn, capture, passive] of listeners) {\n if (capture === !!options.capture && passive === options.passive) {\n fn(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n}\n\nfunction delegateUseCapture (event: Event) {\n return delegateListener.call(this, event, true)\n}\n\nfunction getOptions (param) {\n return is.object(param) ? param : { capture: param }\n}\n\nexport class FakeEvent implements Partial {\n currentTarget: EventTarget\n\n constructor (public originalEvent) {\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault () {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation () {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation () {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nconst events = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n supportsOptions: false,\n supportsPassive: false,\n\n _elements: elements,\n _targets: targets,\n\n init (window: Window) {\n window.document.createElement('div').addEventListener('test', null, {\n get capture () { return (events.supportsOptions = true) },\n get passive () { return (events.supportsPassive = true) },\n })\n },\n}\n\nexport default events\n" + ] +} \ No newline at end of file diff --git a/packages/utils/extend.d.ts b/packages/utils/extend.d.ts index 602a5cfe6..c0cc036e5 100644 --- a/packages/utils/extend.d.ts +++ b/packages/utils/extend.d.ts @@ -1 +1 @@ -export default function extend>(dest: U, source: T): T & U; +export default function extend(dest: U, source: T): T & U; diff --git a/packages/utils/extend.js b/packages/utils/extend.js index 070fdedd1..ec4020785 100644 --- a/packages/utils/extend.js +++ b/packages/utils/extend.js @@ -1,7 +1,9 @@ export default function extend(dest, source) { - for (const prop in source) { - dest[prop] = source[prop]; - } - return dest; + for (const prop in source) { + dest[prop] = source[prop]; + } + + const ret = dest; + return ret; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXh0ZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxPQUFPLFVBQVUsTUFBTSxDQUEyQixJQUFPLEVBQUUsTUFBUztJQUN6RSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRTtRQUN4QixJQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUM1QztJQUNELE9BQU8sSUFBYSxDQUFBO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmQ8VCwgVSBleHRlbmRzIFBhcnRpYWw8VD4+IChkZXN0OiBVLCBzb3VyY2U6IFQpIHtcbiAgZm9yIChjb25zdCBwcm9wIGluIHNvdXJjZSkge1xuICAgIChkZXN0IGFzIHVua25vd24gYXMgVClbcHJvcF0gPSBzb3VyY2VbcHJvcF1cbiAgfVxuICByZXR1cm4gZGVzdCBhcyBUICYgVVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=extend.js.map \ No newline at end of file diff --git a/packages/utils/extend.js.map b/packages/utils/extend.js.map new file mode 100644 index 000000000..e8149bbb9 --- /dev/null +++ b/packages/utils/extend.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "sources": [ + "extend.ts" + ], + "names": [ + "extend", + "dest", + "source", + "prop", + "ret" + ], + "mappings": "AAAA,eAAe,SAASA,MAAT,CAAsCC,IAAtC,EAA+CC,MAA/C,EAAiE;AAC9E,OAAK,MAAMC,IAAX,IAAmBD,MAAnB,EAA2B;AACxBD,IAAAA,IAAD,CAAuBE,IAAvB,IAA+BD,MAAM,CAACC,IAAD,CAArC;AACD;;AAED,QAAMC,GAAG,GAAGH,IAAZ;AAEA,SAAOG,GAAP;AACD", + "sourcesContent": [ + "export default function extend (dest: U, source: T): T & U {\n for (const prop in source) {\n (dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n" + ] +} \ No newline at end of file diff --git a/packages/utils/getOriginXY.d.ts b/packages/utils/getOriginXY.d.ts index 8465aebae..ed25bab1b 100644 --- a/packages/utils/getOriginXY.d.ts +++ b/packages/utils/getOriginXY.d.ts @@ -1,5 +1,4 @@ -import { HasGetRect } from '@interactjs/types/types'; -export default function (target: HasGetRect & { +export default function (target: Interact.HasGetRect & { options: Interact.PerActionDefaults; }, element: any, action?: any): { x: any; diff --git a/packages/utils/getOriginXY.js b/packages/utils/getOriginXY.js index 96dc78e3b..58d590c9b 100644 --- a/packages/utils/getOriginXY.js +++ b/packages/utils/getOriginXY.js @@ -1,9 +1,12 @@ -import { rectToXY, resolveRectLike } from './rect'; +import { rectToXY, resolveRectLike } from "./rect.js"; export default function (target, element, action) { - const actionOptions = target.options[action]; - const actionOrigin = actionOptions && actionOptions.origin; - const origin = actionOrigin || target.options.origin; - const originRect = resolveRectLike(origin, target, element, [target && element]); - return rectToXY(originRect) || { x: 0, y: 0 }; + const actionOptions = target.options[action]; + const actionOrigin = actionOptions && actionOptions.origin; + const origin = actionOrigin || target.options.origin; + const originRect = resolveRectLike(origin, target, element, [target && element]); + return rectToXY(originRect) || { + x: 0, + y: 0 + }; } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0T3JpZ2luWFkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnZXRPcmlnaW5YWS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUVsRCxNQUFNLENBQUMsT0FBTyxXQUFXLE1BQTRELEVBQUUsT0FBTyxFQUFFLE1BQU87SUFDckcsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFlBQVksR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQTtJQUMxRCxNQUFNLE1BQU0sR0FBRyxZQUFZLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7SUFFcEQsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFaEYsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFzR2V0UmVjdCB9IGZyb20gJ0BpbnRlcmFjdGpzL3R5cGVzL3R5cGVzJ1xuaW1wb3J0IHsgcmVjdFRvWFksIHJlc29sdmVSZWN0TGlrZSB9IGZyb20gJy4vcmVjdCdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHRhcmdldDogSGFzR2V0UmVjdCAmIHsgb3B0aW9uczogSW50ZXJhY3QuUGVyQWN0aW9uRGVmYXVsdHMgfSwgZWxlbWVudCwgYWN0aW9uPykge1xuICBjb25zdCBhY3Rpb25PcHRpb25zID0gdGFyZ2V0Lm9wdGlvbnNbYWN0aW9uXVxuICBjb25zdCBhY3Rpb25PcmlnaW4gPSBhY3Rpb25PcHRpb25zICYmIGFjdGlvbk9wdGlvbnMub3JpZ2luXG4gIGNvbnN0IG9yaWdpbiA9IGFjdGlvbk9yaWdpbiB8fCB0YXJnZXQub3B0aW9ucy5vcmlnaW5cblxuICBjb25zdCBvcmlnaW5SZWN0ID0gcmVzb2x2ZVJlY3RMaWtlKG9yaWdpbiwgdGFyZ2V0LCBlbGVtZW50LCBbdGFyZ2V0ICYmIGVsZW1lbnRdKVxuXG4gIHJldHVybiByZWN0VG9YWShvcmlnaW5SZWN0KSB8fCB7IHg6IDAsIHk6IDAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=getOriginXY.js.map \ No newline at end of file diff --git a/packages/utils/getOriginXY.js.map b/packages/utils/getOriginXY.js.map new file mode 100644 index 000000000..64c225e61 --- /dev/null +++ b/packages/utils/getOriginXY.js.map @@ -0,0 +1,24 @@ +{ + "version": 3, + "sources": [ + "getOriginXY.ts" + ], + "names": [ + "rectToXY", + "resolveRectLike", + "target", + "element", + "action", + "actionOptions", + "options", + "actionOrigin", + "origin", + "originRect", + "x", + "y" + ], + "mappings": "AAAA,SAASA,QAAT,EAAmBC,eAAnB;AAEA,eAAe,UAAUC,MAAV,EAAiFC,OAAjF,EAA0FC,MAA1F,EAAmG;AAChH,QAAMC,aAAa,GAAGH,MAAM,CAACI,OAAP,CAAeF,MAAf,CAAtB;AACA,QAAMG,YAAY,GAAGF,aAAa,IAAIA,aAAa,CAACG,MAApD;AACA,QAAMA,MAAM,GAAGD,YAAY,IAAIL,MAAM,CAACI,OAAP,CAAeE,MAA9C;AAEA,QAAMC,UAAU,GAAGR,eAAe,CAACO,MAAD,EAASN,MAAT,EAAiBC,OAAjB,EAA0B,CAACD,MAAM,IAAIC,OAAX,CAA1B,CAAlC;AAEA,SAAOH,QAAQ,CAACS,UAAD,CAAR,IAAwB;AAAEC,IAAAA,CAAC,EAAE,CAAL;AAAQC,IAAAA,CAAC,EAAE;AAAX,GAA/B;AACD", + "sourcesContent": [ + "import { rectToXY, resolveRectLike } from './rect'\n\nexport default function (target: Interact.HasGetRect & { options: Interact.PerActionDefaults }, 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" + ] +} \ No newline at end of file diff --git a/packages/utils/hypot.js b/packages/utils/hypot.js index 6b728b018..d3512e243 100644 --- a/packages/utils/hypot.js +++ b/packages/utils/hypot.js @@ -1,2 +1,2 @@ -export default (x, y) => Math.sqrt(x * x + y * y); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlwb3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJoeXBvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gIE1hdGguc3FydCh4ICogeCArIHkgKiB5KVxuIl19 \ No newline at end of file +export default ((x, y) => Math.sqrt(x * x + y * y)); +//# sourceMappingURL=hypot.js.map \ No newline at end of file diff --git a/packages/utils/hypot.js.map b/packages/utils/hypot.js.map new file mode 100644 index 000000000..02b62f173 --- /dev/null +++ b/packages/utils/hypot.js.map @@ -0,0 +1,16 @@ +{ + "version": 3, + "sources": [ + "hypot.ts" + ], + "names": [ + "x", + "y", + "Math", + "sqrt" + ], + "mappings": "AAAA,gBAAe,CAACA,CAAD,EAAYC,CAAZ,KAA2BC,IAAI,CAACC,IAAL,CAAUH,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAtB,CAA1C", + "sourcesContent": [ + "export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n" + ] +} \ No newline at end of file diff --git a/packages/utils/index.d.ts b/packages/utils/index.d.ts index a72448bfa..08db9c140 100644 --- a/packages/utils/index.d.ts +++ b/packages/utils/index.d.ts @@ -9,7 +9,7 @@ export declare function getQuadraticCurvePoint(startX: number, startY: number, c y: number; }; export declare function easeOutQuad(t: number, b: number, c: number, d: number): number; -export declare function copyAction(dest: Interact.ActionProps, src: Interact.ActionProps): import("@interactjs/core/Interaction").ActionProps; +export declare function copyAction(dest: Interact.ActionProps, src: Interact.ActionProps): import("../types/types").ActionProps; export { default as browser } from './browser'; export { default as clone } from './clone'; export { default as events } from './events'; @@ -20,5 +20,4 @@ export { default as normalizeListeners } from './normalizeListeners'; export { default as pointer } from './pointerUtils'; export { default as raf } from './raf'; export { default as rect } from './rect'; -export { default as Signals } from './Signals'; export { win, arr, dom, is }; diff --git a/packages/utils/index.js b/packages/utils/index.js index eb4c976d3..cc705c930 100644 --- a/packages/utils/index.js +++ b/packages/utils/index.js @@ -1,50 +1,50 @@ -import * as arr from './arr'; -import * as dom from './domUtils'; -import * as is from './is'; -import win from './window'; +import * as arr from "./arr.js"; +import * as dom from "./domUtils.js"; +import * as is from "./is.js"; +import win from "./window.js"; export function warnOnce(method, message) { - let warned = false; - // eslint-disable-next-line no-shadow - return function () { - if (!warned) { - win.window.console.warn(message); - warned = true; - } - return method.apply(this, arguments); - }; -} -// http://stackoverflow.com/a/5634528/2280888 + let warned = false; // eslint-disable-next-line no-shadow + + return function () { + if (!warned) { + win.window.console.warn(message); + warned = true; + } + + return method.apply(this, arguments); + }; +} // http://stackoverflow.com/a/5634528/2280888 + export function _getQBezierValue(t, p1, p2, p3) { - const iT = 1 - t; - return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3; + const iT = 1 - t; + return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3; } export function getQuadraticCurvePoint(startX, startY, cpX, cpY, endX, endY, position) { - return { - x: _getQBezierValue(position, startX, cpX, endX), - y: _getQBezierValue(position, startY, cpY, endY), - }; -} -// http://gizma.com/easing/ + return { + x: _getQBezierValue(position, startX, cpX, endX), + y: _getQBezierValue(position, startY, cpY, endY) + }; +} // http://gizma.com/easing/ + export function easeOutQuad(t, b, c, d) { - t /= d; - return -c * t * (t - 2) + b; + t /= d; + return -c * t * (t - 2) + b; } export function copyAction(dest, src) { - dest.name = src.name; - dest.axis = src.axis; - dest.edges = src.edges; - return dest; + dest.name = src.name; + dest.axis = src.axis; + dest.edges = src.edges; + return dest; } -export { default as browser } from './browser'; -export { default as clone } from './clone'; -export { default as events } from './events'; -export { default as extend } from './extend'; -export { default as getOriginXY } from './getOriginXY'; -export { default as hypot } from './hypot'; -export { default as normalizeListeners } from './normalizeListeners'; -export { default as pointer } from './pointerUtils'; -export { default as raf } from './raf'; -export { default as rect } from './rect'; -export { default as Signals } from './Signals'; +export { default as browser } from "./browser.js"; +export { default as clone } from "./clone.js"; +export { default as events } from "./events.js"; +export { default as extend } from "./extend.js"; +export { default as getOriginXY } from "./getOriginXY.js"; +export { default as hypot } from "./hypot.js"; +export { default as normalizeListeners } from "./normalizeListeners.js"; +export { default as pointer } from "./pointerUtils.js"; +export { default as raf } from "./raf.js"; +export { default as rect } from "./rect.js"; export { win, arr, dom, is }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQTtBQUM1QixPQUFPLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQTtBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxQixPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7QUFFMUIsTUFBTSxVQUFVLFFBQVEsQ0FBYyxNQUE2QixFQUFFLE9BQWU7SUFDbEYsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFBO0lBRWxCLHFDQUFxQztJQUNyQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNWLEdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN6QyxNQUFNLEdBQUcsSUFBSSxDQUFBO1NBQ2Q7UUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3RDLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsTUFBTSxVQUFVLGdCQUFnQixDQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7SUFDN0UsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxNQUFjLEVBQUUsTUFBYyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxRQUFnQjtJQUN0RyxPQUFPO1FBQ0wsQ0FBQyxFQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztRQUNqRCxDQUFDLEVBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO0tBQ2xELENBQUE7QUFDSCxDQUFDO0FBRUQsMkJBQTJCO0FBQzNCLE1BQU0sVUFBVSxXQUFXLENBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUNyRSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ04sT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFFLElBQTBCLEVBQUUsR0FBeUI7SUFDL0UsSUFBSSxDQUFDLElBQUksR0FBSSxHQUFHLENBQUMsSUFBSSxDQUFBO0lBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUksR0FBRyxDQUFDLElBQUksQ0FBQTtJQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7SUFFdEIsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDOUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDMUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDNUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDNUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDdEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDMUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDbkQsT0FBTyxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDdEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDeEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXJyIGZyb20gJy4vYXJyJ1xuaW1wb3J0ICogYXMgZG9tIGZyb20gJy4vZG9tVXRpbHMnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICcuL2lzJ1xuaW1wb3J0IHdpbiBmcm9tICcuL3dpbmRvdydcblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PbmNlPFQ+ICh0aGlzOiBULCBtZXRob2Q6ICguLi5hcmdzOiBhbnkpID0+IGFueSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gIGxldCB3YXJuZWQgPSBmYWxzZVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBUKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgICh3aW4gYXMgYW55KS53aW5kb3cuY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gICAgICB3YXJuZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH1cbn1cblxuLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTYzNDUyOC8yMjgwODg4XG5leHBvcnQgZnVuY3Rpb24gX2dldFFCZXppZXJWYWx1ZSAodDogbnVtYmVyLCBwMTogbnVtYmVyLCBwMjogbnVtYmVyLCBwMzogbnVtYmVyKSB7XG4gIGNvbnN0IGlUID0gMSAtIHRcbiAgcmV0dXJuIGlUICogaVQgKiBwMSArIDIgKiBpVCAqIHQgKiBwMiArIHQgKiB0ICogcDNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFF1YWRyYXRpY0N1cnZlUG9pbnQgKFxuICBzdGFydFg6IG51bWJlciwgc3RhcnRZOiBudW1iZXIsIGNwWDogbnVtYmVyLCBjcFk6IG51bWJlciwgZW5kWDogbnVtYmVyLCBlbmRZOiBudW1iZXIsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiAgX2dldFFCZXppZXJWYWx1ZShwb3NpdGlvbiwgc3RhcnRYLCBjcFgsIGVuZFgpLFxuICAgIHk6ICBfZ2V0UUJlemllclZhbHVlKHBvc2l0aW9uLCBzdGFydFksIGNwWSwgZW5kWSksXG4gIH1cbn1cblxuLy8gaHR0cDovL2dpem1hLmNvbS9lYXNpbmcvXG5leHBvcnQgZnVuY3Rpb24gZWFzZU91dFF1YWQgKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcikge1xuICB0IC89IGRcbiAgcmV0dXJuIC1jICogdCAqICh0IC0gMikgKyBiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5QWN0aW9uIChkZXN0OiBJbnRlcmFjdC5BY3Rpb25Qcm9wcywgc3JjOiBJbnRlcmFjdC5BY3Rpb25Qcm9wcykge1xuICBkZXN0Lm5hbWUgID0gc3JjLm5hbWVcbiAgZGVzdC5heGlzICA9IHNyYy5heGlzXG4gIGRlc3QuZWRnZXMgPSBzcmMuZWRnZXNcblxuICByZXR1cm4gZGVzdFxufVxuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGJyb3dzZXIgfSBmcm9tICcuL2Jyb3dzZXInXG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsb25lIH0gZnJvbSAnLi9jbG9uZSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnXG5leHBvcnQgeyBkZWZhdWx0IGFzIGV4dGVuZCB9IGZyb20gJy4vZXh0ZW5kJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBnZXRPcmlnaW5YWSB9IGZyb20gJy4vZ2V0T3JpZ2luWFknXG5leHBvcnQgeyBkZWZhdWx0IGFzIGh5cG90IH0gZnJvbSAnLi9oeXBvdCdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbm9ybWFsaXplTGlzdGVuZXJzIH0gZnJvbSAnLi9ub3JtYWxpemVMaXN0ZW5lcnMnXG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvaW50ZXIgfSBmcm9tICcuL3BvaW50ZXJVdGlscydcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmFmIH0gZnJvbSAnLi9yYWYnXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlY3QgfSBmcm9tICcuL3JlY3QnXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZ25hbHMgfSBmcm9tICcuL1NpZ25hbHMnXG5leHBvcnQgeyB3aW4sIGFyciwgZG9tLCBpcyB9XG4iXX0= \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/utils/index.js.map b/packages/utils/index.js.map new file mode 100644 index 000000000..a3c3e1128 --- /dev/null +++ b/packages/utils/index.js.map @@ -0,0 +1,62 @@ +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "arr", + "dom", + "is", + "win", + "warnOnce", + "method", + "message", + "warned", + "window", + "console", + "warn", + "apply", + "arguments", + "_getQBezierValue", + "t", + "p1", + "p2", + "p3", + "iT", + "getQuadraticCurvePoint", + "startX", + "startY", + "cpX", + "cpY", + "endX", + "endY", + "position", + "x", + "y", + "easeOutQuad", + "b", + "c", + "d", + "copyAction", + "dest", + "src", + "name", + "axis", + "edges", + "default", + "browser", + "clone", + "events", + "extend", + "getOriginXY", + "hypot", + "normalizeListeners", + "pointer", + "raf", + "rect" + ], + "mappings": "AAAA,OAAO,KAAKA,GAAZ;AACA,OAAO,KAAKC,GAAZ;AACA,OAAO,KAAKC,EAAZ;AACA,OAAOC,GAAP;AAEA,OAAO,SAASC,QAAT,CAA+BC,MAA/B,EAA8DC,OAA9D,EAA+E;AACpF,MAAIC,MAAM,GAAG,KAAb,CADoF,CAGpF;;AACA,SAAO,YAAmB;AACxB,QAAI,CAACA,MAAL,EAAa;AACVJ,MAAAA,GAAD,CAAaK,MAAb,CAAoBC,OAApB,CAA4BC,IAA5B,CAAiCJ,OAAjC;AACAC,MAAAA,MAAM,GAAG,IAAT;AACD;;AAED,WAAOF,MAAM,CAACM,KAAP,CAAa,IAAb,EAAmBC,SAAnB,CAAP;AACD,GAPD;AAQD,C,CAED;;AACA,OAAO,SAASC,gBAAT,CAA2BC,CAA3B,EAAsCC,EAAtC,EAAkDC,EAAlD,EAA8DC,EAA9D,EAA0E;AAC/E,QAAMC,EAAE,GAAG,IAAIJ,CAAf;AACA,SAAOI,EAAE,GAAGA,EAAL,GAAUH,EAAV,GAAe,IAAIG,EAAJ,GAASJ,CAAT,GAAaE,EAA5B,GAAiCF,CAAC,GAAGA,CAAJ,GAAQG,EAAhD;AACD;AAED,OAAO,SAASE,sBAAT,CACLC,MADK,EACWC,MADX,EAC2BC,GAD3B,EACwCC,GADxC,EACqDC,IADrD,EACmEC,IADnE,EACiFC,QADjF,EACmG;AACxG,SAAO;AACLC,IAAAA,CAAC,EAAGd,gBAAgB,CAACa,QAAD,EAAWN,MAAX,EAAmBE,GAAnB,EAAwBE,IAAxB,CADf;AAELI,IAAAA,CAAC,EAAGf,gBAAgB,CAACa,QAAD,EAAWL,MAAX,EAAmBE,GAAnB,EAAwBE,IAAxB;AAFf,GAAP;AAID,C,CAED;;AACA,OAAO,SAASI,WAAT,CAAsBf,CAAtB,EAAiCgB,CAAjC,EAA4CC,CAA5C,EAAuDC,CAAvD,EAAkE;AACvElB,EAAAA,CAAC,IAAIkB,CAAL;AACA,SAAO,CAACD,CAAD,GAAKjB,CAAL,IAAUA,CAAC,GAAG,CAAd,IAAmBgB,CAA1B;AACD;AAED,OAAO,SAASG,UAAT,CAAqBC,IAArB,EAAiDC,GAAjD,EAA4E;AACjFD,EAAAA,IAAI,CAACE,IAAL,GAAaD,GAAG,CAACC,IAAjB;AACAF,EAAAA,IAAI,CAACG,IAAL,GAAaF,GAAG,CAACE,IAAjB;AACAH,EAAAA,IAAI,CAACI,KAAL,GAAaH,GAAG,CAACG,KAAjB;AAEA,SAAOJ,IAAP;AACD;AAED,SAASK,OAAO,IAAIC,OAApB;AACA,SAASD,OAAO,IAAIE,KAApB;AACA,SAASF,OAAO,IAAIG,MAApB;AACA,SAASH,OAAO,IAAII,MAApB;AACA,SAASJ,OAAO,IAAIK,WAApB;AACA,SAASL,OAAO,IAAIM,KAApB;AACA,SAASN,OAAO,IAAIO,kBAApB;AACA,SAASP,OAAO,IAAIQ,OAApB;AACA,SAASR,OAAO,IAAIS,GAApB;AACA,SAAST,OAAO,IAAIU,IAApB;AACA,SAAS9C,GAAT,EAAcH,GAAd,EAAmBC,GAAnB,EAAwBC,EAAxB", + "sourcesContent": [ + "import * as arr from './arr'\nimport * as dom from './domUtils'\nimport * as is from './is'\nimport win from './window'\n\nexport function warnOnce (this: T, method: (...args: any) => any, message: string) {\n let warned = false\n\n // eslint-disable-next-line no-shadow\n return function (this: T) {\n if (!warned) {\n (win as any).window.console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nexport function _getQBezierValue (t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nexport function getQuadraticCurvePoint (\n startX: number, startY: number, cpX: number, cpY: number, endX: number, endY: number, position: number) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nexport function easeOutQuad (t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport function copyAction (dest: Interact.ActionProps, src: Interact.ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport { default as browser } from './browser'\nexport { default as clone } from './clone'\nexport { default as events } from './events'\nexport { default as extend } from './extend'\nexport { default as getOriginXY } from './getOriginXY'\nexport { default as hypot } from './hypot'\nexport { default as normalizeListeners } from './normalizeListeners'\nexport { default as pointer } from './pointerUtils'\nexport { default as raf } from './raf'\nexport { default as rect } from './rect'\nexport { win, arr, dom, is }\n" + ] +} \ No newline at end of file diff --git a/packages/utils/is.js b/packages/utils/is.js index 0897e5e2f..90008a46d 100644 --- a/packages/utils/is.js +++ b/packages/utils/is.js @@ -1,26 +1,23 @@ // tslint:disable variable-name -import isWindow from './isWindow'; -import win from './window'; -export const window = (thing) => thing === win.window || isWindow(thing); -export const docFrag = (thing) => object(thing) && thing.nodeType === 11; -export const object = (thing) => !!thing && (typeof thing === 'object'); -export const func = (thing) => typeof thing === 'function'; -export const number = (thing) => typeof thing === 'number'; -export const bool = (thing) => typeof thing === 'boolean'; -export const string = (thing) => typeof thing === 'string'; -export const element = (thing) => { - if (!thing || (typeof thing !== 'object')) { - return false; - } - const _window = win.getWindow(thing) || win.window; - return (/object|function/.test(typeof _window.Element) - ? thing instanceof _window.Element // DOM2 - : thing.nodeType === 1 && typeof thing.nodeName === 'string'); +import isWindow from "./isWindow.js"; +import win from "./window.js"; +export const window = thing => thing === win.window || isWindow(thing); +export const docFrag = thing => object(thing) && thing.nodeType === 11; +export const object = thing => !!thing && typeof thing === 'object'; +export const func = thing => typeof thing === 'function'; +export const number = thing => typeof thing === 'number'; +export const bool = thing => typeof thing === 'boolean'; +export const string = thing => typeof thing === 'string'; +export const element = thing => { + if (!thing || typeof thing !== 'object') { + return false; + } + + const _window = win.getWindow(thing) || win.window; + + return /object|function/.test(typeof _window.Element) ? thing instanceof _window.Element // DOM2 + : thing.nodeType === 1 && typeof thing.nodeName === 'string'; }; -export const plainObject = (thing) => object(thing) && - !!thing.constructor && - /function Object\b/.test(thing.constructor.toString()); -export const array = (thing) => (object(thing) && - (typeof thing.length !== 'undefined') && - func(thing.splice)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFBO0FBQ2pDLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQTtBQUUxQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQW1CLEVBQUUsQ0FDcEQsS0FBSyxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQVUsRUFBNkIsRUFBRSxDQUMvRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUE7QUFFeEMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBVSxFQUFxQyxFQUFFLENBQ3RFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQTtBQUV4QyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFVLEVBQWtDLEVBQUUsQ0FDakUsT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFBO0FBRTdCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQVUsRUFBbUIsRUFBRSxDQUNwRCxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUE7QUFFM0IsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBVSxFQUFvQixFQUFFLENBQ25ELE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQTtBQUU1QixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQW1CLEVBQUUsQ0FDcEQsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFBO0FBRTNCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQVUsRUFBNkIsRUFBRTtJQUMvRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQTtLQUFFO0lBRTNELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUVsRCxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNwRCxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTztRQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFBO0FBQ2pFLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBa0IsQ0FBQyxLQUFVLEVBQXFDLEVBQUUsQ0FDMUYsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztJQUNuQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0FBRXhELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQVUsRUFBa0IsRUFBRSxDQUNsRCxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDZCxDQUFDLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUM7SUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGUgdmFyaWFibGUtbmFtZVxuXG5pbXBvcnQgaXNXaW5kb3cgZnJvbSAnLi9pc1dpbmRvdydcbmltcG9ydCB3aW4gZnJvbSAnLi93aW5kb3cnXG5cbmV4cG9ydCBjb25zdCB3aW5kb3cgPSAodGhpbmc6IGFueSk6IHRoaW5nIGlzIFdpbmRvdyA9PlxuICB0aGluZyA9PT0gd2luLndpbmRvdyB8fCBpc1dpbmRvdyh0aGluZylcblxuZXhwb3J0IGNvbnN0IGRvY0ZyYWcgPSAodGhpbmc6IGFueSk6IHRoaW5nIGlzIERvY3VtZW50RnJhZ21lbnQgPT5cbiAgb2JqZWN0KHRoaW5nKSAmJiB0aGluZy5ub2RlVHlwZSA9PT0gMTFcblxuZXhwb3J0IGNvbnN0IG9iamVjdCA9ICh0aGluZzogYW55KTogdGhpbmcgaXMgeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0+XG4gICEhdGhpbmcgJiYgKHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCcpXG5cbmV4cG9ydCBjb25zdCBmdW5jID0gKHRoaW5nOiBhbnkpOiB0aGluZyBpcyAoLi4uYXJnczogYW55KSA9PiBhbnkgPT5cbiAgdHlwZW9mIHRoaW5nID09PSAnZnVuY3Rpb24nXG5cbmV4cG9ydCBjb25zdCBudW1iZXIgPSAodGhpbmc6IGFueSk6IHRoaW5nIGlzIG51bWJlciA9PlxuICB0eXBlb2YgdGhpbmcgPT09ICdudW1iZXInXG5cbmV4cG9ydCBjb25zdCBib29sID0gKHRoaW5nOiBhbnkpOiB0aGluZyBpcyBib29sZWFuID0+XG4gIHR5cGVvZiB0aGluZyA9PT0gJ2Jvb2xlYW4nXG5cbmV4cG9ydCBjb25zdCBzdHJpbmcgPSAodGhpbmc6IGFueSk6IHRoaW5nIGlzIHN0cmluZyA9PlxuICB0eXBlb2YgdGhpbmcgPT09ICdzdHJpbmcnXG5cbmV4cG9ydCBjb25zdCBlbGVtZW50ID0gKHRoaW5nOiBhbnkpOiB0aGluZyBpcyBJbnRlcmFjdC5FbGVtZW50ID0+IHtcbiAgaWYgKCF0aGluZyB8fCAodHlwZW9mIHRoaW5nICE9PSAnb2JqZWN0JykpIHsgcmV0dXJuIGZhbHNlIH1cblxuICBjb25zdCBfd2luZG93ID0gd2luLmdldFdpbmRvdyh0aGluZykgfHwgd2luLndpbmRvd1xuXG4gIHJldHVybiAoL29iamVjdHxmdW5jdGlvbi8udGVzdCh0eXBlb2YgX3dpbmRvdy5FbGVtZW50KVxuICAgID8gdGhpbmcgaW5zdGFuY2VvZiBfd2luZG93LkVsZW1lbnQgLy8gRE9NMlxuICAgIDogdGhpbmcubm9kZVR5cGUgPT09IDEgJiYgdHlwZW9mIHRoaW5nLm5vZGVOYW1lID09PSAnc3RyaW5nJylcbn1cblxuZXhwb3J0IGNvbnN0IHBsYWluT2JqZWN0OiB0eXBlb2Ygb2JqZWN0ID0gKHRoaW5nOiBhbnkpOiB0aGluZyBpcyB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPT5cbiAgb2JqZWN0KHRoaW5nKSAmJlxuICAhIXRoaW5nLmNvbnN0cnVjdG9yICYmXG4gIC9mdW5jdGlvbiBPYmplY3RcXGIvLnRlc3QodGhpbmcuY29uc3RydWN0b3IudG9TdHJpbmcoKSlcblxuZXhwb3J0IGNvbnN0IGFycmF5ID0gKHRoaW5nOiBhbnkpOiB0aGluZyBpcyBhbnlbXSA9PlxuICAob2JqZWN0KHRoaW5nKSAmJlxuICAodHlwZW9mIHRoaW5nLmxlbmd0aCAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gIGZ1bmModGhpbmcuc3BsaWNlKSlcbiJdfQ== \ No newline at end of file +export const plainObject = thing => object(thing) && !!thing.constructor && /function Object\b/.test(thing.constructor.toString()); +export const array = thing => object(thing) && typeof thing.length !== 'undefined' && func(thing.splice); +//# sourceMappingURL=is.js.map \ No newline at end of file diff --git a/packages/utils/is.js.map b/packages/utils/is.js.map new file mode 100644 index 000000000..15af7bed4 --- /dev/null +++ b/packages/utils/is.js.map @@ -0,0 +1,35 @@ +{ + "version": 3, + "sources": [ + "is.ts" + ], + "names": [ + "isWindow", + "win", + "window", + "thing", + "docFrag", + "object", + "nodeType", + "func", + "number", + "bool", + "string", + "element", + "_window", + "getWindow", + "test", + "Element", + "nodeName", + "plainObject", + "constructor", + "toString", + "array", + "length", + "splice" + ], + "mappings": "AAAA;AAEA,OAAOA,QAAP;AACA,OAAOC,GAAP;AAEA,OAAO,MAAMC,MAAM,GAAIC,KAAD,IACpBA,KAAK,KAAKF,GAAG,CAACC,MAAd,IAAwBF,QAAQ,CAACG,KAAD,CAD3B;AAGP,OAAO,MAAMC,OAAO,GAAID,KAAD,IACrBE,MAAM,CAACF,KAAD,CAAN,IAAiBA,KAAK,CAACG,QAAN,KAAmB,EAD/B;AAGP,OAAO,MAAMD,MAAM,GAAIF,KAAD,IACpB,CAAC,CAACA,KAAF,IAAY,OAAOA,KAAP,KAAiB,QADxB;AAGP,OAAO,MAAMI,IAAI,GAAIJ,KAAD,IAClB,OAAOA,KAAP,KAAiB,UADZ;AAGP,OAAO,MAAMK,MAAM,GAAIL,KAAD,IACpB,OAAOA,KAAP,KAAiB,QADZ;AAGP,OAAO,MAAMM,IAAI,GAAIN,KAAD,IAClB,OAAOA,KAAP,KAAiB,SADZ;AAGP,OAAO,MAAMO,MAAM,GAAIP,KAAD,IACpB,OAAOA,KAAP,KAAiB,QADZ;AAGP,OAAO,MAAMQ,OAAO,GAAIR,KAAD,IAA2C;AAChE,MAAI,CAACA,KAAD,IAAW,OAAOA,KAAP,KAAiB,QAAhC,EAA2C;AAAE,WAAO,KAAP;AAAc;;AAE3D,QAAMS,OAAO,GAAGX,GAAG,CAACY,SAAJ,CAAcV,KAAd,KAAwBF,GAAG,CAACC,MAA5C;;AAEA,SAAQ,kBAAkBY,IAAlB,CAAuB,OAAOF,OAAO,CAACG,OAAtC,IACJZ,KAAK,YAAYS,OAAO,CAACG,OADrB,CAC6B;AAD7B,IAEJZ,KAAK,CAACG,QAAN,KAAmB,CAAnB,IAAwB,OAAOH,KAAK,CAACa,QAAb,KAA0B,QAFtD;AAGD,CARM;AAUP,OAAO,MAAMC,WAA0B,GAAId,KAAD,IACxCE,MAAM,CAACF,KAAD,CAAN,IACA,CAAC,CAACA,KAAK,CAACe,WADR,IAEA,oBAAoBJ,IAApB,CAAyBX,KAAK,CAACe,WAAN,CAAkBC,QAAlB,EAAzB,CAHK;AAKP,OAAO,MAAMC,KAAK,GAAIjB,KAAD,IAClBE,MAAM,CAACF,KAAD,CAAN,IACA,OAAOA,KAAK,CAACkB,MAAb,KAAwB,WADxB,IAEDd,IAAI,CAACJ,KAAK,CAACmB,MAAP,CAHC", + "sourcesContent": [ + "// tslint:disable variable-name\n\nimport isWindow from './isWindow'\nimport win from './window'\n\nexport const window = (thing: any): thing is Window =>\n thing === win.window || isWindow(thing)\n\nexport const docFrag = (thing: any): thing is DocumentFragment =>\n object(thing) && thing.nodeType === 11\n\nexport const object = (thing: any): thing is { [index: string]: any } =>\n !!thing && (typeof thing === 'object')\n\nexport const func = (thing: any): thing is (...args: any) => any =>\n typeof thing === 'function'\n\nexport const number = (thing: any): thing is number =>\n typeof thing === 'number'\n\nexport const bool = (thing: any): thing is boolean =>\n typeof thing === 'boolean'\n\nexport const string = (thing: any): thing is string =>\n typeof thing === 'string'\n\nexport const element = (thing: any): thing is Interact.Element => {\n if (!thing || (typeof thing !== 'object')) { return false }\n\n const _window = win.getWindow(thing) || win.window\n\n return (/object|function/.test(typeof _window.Element)\n ? thing instanceof _window.Element // DOM2\n : thing.nodeType === 1 && typeof thing.nodeName === 'string')\n}\n\nexport const plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) &&\n !!thing.constructor &&\n /function Object\\b/.test(thing.constructor.toString())\n\nexport const array = (thing: any): thing is any[] =>\n (object(thing) &&\n (typeof thing.length !== 'undefined') &&\n func(thing.splice))\n" + ] +} \ No newline at end of file diff --git a/packages/utils/isWindow.js b/packages/utils/isWindow.js index 88f17180f..55efd021e 100644 --- a/packages/utils/isWindow.js +++ b/packages/utils/isWindow.js @@ -1,2 +1,2 @@ -export default thing => !!(thing && thing.Window) && (thing instanceof thing.Window); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNXaW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpc1dpbmRvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB0aGluZyA9PiAhISh0aGluZyAmJiB0aGluZy5XaW5kb3cpICYmICh0aGluZyBpbnN0YW5jZW9mIHRoaW5nLldpbmRvdylcbiJdfQ== \ No newline at end of file +export default (thing => !!(thing && thing.Window) && thing instanceof thing.Window); +//# sourceMappingURL=isWindow.js.map \ No newline at end of file diff --git a/packages/utils/isWindow.js.map b/packages/utils/isWindow.js.map new file mode 100644 index 000000000..f51ad2460 --- /dev/null +++ b/packages/utils/isWindow.js.map @@ -0,0 +1,14 @@ +{ + "version": 3, + "sources": [ + "isWindow.ts" + ], + "names": [ + "thing", + "Window" + ], + "mappings": "AAAA,gBAAeA,KAAK,IAAI,CAAC,EAAEA,KAAK,IAAIA,KAAK,CAACC,MAAjB,CAAD,IAA8BD,KAAK,YAAYA,KAAK,CAACC,MAA7E", + "sourcesContent": [ + "export default thing => !!(thing && thing.Window) && (thing instanceof thing.Window)\n" + ] +} \ No newline at end of file diff --git a/packages/utils/normalizeListeners.js b/packages/utils/normalizeListeners.js index b9d864955..514876dc8 100644 --- a/packages/utils/normalizeListeners.js +++ b/packages/utils/normalizeListeners.js @@ -1,36 +1,40 @@ -import extend from './extend'; -import * as is from './is'; +import extend from "./extend.js"; +import * as is from "./is.js"; export default function normalize(type, listeners, result) { - result = result || {}; - if (is.string(type) && type.search(' ') !== -1) { - type = split(type); + result = result || {}; + + if (is.string(type) && type.search(' ') !== -1) { + type = split(type); + } + + if (is.array(type)) { + return type.reduce((acc, t) => extend(acc, normalize(t, listeners, result)), result); + } // ({ type: fn }) -> ('', { type: fn }) + + + if (is.object(type)) { + listeners = type; + type = ''; + } + + if (is.func(listeners)) { + result[type] = result[type] || []; + result[type].push(listeners); + } else if (is.array(listeners)) { + for (const l of listeners) { + normalize(type, l, result); } - if (is.array(type)) { - return type.reduce((acc, t) => extend(acc, normalize(t, listeners, result)), result); + } else if (is.object(listeners)) { + for (const prefix in listeners) { + const combinedTypes = split(prefix).map(p => `${type}${p}`); + normalize(combinedTypes, listeners[prefix], result); } - // ({ type: fn }) -> ('', { type: fn }) - if (is.object(type)) { - listeners = type; - type = ''; - } - if (is.func(listeners)) { - result[type] = result[type] || []; - result[type].push(listeners); - } - else if (is.array(listeners)) { - for (const l of listeners) { - normalize(type, l, result); - } - } - else if (is.object(listeners)) { - for (const prefix in listeners) { - const combinedTypes = split(prefix).map(p => `${type}${p}`); - normalize(combinedTypes, listeners[prefix], result); - } - } - return result; + } + + return result; } + function split(type) { - return type.trim().split(/ +/); + return type.trim().split(/ +/); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplTGlzdGVuZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm9ybWFsaXplTGlzdGVuZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQU0xQixNQUFNLENBQUMsT0FBTyxVQUFVLFNBQVMsQ0FDL0IsSUFBeUIsRUFDekIsU0FBMkQsRUFDM0QsTUFBNEI7SUFFNUIsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUE7SUFFckIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDOUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNuQjtJQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQ2hCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUN4RCxNQUFNLENBQ1AsQ0FBQTtLQUNGO0lBRUQsdUNBQXVDO0lBQ3ZDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNuQixTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksR0FBRyxFQUFFLENBQUE7S0FDVjtJQUVELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQzdCO1NBQ0ksSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzVCLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQzNCO0tBQ0Y7U0FDSSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDN0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDOUIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7WUFFM0QsU0FBUyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUE7U0FDcEQ7S0FDRjtJQUVELE9BQU8sTUFBNkIsQ0FBQTtBQUN0QyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUUsSUFBWTtJQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHRlbmQgZnJvbSAnLi9leHRlbmQnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICcuL2lzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vcm1hbGl6ZWRMaXN0ZW5lcnMge1xuICBbdHlwZTogc3RyaW5nXTogSW50ZXJhY3QuTGlzdGVuZXJbXVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemUgKFxuICB0eXBlOiBJbnRlcmFjdC5FdmVudFR5cGVzLFxuICBsaXN0ZW5lcnM/OiBJbnRlcmFjdC5MaXN0ZW5lcnNBcmcgfCBJbnRlcmFjdC5MaXN0ZW5lcnNBcmdbXSxcbiAgcmVzdWx0PzogTm9ybWFsaXplZExpc3RlbmVycyxcbik6IE5vcm1hbGl6ZWRMaXN0ZW5lcnMge1xuICByZXN1bHQgPSByZXN1bHQgfHwge31cblxuICBpZiAoaXMuc3RyaW5nKHR5cGUpICYmIHR5cGUuc2VhcmNoKCcgJykgIT09IC0xKSB7XG4gICAgdHlwZSA9IHNwbGl0KHR5cGUpXG4gIH1cblxuICBpZiAoaXMuYXJyYXkodHlwZSkpIHtcbiAgICByZXR1cm4gdHlwZS5yZWR1Y2U8Tm9ybWFsaXplZExpc3RlbmVycz4oXG4gICAgICAoYWNjLCB0KSA9PiBleHRlbmQoYWNjLCBub3JtYWxpemUodCwgbGlzdGVuZXJzLCByZXN1bHQpKSxcbiAgICAgIHJlc3VsdFxuICAgIClcbiAgfVxuXG4gIC8vICh7IHR5cGU6IGZuIH0pIC0+ICgnJywgeyB0eXBlOiBmbiB9KVxuICBpZiAoaXMub2JqZWN0KHR5cGUpKSB7XG4gICAgbGlzdGVuZXJzID0gdHlwZVxuICAgIHR5cGUgPSAnJ1xuICB9XG5cbiAgaWYgKGlzLmZ1bmMobGlzdGVuZXJzKSkge1xuICAgIHJlc3VsdFt0eXBlXSA9IHJlc3VsdFt0eXBlXSB8fCBbXVxuICAgIHJlc3VsdFt0eXBlXS5wdXNoKGxpc3RlbmVycylcbiAgfVxuICBlbHNlIGlmIChpcy5hcnJheShsaXN0ZW5lcnMpKSB7XG4gICAgZm9yIChjb25zdCBsIG9mIGxpc3RlbmVycykge1xuICAgICAgbm9ybWFsaXplKHR5cGUsIGwsIHJlc3VsdClcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAoaXMub2JqZWN0KGxpc3RlbmVycykpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgIGNvbnN0IGNvbWJpbmVkVHlwZXMgPSBzcGxpdChwcmVmaXgpLm1hcChwID0+IGAke3R5cGV9JHtwfWApXG5cbiAgICAgIG5vcm1hbGl6ZShjb21iaW5lZFR5cGVzLCBsaXN0ZW5lcnNbcHJlZml4XSwgcmVzdWx0KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgTm9ybWFsaXplZExpc3RlbmVyc1xufVxuXG5mdW5jdGlvbiBzcGxpdCAodHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiB0eXBlLnRyaW0oKS5zcGxpdCgvICsvKVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=normalizeListeners.js.map \ No newline at end of file diff --git a/packages/utils/normalizeListeners.js.map b/packages/utils/normalizeListeners.js.map new file mode 100644 index 000000000..65942be15 --- /dev/null +++ b/packages/utils/normalizeListeners.js.map @@ -0,0 +1,34 @@ +{ + "version": 3, + "sources": [ + "normalizeListeners.ts" + ], + "names": [ + "extend", + "is", + "normalize", + "type", + "listeners", + "result", + "string", + "search", + "split", + "array", + "reduce", + "acc", + "t", + "object", + "func", + "push", + "l", + "prefix", + "combinedTypes", + "map", + "p", + "trim" + ], + "mappings": "AAAA,OAAOA,MAAP;AACA,OAAO,KAAKC,EAAZ;AAMA,eAAe,SAASC,SAAT,CACbC,IADa,EAEbC,SAFa,EAGbC,MAHa,EAIQ;AACrBA,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;;AAEA,MAAIJ,EAAE,CAACK,MAAH,CAAUH,IAAV,KAAmBA,IAAI,CAACI,MAAL,CAAY,GAAZ,MAAqB,CAAC,CAA7C,EAAgD;AAC9CJ,IAAAA,IAAI,GAAGK,KAAK,CAACL,IAAD,CAAZ;AACD;;AAED,MAAIF,EAAE,CAACQ,KAAH,CAASN,IAAT,CAAJ,EAAoB;AAClB,WAAOA,IAAI,CAACO,MAAL,CACL,CAACC,GAAD,EAAMC,CAAN,KAAYZ,MAAM,CAACW,GAAD,EAAMT,SAAS,CAACU,CAAD,EAAIR,SAAJ,EAAeC,MAAf,CAAf,CADb,EAELA,MAFK,CAAP;AAID,GAZoB,CAcrB;;;AACA,MAAIJ,EAAE,CAACY,MAAH,CAAUV,IAAV,CAAJ,EAAqB;AACnBC,IAAAA,SAAS,GAAGD,IAAZ;AACAA,IAAAA,IAAI,GAAG,EAAP;AACD;;AAED,MAAIF,EAAE,CAACa,IAAH,CAAQV,SAAR,CAAJ,EAAwB;AACtBC,IAAAA,MAAM,CAACF,IAAD,CAAN,GAAeE,MAAM,CAACF,IAAD,CAAN,IAAgB,EAA/B;AACAE,IAAAA,MAAM,CAACF,IAAD,CAAN,CAAaY,IAAb,CAAkBX,SAAlB;AACD,GAHD,MAIK,IAAIH,EAAE,CAACQ,KAAH,CAASL,SAAT,CAAJ,EAAyB;AAC5B,SAAK,MAAMY,CAAX,IAAgBZ,SAAhB,EAA2B;AACzBF,MAAAA,SAAS,CAACC,IAAD,EAAOa,CAAP,EAAUX,MAAV,CAAT;AACD;AACF,GAJI,MAKA,IAAIJ,EAAE,CAACY,MAAH,CAAUT,SAAV,CAAJ,EAA0B;AAC7B,SAAK,MAAMa,MAAX,IAAqBb,SAArB,EAAgC;AAC9B,YAAMc,aAAa,GAAGV,KAAK,CAACS,MAAD,CAAL,CAAcE,GAAd,CAAkBC,CAAC,IAAK,GAAEjB,IAAK,GAAEiB,CAAE,EAAnC,CAAtB;AAEAlB,MAAAA,SAAS,CAACgB,aAAD,EAAgBd,SAAS,CAACa,MAAD,CAAzB,EAAmCZ,MAAnC,CAAT;AACD;AACF;;AAED,SAAOA,MAAP;AACD;;AAED,SAASG,KAAT,CAAgBL,IAAhB,EAA8B;AAC5B,SAAOA,IAAI,CAACkB,IAAL,GAAYb,KAAZ,CAAkB,IAAlB,CAAP;AACD", + "sourcesContent": [ + "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" + ] +} \ No newline at end of file diff --git a/packages/utils/normalizeListeners.spec.js b/packages/utils/normalizeListeners.spec.js deleted file mode 100644 index 155e2b7f6..000000000 --- a/packages/utils/normalizeListeners.spec.js +++ /dev/null @@ -1,44 +0,0 @@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplTGlzdGVuZXJzLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub3JtYWxpemVMaXN0ZW5lcnMuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSw0QkFBNEIsQ0FBQTtBQUM3QyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBO0FBRXJELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuQyxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7SUFDbEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFBO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtJQUVsQixDQUFDLENBQUMsU0FBUyxDQUNULGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFDOUI7UUFDRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDWCxFQUNELHVDQUF1QyxDQUFDLENBQUE7SUFFMUMsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQ3BDO1FBQ0UsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ1gsRUFDRCwwQ0FBMEMsQ0FBQyxDQUFBO0lBRTdDLENBQUMsQ0FBQyxTQUFTLENBQ1Qsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUNwQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDekMscURBQXFELENBQUMsQ0FBQTtJQUV4RCxDQUFDLENBQUMsU0FBUyxDQUNULGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNuQztRQUNFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDZCxFQUNELDBDQUEwQyxDQUFDLENBQUE7SUFFN0MsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDeEQ7UUFDRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakIsRUFDRCxxREFBcUQsQ0FBQyxDQUFBO0lBRXhELENBQUMsQ0FBQyxTQUFTLENBQ1Qsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ25FO1FBQ0UsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQixTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakIsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNsQixFQUNELHNFQUFzRSxDQUFDLENBQUE7SUFFekUsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUM5QztRQUNFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ1gsRUFDRCw2Q0FBNkMsQ0FBQyxDQUFBO0lBRWhELENBQUMsQ0FBQyxTQUFTLENBQ1Qsa0JBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDbkQ7UUFDRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1YsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNWLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDWCxFQUNELDZEQUE2RCxDQUFDLENBQUE7SUFFaEUsQ0FBQyxDQUFDLFNBQVMsQ0FDVCxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDN0Q7UUFDRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqQixFQUNELHFFQUFxRSxDQUFDLENBQUE7SUFFeEUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ1QsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdGVzdCBmcm9tICdAaW50ZXJhY3Rqcy9fZGV2L3Rlc3QvdGVzdCdcbmltcG9ydCBub3JtYWxpemVMaXN0ZW5lcnMgZnJvbSAnLi9ub3JtYWxpemVMaXN0ZW5lcnMnXG5cbnRlc3QoJ3V0aWxzL25vcm1hbGl6ZUxpc3RlbmVycycsIHQgPT4ge1xuICBjb25zdCBhID0gKCkgPT4ge31cbiAgY29uc3QgYiA9ICgpID0+IHt9XG4gIGNvbnN0IGMgPSAoKSA9PiB7fVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG5vcm1hbGl6ZUxpc3RlbmVycygndHlwZTEnLCBhKSxcbiAgICB7XG4gICAgICB0eXBlMTogW2FdLFxuICAgIH0sXG4gICAgJ3NpbmdsZSB0eXBlLCBzaW5nbGUgbGlzdGVuZXIgZnVuY3Rpb24nKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG5vcm1hbGl6ZUxpc3RlbmVycygndHlwZTEgdHlwZTInLCBhKSxcbiAgICB7XG4gICAgICB0eXBlMTogW2FdLFxuICAgICAgdHlwZTI6IFthXSxcbiAgICB9LFxuICAgICdtdWx0aXBsZSB0eXBlcywgc2luZ2xlIGxpc3RlbmVyIGZ1bmN0aW9uJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoJ3R5cGUxIHR5cGUyJywgYSksXG4gICAgbm9ybWFsaXplTGlzdGVuZXJzKFsndHlwZTEnLCAndHlwZTInXSwgYSksXG4gICAgJ2FycmF5IG9mIHR5cGVzIGVxdWl2YWxlbnQgdG8gc3BhY2Ugc2VwYXJhdGVkIHN0cmluZycpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgbm9ybWFsaXplTGlzdGVuZXJzKCd0eXBlMScsIFthLCBiXSksXG4gICAge1xuICAgICAgdHlwZTE6IFthLCBiXSxcbiAgICB9LFxuICAgICdzaW5nbGUgdHlwZSwgbXVsdGlwbGUgbGlzdGVuZXIgZnVuY3Rpb25zJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoJ3ByZWZpeCcsIHsgXzE6IFthLCBiXSwgXzI6IFtiLCBjXSB9KSxcbiAgICB7XG4gICAgICBwcmVmaXhfMTogW2EsIGJdLFxuICAgICAgcHJlZml4XzI6IFtiLCBjXSxcbiAgICB9LFxuICAgICdzaW5nbGUgdHlwZSBwcmVmaXgsIG9iamVjdCBvZiB7IHN1ZmZpeDogW2ZuLCAuLi5dIH0nKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG5vcm1hbGl6ZUxpc3RlbmVycygncHJlZml4MSBwcmVmaXgyJywgW3sgXzE6IFthLCBiXSwgXzI6IFtiLCBjXSB9XSksXG4gICAge1xuICAgICAgcHJlZml4MV8xOiBbYSwgYl0sXG4gICAgICBwcmVmaXgxXzI6IFtiLCBjXSxcbiAgICAgIHByZWZpeDJfMTogW2EsIGJdLFxuICAgICAgcHJlZml4Ml8yOiBbYiwgY10sXG4gICAgfSxcbiAgICAnbXVsdGlwbGUgdHlwZSBwcmVmaXhlcywgc2luZ2xlIGxlbmd0aCBhcnJheSBvZiB7IHN1ZmZpeDogW2ZuLCAuLi5dIH0nKVxuXG4gIHQuZGVlcEVxdWFsKFxuICAgIG5vcm1hbGl6ZUxpc3RlbmVycyh7IF8xOiBbYSwgYl0sIF8yOiBbYiwgY10gfSksXG4gICAge1xuICAgICAgXzE6IFthLCBiXSxcbiAgICAgIF8yOiBbYiwgY10sXG4gICAgfSxcbiAgICAnb2JqZWN0IG9mIHsgc3VmZml4OiBbZm4sIC4uLl0gfSBhcyB0eXBlIGFyZycpXG5cbiAgdC5kZWVwRXF1YWwoXG4gICAgbm9ybWFsaXplTGlzdGVuZXJzKHsgJ18xIF8yJzogW2EsIGJdLCBfMzogW2IsIGNdIH0pLFxuICAgIHtcbiAgICAgIF8xOiBbYSwgYl0sXG4gICAgICBfMjogW2EsIGJdLFxuICAgICAgXzM6IFtiLCBjXSxcbiAgICB9LFxuICAgICdvYmplY3Qgb2YgeyBcInN1ZmZpeDEgc3VmZml4MlwiOiBbZm4sIC4uLl0sIC4uLiB9IGFzIHR5cGUgYXJnJylcblxuICB0LmRlZXBFcXVhbChcbiAgICBub3JtYWxpemVMaXN0ZW5lcnMoJ3ByZWZpeCcsIHsgJ18xIF8yJzogW2EsIGJdLCBfMzogW2IsIGNdIH0pLFxuICAgIHtcbiAgICAgIHByZWZpeF8xOiBbYSwgYl0sXG4gICAgICBwcmVmaXhfMjogW2EsIGJdLFxuICAgICAgcHJlZml4XzM6IFtiLCBjXSxcbiAgICB9LFxuICAgICdzaW5nbGUgdHlwZSBwcmVmaXgsIG9iamVjdCBvZiB7IFwic3VmZml4MSBzdWZmaXgyXCI6IFtmbiwgLi4uXSwgLi4uIH0nKVxuXG4gIHQuZW5kKClcbn0pXG4iXX0= \ No newline at end of file diff --git a/packages/utils/pointerExtend.js b/packages/utils/pointerExtend.js index 54954ceb6..62a9c622d 100644 --- a/packages/utils/pointerExtend.js +++ b/packages/utils/pointerExtend.js @@ -1,23 +1,26 @@ function pointerExtend(dest, source) { - for (const prop in source) { - const prefixedPropREs = pointerExtend.prefixedPropREs; - let deprecated = false; - // skip deprecated prefixed properties - for (const vendor in prefixedPropREs) { - if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) { - deprecated = true; - break; - } - } - if (!deprecated && typeof source[prop] !== 'function') { - dest[prop] = source[prop]; - } + for (const prop in source) { + const prefixedPropREs = pointerExtend.prefixedPropREs; + let deprecated = false; // skip deprecated prefixed properties + + for (const vendor in prefixedPropREs) { + if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) { + deprecated = true; + break; + } } - return dest; + + if (!deprecated && typeof source[prop] !== 'function') { + dest[prop] = source[prop]; + } + } + + return dest; } + pointerExtend.prefixedPropREs = { - webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/, - moz: /(Pressure)$/, + webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/, + moz: /(Pressure)$/ }; export default pointerExtend; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlckV4dGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvaW50ZXJFeHRlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsU0FBUyxhQUFhLENBQUUsSUFBSSxFQUFFLE1BQU07SUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUU7UUFDekIsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQTtRQUNyRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUE7UUFFdEIsc0NBQXNDO1FBQ3RDLEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEUsVUFBVSxHQUFHLElBQUksQ0FBQTtnQkFDakIsTUFBSzthQUNOO1NBQ0Y7UUFFRCxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFCO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxhQUFhLENBQUMsZUFBZSxHQUFHO0lBQzlCLE1BQU0sRUFBRSxnREFBZ0Q7SUFDeEQsR0FBRyxFQUFFLGFBQWE7Q0FDbkIsQ0FBQTtBQUVELGVBQWUsYUFBYSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBQb2ludGVyRXh0ZW5kIHtcbiAgd2Via2l0OiBSZWdFeHBcbiAgW3ByZWZpeDogc3RyaW5nXTogUmVnRXhwXG59XG5cbmZ1bmN0aW9uIHBvaW50ZXJFeHRlbmQgKGRlc3QsIHNvdXJjZSkge1xuICBmb3IgKGNvbnN0IHByb3AgaW4gc291cmNlKSB7XG4gICAgY29uc3QgcHJlZml4ZWRQcm9wUkVzID0gcG9pbnRlckV4dGVuZC5wcmVmaXhlZFByb3BSRXNcbiAgICBsZXQgZGVwcmVjYXRlZCA9IGZhbHNlXG5cbiAgICAvLyBza2lwIGRlcHJlY2F0ZWQgcHJlZml4ZWQgcHJvcGVydGllc1xuICAgIGZvciAoY29uc3QgdmVuZG9yIGluIHByZWZpeGVkUHJvcFJFcykge1xuICAgICAgaWYgKHByb3AuaW5kZXhPZih2ZW5kb3IpID09PSAwICYmIHByZWZpeGVkUHJvcFJFc1t2ZW5kb3JdLnRlc3QocHJvcCkpIHtcbiAgICAgICAgZGVwcmVjYXRlZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRlcHJlY2F0ZWQgJiYgdHlwZW9mIHNvdXJjZVtwcm9wXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGVzdFtwcm9wXSA9IHNvdXJjZVtwcm9wXVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGVzdFxufVxuXG5wb2ludGVyRXh0ZW5kLnByZWZpeGVkUHJvcFJFcyA9IHtcbiAgd2Via2l0OiAvKE1vdmVtZW50W1hZXXxSYWRpdXNbWFldfFJvdGF0aW9uQW5nbGV8Rm9yY2UpJC8sXG4gIG1vejogLyhQcmVzc3VyZSkkLyxcbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9pbnRlckV4dGVuZFxuIl19 \ No newline at end of file +//# sourceMappingURL=pointerExtend.js.map \ No newline at end of file diff --git a/packages/utils/pointerExtend.js.map b/packages/utils/pointerExtend.js.map new file mode 100644 index 000000000..fd9040cfa --- /dev/null +++ b/packages/utils/pointerExtend.js.map @@ -0,0 +1,23 @@ +{ + "version": 3, + "sources": [ + "pointerExtend.ts" + ], + "names": [ + "pointerExtend", + "dest", + "source", + "prop", + "prefixedPropREs", + "deprecated", + "vendor", + "indexOf", + "test", + "webkit", + "moz" + ], + "mappings": "AAKA,SAASA,aAAT,CAAwBC,IAAxB,EAA8BC,MAA9B,EAAsC;AACpC,OAAK,MAAMC,IAAX,IAAmBD,MAAnB,EAA2B;AACzB,UAAME,eAAe,GAAGJ,aAAa,CAACI,eAAtC;AACA,QAAIC,UAAU,GAAG,KAAjB,CAFyB,CAIzB;;AACA,SAAK,MAAMC,MAAX,IAAqBF,eAArB,EAAsC;AACpC,UAAID,IAAI,CAACI,OAAL,CAAaD,MAAb,MAAyB,CAAzB,IAA8BF,eAAe,CAACE,MAAD,CAAf,CAAwBE,IAAxB,CAA6BL,IAA7B,CAAlC,EAAsE;AACpEE,QAAAA,UAAU,GAAG,IAAb;AACA;AACD;AACF;;AAED,QAAI,CAACA,UAAD,IAAe,OAAOH,MAAM,CAACC,IAAD,CAAb,KAAwB,UAA3C,EAAuD;AACrDF,MAAAA,IAAI,CAACE,IAAD,CAAJ,GAAaD,MAAM,CAACC,IAAD,CAAnB;AACD;AACF;;AACD,SAAOF,IAAP;AACD;;AAEDD,aAAa,CAACI,eAAd,GAAgC;AAC9BK,EAAAA,MAAM,EAAE,gDADsB;AAE9BC,EAAAA,GAAG,EAAE;AAFyB,CAAhC;AAKA,eAAeV,aAAf", + "sourcesContent": [ + "export interface PointerExtend {\n webkit: RegExp\n [prefix: string]: RegExp\n}\n\nfunction pointerExtend (dest, source) {\n for (const prop in source) {\n const prefixedPropREs = pointerExtend.prefixedPropREs\n let deprecated = false\n\n // skip deprecated prefixed properties\n for (const vendor in prefixedPropREs) {\n if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n deprecated = true\n break\n }\n }\n\n if (!deprecated && typeof source[prop] !== 'function') {\n dest[prop] = source[prop]\n }\n }\n return dest\n}\n\npointerExtend.prefixedPropREs = {\n webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n moz: /(Pressure)$/,\n}\n\nexport default pointerExtend\n" + ] +} \ No newline at end of file diff --git a/packages/utils/pointerUtils.d.ts b/packages/utils/pointerUtils.d.ts index 5069cb2f8..f137e5300 100644 --- a/packages/utils/pointerUtils.d.ts +++ b/packages/utils/pointerUtils.d.ts @@ -19,7 +19,7 @@ declare const pointerUtils: { screenX: number; screenY: number; }; - touchBBox(event: Event | (Touch | MouseEvent | PointerEvent | TouchEvent | import("@interactjs/core/InteractEvent").InteractEvent)[]): { + touchBBox(event: Event | (MouseEvent | Touch | PointerEvent | import("../types/types").InteractEvent | TouchEvent)[]): { x: number; y: number; left: number; @@ -58,7 +58,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & MouseEvent) | ({ + } & MouseEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -72,7 +72,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & PointerEvent) | ({ + } & MouseEvent & PointerEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -86,7 +86,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & TouchEvent) | ({ + } & MouseEvent & import("../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -100,7 +100,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & Touch & import("@interactjs/core/InteractEvent").InteractEvent) | ({ + } & MouseEvent & TouchEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -114,7 +114,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent) | ({ + } & Touch & MouseEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -128,7 +128,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent & PointerEvent) | ({ + } & Touch & PointerEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -142,7 +142,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent & TouchEvent) | ({ + } & Touch & import("../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -156,7 +156,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & MouseEvent & import("@interactjs/core/InteractEvent").InteractEvent) | ({ + } & Touch & TouchEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -198,7 +198,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & PointerEvent & TouchEvent) | ({ + } & PointerEvent & import("../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -212,7 +212,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & PointerEvent & import("@interactjs/core/InteractEvent").InteractEvent) | ({ + } & PointerEvent & TouchEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -226,7 +226,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent & MouseEvent) | ({ + } & import("../types/types").InteractEvent & MouseEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -240,7 +240,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent & PointerEvent) | ({ + } & import("../types/types").InteractEvent & PointerEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -254,7 +254,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent & TouchEvent) | ({ + } & import("../types/types").InteractEvent) | ({ coords: MockCoords; readonly page: any; readonly client: any; @@ -268,7 +268,7 @@ declare const pointerUtils: { readonly type: any; readonly pointerType: any; readonly buttons: any; - } & import("@interactjs/core/InteractEvent").InteractEvent); + } & import("../types/types").InteractEvent & TouchEvent); }; export default pointerUtils; export interface MockCoords { diff --git a/packages/utils/pointerUtils.js b/packages/utils/pointerUtils.js index 1908a7c73..1b1c06351 100644 --- a/packages/utils/pointerUtils.js +++ b/packages/utils/pointerUtils.js @@ -1,214 +1,269 @@ -import browser from './browser'; -import dom from './domObjects'; -import * as domUtils from './domUtils'; -import hypot from './hypot'; -import * as is from './is'; -import pointerExtend from './pointerExtend'; +import browser from "./browser.js"; +import dom from "./domObjects.js"; +import * as domUtils from "./domUtils.js"; +import hypot from "./hypot.js"; +import * as is from "./is.js"; +import pointerExtend from "./pointerExtend.js"; const pointerUtils = { - copyCoords(dest, src) { - dest.page = dest.page || {}; - dest.page.x = src.page.x; - dest.page.y = src.page.y; - dest.client = dest.client || {}; - dest.client.x = src.client.x; - dest.client.y = src.client.y; - dest.timeStamp = src.timeStamp; - }, - setCoordDeltas(targetObj, prev, cur) { - targetObj.page.x = cur.page.x - prev.page.x; - targetObj.page.y = cur.page.y - prev.page.y; - targetObj.client.x = cur.client.x - prev.client.x; - targetObj.client.y = cur.client.y - prev.client.y; - targetObj.timeStamp = cur.timeStamp - prev.timeStamp; - }, - setCoordVelocity(targetObj, delta) { - const dt = Math.max(delta.timeStamp / 1000, 0.001); - targetObj.page.x = delta.page.x / dt; - targetObj.page.y = delta.page.y / dt; - targetObj.client.x = delta.client.x / dt; - targetObj.client.y = delta.client.y / dt; - targetObj.timeStamp = dt; - }, - isNativePointer(pointer) { - return (pointer instanceof dom.Event || pointer instanceof dom.Touch); - }, - // Get specified X/Y coords for mouse or event.touches[0] - getXY(type, pointer, xy) { - xy = xy || {}; - type = type || 'page'; - xy.x = pointer[type + 'X']; - xy.y = pointer[type + 'Y']; - return xy; - }, - getPageXY(pointer, page) { - page = page || { x: 0, y: 0 }; - // Opera Mobile handles the viewport and scrolling oddly - if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) { - pointerUtils.getXY('screen', pointer, page); - page.x += window.scrollX; - page.y += window.scrollY; + copyCoords(dest, src) { + dest.page = dest.page || {}; + dest.page.x = src.page.x; + dest.page.y = src.page.y; + dest.client = dest.client || {}; + dest.client.x = src.client.x; + dest.client.y = src.client.y; + dest.timeStamp = src.timeStamp; + }, + + setCoordDeltas(targetObj, prev, cur) { + targetObj.page.x = cur.page.x - prev.page.x; + targetObj.page.y = cur.page.y - prev.page.y; + targetObj.client.x = cur.client.x - prev.client.x; + targetObj.client.y = cur.client.y - prev.client.y; + targetObj.timeStamp = cur.timeStamp - prev.timeStamp; + }, + + setCoordVelocity(targetObj, delta) { + const dt = Math.max(delta.timeStamp / 1000, 0.001); + targetObj.page.x = delta.page.x / dt; + targetObj.page.y = delta.page.y / dt; + targetObj.client.x = delta.client.x / dt; + targetObj.client.y = delta.client.y / dt; + targetObj.timeStamp = dt; + }, + + isNativePointer(pointer) { + return pointer instanceof dom.Event || pointer instanceof dom.Touch; + }, + + // Get specified X/Y coords for mouse or event.touches[0] + getXY(type, pointer, xy) { + xy = xy || {}; + type = type || 'page'; + xy.x = pointer[type + 'X']; + xy.y = pointer[type + 'Y']; + return xy; + }, + + getPageXY(pointer, page) { + page = page || { + x: 0, + y: 0 + }; // Opera Mobile handles the viewport and scrolling oddly + + if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) { + pointerUtils.getXY('screen', pointer, page); + page.x += window.scrollX; + page.y += window.scrollY; + } else { + pointerUtils.getXY('page', pointer, page); + } + + return page; + }, + + getClientXY(pointer, client) { + client = client || {}; + + if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) { + // Opera Mobile handles the viewport and scrolling oddly + pointerUtils.getXY('screen', pointer, client); + } else { + pointerUtils.getXY('client', pointer, client); + } + + return client; + }, + + getPointerId(pointer) { + return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; + }, + + setCoords(targetObj, pointers, timeStamp) { + const pointer = pointers.length > 1 ? pointerUtils.pointerAverage(pointers) : pointers[0]; + const tmpXY = {}; + pointerUtils.getPageXY(pointer, tmpXY); + targetObj.page.x = tmpXY.x; + targetObj.page.y = tmpXY.y; + pointerUtils.getClientXY(pointer, tmpXY); + targetObj.client.x = tmpXY.x; + targetObj.client.y = tmpXY.y; + targetObj.timeStamp = timeStamp; + }, + + pointerExtend, + + getTouchPair(event) { + const touches = []; // array of touches is supplied + + if (is.array(event)) { + touches[0] = event[0]; + touches[1] = event[1]; + } // an event + else { + if (event.type === 'touchend') { + if (event.touches.length === 1) { + touches[0] = event.touches[0]; + touches[1] = event.changedTouches[0]; + } else if (event.touches.length === 0) { + touches[0] = event.changedTouches[0]; + touches[1] = event.changedTouches[1]; + } + } else { + touches[0] = event.touches[0]; + touches[1] = event.touches[1]; } - else { - pointerUtils.getXY('page', pointer, page); - } - return page; - }, - getClientXY(pointer, client) { - client = client || {}; - if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) { - // Opera Mobile handles the viewport and scrolling oddly - pointerUtils.getXY('screen', pointer, client); - } - else { - pointerUtils.getXY('client', pointer, client); - } - return client; - }, - getPointerId(pointer) { - return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; - }, - setCoords(targetObj, pointers, timeStamp) { - const pointer = (pointers.length > 1 - ? pointerUtils.pointerAverage(pointers) - : pointers[0]); - const tmpXY = {}; - pointerUtils.getPageXY(pointer, tmpXY); - targetObj.page.x = tmpXY.x; - targetObj.page.y = tmpXY.y; - pointerUtils.getClientXY(pointer, tmpXY); - targetObj.client.x = tmpXY.x; - targetObj.client.y = tmpXY.y; - targetObj.timeStamp = timeStamp; - }, - pointerExtend, - getTouchPair(event) { - const touches = []; - // array of touches is supplied - if (is.array(event)) { - touches[0] = event[0]; - touches[1] = event[1]; - } - // an event - else { - if (event.type === 'touchend') { - if (event.touches.length === 1) { - touches[0] = event.touches[0]; - touches[1] = event.changedTouches[0]; - } - else if (event.touches.length === 0) { - touches[0] = event.changedTouches[0]; - touches[1] = event.changedTouches[1]; - } - } - else { - touches[0] = event.touches[0]; - touches[1] = event.touches[1]; - } - } - return touches; - }, - pointerAverage(pointers) { - const average = { - pageX: 0, - pageY: 0, - clientX: 0, - clientY: 0, - screenX: 0, - screenY: 0, - }; - for (const pointer of pointers) { - for (const prop in average) { - average[prop] += pointer[prop]; - } - } - for (const prop in average) { - average[prop] /= pointers.length; - } - return average; - }, - touchBBox(event) { - if (!event.length && - !(event.touches && - event.touches.length > 1)) { - return null; - } - const touches = pointerUtils.getTouchPair(event); - const minX = Math.min(touches[0].pageX, touches[1].pageX); - const minY = Math.min(touches[0].pageY, touches[1].pageY); - const maxX = Math.max(touches[0].pageX, touches[1].pageX); - const maxY = Math.max(touches[0].pageY, touches[1].pageY); - return { - x: minX, - y: minY, - left: minX, - top: minY, - right: maxX, - bottom: maxY, - width: maxX - minX, - height: maxY - minY, - }; - }, - touchDistance(event, deltaSource) { - const sourceX = deltaSource + 'X'; - const sourceY = deltaSource + 'Y'; - const touches = pointerUtils.getTouchPair(event); - const dx = touches[0][sourceX] - touches[1][sourceX]; - const dy = touches[0][sourceY] - touches[1][sourceY]; - return hypot(dx, dy); - }, - touchAngle(event, deltaSource) { - const sourceX = deltaSource + 'X'; - const sourceY = deltaSource + 'Y'; - const touches = pointerUtils.getTouchPair(event); - const dx = touches[1][sourceX] - touches[0][sourceX]; - const dy = touches[1][sourceY] - touches[0][sourceY]; - const angle = 180 * Math.atan2(dy, dx) / Math.PI; - return angle; - }, - getPointerType(pointer) { - return is.string(pointer.pointerType) - ? pointer.pointerType - : is.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 dom.Touch - ? 'touch' - : 'mouse'; - }, - // [ event.target, event.currentTarget ] - getEventTargets(event) { - const path = is.func(event.composedPath) ? event.composedPath() : event.path; - return [ - domUtils.getActualElement(path ? path[0] : event.target), - domUtils.getActualElement(event.currentTarget), - ]; - }, - newCoords() { - return { - page: { x: 0, y: 0 }, - client: { x: 0, y: 0 }, - timeStamp: 0, - }; - }, - coordsToEvent(coords) { - const event = { - coords, - get page() { return this.coords.page; }, - get client() { return this.coords.client; }, - get timeStamp() { return this.coords.timeStamp; }, - get pageX() { return this.coords.page.x; }, - get pageY() { return this.coords.page.y; }, - get clientX() { return this.coords.client.x; }, - get clientY() { return this.coords.client.y; }, - get pointerId() { return this.coords.pointerId; }, - get target() { return this.coords.target; }, - get type() { return this.coords.type; }, - get pointerType() { return this.coords.pointerType; }, - get buttons() { return this.coords.buttons; }, - }; - return event; - }, + } + + return touches; + }, + + pointerAverage(pointers) { + const average = { + pageX: 0, + pageY: 0, + clientX: 0, + clientY: 0, + screenX: 0, + screenY: 0 + }; + + for (const pointer of pointers) { + for (const prop in average) { + average[prop] += pointer[prop]; + } + } + + for (const prop in average) { + average[prop] /= pointers.length; + } + + return average; + }, + + touchBBox(event) { + if (!event.length && !(event.touches && event.touches.length > 1)) { + return null; + } + + const touches = pointerUtils.getTouchPair(event); + const minX = Math.min(touches[0].pageX, touches[1].pageX); + const minY = Math.min(touches[0].pageY, touches[1].pageY); + const maxX = Math.max(touches[0].pageX, touches[1].pageX); + const maxY = Math.max(touches[0].pageY, touches[1].pageY); + return { + x: minX, + y: minY, + left: minX, + top: minY, + right: maxX, + bottom: maxY, + width: maxX - minX, + height: maxY - minY + }; + }, + + touchDistance(event, deltaSource) { + const sourceX = deltaSource + 'X'; + const sourceY = deltaSource + 'Y'; + const touches = pointerUtils.getTouchPair(event); + const dx = touches[0][sourceX] - touches[1][sourceX]; + const dy = touches[0][sourceY] - touches[1][sourceY]; + return hypot(dx, dy); + }, + + touchAngle(event, deltaSource) { + const sourceX = deltaSource + 'X'; + const sourceY = deltaSource + 'Y'; + const touches = pointerUtils.getTouchPair(event); + const dx = touches[1][sourceX] - touches[0][sourceX]; + const dy = touches[1][sourceY] - touches[0][sourceY]; + const angle = 180 * Math.atan2(dy, dx) / Math.PI; + return angle; + }, + + getPointerType(pointer) { + return is.string(pointer.pointerType) ? pointer.pointerType : is.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 dom.Touch ? 'touch' : 'mouse'; + }, + + // [ event.target, event.currentTarget ] + getEventTargets(event) { + const path = is.func(event.composedPath) ? event.composedPath() : event.path; + return [domUtils.getActualElement(path ? path[0] : event.target), domUtils.getActualElement(event.currentTarget)]; + }, + + newCoords() { + return { + page: { + x: 0, + y: 0 + }, + client: { + x: 0, + y: 0 + }, + timeStamp: 0 + }; + }, + + coordsToEvent(coords) { + const event = { + coords, + + get page() { + return this.coords.page; + }, + + get client() { + return this.coords.client; + }, + + get timeStamp() { + return this.coords.timeStamp; + }, + + get pageX() { + return this.coords.page.x; + }, + + get pageY() { + return this.coords.page.y; + }, + + get clientX() { + return this.coords.client.x; + }, + + get clientY() { + return this.coords.client.y; + }, + + get pointerId() { + return this.coords.pointerId; + }, + + get target() { + return this.coords.target; + }, + + get type() { + return this.coords.type; + }, + + get pointerType() { + return this.coords.pointerType; + }, + + get buttons() { + return this.coords.buttons; + } + + }; + return event; + } + }; export default pointerUtils; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRlclV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicG9pbnRlclV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLFdBQVcsQ0FBQTtBQUMvQixPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUE7QUFDOUIsT0FBTyxLQUFLLFFBQVEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxLQUFLLE1BQU0sU0FBUyxDQUFBO0FBQzNCLE9BQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFCLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFBO0FBRTNDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFVBQVUsQ0FBRSxJQUFJLEVBQUUsR0FBRztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXhCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxjQUFjLENBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHO1FBQ2xDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFNLElBQUks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QUFDLENBQUEsQ0FBQyxDQUFDO1lBQzFDLElBQUksT0FBTyxLQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztZQUM5QyxJQUFJLE9BQU8sS0FBTSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7WUFDOUMsSUFBSSxTQUFTLEtBQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUM7WUFDakQsSUFBSSxNQUFNLEtBQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUM7WUFDM0MsSUFBSSxJQUFJLEtBQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUM7WUFDdkMsSUFBSSxXQUFXLEtBQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLEtBQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUM7U0FDOUMsQ0FBQTtRQUVELE9BQU8sS0FBd0UsQ0FBQTtJQUNqRixDQUFDO0NBQ0YsQ0FBQTtBQUVELGVBQWUsWUFBWSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJ1xuaW1wb3J0IGRvbSBmcm9tICcuL2RvbU9iamVjdHMnXG5pbXBvcnQgKiBhcyBkb21VdGlscyBmcm9tICcuL2RvbVV0aWxzJ1xuaW1wb3J0IGh5cG90IGZyb20gJy4vaHlwb3QnXG5pbXBvcnQgKiBhcyBpcyBmcm9tICcuL2lzJ1xuaW1wb3J0IHBvaW50ZXJFeHRlbmQgZnJvbSAnLi9wb2ludGVyRXh0ZW5kJ1xuXG5jb25zdCBwb2ludGVyVXRpbHMgPSB7XG4gIGNvcHlDb29yZHMgKGRlc3QsIHNyYykge1xuICAgIGRlc3QucGFnZSA9IGRlc3QucGFnZSB8fCB7fVxuICAgIGRlc3QucGFnZS54ID0gc3JjLnBhZ2UueFxuICAgIGRlc3QucGFnZS55ID0gc3JjLnBhZ2UueVxuXG4gICAgZGVzdC5jbGllbnQgPSBkZXN0LmNsaWVudCB8fCB7fVxuICAgIGRlc3QuY2xpZW50LnggPSBzcmMuY2xpZW50LnhcbiAgICBkZXN0LmNsaWVudC55ID0gc3JjLmNsaWVudC55XG5cbiAgICBkZXN0LnRpbWVTdGFtcCA9IHNyYy50aW1lU3RhbXBcbiAgfSxcblxuICBzZXRDb29yZERlbHRhcyAodGFyZ2V0T2JqLCBwcmV2LCBjdXIpIHtcbiAgICB0YXJnZXRPYmoucGFnZS54ICAgID0gY3VyLnBhZ2UueCAgICAtIHByZXYucGFnZS54XG4gICAgdGFyZ2V0T2JqLnBhZ2UueSAgICA9IGN1ci5wYWdlLnkgICAgLSBwcmV2LnBhZ2UueVxuICAgIHRhcmdldE9iai5jbGllbnQueCAgPSBjdXIuY2xpZW50LnggIC0gcHJldi5jbGllbnQueFxuICAgIHRhcmdldE9iai5jbGllbnQueSAgPSBjdXIuY2xpZW50LnkgIC0gcHJldi5jbGllbnQueVxuICAgIHRhcmdldE9iai50aW1lU3RhbXAgPSBjdXIudGltZVN0YW1wIC0gcHJldi50aW1lU3RhbXBcbiAgfSxcblxuICBzZXRDb29yZFZlbG9jaXR5ICh0YXJnZXRPYmosIGRlbHRhKSB7XG4gICAgY29uc3QgZHQgPSBNYXRoLm1heChkZWx0YS50aW1lU3RhbXAgLyAxMDAwLCAwLjAwMSlcblxuICAgIHRhcmdldE9iai5wYWdlLnggICA9IGRlbHRhLnBhZ2UueCAvIGR0XG4gICAgdGFyZ2V0T2JqLnBhZ2UueSAgID0gZGVsdGEucGFnZS55IC8gZHRcbiAgICB0YXJnZXRPYmouY2xpZW50LnggPSBkZWx0YS5jbGllbnQueCAvIGR0XG4gICAgdGFyZ2V0T2JqLmNsaWVudC55ID0gZGVsdGEuY2xpZW50LnkgLyBkdFxuICAgIHRhcmdldE9iai50aW1lU3RhbXAgPSBkdFxuICB9LFxuXG4gIGlzTmF0aXZlUG9pbnRlciAgKHBvaW50ZXIpIHtcbiAgICByZXR1cm4gKHBvaW50ZXIgaW5zdGFuY2VvZiBkb20uRXZlbnQgfHwgcG9pbnRlciBpbnN0YW5jZW9mIGRvbS5Ub3VjaClcbiAgfSxcblxuICAvLyBHZXQgc3BlY2lmaWVkIFgvWSBjb29yZHMgZm9yIG1vdXNlIG9yIGV2ZW50LnRvdWNoZXNbMF1cbiAgZ2V0WFkgKHR5cGUsIHBvaW50ZXIsIHh5KSB7XG4gICAgeHkgPSB4eSB8fCB7fVxuICAgIHR5cGUgPSB0eXBlIHx8ICdwYWdlJ1xuXG4gICAgeHkueCA9IHBvaW50ZXJbdHlwZSArICdYJ11cbiAgICB4eS55ID0gcG9pbnRlclt0eXBlICsgJ1knXVxuXG4gICAgcmV0dXJuIHh5XG4gIH0sXG5cbiAgZ2V0UGFnZVhZIChwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZSB8IEludGVyYWN0LkludGVyYWN0RXZlbnQsIHBhZ2U/OiBJbnRlcmFjdC5Qb2ludCkge1xuICAgIHBhZ2UgPSBwYWdlIHx8IHsgeDogMCwgeTogMCB9XG5cbiAgICAvLyBPcGVyYSBNb2JpbGUgaGFuZGxlcyB0aGUgdmlld3BvcnQgYW5kIHNjcm9sbGluZyBvZGRseVxuICAgIGlmIChicm93c2VyLmlzT3BlcmFNb2JpbGUgJiYgcG9pbnRlclV0aWxzLmlzTmF0aXZlUG9pbnRlcihwb2ludGVyKSkge1xuICAgICAgcG9pbnRlclV0aWxzLmdldFhZKCdzY3JlZW4nLCBwb2ludGVyLCBwYWdlKVxuXG4gICAgICBwYWdlLnggKz0gd2luZG93LnNjcm9sbFhcbiAgICAgIHBhZ2UueSArPSB3aW5kb3cuc2Nyb2xsWVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHBvaW50ZXJVdGlscy5nZXRYWSgncGFnZScsIHBvaW50ZXIsIHBhZ2UpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VcbiAgfSxcblxuICBnZXRDbGllbnRYWSAocG9pbnRlciwgY2xpZW50KSB7XG4gICAgY2xpZW50ID0gY2xpZW50IHx8IHt9XG5cbiAgICBpZiAoYnJvd3Nlci5pc09wZXJhTW9iaWxlICYmIHBvaW50ZXJVdGlscy5pc05hdGl2ZVBvaW50ZXIocG9pbnRlcikpIHtcbiAgICAgIC8vIE9wZXJhIE1vYmlsZSBoYW5kbGVzIHRoZSB2aWV3cG9ydCBhbmQgc2Nyb2xsaW5nIG9kZGx5XG4gICAgICBwb2ludGVyVXRpbHMuZ2V0WFkoJ3NjcmVlbicsIHBvaW50ZXIsIGNsaWVudClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBwb2ludGVyVXRpbHMuZ2V0WFkoJ2NsaWVudCcsIHBvaW50ZXIsIGNsaWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50XG4gIH0sXG5cbiAgZ2V0UG9pbnRlcklkIChwb2ludGVyKSB7XG4gICAgcmV0dXJuIGlzLm51bWJlcihwb2ludGVyLnBvaW50ZXJJZCkgPyBwb2ludGVyLnBvaW50ZXJJZCA6IHBvaW50ZXIuaWRlbnRpZmllclxuICB9LFxuXG4gIHNldENvb3JkcyAodGFyZ2V0T2JqLCBwb2ludGVyczogYW55W10sIHRpbWVTdGFtcDogbnVtYmVyKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IChwb2ludGVycy5sZW5ndGggPiAxXG4gICAgICA/IHBvaW50ZXJVdGlscy5wb2ludGVyQXZlcmFnZShwb2ludGVycylcbiAgICAgIDogcG9pbnRlcnNbMF0pXG5cbiAgICBjb25zdCB0bXBYWSA9IHt9IGFzIHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfVxuXG4gICAgcG9pbnRlclV0aWxzLmdldFBhZ2VYWShwb2ludGVyLCB0bXBYWSlcbiAgICB0YXJnZXRPYmoucGFnZS54ID0gdG1wWFkueFxuICAgIHRhcmdldE9iai5wYWdlLnkgPSB0bXBYWS55XG5cbiAgICBwb2ludGVyVXRpbHMuZ2V0Q2xpZW50WFkocG9pbnRlciwgdG1wWFkpXG4gICAgdGFyZ2V0T2JqLmNsaWVudC54ID0gdG1wWFkueFxuICAgIHRhcmdldE9iai5jbGllbnQueSA9IHRtcFhZLnlcblxuICAgIHRhcmdldE9iai50aW1lU3RhbXAgPSB0aW1lU3RhbXBcbiAgfSxcblxuICBwb2ludGVyRXh0ZW5kLFxuXG4gIGdldFRvdWNoUGFpciAoZXZlbnQpIHtcbiAgICBjb25zdCB0b3VjaGVzID0gW11cblxuICAgIC8vIGFycmF5IG9mIHRvdWNoZXMgaXMgc3VwcGxpZWRcbiAgICBpZiAoaXMuYXJyYXkoZXZlbnQpKSB7XG4gICAgICB0b3VjaGVzWzBdID0gZXZlbnRbMF1cbiAgICAgIHRvdWNoZXNbMV0gPSBldmVudFsxXVxuICAgIH1cbiAgICAvLyBhbiBldmVudFxuICAgIGVsc2Uge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b3VjaGVuZCcpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG91Y2hlc1swXSA9IGV2ZW50LnRvdWNoZXNbMF1cbiAgICAgICAgICB0b3VjaGVzWzFdID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRvdWNoZXNbMF0gPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXVxuICAgICAgICAgIHRvdWNoZXNbMV0gPSBldmVudC5jaGFuZ2VkVG91Y2hlc1sxXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdG91Y2hlc1swXSA9IGV2ZW50LnRvdWNoZXNbMF1cbiAgICAgICAgdG91Y2hlc1sxXSA9IGV2ZW50LnRvdWNoZXNbMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG91Y2hlc1xuICB9LFxuXG4gIHBvaW50ZXJBdmVyYWdlIChwb2ludGVyczogUG9pbnRlckV2ZW50W10gfCBFdmVudFtdKSB7XG4gICAgY29uc3QgYXZlcmFnZSA9IHtcbiAgICAgIHBhZ2VYICA6IDAsXG4gICAgICBwYWdlWSAgOiAwLFxuICAgICAgY2xpZW50WDogMCxcbiAgICAgIGNsaWVudFk6IDAsXG4gICAgICBzY3JlZW5YOiAwLFxuICAgICAgc2NyZWVuWTogMCxcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBvaW50ZXIgb2YgcG9pbnRlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBhdmVyYWdlKSB7XG4gICAgICAgIGF2ZXJhZ2VbcHJvcF0gKz0gcG9pbnRlcltwcm9wXVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYXZlcmFnZSkge1xuICAgICAgYXZlcmFnZVtwcm9wXSAvPSBwb2ludGVycy5sZW5ndGhcbiAgICB9XG5cbiAgICByZXR1cm4gYXZlcmFnZVxuICB9LFxuXG4gIHRvdWNoQkJveCAoZXZlbnQ6IEV2ZW50IHwgQXJyYXk8KEludGVyYWN0LlBvaW50ZXJUeXBlKSB8IFRvdWNoRXZlbnQ+KSB7XG4gICAgaWYgKCEoZXZlbnQgYXMgYW55KS5sZW5ndGggJiZcbiAgICAgICAgISgoZXZlbnQgYXMgVG91Y2hFdmVudCkudG91Y2hlcyAmJlxuICAgICAgICAgIChldmVudCBhcyBUb3VjaEV2ZW50KS50b3VjaGVzLmxlbmd0aCA+IDEpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRvdWNoZXMgPSBwb2ludGVyVXRpbHMuZ2V0VG91Y2hQYWlyKGV2ZW50KVxuICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbih0b3VjaGVzWzBdLnBhZ2VYLCB0b3VjaGVzWzFdLnBhZ2VYKVxuICAgIGNvbnN0IG1pblkgPSBNYXRoLm1pbih0b3VjaGVzWzBdLnBhZ2VZLCB0b3VjaGVzWzFdLnBhZ2VZKVxuICAgIGNvbnN0IG1heFggPSBNYXRoLm1heCh0b3VjaGVzWzBdLnBhZ2VYLCB0b3VjaGVzWzFdLnBhZ2VYKVxuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heCh0b3VjaGVzWzBdLnBhZ2VZLCB0b3VjaGVzWzFdLnBhZ2VZKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IG1pblgsXG4gICAgICB5OiBtaW5ZLFxuICAgICAgbGVmdDogbWluWCxcbiAgICAgIHRvcDogbWluWSxcbiAgICAgIHJpZ2h0OiBtYXhYLFxuICAgICAgYm90dG9tOiBtYXhZLFxuICAgICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgICAgaGVpZ2h0OiBtYXhZIC0gbWluWSxcbiAgICB9XG4gIH0sXG5cbiAgdG91Y2hEaXN0YW5jZSAoZXZlbnQsIGRlbHRhU291cmNlKSB7XG4gICAgY29uc3Qgc291cmNlWCA9IGRlbHRhU291cmNlICsgJ1gnXG4gICAgY29uc3Qgc291cmNlWSA9IGRlbHRhU291cmNlICsgJ1knXG4gICAgY29uc3QgdG91Y2hlcyA9IHBvaW50ZXJVdGlscy5nZXRUb3VjaFBhaXIoZXZlbnQpXG5cbiAgICBjb25zdCBkeCA9IHRvdWNoZXNbMF1bc291cmNlWF0gLSB0b3VjaGVzWzFdW3NvdXJjZVhdXG4gICAgY29uc3QgZHkgPSB0b3VjaGVzWzBdW3NvdXJjZVldIC0gdG91Y2hlc1sxXVtzb3VyY2VZXVxuXG4gICAgcmV0dXJuIGh5cG90KGR4LCBkeSlcbiAgfSxcblxuICB0b3VjaEFuZ2xlIChldmVudCwgZGVsdGFTb3VyY2UpIHtcbiAgICBjb25zdCBzb3VyY2VYID0gZGVsdGFTb3VyY2UgKyAnWCdcbiAgICBjb25zdCBzb3VyY2VZID0gZGVsdGFTb3VyY2UgKyAnWSdcbiAgICBjb25zdCB0b3VjaGVzID0gcG9pbnRlclV0aWxzLmdldFRvdWNoUGFpcihldmVudClcbiAgICBjb25zdCBkeCA9IHRvdWNoZXNbMV1bc291cmNlWF0gLSB0b3VjaGVzWzBdW3NvdXJjZVhdXG4gICAgY29uc3QgZHkgPSB0b3VjaGVzWzFdW3NvdXJjZVldIC0gdG91Y2hlc1swXVtzb3VyY2VZXVxuICAgIGNvbnN0IGFuZ2xlID0gMTgwICogTWF0aC5hdGFuMihkeSwgZHgpIC8gTWF0aC5QSVxuXG4gICAgcmV0dXJuICBhbmdsZVxuICB9LFxuXG4gIGdldFBvaW50ZXJUeXBlIChwb2ludGVyKSB7XG4gICAgcmV0dXJuIGlzLnN0cmluZyhwb2ludGVyLnBvaW50ZXJUeXBlKVxuICAgICAgPyBwb2ludGVyLnBvaW50ZXJUeXBlXG4gICAgICA6IGlzLm51bWJlcihwb2ludGVyLnBvaW50ZXJUeXBlKVxuICAgICAgICA/IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3RvdWNoJywgJ3BlbicsICdtb3VzZSddW3BvaW50ZXIucG9pbnRlclR5cGVdXG4gICAgICAgIC8vIGlmIHRoZSBQb2ludGVyRXZlbnQgQVBJIGlzbid0IGF2YWlsYWJsZSwgdGhlbiB0aGUgXCJwb2ludGVyXCIgbXVzdFxuICAgICAgICAvLyBiZSBlaXRoZXIgYSBNb3VzZUV2ZW50LCBUb3VjaEV2ZW50LCBvciBUb3VjaCBvYmplY3RcbiAgICAgICAgOiAvdG91Y2gvLnRlc3QocG9pbnRlci50eXBlKSB8fCBwb2ludGVyIGluc3RhbmNlb2YgZG9tLlRvdWNoXG4gICAgICAgICAgPyAndG91Y2gnXG4gICAgICAgICAgOiAnbW91c2UnXG4gIH0sXG5cbiAgLy8gWyBldmVudC50YXJnZXQsIGV2ZW50LmN1cnJlbnRUYXJnZXQgXVxuICBnZXRFdmVudFRhcmdldHMgKGV2ZW50KSB7XG4gICAgY29uc3QgcGF0aCA9IGlzLmZ1bmMoZXZlbnQuY29tcG9zZWRQYXRoKSA/IGV2ZW50LmNvbXBvc2VkUGF0aCgpIDogZXZlbnQucGF0aFxuXG4gICAgcmV0dXJuIFtcbiAgICAgIGRvbVV0aWxzLmdldEFjdHVhbEVsZW1lbnQocGF0aCA/IHBhdGhbMF0gOiBldmVudC50YXJnZXQpLFxuICAgICAgZG9tVXRpbHMuZ2V0QWN0dWFsRWxlbWVudChldmVudC5jdXJyZW50VGFyZ2V0KSxcbiAgICBdXG4gIH0sXG5cbiAgbmV3Q29vcmRzICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZSAgICAgOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIGNsaWVudCAgIDogeyB4OiAwLCB5OiAwIH0sXG4gICAgICB0aW1lU3RhbXA6IDAsXG4gICAgfVxuICB9LFxuXG4gIGNvb3Jkc1RvRXZlbnQgKGNvb3JkczogTW9ja0Nvb3Jkcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgY29vcmRzLFxuICAgICAgZ2V0IHBhZ2UgKCkgeyByZXR1cm4gdGhpcy5jb29yZHMucGFnZSB9LFxuICAgICAgZ2V0IGNsaWVudCAoKSB7IHJldHVybiB0aGlzLmNvb3Jkcy5jbGllbnQgfSxcbiAgICAgIGdldCB0aW1lU3RhbXAgKCkgeyByZXR1cm4gdGhpcy5jb29yZHMudGltZVN0YW1wIH0sXG4gICAgICBnZXQgcGFnZVggKCkgeyByZXR1cm4gdGhpcy5jb29yZHMucGFnZS54IH0sXG4gICAgICBnZXQgcGFnZVkgKCkgeyByZXR1cm4gdGhpcy5jb29yZHMucGFnZS55IH0sXG4gICAgICBnZXQgY2xpZW50WCAoKSB7IHJldHVybiB0aGlzLmNvb3Jkcy5jbGllbnQueCB9LFxuICAgICAgZ2V0IGNsaWVudFkgKCkgeyByZXR1cm4gdGhpcy5jb29yZHMuY2xpZW50LnkgfSxcbiAgICAgIGdldCBwb2ludGVySWQgKCkgeyByZXR1cm4gdGhpcy5jb29yZHMucG9pbnRlcklkIH0sXG4gICAgICBnZXQgdGFyZ2V0ICgpIHsgcmV0dXJuIHRoaXMuY29vcmRzLnRhcmdldCB9LFxuICAgICAgZ2V0IHR5cGUgKCkgeyByZXR1cm4gdGhpcy5jb29yZHMudHlwZSB9LFxuICAgICAgZ2V0IHBvaW50ZXJUeXBlICgpIHsgcmV0dXJuIHRoaXMuY29vcmRzLnBvaW50ZXJUeXBlIH0sXG4gICAgICBnZXQgYnV0dG9ucyAoKSB7IHJldHVybiB0aGlzLmNvb3Jkcy5idXR0b25zIH0sXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50IGFzIHR5cGVvZiBldmVudCAmIEludGVyYWN0LlBvaW50ZXJUeXBlICYgSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBwb2ludGVyVXRpbHNcblxuZXhwb3J0IGludGVyZmFjZSBNb2NrQ29vcmRzIHtcbiAgcGFnZTogSW50ZXJhY3QuUG9pbnRcbiAgY2xpZW50OiBJbnRlcmFjdC5Qb2ludFxuICB0aW1lU3RhbXA/OiBudW1iZXJcbiAgcG9pbnRlcklkPzogYW55XG4gIHRhcmdldD86IGFueVxuICB0eXBlPzogc3RyaW5nXG4gIHBvaW50ZXJUeXBlPzogc3RyaW5nXG4gIGJ1dHRvbnM/OiBudW1iZXJcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=pointerUtils.js.map \ No newline at end of file diff --git a/packages/utils/pointerUtils.js.map b/packages/utils/pointerUtils.js.map new file mode 100644 index 000000000..03b247051 --- /dev/null +++ b/packages/utils/pointerUtils.js.map @@ -0,0 +1,109 @@ +{ + "version": 3, + "sources": [ + "pointerUtils.ts" + ], + "names": [ + "browser", + "dom", + "domUtils", + "hypot", + "is", + "pointerExtend", + "pointerUtils", + "copyCoords", + "dest", + "src", + "page", + "x", + "y", + "client", + "timeStamp", + "setCoordDeltas", + "targetObj", + "prev", + "cur", + "setCoordVelocity", + "delta", + "dt", + "Math", + "max", + "isNativePointer", + "pointer", + "Event", + "Touch", + "getXY", + "type", + "xy", + "getPageXY", + "isOperaMobile", + "window", + "scrollX", + "scrollY", + "getClientXY", + "getPointerId", + "number", + "pointerId", + "identifier", + "setCoords", + "pointers", + "length", + "pointerAverage", + "tmpXY", + "getTouchPair", + "event", + "touches", + "array", + "changedTouches", + "average", + "pageX", + "pageY", + "clientX", + "clientY", + "screenX", + "screenY", + "prop", + "touchBBox", + "minX", + "min", + "minY", + "maxX", + "maxY", + "left", + "top", + "right", + "bottom", + "width", + "height", + "touchDistance", + "deltaSource", + "sourceX", + "sourceY", + "dx", + "dy", + "touchAngle", + "angle", + "atan2", + "PI", + "getPointerType", + "string", + "pointerType", + "undefined", + "test", + "getEventTargets", + "path", + "func", + "composedPath", + "getActualElement", + "target", + "currentTarget", + "newCoords", + "coordsToEvent", + "coords", + "buttons" + ], + "mappings": "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", + "sourcesContent": [ + "import browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport * as is from './is'\nimport pointerExtend from './pointerExtend'\n\nconst pointerUtils = {\n copyCoords (dest, src) {\n dest.page = dest.page || {}\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {}\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n },\n\n setCoordDeltas (targetObj, prev, cur) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n },\n\n setCoordVelocity (targetObj, delta) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n },\n\n isNativePointer (pointer) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n },\n\n // Get specified X/Y coords for mouse or event.touches[0]\n getXY (type, pointer, xy) {\n xy = xy || {}\n type = type || 'page'\n\n xy.x = pointer[type + 'X']\n xy.y = pointer[type + 'Y']\n\n return xy\n },\n\n getPageXY (pointer: Interact.PointerType | Interact.InteractEvent, page?: Interact.Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n pointerUtils.getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n pointerUtils.getXY('page', pointer, page)\n }\n\n return page\n },\n\n getClientXY (pointer, client) {\n client = client || {}\n\n if (browser.isOperaMobile && pointerUtils.isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n pointerUtils.getXY('screen', pointer, client)\n }\n else {\n pointerUtils.getXY('client', pointer, client)\n }\n\n return client\n },\n\n getPointerId (pointer) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n },\n\n setCoords (targetObj, pointers: any[], timeStamp: number) {\n const pointer = (pointers.length > 1\n ? pointerUtils.pointerAverage(pointers)\n : pointers[0])\n\n const tmpXY = {} as { x: number, y: number }\n\n pointerUtils.getPageXY(pointer, tmpXY)\n targetObj.page.x = tmpXY.x\n targetObj.page.y = tmpXY.y\n\n pointerUtils.getClientXY(pointer, tmpXY)\n targetObj.client.x = tmpXY.x\n targetObj.client.y = tmpXY.y\n\n targetObj.timeStamp = timeStamp\n },\n\n pointerExtend,\n\n getTouchPair (event) {\n const touches = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n },\n\n pointerAverage (pointers: PointerEvent[] | Event[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop] += pointer[prop]\n }\n }\n for (const prop in average) {\n average[prop] /= pointers.length\n }\n\n return average\n },\n\n touchBBox (event: Event | Array<(Interact.PointerType) | TouchEvent>) {\n if (!(event as any).length &&\n !((event as TouchEvent).touches &&\n (event as TouchEvent).touches.length > 1)) {\n return null\n }\n\n const touches = pointerUtils.getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n },\n\n touchDistance (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n },\n\n touchAngle (event, deltaSource) {\n const sourceX = deltaSource + 'X'\n const sourceY = deltaSource + 'Y'\n const touches = pointerUtils.getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n },\n\n getPointerType (pointer) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n },\n\n // [ event.target, event.currentTarget ]\n getEventTargets (event) {\n const path = is.func(event.composedPath) ? event.composedPath() : event.path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target),\n domUtils.getActualElement(event.currentTarget),\n ]\n },\n\n newCoords () {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n },\n\n coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () { return this.coords.page },\n get client () { return this.coords.client },\n get timeStamp () { return this.coords.timeStamp },\n get pageX () { return this.coords.page.x },\n get pageY () { return this.coords.page.y },\n get clientX () { return this.coords.client.x },\n get clientY () { return this.coords.client.y },\n get pointerId () { return this.coords.pointerId },\n get target () { return this.coords.target },\n get type () { return this.coords.type },\n get pointerType () { return this.coords.pointerType },\n get buttons () { return this.coords.buttons },\n }\n\n return event as typeof event & Interact.PointerType & Interact.PointerEventType\n },\n}\n\nexport default pointerUtils\n\nexport interface MockCoords {\n page: Interact.Point\n client: Interact.Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n" + ] +} \ No newline at end of file diff --git a/packages/utils/raf.js b/packages/utils/raf.js index dcbd3d898..d6f1ee49b 100644 --- a/packages/utils/raf.js +++ b/packages/utils/raf.js @@ -1,31 +1,39 @@ let lastTime = 0; let request; let cancel; + function init(window) { - request = window.requestAnimationFrame; - cancel = window.cancelAnimationFrame; - if (!request) { - const vendors = ['ms', 'moz', 'webkit', 'o']; - for (const vendor of vendors) { - request = window[`${vendor}RequestAnimationFrame`]; - cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]; - } - } - if (!request) { - request = callback => { - const currTime = Date.now(); - const timeToCall = Math.max(0, 16 - (currTime - lastTime)); - // eslint-disable-next-line standard/no-callback-literal - const token = setTimeout(() => { callback(currTime + timeToCall); }, timeToCall); - lastTime = currTime + timeToCall; - return token; - }; - cancel = token => clearTimeout(token); + request = window.requestAnimationFrame; + cancel = window.cancelAnimationFrame; + + if (!request) { + const vendors = ['ms', 'moz', 'webkit', 'o']; + + for (const vendor of vendors) { + request = window[`${vendor}RequestAnimationFrame`]; + cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]; } + } + + if (!request) { + request = callback => { + const currTime = Date.now(); + const timeToCall = Math.max(0, 16 - (currTime - lastTime)); // eslint-disable-next-line standard/no-callback-literal + + const token = setTimeout(() => { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return token; + }; + + cancel = token => clearTimeout(token); + } } + export default { - request: callback => request(callback), - cancel: token => cancel(token), - init, + request: callback => request(callback), + cancel: token => cancel(token), + init }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmFmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQTtBQUNoQixJQUFJLE9BQU8sQ0FBQTtBQUNYLElBQUksTUFBTSxDQUFBO0FBRVYsU0FBUyxJQUFJLENBQUUsTUFBTTtJQUNuQixPQUFPLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFBO0lBQ3RDLE1BQU0sR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUE7SUFFcEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFFNUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDNUIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sdUJBQXVCLENBQUMsQ0FBQTtZQUNsRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsQ0FBQTtTQUNuRztLQUNGO0lBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRTtZQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDMUQsd0RBQXdEO1lBQ3hELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQyxFQUNoRSxVQUFVLENBQUMsQ0FBQTtZQUViLFFBQVEsR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFBO1lBQ2hDLE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQyxDQUFBO1FBRUQsTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQ3RDO0FBQ0gsQ0FBQztBQUVELGVBQWU7SUFDYixPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDOUIsSUFBSTtDQUNMLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgbGFzdFRpbWUgPSAwXG5sZXQgcmVxdWVzdFxubGV0IGNhbmNlbFxuXG5mdW5jdGlvbiBpbml0ICh3aW5kb3cpIHtcbiAgcmVxdWVzdCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgY2FuY2VsID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lXG5cbiAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgY29uc3QgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ11cblxuICAgIGZvciAoY29uc3QgdmVuZG9yIG9mIHZlbmRvcnMpIHtcbiAgICAgIHJlcXVlc3QgPSB3aW5kb3dbYCR7dmVuZG9yfVJlcXVlc3RBbmltYXRpb25GcmFtZWBdXG4gICAgICBjYW5jZWwgPSB3aW5kb3dbYCR7dmVuZG9yfUNhbmNlbEFuaW1hdGlvbkZyYW1lYF0gfHwgd2luZG93W2Ake3ZlbmRvcn1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXVxuICAgIH1cbiAgfVxuXG4gIGlmICghcmVxdWVzdCkge1xuICAgIHJlcXVlc3QgPSBjYWxsYmFjayA9PiB7XG4gICAgICBjb25zdCBjdXJyVGltZSA9IERhdGUubm93KClcbiAgICAgIGNvbnN0IHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSlcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdGFuZGFyZC9uby1jYWxsYmFjay1saXRlcmFsXG4gICAgICBjb25zdCB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4geyBjYWxsYmFjayhjdXJyVGltZSArIHRpbWVUb0NhbGwpIH0sXG4gICAgICAgIHRpbWVUb0NhbGwpXG5cbiAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsXG4gICAgICByZXR1cm4gdG9rZW5cbiAgICB9XG5cbiAgICBjYW5jZWwgPSB0b2tlbiA9PiBjbGVhclRpbWVvdXQodG9rZW4pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZXF1ZXN0OiBjYWxsYmFjayA9PiByZXF1ZXN0KGNhbGxiYWNrKSxcbiAgY2FuY2VsOiB0b2tlbiA9PiBjYW5jZWwodG9rZW4pLFxuICBpbml0LFxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=raf.js.map \ No newline at end of file diff --git a/packages/utils/raf.js.map b/packages/utils/raf.js.map new file mode 100644 index 000000000..71a91e9fa --- /dev/null +++ b/packages/utils/raf.js.map @@ -0,0 +1,31 @@ +{ + "version": 3, + "sources": [ + "raf.ts" + ], + "names": [ + "lastTime", + "request", + "cancel", + "init", + "window", + "requestAnimationFrame", + "cancelAnimationFrame", + "vendors", + "vendor", + "callback", + "currTime", + "Date", + "now", + "timeToCall", + "Math", + "max", + "token", + "setTimeout", + "clearTimeout" + ], + "mappings": "AAAA,IAAIA,QAAQ,GAAG,CAAf;AACA,IAAIC,OAAJ;AACA,IAAIC,MAAJ;;AAEA,SAASC,IAAT,CAAeC,MAAf,EAAuB;AACrBH,EAAAA,OAAO,GAAGG,MAAM,CAACC,qBAAjB;AACAH,EAAAA,MAAM,GAAGE,MAAM,CAACE,oBAAhB;;AAEA,MAAI,CAACL,OAAL,EAAc;AACZ,UAAMM,OAAO,GAAG,CAAC,IAAD,EAAO,KAAP,EAAc,QAAd,EAAwB,GAAxB,CAAhB;;AAEA,SAAK,MAAMC,MAAX,IAAqBD,OAArB,EAA8B;AAC5BN,MAAAA,OAAO,GAAGG,MAAM,CAAE,GAAEI,MAAO,uBAAX,CAAhB;AACAN,MAAAA,MAAM,GAAGE,MAAM,CAAE,GAAEI,MAAO,sBAAX,CAAN,IAA2CJ,MAAM,CAAE,GAAEI,MAAO,6BAAX,CAA1D;AACD;AACF;;AAED,MAAI,CAACP,OAAL,EAAc;AACZA,IAAAA,OAAO,GAAGQ,QAAQ,IAAI;AACpB,YAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAL,EAAjB;AACA,YAAMC,UAAU,GAAGC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAY,MAAML,QAAQ,GAAGV,QAAjB,CAAZ,CAAnB,CAFoB,CAGpB;;AACA,YAAMgB,KAAK,GAAGC,UAAU,CAAC,MAAM;AAAER,QAAAA,QAAQ,CAACC,QAAQ,GAAGG,UAAZ,CAAR;AAAiC,OAA1C,EACtBA,UADsB,CAAxB;AAGAb,MAAAA,QAAQ,GAAGU,QAAQ,GAAGG,UAAtB;AACA,aAAOG,KAAP;AACD,KATD;;AAWAd,IAAAA,MAAM,GAAGc,KAAK,IAAIE,YAAY,CAACF,KAAD,CAA9B;AACD;AACF;;AAED,eAAe;AACbf,EAAAA,OAAO,EAAEQ,QAAQ,IAAIR,OAAO,CAACQ,QAAD,CADf;AAEbP,EAAAA,MAAM,EAAEc,KAAK,IAAId,MAAM,CAACc,KAAD,CAFV;AAGbb,EAAAA;AAHa,CAAf", + "sourcesContent": [ + "let lastTime = 0\nlet request\nlet cancel\n\nfunction init (window) {\n request = window.requestAnimationFrame\n cancel = window.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = window[`${vendor}RequestAnimationFrame`]\n cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`]\n }\n }\n\n if (!request) {\n request = callback => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n // eslint-disable-next-line standard/no-callback-literal\n const token = setTimeout(() => { callback(currTime + timeToCall) },\n timeToCall)\n\n lastTime = currTime + timeToCall\n return token\n }\n\n cancel = token => clearTimeout(token)\n }\n}\n\nexport default {\n request: callback => request(callback),\n cancel: token => cancel(token),\n init,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/utils/rect.js b/packages/utils/rect.js index 18f0f44aa..89031f288 100644 --- a/packages/utils/rect.js +++ b/packages/utils/rect.js @@ -1,58 +1,63 @@ -import { closest, getElementRect, parentNode } from './domUtils'; -import extend from './extend'; -import * as is from './is'; +import { closest, getElementRect, parentNode } from "./domUtils.js"; +import extend from "./extend.js"; +import * as is from "./is.js"; export function getStringOptionResult(value, target, element) { - if (value === 'parent') { - return parentNode(element); - } - if (value === 'self') { - return target.getRect(element); - } - return closest(element, value); + if (value === 'parent') { + return parentNode(element); + } + + if (value === 'self') { + return target.getRect(element); + } + + return closest(element, value); } export function resolveRectLike(value, target, element, functionArgs) { - if (is.string(value)) { - value = getStringOptionResult(value, target, element); - } - else if (is.func(value)) { - value = value(...functionArgs); - } - if (is.element(value)) { - value = getElementRect(value); - } - return value; + if (is.string(value)) { + value = getStringOptionResult(value, target, element); + } else if (is.func(value)) { + value = value(...functionArgs); + } + + if (is.element(value)) { + value = getElementRect(value); + } + + return value; } export function rectToXY(rect) { - return rect && { - x: 'x' in rect ? rect.x : rect.left, - y: 'y' in rect ? rect.y : rect.top, - }; + return rect && { + x: 'x' in rect ? rect.x : rect.left, + y: 'y' in rect ? rect.y : rect.top + }; } export function xywhToTlbr(rect) { - if (rect && !('left' in rect && 'top' in rect)) { - rect = extend({}, rect); - rect.left = rect.x || 0; - rect.top = rect.y || 0; - rect.right = rect.right || (rect.left + rect.width); - rect.bottom = rect.bottom || (rect.top + rect.height); - } - return rect; + if (rect && !('left' in rect && 'top' in rect)) { + rect = extend({}, rect); + rect.left = rect.x || 0; + rect.top = rect.y || 0; + rect.right = rect.right || rect.left + rect.width; + rect.bottom = rect.bottom || rect.top + rect.height; + } + + return rect; } export function tlbrToXywh(rect) { - if (rect && !('x' in rect && 'y' in rect)) { - rect = extend({}, rect); - rect.x = rect.left || 0; - rect.y = rect.top || 0; - rect.width = rect.width || (rect.right - rect.x); - rect.height = rect.height || (rect.bottom - rect.y); - } - return rect; + if (rect && !('x' in rect && 'y' in rect)) { + rect = extend({}, rect); + rect.x = rect.left || 0; + rect.y = rect.top || 0; + rect.width = rect.width || rect.right - rect.x; + rect.height = rect.height || rect.bottom - rect.y; + } + + return rect; } export default { - getStringOptionResult, - resolveRectLike, - rectToXY, - xywhToTlbr, - tlbrToXywh, + getStringOptionResult, + resolveRectLike, + rectToXY, + xywhToTlbr, + tlbrToXywh }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUUxQixNQUFNLFVBQVUscUJBQXFCLENBQUUsS0FBVSxFQUFFLE1BQTJCLEVBQUUsT0FBTztJQUNyRixJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFBRSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtLQUFFO0lBRXRELElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtLQUFFO0lBRXhELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBaUMsRUFDakMsTUFBNEIsRUFDNUIsT0FBMEIsRUFDMUIsWUFBZ0I7SUFFaEIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0tBQ3REO1NBQ0ksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQTtLQUMvQjtJQUVELElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQixLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0tBQzlCO0lBRUQsT0FBTyxLQUFzQixDQUFBO0FBQy9CLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFFLElBQUk7SUFDNUIsT0FBUSxJQUFJLElBQUk7UUFDZCxDQUFDLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUk7UUFDbkMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO0tBQ25DLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBRSxJQUFJO0lBQzlCLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRTtRQUM5QyxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsSUFBSSxHQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBSSxJQUFJLENBQUMsS0FBSyxJQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7S0FDdkQ7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFFLElBQUk7SUFDOUIsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFO1FBQ3pDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxDQUFDLEdBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7UUFDNUIsSUFBSSxDQUFDLENBQUMsR0FBUSxJQUFJLENBQUMsR0FBRyxJQUFLLENBQUMsQ0FBQTtRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFJLElBQUksQ0FBQyxLQUFLLElBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNwRDtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELGVBQWU7SUFDYixxQkFBcUI7SUFDckIsZUFBZTtJQUNmLFFBQVE7SUFDUixVQUFVO0lBQ1YsVUFBVTtDQUNYLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbG9zZXN0LCBnZXRFbGVtZW50UmVjdCwgcGFyZW50Tm9kZSB9IGZyb20gJy4vZG9tVXRpbHMnXG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4vZXh0ZW5kJ1xuaW1wb3J0ICogYXMgaXMgZnJvbSAnLi9pcydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0cmluZ09wdGlvblJlc3VsdCAodmFsdWU6IGFueSwgdGFyZ2V0OiBJbnRlcmFjdC5IYXNHZXRSZWN0LCBlbGVtZW50KSB7XG4gIGlmICh2YWx1ZSA9PT0gJ3BhcmVudCcpIHsgcmV0dXJuIHBhcmVudE5vZGUoZWxlbWVudCkgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJ3NlbGYnKSB7IHJldHVybiB0YXJnZXQuZ2V0UmVjdChlbGVtZW50KSB9XG5cbiAgcmV0dXJuIGNsb3Nlc3QoZWxlbWVudCwgdmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVjdExpa2U8VCBleHRlbmRzIGFueVtdPiAoXG4gIHZhbHVlOiBJbnRlcmFjdC5SZWN0UmVzb2x2YWJsZTxUPixcbiAgdGFyZ2V0PzogSW50ZXJhY3QuSGFzR2V0UmVjdCxcbiAgZWxlbWVudD86IEludGVyYWN0LkVsZW1lbnQsXG4gIGZ1bmN0aW9uQXJncz86IFRcbikge1xuICBpZiAoaXMuc3RyaW5nKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZ2V0U3RyaW5nT3B0aW9uUmVzdWx0KHZhbHVlLCB0YXJnZXQsIGVsZW1lbnQpXG4gIH1cbiAgZWxzZSBpZiAoaXMuZnVuYyh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKC4uLmZ1bmN0aW9uQXJncylcbiAgfVxuXG4gIGlmIChpcy5lbGVtZW50KHZhbHVlKSkge1xuICAgIHZhbHVlID0gZ2V0RWxlbWVudFJlY3QodmFsdWUpXG4gIH1cblxuICByZXR1cm4gdmFsdWUgYXMgSW50ZXJhY3QuUmVjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdFRvWFkgKHJlY3QpIHtcbiAgcmV0dXJuICByZWN0ICYmIHtcbiAgICB4OiAneCcgaW4gcmVjdCA/IHJlY3QueCA6IHJlY3QubGVmdCxcbiAgICB5OiAneScgaW4gcmVjdCA/IHJlY3QueSA6IHJlY3QudG9wLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB4eXdoVG9UbGJyIChyZWN0KSB7XG4gIGlmIChyZWN0ICYmICEoJ2xlZnQnIGluIHJlY3QgJiYgJ3RvcCcgaW4gcmVjdCkpIHtcbiAgICByZWN0ID0gZXh0ZW5kKHt9LCByZWN0KVxuXG4gICAgcmVjdC5sZWZ0ICAgPSByZWN0LnggfHwgMFxuICAgIHJlY3QudG9wICAgID0gcmVjdC55IHx8IDBcbiAgICByZWN0LnJpZ2h0ICA9IHJlY3QucmlnaHQgICB8fCAocmVjdC5sZWZ0ICsgcmVjdC53aWR0aClcbiAgICByZWN0LmJvdHRvbSA9IHJlY3QuYm90dG9tICB8fCAocmVjdC50b3AgKyByZWN0LmhlaWdodClcbiAgfVxuXG4gIHJldHVybiByZWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0bGJyVG9YeXdoIChyZWN0KSB7XG4gIGlmIChyZWN0ICYmICEoJ3gnIGluIHJlY3QgJiYgJ3knIGluIHJlY3QpKSB7XG4gICAgcmVjdCA9IGV4dGVuZCh7fSwgcmVjdClcblxuICAgIHJlY3QueCAgICAgID0gcmVjdC5sZWZ0IHx8IDBcbiAgICByZWN0LnkgICAgICA9IHJlY3QudG9wICB8fCAwXG4gICAgcmVjdC53aWR0aCAgPSByZWN0LndpZHRoICB8fCAocmVjdC5yaWdodCAgLSByZWN0LngpXG4gICAgcmVjdC5oZWlnaHQgPSByZWN0LmhlaWdodCB8fCAocmVjdC5ib3R0b20gLSByZWN0LnkpXG4gIH1cblxuICByZXR1cm4gcmVjdFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldFN0cmluZ09wdGlvblJlc3VsdCxcbiAgcmVzb2x2ZVJlY3RMaWtlLFxuICByZWN0VG9YWSxcbiAgeHl3aFRvVGxicixcbiAgdGxiclRvWHl3aCxcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=rect.js.map \ No newline at end of file diff --git a/packages/utils/rect.js.map b/packages/utils/rect.js.map new file mode 100644 index 000000000..467fd650a --- /dev/null +++ b/packages/utils/rect.js.map @@ -0,0 +1,38 @@ +{ + "version": 3, + "sources": [ + "rect.ts" + ], + "names": [ + "closest", + "getElementRect", + "parentNode", + "extend", + "is", + "getStringOptionResult", + "value", + "target", + "element", + "getRect", + "resolveRectLike", + "functionArgs", + "string", + "func", + "rectToXY", + "rect", + "x", + "left", + "y", + "top", + "xywhToTlbr", + "right", + "width", + "bottom", + "height", + "tlbrToXywh" + ], + "mappings": "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", + "sourcesContent": [ + "import { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport * as is from './is'\n\nexport function getStringOptionResult (value: any, target: Interact.HasGetRect, element) {\n if (value === 'parent') { return parentNode(element) }\n\n if (value === 'self') { return target.getRect(element) }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike (\n value: Interact.RectResolvable,\n target?: Interact.HasGetRect,\n element?: Interact.Element,\n functionArgs?: T,\n) {\n if (is.string(value)) {\n value = getStringOptionResult(value, target, element)\n }\n else if (is.func(value)) {\n value = value(...functionArgs)\n }\n\n if (is.element(value)) {\n value = getElementRect(value)\n }\n\n return value as Interact.Rect\n}\n\nexport function rectToXY (rect) {\n return rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n}\n\nexport function xywhToTlbr (rect) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || (rect.left + rect.width)\n rect.bottom = rect.bottom || (rect.top + rect.height)\n }\n\n return rect\n}\n\nexport function tlbrToXywh (rect) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right - rect.x)\n rect.height = rect.height || (rect.bottom - rect.y)\n }\n\n return rect\n}\n\nexport default {\n getStringOptionResult,\n resolveRectLike,\n rectToXY,\n xywhToTlbr,\n tlbrToXywh,\n}\n" + ] +} \ No newline at end of file diff --git a/packages/utils/snappers/grid.d.ts b/packages/utils/snappers/grid.d.ts index b326c3186..bfd1da44b 100644 --- a/packages/utils/snappers/grid.d.ts +++ b/packages/utils/snappers/grid.d.ts @@ -2,7 +2,20 @@ declare function createGrid(grid: (Interact.Rect | Interact.Point) & { range?: number; limits: Interact.Rect; offset: Interact.Point; -}): (x: any, y: any) => { - range: number; +}): { + (x: any, y: any): { + range: number; + }; + _isSnapGrid: boolean; + grid: (import("../../types/types").Point & { + range?: number; + limits: import("../../types/types").Rect; + offset: import("../../types/types").Point; + }) | (import("../../types/types").Rect & { + range?: number; + limits: import("../../types/types").Rect; + offset: import("../../types/types").Point; + }); + coordFields: string[][]; }; export default createGrid; diff --git a/packages/utils/snappers/grid.js b/packages/utils/snappers/grid.js index 0f702a217..2a84d37b5 100644 --- a/packages/utils/snappers/grid.js +++ b/packages/utils/snappers/grid.js @@ -1,26 +1,39 @@ function createGrid(grid) { - const coordFields = [ - ['x', 'y'], - ['left', 'top'], - ['right', 'bottom'], - ['width', 'height'], - ].filter(([xField, yField]) => xField in grid || yField in grid); - return function (x, y) { - const { range, limits = { - left: -Infinity, - right: Infinity, - top: -Infinity, - bottom: Infinity, - }, offset = { x: 0, y: 0 }, } = grid; - const result = { range }; - for (const [xField, yField] of coordFields) { - const gridx = Math.round((x - offset.x) / grid[xField]); - const gridy = Math.round((y - offset.y) / grid[yField]); - result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x)); - result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y)); - } - return result; + const coordFields = [['x', 'y'], ['left', 'top'], ['right', 'bottom'], ['width', 'height']].filter(([xField, yField]) => xField in grid || yField in grid); + + const gridFunc = function snapGrid(x, y) { + const { + range, + limits = { + left: -Infinity, + right: Infinity, + top: -Infinity, + bottom: Infinity + }, + offset = { + x: 0, + y: 0 + } + } = grid; + const result = { + range }; + + for (const [xField, yField] of coordFields) { + const gridx = Math.round((x - offset.x) / grid[xField]); + const gridy = Math.round((y - offset.y) / grid[yField]); + result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x)); + result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y)); + } + + return result; + }; + + gridFunc._isSnapGrid = true; + gridFunc.grid = grid; + gridFunc.coordFields = coordFields; + return gridFunc; } + export default createGrid; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdyaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxVQUFVLENBQUUsSUFBMEc7SUFDN0gsTUFBTSxXQUFXLEdBQUc7UUFDbEIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ1YsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQ2YsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQ25CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztLQUNwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQTtJQUVoRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxFQUNKLEtBQUssRUFDTCxNQUFNLEdBQUc7WUFDUCxJQUFJLEVBQUksQ0FBQyxRQUFRO1lBQ2pCLEtBQUssRUFBSSxRQUFRO1lBQ2pCLEdBQUcsRUFBSyxDQUFDLFFBQVE7WUFDakIsTUFBTSxFQUFHLFFBQVE7U0FDbEIsRUFDRCxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FDeEIsR0FBRyxJQUFJLENBQUE7UUFFUixNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFBO1FBRXhCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUU7WUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFFdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUMvRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2hHO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsZUFBZSxVQUFVLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBjcmVhdGVHcmlkIChncmlkOiAoSW50ZXJhY3QuUmVjdCB8IEludGVyYWN0LlBvaW50KSAmIHsgcmFuZ2U/OiBudW1iZXIsIGxpbWl0czogSW50ZXJhY3QuUmVjdCwgb2Zmc2V0OiBJbnRlcmFjdC5Qb2ludCB9KSB7XG4gIGNvbnN0IGNvb3JkRmllbGRzID0gW1xuICAgIFsneCcsICd5J10sXG4gICAgWydsZWZ0JywgJ3RvcCddLFxuICAgIFsncmlnaHQnLCAnYm90dG9tJ10sXG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXSxcbiAgXS5maWx0ZXIoKFt4RmllbGQsIHlGaWVsZF0pID0+IHhGaWVsZCBpbiBncmlkIHx8IHlGaWVsZCBpbiBncmlkKVxuXG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJhbmdlLFxuICAgICAgbGltaXRzID0ge1xuICAgICAgICBsZWZ0ICA6IC1JbmZpbml0eSxcbiAgICAgICAgcmlnaHQgOiAgSW5maW5pdHksXG4gICAgICAgIHRvcCAgIDogLUluZmluaXR5LFxuICAgICAgICBib3R0b206ICBJbmZpbml0eSxcbiAgICAgIH0sXG4gICAgICBvZmZzZXQgPSB7IHg6IDAsIHk6IDAgfSxcbiAgICB9ID0gZ3JpZFxuXG4gICAgY29uc3QgcmVzdWx0ID0geyByYW5nZSB9XG5cbiAgICBmb3IgKGNvbnN0IFt4RmllbGQsIHlGaWVsZF0gb2YgY29vcmRGaWVsZHMpIHtcbiAgICAgIGNvbnN0IGdyaWR4ID0gTWF0aC5yb3VuZCgoeCAtIG9mZnNldC54KSAvIGdyaWRbeEZpZWxkXSlcbiAgICAgIGNvbnN0IGdyaWR5ID0gTWF0aC5yb3VuZCgoeSAtIG9mZnNldC55KSAvIGdyaWRbeUZpZWxkXSlcblxuICAgICAgcmVzdWx0W3hGaWVsZF0gPSBNYXRoLm1heChsaW1pdHMubGVmdCwgTWF0aC5taW4obGltaXRzLnJpZ2h0LCBncmlkeCAqIGdyaWRbeEZpZWxkXSArIG9mZnNldC54KSlcbiAgICAgIHJlc3VsdFt5RmllbGRdID0gTWF0aC5tYXgobGltaXRzLnRvcCwgTWF0aC5taW4obGltaXRzLmJvdHRvbSwgZ3JpZHkgKiBncmlkW3lGaWVsZF0gKyBvZmZzZXQueSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUdyaWRcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=grid.js.map \ No newline at end of file diff --git a/packages/utils/snappers/grid.js.map b/packages/utils/snappers/grid.js.map index c4344797e..22ef19a2c 100644 --- a/packages/utils/snappers/grid.js.map +++ b/packages/utils/snappers/grid.js.map @@ -1 +1,38 @@ -{"version":3,"file":"grid.js","sourceRoot":"","sources":["grid.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAE,IAA0G;IAC7H,MAAM,WAAW,GAAG;QAClB,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,MAAM,EAAE,KAAK,CAAC;QACf,CAAC,OAAO,EAAE,QAAQ,CAAC;QACnB,CAAC,OAAO,EAAE,QAAQ,CAAC;KACpB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,CAAA;IAEhE,OAAO,UAAU,CAAC,EAAE,CAAC;QACnB,MAAM,EACJ,KAAK,EACL,MAAM,GAAG;YACP,IAAI,EAAI,CAAC,QAAQ;YACjB,KAAK,EAAI,QAAQ;YACjB,GAAG,EAAK,CAAC,QAAQ;YACjB,MAAM,EAAG,QAAQ;SAClB,EACD,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GACxB,GAAG,IAAI,CAAA;QAER,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAA;QAExB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YAEvD,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/F,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;SAChG;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAED,eAAe,UAAU,CAAA"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "grid.ts" + ], + "names": [ + "createGrid", + "grid", + "coordFields", + "filter", + "xField", + "yField", + "gridFunc", + "snapGrid", + "x", + "y", + "range", + "limits", + "left", + "Infinity", + "right", + "top", + "bottom", + "offset", + "result", + "gridx", + "Math", + "round", + "gridy", + "max", + "min", + "_isSnapGrid" + ], + "mappings": "AAAA,SAASA,UAAT,CAAqBC,IAArB,EAAiI;AAC/H,QAAMC,WAAW,GAAG,CAClB,CAAC,GAAD,EAAM,GAAN,CADkB,EAElB,CAAC,MAAD,EAAS,KAAT,CAFkB,EAGlB,CAAC,OAAD,EAAU,QAAV,CAHkB,EAIlB,CAAC,OAAD,EAAU,QAAV,CAJkB,EAKlBC,MALkB,CAKX,CAAC,CAACC,MAAD,EAASC,MAAT,CAAD,KAAsBD,MAAM,IAAIH,IAAV,IAAkBI,MAAM,IAAIJ,IALvC,CAApB;;AAOA,QAAMK,QAAQ,GAAG,SAASC,QAAT,CAAmBC,CAAnB,EAAsBC,CAAtB,EAAyB;AACxC,UAAM;AACJC,MAAAA,KADI;AAEJC,MAAAA,MAAM,GAAG;AACPC,QAAAA,IAAI,EAAI,CAACC,QADF;AAEPC,QAAAA,KAAK,EAAID,QAFF;AAGPE,QAAAA,GAAG,EAAK,CAACF,QAHF;AAIPG,QAAAA,MAAM,EAAGH;AAJF,OAFL;AAQJI,MAAAA,MAAM,GAAG;AAAET,QAAAA,CAAC,EAAE,CAAL;AAAQC,QAAAA,CAAC,EAAE;AAAX;AARL,QASFR,IATJ;AAWA,UAAMiB,MAAM,GAAG;AAAER,MAAAA;AAAF,KAAf;;AAEA,SAAK,MAAM,CAACN,MAAD,EAASC,MAAT,CAAX,IAA+BH,WAA/B,EAA4C;AAC1C,YAAMiB,KAAK,GAAGC,IAAI,CAACC,KAAL,CAAW,CAACb,CAAC,GAAGS,MAAM,CAACT,CAAZ,IAAiBP,IAAI,CAACG,MAAD,CAAhC,CAAd;AACA,YAAMkB,KAAK,GAAGF,IAAI,CAACC,KAAL,CAAW,CAACZ,CAAC,GAAGQ,MAAM,CAACR,CAAZ,IAAiBR,IAAI,CAACI,MAAD,CAAhC,CAAd;AAEAa,MAAAA,MAAM,CAACd,MAAD,CAAN,GAAiBgB,IAAI,CAACG,GAAL,CAASZ,MAAM,CAACC,IAAhB,EAAsBQ,IAAI,CAACI,GAAL,CAASb,MAAM,CAACG,KAAhB,EAAuBK,KAAK,GAAGlB,IAAI,CAACG,MAAD,CAAZ,GAAuBa,MAAM,CAACT,CAArD,CAAtB,CAAjB;AACAU,MAAAA,MAAM,CAACb,MAAD,CAAN,GAAiBe,IAAI,CAACG,GAAL,CAASZ,MAAM,CAACI,GAAhB,EAAqBK,IAAI,CAACI,GAAL,CAASb,MAAM,CAACK,MAAhB,EAAwBM,KAAK,GAAGrB,IAAI,CAACI,MAAD,CAAZ,GAAuBY,MAAM,CAACR,CAAtD,CAArB,CAAjB;AACD;;AAED,WAAOS,MAAP;AACD,GAvBD;;AAyBAZ,EAAAA,QAAQ,CAACmB,WAAT,GAAuB,IAAvB;AACAnB,EAAAA,QAAQ,CAACL,IAAT,GAAgBA,IAAhB;AACAK,EAAAA,QAAQ,CAACJ,WAAT,GAAuBA,WAAvB;AAEA,SAAOI,QAAP;AACD;;AAED,eAAeN,UAAf", + "sourcesContent": [ + "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 const gridFunc = function snapGrid (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 gridFunc._isSnapGrid = true\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n\nexport default createGrid\n" + ] +} \ No newline at end of file diff --git a/packages/utils/snappers/index.js b/packages/utils/snappers/index.js index 22f8985fd..0c65a7b88 100644 --- a/packages/utils/snappers/index.js +++ b/packages/utils/snappers/index.js @@ -1,3 +1,3 @@ -import grid from './grid'; +import grid from "./grid.js"; export { grid }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxRQUFRLENBQUE7QUFFekIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdyaWQgZnJvbSAnLi9ncmlkJ1xuXG5leHBvcnQgeyBncmlkIH1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/utils/snappers/index.js.map b/packages/utils/snappers/index.js.map index 373272d1d..3fb1a2de8 100644 --- a/packages/utils/snappers/index.js.map +++ b/packages/utils/snappers/index.js.map @@ -1 +1,13 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,CAAA"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "index.ts" + ], + "names": [ + "grid" + ], + "mappings": "AAAA,OAAOA,IAAP;AAEA,SAASA,IAAT", + "sourcesContent": [ + "import grid from './grid'\n\nexport { grid }\n" + ] +} \ No newline at end of file diff --git a/packages/utils/window.js b/packages/utils/window.js index 47a7aed7b..165a0b877 100644 --- a/packages/utils/window.js +++ b/packages/utils/window.js @@ -1,38 +1,39 @@ -import isWindow from './isWindow'; +import isWindow from "./isWindow.js"; const win = { - realWindow: undefined, - window: undefined, - getWindow, - init, + realWindow: undefined, + window: undefined, + getWindow, + init }; export function init(window) { - // get wrapped window if using Shadow DOM polyfill - win.realWindow = window; - // create a TextNode - const el = window.document.createTextNode(''); - // check if it's wrapped by a polyfill - if (el.ownerDocument !== window.document && - typeof window.wrap === 'function' && - window.wrap(el) === el) { - // use wrapped window - window = window.wrap(window); - } - win.window = window; + // get wrapped window if using Shadow DOM polyfill + win.realWindow = window; // create a TextNode + + const el = window.document.createTextNode(''); // check if it's wrapped by a polyfill + + if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) { + // use wrapped window + window = window.wrap(window); + } + + win.window = window; } + if (typeof window === 'undefined') { - win.window = undefined; - win.realWindow = undefined; -} -else { - init(window); + win.window = undefined; + win.realWindow = undefined; +} else { + init(window); } + export function getWindow(node) { - if (isWindow(node)) { - return node; - } - const rootNode = (node.ownerDocument || node); - return rootNode.defaultView || win.window; + if (isWindow(node)) { + return node; + } + + const rootNode = node.ownerDocument || node; + return rootNode.defaultView || win.window; } win.init = init; export default win; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxNQUFNLFlBQVksQ0FBQTtBQUVqQyxNQUFNLEdBQUcsR0FBRztJQUNWLFVBQVUsRUFBRSxTQUFtQjtJQUMvQixNQUFNLEVBQUUsU0FBbUI7SUFDM0IsU0FBUztJQUNULElBQUk7Q0FDTCxDQUFBO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FBRSxNQUE0QztJQUNoRSxrREFBa0Q7SUFFbEQsR0FBRyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFFdkIsb0JBQW9CO0lBQ3BCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRTdDLHNDQUFzQztJQUN0QyxJQUFJLEVBQUUsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLFFBQVE7UUFDcEMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVU7UUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDeEIscUJBQXFCO1FBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQzdCO0lBRUQsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7QUFDckIsQ0FBQztBQUVELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO0lBQ2pDLEdBQUcsQ0FBQyxNQUFNLEdBQU8sU0FBUyxDQUFBO0lBQzFCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO0NBQzNCO0tBQ0k7SUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDYjtBQUVELE1BQU0sVUFBVSxTQUFTLENBQUUsSUFBSTtJQUM3QixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQTtLQUNaO0lBRUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFBO0lBRTdDLE9BQU8sUUFBUSxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFBO0FBQzNDLENBQUM7QUFFRCxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtBQUVmLGVBQWUsR0FBRyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzV2luZG93IGZyb20gJy4vaXNXaW5kb3cnXG5cbmNvbnN0IHdpbiA9IHtcbiAgcmVhbFdpbmRvdzogdW5kZWZpbmVkIGFzIFdpbmRvdyxcbiAgd2luZG93OiB1bmRlZmluZWQgYXMgV2luZG93LFxuICBnZXRXaW5kb3csXG4gIGluaXQsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0ICh3aW5kb3c6IFdpbmRvdyAmIHsgd3JhcD86ICguLi5hcmdzKSA9PiBhbnkgfSkge1xuICAvLyBnZXQgd3JhcHBlZCB3aW5kb3cgaWYgdXNpbmcgU2hhZG93IERPTSBwb2x5ZmlsbFxuXG4gIHdpbi5yZWFsV2luZG93ID0gd2luZG93XG5cbiAgLy8gY3JlYXRlIGEgVGV4dE5vZGVcbiAgY29uc3QgZWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpXG5cbiAgLy8gY2hlY2sgaWYgaXQncyB3cmFwcGVkIGJ5IGEgcG9seWZpbGxcbiAgaWYgKGVsLm93bmVyRG9jdW1lbnQgIT09IHdpbmRvdy5kb2N1bWVudCAmJlxuICAgICAgdHlwZW9mIHdpbmRvdy53cmFwID09PSAnZnVuY3Rpb24nICYmXG4gICAgd2luZG93LndyYXAoZWwpID09PSBlbCkge1xuICAgIC8vIHVzZSB3cmFwcGVkIHdpbmRvd1xuICAgIHdpbmRvdyA9IHdpbmRvdy53cmFwKHdpbmRvdylcbiAgfVxuXG4gIHdpbi53aW5kb3cgPSB3aW5kb3dcbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gIHdpbi53aW5kb3cgICAgID0gdW5kZWZpbmVkXG4gIHdpbi5yZWFsV2luZG93ID0gdW5kZWZpbmVkXG59XG5lbHNlIHtcbiAgaW5pdCh3aW5kb3cpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaW5kb3cgKG5vZGUpIHtcbiAgaWYgKGlzV2luZG93KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIGNvbnN0IHJvb3ROb2RlID0gKG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlKVxuXG4gIHJldHVybiByb290Tm9kZS5kZWZhdWx0VmlldyB8fCB3aW4ud2luZG93XG59XG5cbndpbi5pbml0ID0gaW5pdFxuXG5leHBvcnQgZGVmYXVsdCB3aW5cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=window.js.map \ No newline at end of file diff --git a/packages/utils/window.js.map b/packages/utils/window.js.map new file mode 100644 index 000000000..54b9efc2f --- /dev/null +++ b/packages/utils/window.js.map @@ -0,0 +1,27 @@ +{ + "version": 3, + "sources": [ + "window.ts" + ], + "names": [ + "isWindow", + "win", + "realWindow", + "undefined", + "window", + "getWindow", + "init", + "el", + "document", + "createTextNode", + "ownerDocument", + "wrap", + "node", + "rootNode", + "defaultView" + ], + "mappings": "AAAA,OAAOA,QAAP;AAEA,MAAMC,GAAG,GAAG;AACVC,EAAAA,UAAU,EAAEC,SADF;AAEVC,EAAAA,MAAM,EAAED,SAFE;AAGVE,EAAAA,SAHU;AAIVC,EAAAA;AAJU,CAAZ;AAOA,OAAO,SAASA,IAAT,CAAeF,MAAf,EAA6D;AAClE;AAEAH,EAAAA,GAAG,CAACC,UAAJ,GAAiBE,MAAjB,CAHkE,CAKlE;;AACA,QAAMG,EAAE,GAAGH,MAAM,CAACI,QAAP,CAAgBC,cAAhB,CAA+B,EAA/B,CAAX,CANkE,CAQlE;;AACA,MAAIF,EAAE,CAACG,aAAH,KAAqBN,MAAM,CAACI,QAA5B,IACA,OAAOJ,MAAM,CAACO,IAAd,KAAuB,UADvB,IAEFP,MAAM,CAACO,IAAP,CAAYJ,EAAZ,MAAoBA,EAFtB,EAE0B;AACxB;AACAH,IAAAA,MAAM,GAAGA,MAAM,CAACO,IAAP,CAAYP,MAAZ,CAAT;AACD;;AAEDH,EAAAA,GAAG,CAACG,MAAJ,GAAaA,MAAb;AACD;;AAED,IAAI,OAAOA,MAAP,KAAkB,WAAtB,EAAmC;AACjCH,EAAAA,GAAG,CAACG,MAAJ,GAAiBD,SAAjB;AACAF,EAAAA,GAAG,CAACC,UAAJ,GAAiBC,SAAjB;AACD,CAHD,MAIK;AACHG,EAAAA,IAAI,CAACF,MAAD,CAAJ;AACD;;AAED,OAAO,SAASC,SAAT,CAAoBO,IAApB,EAA0B;AAC/B,MAAIZ,QAAQ,CAACY,IAAD,CAAZ,EAAoB;AAClB,WAAOA,IAAP;AACD;;AAED,QAAMC,QAAQ,GAAID,IAAI,CAACF,aAAL,IAAsBE,IAAxC;AAEA,SAAOC,QAAQ,CAACC,WAAT,IAAwBb,GAAG,CAACG,MAAnC;AACD;AAEDH,GAAG,CAACK,IAAJ,GAAWA,IAAX;AAEA,eAAeL,GAAf", + "sourcesContent": [ + "import isWindow from './isWindow'\n\nconst win = {\n realWindow: undefined as Window,\n window: undefined as Window,\n getWindow,\n init,\n}\n\nexport function init (window: Window & { wrap?: (...args) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n win.realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document &&\n typeof window.wrap === 'function' &&\n window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win.window = window\n}\n\nif (typeof window === 'undefined') {\n win.window = undefined\n win.realWindow = undefined\n}\nelse {\n init(window)\n}\n\nexport function getWindow (node) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = (node.ownerDocument || node)\n\n return rootNode.defaultView || win.window\n}\n\nwin.init = init\n\nexport default win\n" + ] +} \ No newline at end of file