@interactjs/pointer-events
Advanced tools
Comparing version 1.6.3 to 1.7.0
@@ -1,6 +0,5 @@ | ||
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'; | ||
@@ -45,10 +44,42 @@ export declare type EventTargetList = Array<{ | ||
} | ||
declare module '@interactjs/core/scope' { | ||
interface SignalArgs { | ||
'pointerEvents:new': { | ||
pointerEvent: PointerEvent<any>; | ||
}; | ||
'pointerEvents:fired': { | ||
interaction: Interaction; | ||
pointer: Interact.PointerType | PointerEvent<any>; | ||
event: Interact.PointerEventType | PointerEvent<any>; | ||
eventTarget: Interact.EventTarget; | ||
pointerEvent: PointerEvent<any>; | ||
targets?: EventTargetList; | ||
type: string; | ||
}; | ||
'pointerEvents:collect-targets': { | ||
interaction: Interaction; | ||
pointer: Interact.PointerType | PointerEvent<any>; | ||
event: Interact.PointerEventType | PointerEvent<any>; | ||
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; | ||
@@ -58,25 +89,22 @@ types: string[]; | ||
declare function fire<T extends string>(arg: { | ||
pointer: Interact.PointerType | PointerEvent<any>; | ||
event: Interact.PointerEventType | PointerEvent<any>; | ||
eventTarget: Interact.EventTarget; | ||
interaction: Interaction; | ||
pointer: Interact.PointerType; | ||
event: Interact.PointerEventType; | ||
eventTarget: Interact.EventTarget; | ||
type: T; | ||
targets?: EventTargetList; | ||
pointerEvent?: PointerEvent<T>; | ||
type: T; | ||
}, scope: Interact.Scope): PointerEvent<any>; | ||
}, scope: Interact.Scope): PointerEvent<T>; | ||
declare function collectEventTargets<T extends string>({ interaction, pointer, event, eventTarget, type }: { | ||
interaction: Interaction; | ||
pointer: Interact.PointerType; | ||
event: Interact.PointerEventType; | ||
pointer: Interact.PointerType | PointerEvent<any>; | ||
event: Interact.PointerEventType | PointerEvent<any>; | ||
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; |
442
base.js
@@ -1,196 +0,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 []; | ||
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 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); | ||
} | ||
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); | ||
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; | ||
} | ||
if (type === 'hold') { | ||
signalArg.targets = signalArg.targets.filter(target => target.eventable.options.holdDuration === interaction.pointers[pointerIndex].hold.duration); | ||
} | ||
return signalArg.targets; | ||
} | ||
timer.duration = minDuration; | ||
timer.timeout = setTimeout(() => { | ||
fire({ | ||
interaction, | ||
eventTarget, | ||
pointer, | ||
event, | ||
type: 'hold' | ||
}, scope); | ||
}, minDuration); | ||
} | ||
function tapAfterUp({ | ||
interaction, | ||
pointer, | ||
event, | ||
eventTarget | ||
}, scope) { | ||
if (!interaction.pointerWasMoved) { | ||
fire({ | ||
interaction, | ||
eventTarget, | ||
pointer, | ||
event, | ||
type: 'tap' | ||
}, scope); | ||
} | ||
} | ||
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); | ||
} | ||
}); | ||
} | ||
for (let i = 0; i < simpleSignals.length; i++) { | ||
interactions.signals.on(simpleSignals[i], createSignalListener(simpleEvents[i], scope)); | ||
} | ||
interactions.signals.on('up', ({ interaction, pointer, event, eventTarget }) => { | ||
if (!interaction.pointerWasMoved) { | ||
fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope); | ||
} | ||
}); | ||
scope.pointerEvents = pointerEvents; | ||
scope.defaults.actions.pointerEvents = pointerEvents.defaults; | ||
} | ||
function createSignalListener(type, scope) { | ||
return function ({ interaction, pointer, event, eventTarget }) { | ||
fire({ interaction, eventTarget, pointer, event, type }, scope); | ||
}; | ||
} | ||
export default pointerEvents; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQTtBQTRDekMsTUFBTSxPQUFPLEdBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDekMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQzlDLE1BQU0sWUFBWSxHQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUU5QyxNQUFNLFFBQVEsR0FBd0I7SUFDcEMsWUFBWSxFQUFFLEdBQUc7SUFDakIsVUFBVSxFQUFJLElBQUk7SUFDbEIsU0FBUyxFQUFLLElBQUk7SUFDbEIsTUFBTSxFQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQzdCLENBQUE7QUFFRCxNQUFNLGFBQWEsR0FBRztJQUNwQixFQUFFLEVBQUUscUJBQXFCO0lBQ3pCLE9BQU87SUFDUCxPQUFPO0lBQ1AsWUFBWTtJQUNaLElBQUk7SUFDSixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLFFBQVE7SUFDUixLQUFLLEVBQUU7UUFDTCxNQUFNO1FBQ04sTUFBTTtRQUNOLElBQUk7UUFDSixRQUFRO1FBQ1IsS0FBSztRQUNMLFdBQVc7UUFDWCxNQUFNO0tBQ1A7Q0FDRixDQUFBO0FBRUQsU0FBUyxJQUFJLENBQW9CLEdBUWhDLEVBQUUsS0FBcUI7SUFDdEIsTUFBTSxFQUNKLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFDeEMsSUFBSSxHQUFJLEdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUNyQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQ25DLEdBQUcsR0FBRyxDQUFB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LE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDakUsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELGVBQWUsYUFBYSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGVyQWN0aW9uRGVmYXVsdHMgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL2RlZmF1bHRPcHRpb25zJ1xuaW1wb3J0IEV2ZW50YWJsZSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0V2ZW50YWJsZSdcbmltcG9ydCBJbnRlcmFjdGlvbiBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL0ludGVyYWN0aW9uJ1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJ1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGludGVyYWN0anMvdXRpbHMnXG5pbXBvcnQgUG9pbnRlckV2ZW50IGZyb20gJy4vUG9pbnRlckV2ZW50J1xuXG5leHBvcnQgdHlwZSBFdmVudFRhcmdldExpc3QgPSBBcnJheTx7XG4gIG5vZGU6IE5vZGVcbiAgZXZlbnRhYmxlOiBFdmVudGFibGVcbiAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH1cbn0+XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnRlckV2ZW50T3B0aW9ucyBleHRlbmRzIFBlckFjdGlvbkRlZmF1bHRzIHtcbiAgZW5hYmxlZD86IHVuZGVmaW5lZCAvLyBub3QgdXNlZFxuICBob2xkRHVyYXRpb24/OiBudW1iZXJcbiAgaWdub3JlRnJvbT86IGFueVxuICBhbGxvd0Zyb20/OiBhbnlcbiAgb3JpZ2luPzogSW50ZXJhY3QuUG9pbnQgfCBzdHJpbmcgfCBJbnRlcmFjdC5FbGVtZW50XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAaW50ZXJhY3Rqcy9jb3JlL3Njb3BlJyB7XG4gIGludGVyZmFjZSBTY29wZSB7XG4gICAgcG9pbnRlckV2ZW50czogdHlwZW9mIHBvaW50ZXJFdmVudHNcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9JbnRlcmFjdGlvbicge1xuICBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xuICAgIHByZXZUYXA/OiBQb2ludGVyRXZlbnQ8c3RyaW5nPlxuICAgIHRhcFRpbWU/OiBudW1iZXJcbiAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnQGludGVyYWN0anMvY29yZS9Qb2ludGVySW5mbycge1xuICBpbnRlcmZhY2UgUG9pbnRlckluZm8ge1xuICAgIGhvbGQ/OiB7XG4gICAgICBkdXJhdGlvbjogbnVtYmVyXG4gICAgICB0aW1lb3V0OiBhbnlcbiAgICB9XG4gIH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BpbnRlcmFjdGpzL2NvcmUvZGVmYXVsdE9wdGlvbnMnIHtcbiAgaW50ZXJmYWNlIEFjdGlvbkRlZmF1bHRzIHtcbiAgICBwb2ludGVyRXZlbnRzOiBJbnRlcmFjdC5PcHRpb25zXG4gIH1cbn1cblxuY29uc3Qgc2lnbmFscyAgICAgICA9IG5ldyB1dGlscy5TaWduYWxzKClcbmNvbnN0IHNpbXBsZVNpZ25hbHMgPSBbJ2Rvd24nLCAndXAnLCAnY2FuY2VsJ11cbmNvbnN0IHNpbXBsZUV2ZW50cyAgPSBbJ2Rvd24nLCAndXAnLCAnY2FuY2VsJ11cblxuY29uc3QgZGVmYXVsdHM6IFBvaW50ZXJFdmVudE9wdGlvbnMgPSB7XG4gIGhvbGREdXJhdGlvbjogNjAwLFxuICBpZ25vcmVGcm9tICA6IG51bGwsXG4gIGFsbG93RnJvbSAgIDogbnVsbCxcbiAgb3JpZ2luICAgICAgOiB7IHg6IDAsIHk6IDAgfSxcbn1cblxuY29uc3QgcG9pbnRlckV2ZW50cyA9IHtcbiAgaWQ6ICdwb2ludGVyLWV2ZW50cy9iYXNlJyxcbiAgaW5zdGFsbCxcbiAgc2lnbmFscyxcbiAgUG9pbnRlckV2ZW50LFxuICBmaXJlLFxuICBjb2xsZWN0RXZlbnRUYXJnZXRzLFxuICBjcmVhdGVTaWduYWxMaXN0ZW5lcixcbiAgZGVmYXVsdHMsXG4gIHR5cGVzOiBbXG4gICAgJ2Rvd24nLFxuICAgICdtb3ZlJyxcbiAgICAndXAnLFxuICAgICdjYW5jZWwnLFxuICAgICd0YXAnLFxuICAgICdkb3VibGV0YXAnLFxuICAgICdob2xkJyxcbiAgXSxcbn1cblxuZnVuY3Rpb24gZmlyZTxUIGV4dGVuZHMgc3RyaW5nPiAoYXJnOiB7XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvblxuICBwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZVxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICBldmVudFRhcmdldDogSW50ZXJhY3QuRXZlbnRUYXJnZXRcbiAgdGFyZ2V0cz86IEV2ZW50VGFyZ2V0TGlzdFxuICBwb2ludGVyRXZlbnQ/OiBQb2ludGVyRXZlbnQ8VD5cbiAgdHlwZTogVFxufSwgc2NvcGU6IEludGVyYWN0LlNjb3BlKSB7XG4gIGNvbnN0IHtcbiAgICBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LFxuICAgIHR5cGUgPSAoYXJnIGFzIGFueSkucG9pbnRlckV2ZW50LnR5cGUsXG4gICAgdGFyZ2V0cyA9IGNvbGxlY3RFdmVudFRhcmdldHMoYXJnKSxcbiAgfSA9IGFyZ1xuXG4gIGNvbnN0IHtcbiAgICBwb2ludGVyRXZlbnQgPSBuZXcgUG9pbnRlckV2ZW50KHR5cGUsIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgaW50ZXJhY3Rpb24sIHNjb3BlLm5vdygpKSxcbiAgfSA9IGFyZ1xuXG4gIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICBpbnRlcmFjdGlvbixcbiAgICBwb2ludGVyLFxuICAgIGV2ZW50LFxuICAgIGV2ZW50VGFyZ2V0LFxuICAgIHRhcmdldHMsXG4gICAgdHlwZSxcbiAgICBwb2ludGVyRXZlbnQsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRzW2ldXG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGFyZ2V0LnByb3BzIHx8IHt9KSB7XG4gICAgICAocG9pbnRlckV2ZW50IGFzIGFueSlbcHJvcF0gPSB0YXJnZXQucHJvcHNbcHJvcF1cbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW4gPSB1dGlscy5nZXRPcmlnaW5YWSh0YXJnZXQuZXZlbnRhYmxlLCB0YXJnZXQubm9kZSlcblxuICAgIHBvaW50ZXJFdmVudC5fc3VidHJhY3RPcmlnaW4ob3JpZ2luKVxuICAgIHBvaW50ZXJFdmVudC5ldmVudGFibGUgPSB0YXJnZXQuZXZlbnRhYmxlXG4gICAgcG9pbnRlckV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0YXJnZXQubm9kZVxuXG4gICAgdGFyZ2V0LmV2ZW50YWJsZS5maXJlKHBvaW50ZXJFdmVudClcblxuICAgIHBvaW50ZXJFdmVudC5fYWRkT3JpZ2luKG9yaWdpbilcblxuICAgIGlmIChwb2ludGVyRXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIHx8XG4gICAgICAgIChwb2ludGVyRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkICYmXG4gICAgICAgICAgICAoaSArIDEpIDwgdGFyZ2V0cy5sZW5ndGggJiYgdGFyZ2V0c1tpICsgMV0ubm9kZSAhPT0gcG9pbnRlckV2ZW50LmN1cnJlbnRUYXJnZXQpKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHNpZ25hbHMuZmlyZSgnZmlyZWQnLCBzaWduYWxBcmcpXG5cbiAgaWYgKHR5cGUgPT09ICd0YXAnKSB7XG4gICAgLy8gaWYgcG9pbnRlckV2ZW50IHNob3VsZCBtYWtlIGEgZG91YmxlIHRhcCwgY3JlYXRlIGFuZCBmaXJlIGEgZG91YmxldGFwXG4gICAgLy8gUG9pbnRlckV2ZW50IGFuZCB1c2UgdGhhdCBhcyB0aGUgcHJldlRhcFxuICAgIGNvbnN0IHByZXZUYXAgPSBwb2ludGVyRXZlbnQuZG91YmxlXG4gICAgICA/IGZpcmUoe1xuICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICB0eXBlOiAnZG91YmxldGFwJyxcbiAgICAgIH0sIHNjb3BlKVxuICAgICAgOiBwb2ludGVyRXZlbnRcblxuICAgIGludGVyYWN0aW9uLnByZXZUYXAgPSBwcmV2VGFwXG4gICAgaW50ZXJhY3Rpb24udGFwVGltZSA9IHByZXZUYXAudGltZVN0YW1wXG4gIH1cblxuICByZXR1cm4gcG9pbnRlckV2ZW50XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RFdmVudFRhcmdldHM8VCBleHRlbmRzIHN0cmluZz4gKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCwgdHlwZSB9OiB7XG4gIGludGVyYWN0aW9uOiBJbnRlcmFjdGlvblxuICBwb2ludGVyOiBJbnRlcmFjdC5Qb2ludGVyVHlwZVxuICBldmVudDogSW50ZXJhY3QuUG9pbnRlckV2ZW50VHlwZVxuICBldmVudFRhcmdldDogSW50ZXJhY3QuRXZlbnRUYXJnZXRcbiAgdHlwZTogVFxufSkge1xuICBjb25zdCBwb2ludGVySW5kZXggPSBpbnRlcmFjdGlvbi5nZXRQb2ludGVySW5kZXgocG9pbnRlcilcbiAgY29uc3QgcG9pbnRlckluZm8gPSBpbnRlcmFjdGlvbi5wb2ludGVyc1twb2ludGVySW5kZXhdXG5cbiAgLy8gZG8gbm90IGZpcmUgYSB0YXAgZXZlbnQgaWYgdGhlIHBvaW50ZXIgd2FzIG1vdmVkIGJlZm9yZSBiZWluZyBsaWZ0ZWRcbiAgaWYgKHR5cGUgPT09ICd0YXAnICYmIChpbnRlcmFjdGlvbi5wb2ludGVyV2FzTW92ZWQgfHxcbiAgICAgIC8vIG9yIGlmIHRoZSBwb2ludGVydXAgdGFyZ2V0IGlzIGRpZmZlcmVudCB0byB0aGUgcG9pbnRlcmRvd24gdGFyZ2V0XG4gICAgICAhKHBvaW50ZXJJbmZvICYmIHBvaW50ZXJJbmZvLmRvd25UYXJnZXQgPT09IGV2ZW50VGFyZ2V0KSkpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGNvbnN0IHBhdGggPSB1dGlscy5kb20uZ2V0UGF0aChldmVudFRhcmdldClcbiAgY29uc3Qgc2lnbmFsQXJnID0ge1xuICAgIGludGVyYWN0aW9uLFxuICAgIHBvaW50ZXIsXG4gICAgZXZlbnQsXG4gICAgZXZlbnRUYXJnZXQsXG4gICAgdHlwZSxcbiAgICBwYXRoLFxuICAgIHRhcmdldHM6IFtdIGFzIEV2ZW50VGFyZ2V0TGlzdCxcbiAgICBub2RlOiBudWxsLFxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIHBhdGgpIHtcbiAgICBzaWduYWxBcmcubm9kZSA9IG5vZGVcblxuICAgIHNpZ25hbHMuZmlyZSgnY29sbGVjdC10YXJnZXRzJywgc2lnbmFsQXJnKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdob2xkJykge1xuICAgIHNpZ25hbEFyZy50YXJnZXRzID0gc2lnbmFsQXJnLnRhcmdldHMuZmlsdGVyKHRhcmdldCA9PlxuICAgICAgdGFyZ2V0LmV2ZW50YWJsZS5vcHRpb25zLmhvbGREdXJhdGlvbiA9PT0gaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkLmR1cmF0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHNpZ25hbEFyZy50YXJnZXRzXG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKHNjb3BlOiBTY29wZSkge1xuICBjb25zdCB7XG4gICAgaW50ZXJhY3Rpb25zLFxuICB9ID0gc2NvcGVcblxuICBzY29wZS5wb2ludGVyRXZlbnRzID0gcG9pbnRlckV2ZW50c1xuICBzY29wZS5kZWZhdWx0cy5hY3Rpb25zLnBvaW50ZXJFdmVudHMgPSBwb2ludGVyRXZlbnRzLmRlZmF1bHRzXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ25ldycsICh7IGludGVyYWN0aW9uIH0pID0+IHtcbiAgICBpbnRlcmFjdGlvbi5wcmV2VGFwICAgID0gbnVsbCAgLy8gdGhlIG1vc3QgcmVjZW50IHRhcCBldmVudCBvbiB0aGlzIGludGVyYWN0aW9uXG4gICAgaW50ZXJhY3Rpb24udGFwVGltZSAgICA9IDAgICAgIC8vIHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50IHRhcCBldmVudFxuICB9KVxuXG4gIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKCd1cGRhdGUtcG9pbnRlcicsICh7IGRvd24sIHBvaW50ZXJJbmZvIH0pID0+IHtcbiAgICBpZiAoIWRvd24gJiYgcG9pbnRlckluZm8uaG9sZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcG9pbnRlckluZm8uaG9sZCA9IHsgZHVyYXRpb246IEluZmluaXR5LCB0aW1lb3V0OiBudWxsIH1cbiAgfSlcblxuICBpbnRlcmFjdGlvbnMuc2lnbmFscy5vbignbW92ZScsICh7IGludGVyYWN0aW9uLCBwb2ludGVyLCBldmVudCwgZXZlbnRUYXJnZXQsIGR1cGxpY2F0ZU1vdmUgfSkgPT4ge1xuICAgIGNvbnN0IHBvaW50ZXJJbmRleCA9IGludGVyYWN0aW9uLmdldFBvaW50ZXJJbmRleChwb2ludGVyKVxuXG4gICAgaWYgKCFkdXBsaWNhdGVNb3ZlICYmICghaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93biB8fCBpbnRlcmFjdGlvbi5wb2ludGVyV2FzTW92ZWQpKSB7XG4gICAgICBpZiAoaW50ZXJhY3Rpb24ucG9pbnRlcklzRG93bikge1xuICAgICAgICBjbGVhclRpbWVvdXQoaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkLnRpbWVvdXQpXG4gICAgICB9XG5cbiAgICAgIGZpcmUoe1xuICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGV2ZW50VGFyZ2V0LFxuICAgICAgICB0eXBlOiAnbW92ZScsXG4gICAgICB9LCBzY29wZSlcbiAgICB9XG4gIH0pXG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ2Rvd24nLCAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0LCBwb2ludGVySW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkXG4gICAgY29uc3QgcGF0aCA9IHV0aWxzLmRvbS5nZXRQYXRoKGV2ZW50VGFyZ2V0KVxuICAgIGNvbnN0IHNpZ25hbEFyZyA9IHtcbiAgICAgIGludGVyYWN0aW9uLFxuICAgICAgcG9pbnRlcixcbiAgICAgIGV2ZW50LFxuICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICB0eXBlOiAnaG9sZCcsXG4gICAgICB0YXJnZXRzOiBbXSBhcyBFdmVudFRhcmdldExpc3QsXG4gICAgICBwYXRoLFxuICAgICAgbm9kZTogbnVsbCxcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGF0aCkge1xuICAgICAgc2lnbmFsQXJnLm5vZGUgPSBub2RlXG5cbiAgICAgIHNpZ25hbHMuZmlyZSgnY29sbGVjdC10YXJnZXRzJywgc2lnbmFsQXJnKVxuICAgIH1cblxuICAgIGlmICghc2lnbmFsQXJnLnRhcmdldHMubGVuZ3RoKSB7IHJldHVybiB9XG5cbiAgICBsZXQgbWluRHVyYXRpb24gPSBJbmZpbml0eVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2Ygc2lnbmFsQXJnLnRhcmdldHMpIHtcbiAgICAgIGNvbnN0IGhvbGREdXJhdGlvbiA9IHRhcmdldC5ldmVudGFibGUub3B0aW9ucy5ob2xkRHVyYXRpb25cblxuICAgICAgaWYgKGhvbGREdXJhdGlvbiA8IG1pbkR1cmF0aW9uKSB7XG4gICAgICAgIG1pbkR1cmF0aW9uID0gaG9sZER1cmF0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGltZXIuZHVyYXRpb24gPSBtaW5EdXJhdGlvblxuICAgIHRpbWVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZpcmUoe1xuICAgICAgICBpbnRlcmFjdGlvbixcbiAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0eXBlOiAnaG9sZCcsXG4gICAgICB9LCBzY29wZSlcbiAgICB9LCBtaW5EdXJhdGlvbilcbiAgfSlcblxuICBmb3IgKGNvbnN0IHNpZ25hbE5hbWUgb2YgWyd1cCcsICdjYW5jZWwnXSkge1xuICAgIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKHNpZ25hbE5hbWUsICh7IGludGVyYWN0aW9uLCBwb2ludGVySW5kZXggfSkgPT4ge1xuICAgICAgaWYgKGludGVyYWN0aW9uLnBvaW50ZXJzW3BvaW50ZXJJbmRleF0uaG9sZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaW50ZXJhY3Rpb24ucG9pbnRlcnNbcG9pbnRlckluZGV4XS5ob2xkLnRpbWVvdXQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2ltcGxlU2lnbmFscy5sZW5ndGg7IGkrKykge1xuICAgIGludGVyYWN0aW9ucy5zaWduYWxzLm9uKHNpbXBsZVNpZ25hbHNbaV0sIGNyZWF0ZVNpZ25hbExpc3RlbmVyKHNpbXBsZUV2ZW50c1tpXSwgc2NvcGUpKVxuICB9XG5cbiAgaW50ZXJhY3Rpb25zLnNpZ25hbHMub24oJ3VwJywgKHsgaW50ZXJhY3Rpb24sIHBvaW50ZXIsIGV2ZW50LCBldmVudFRhcmdldCB9KSA9PiB7XG4gICAgaWYgKCFpbnRlcmFjdGlvbi5wb2ludGVyV2FzTW92ZWQpIHtcbiAgICAgIGZpcmUoeyBpbnRlcmFjdGlvbiwgZXZlbnRUYXJnZXQsIHBvaW50ZXIsIGV2ZW50LCB0eXBlOiAndGFwJyB9LCBzY29wZSlcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ25hbExpc3RlbmVyICh0eXBlOiBzdHJpbmcsIHNjb3BlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeyBpbnRlcmFjdGlvbiwgcG9pbnRlciwgZXZlbnQsIGV2ZW50VGFyZ2V0IH06IGFueSkge1xuICAgIGZpcmUoeyBpbnRlcmFjdGlvbiwgZXZlbnRUYXJnZXQsIHBvaW50ZXIsIGV2ZW50LCB0eXBlIH0sIHNjb3BlKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBvaW50ZXJFdmVudHNcbiJdfQ== | ||
//# sourceMappingURL=base.js.map |
@@ -1,53 +0,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 | ||
//# sourceMappingURL=holdRepeat.js.map |
16
index.js
@@ -1,11 +0,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= | ||
//# sourceMappingURL=index.js.map |
@@ -1,3 +0,1 @@ | ||
import { Scope } from '@interactjs/core/scope'; | ||
declare type Interactable = import('@interactjs/core/Interactable').default; | ||
declare module '@interactjs/core/Interactable' { | ||
@@ -9,8 +7,4 @@ interface Interactable { | ||
} | ||
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; |
@@ -1,48 +0,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= | ||
export default plugin; | ||
//# sourceMappingURL=interactableTargets.js.map |
{ | ||
"name": "@interactjs/pointer-events", | ||
"version": "1.6.3", | ||
"version": "1.7.0", | ||
"license": "MIT", | ||
"peerDependencies": { | ||
"@interactjs/core": "1.6.3", | ||
"@interactjs/utils": "1.6.3" | ||
"@interactjs/core": "1.7.0", | ||
"@interactjs/utils": "1.7.0" | ||
}, | ||
@@ -9,0 +9,0 @@ "publishConfig": { |
@@ -1,6 +0,6 @@ | ||
import BaseEvent from '@interactjs/core/BaseEvent'; | ||
import BaseEvent from '../core/BaseEvent'; | ||
/** */ | ||
export default class PointerEvent<T extends string> extends BaseEvent { | ||
type: T; | ||
originalEvent: Interact.PointerEventType; | ||
originalEvent: Interact.PointerEventType | PointerEvent<any>; | ||
pointerId: number; | ||
@@ -16,3 +16,3 @@ pointerType: string; | ||
/** */ | ||
constructor(type: T, pointer: Interact.PointerType | PointerEvent<any>, event: Interact.PointerEventType, eventTarget: Interact.EventTarget, interaction: Interact.Interaction, timeStamp: number); | ||
constructor(type: T, pointer: Interact.PointerType | PointerEvent<any>, event: Interact.PointerEventType | PointerEvent<any>, eventTarget: Interact.EventTarget, interaction: Interact.Interaction, timeStamp: number); | ||
_subtractOrigin({ x: originX, y: originY }: { | ||
@@ -19,0 +19,0 @@ x: any; |
@@ -1,53 +0,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; | ||
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; | ||
} | ||
_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(); | ||
} | ||
} | ||
_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== | ||
//# sourceMappingURL=PointerEvent.js.map |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
21
606
51052
1