{ "version": 3, "sources": [ "base.ts" ], "names": [ "Interaction", "Scope", "SignalArgs", "domUtils", "extend", "getOriginXY", "PointerEvent", "pointerEvents", "id", "before", "install", "scope", "defaults", "actions", "phaselessTypes", "types", "listeners", "[object Object]", "interaction", "prevTap", "tapTime", "down", "pointerInfo", "hold", "duration", "Infinity", "timeout", "arg", "pointer", "event", "eventTarget", "duplicate", "pointerIsDown", "pointerWasMoved", "clearHold", "fire", "type", "pointerIndex", "timer", "pointers", "path", "getPath", "signalArg", "targets", "node", "length", "minDuration", "target", "holdDuration", "eventable", "options", "setTimeout", "downAndStartHold", "tapAfterUp", "collectEventTargets", "ignoreFrom", "allowFrom", "origin", "x", "y", "move", "up", "cancel", "tap", "doubletap", "pointerEvent", "now", "i", "prop", "props", "_subtractOrigin", "currentTarget", "_addOrigin", "immediatePropagationStopped", "propagationStopped", "double", "timeStamp", "getPointerIndex", "downTarget", "filter", "clearTimeout" ], "mappings": "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", "sourcesContent": [ "import { Eventable } from '@interactjs/core/Eventable'\nimport { Interaction } from '@interactjs/core/Interaction'\nimport { PerActionDefaults } from '@interactjs/core/defaultOptions'\nimport { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport { Point, PointerType, PointerEventType, Element } from '@interactjs/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\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?: Point | string | 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: 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: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\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: Plugin = {\n id: 'pointer-events/base',\n before: ['inertia', 'modifiers', 'auto-start', 'actions'],\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: true,\n move: true,\n up: true,\n cancel: true,\n tap: true,\n doubletap: true,\n hold: true,\n } as { [type: string]: true },\n}\n\nfunction fire (\n arg: {\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: 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 = 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: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n type: T\n}, scope: 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 = domUtils.getPath(eventTarget as Element | Document)\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 }: 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 const hold = interaction.pointers[pointerIndex].hold\n\n if (hold && hold.timeout) {\n clearTimeout(hold.timeout)\n hold.timeout = null\n }\n}\n\nfunction moveAndClearHold (\n arg: SignalArgs['interactions:move'],\n scope: Scope,\n) {\n const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearHold(arg)\n }\n\n fire({\n interaction,\n pointer,\n event,\n eventTarget: eventTarget as Element,\n type: 'move',\n }, scope)\n }\n}\n\nfunction downAndStartHold ({ interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'], scope: Scope) {\n const timer = interaction.pointers[pointerIndex].hold\n const path = domUtils.getPath(eventTarget as Element | Document)\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 }: SignalArgs['interactions:up'], scope: 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 extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n" ] }