142 lines
3.9 KiB
JavaScript
142 lines
3.9 KiB
JavaScript
/**
|
|
* interact.js 1.10.27
|
|
*
|
|
* Copyright (c) 2012-present Taye Adeyemi <dev@taye.me>
|
|
* Released under the MIT License.
|
|
* https://raw.github.com/taye/interact.js/main/LICENSE
|
|
*/
|
|
|
|
import * as domUtils 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;
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
// try to resume simulation with a new pointer
|
|
simulationResume(_ref) {
|
|
let {
|
|
pointerType,
|
|
eventType,
|
|
eventTarget,
|
|
scope
|
|
} = _ref;
|
|
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 = domUtils.parentNode(element);
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
// if it's a mouse or pen interaction
|
|
mouseOrPen(_ref2) {
|
|
let {
|
|
pointerId,
|
|
pointerType,
|
|
eventType,
|
|
scope
|
|
} = _ref2;
|
|
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(_ref3) {
|
|
let {
|
|
pointerId,
|
|
scope
|
|
} = _ref3;
|
|
for (const interaction of scope.interactions.list) {
|
|
if (hasPointerId(interaction, pointerId)) {
|
|
return interaction;
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
// get first idle interaction with a matching pointerType
|
|
idle(_ref4) {
|
|
let {
|
|
pointerType,
|
|
scope
|
|
} = _ref4;
|
|
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;
|
|
}
|
|
};
|
|
function hasPointerId(interaction, pointerId) {
|
|
return interaction.pointers.some(_ref5 => {
|
|
let {
|
|
id
|
|
} = _ref5;
|
|
return id === pointerId;
|
|
});
|
|
}
|
|
export { finder as default };
|
|
//# sourceMappingURL=interactionFinder.js.map
|