django-vue3-admin-web/node_modules/@interactjs/pointer-events/base-45YfudGV.js
2025-10-20 21:21:14 +08:00

274 lines
6.7 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";
import extend from "../utils/extend.js";
import getOriginXY from "../utils/getOriginXY.js";
import { PointerEvent } from './PointerEvent.js';
const defaults = {
holdDuration: 600,
ignoreFrom: null,
allowFrom: null,
origin: {
x: 0,
y: 0
}
};
const pointerEvents = {
id: 'pointer-events/base',
before: ['inertia', 'modifiers', 'auto-start', 'actions'],
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: true,
move: true,
up: true,
cancel: true,
tap: true,
doubletap: true,
hold: true
}
};
function fire(arg, scope) {
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];
}
const origin = 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;
}
}
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(_ref, scope) {
let {
interaction,
pointer,
event,
eventTarget,
type
} = _ref;
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 = domUtils.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 => {
var _interaction$pointers, _interaction$pointers2;
return target.eventable.options.holdDuration === ((_interaction$pointers = interaction.pointers[pointerIndex]) == null ? void 0 : (_interaction$pointers2 = _interaction$pointers.hold) == null ? void 0 : _interaction$pointers2.duration);
});
}
return signalArg.targets;
}
function addInteractionProps(_ref2) {
let {
interaction
} = _ref2;
interaction.prevTap = null; // the most recent tap event on this interaction
interaction.tapTime = 0; // time of the most recent tap event
}
function addHoldInfo(_ref3) {
let {
down,
pointerInfo
} = _ref3;
if (!down && pointerInfo.hold) {
return;
}
pointerInfo.hold = {
duration: Infinity,
timeout: null
};
}
function clearHold(_ref4) {
let {
interaction,
pointerIndex
} = _ref4;
const hold = interaction.pointers[pointerIndex].hold;
if (hold && hold.timeout) {
clearTimeout(hold.timeout);
hold.timeout = null;
}
}
function moveAndClearHold(arg, scope) {
const {
interaction,
pointer,
event,
eventTarget,
duplicate
} = arg;
if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {
if (interaction.pointerIsDown) {
clearHold(arg);
}
fire({
interaction,
pointer,
event,
eventTarget: eventTarget,
type: 'move'
}, scope);
}
}
function downAndStartHold(_ref5, scope) {
let {
interaction,
pointer,
event,
eventTarget,
pointerIndex
} = _ref5;
const timer = interaction.pointers[pointerIndex].hold;
const path = domUtils.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;
}
}
timer.duration = minDuration;
timer.timeout = setTimeout(() => {
fire({
interaction,
eventTarget,
pointer,
event,
type: 'hold'
}, scope);
}, minDuration);
}
function tapAfterUp(_ref6, scope) {
let {
interaction,
pointer,
event,
eventTarget
} = _ref6;
if (!interaction.pointerWasMoved) {
fire({
interaction,
eventTarget,
pointer,
event,
type: 'tap'
}, scope);
}
}
function install(scope) {
scope.pointerEvents = pointerEvents;
scope.defaults.actions.pointerEvents = pointerEvents.defaults;
extend(scope.actions.phaselessTypes, pointerEvents.types);
}
var pointerEvents$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
default: pointerEvents
});
export { pointerEvents as a, pointerEvents$1 as p };
//# sourceMappingURL=base-45YfudGV.js.map