{ "version": 3, "sources": [ "plugin.ts" ], "names": [ "Interaction", "is", "pointerUtils", "updateGestureProps", "interaction", "iEvent", "phase", "prepared", "name", "pointers", "map", "p", "pointer", "starting", "ending", "deltaSource", "interactable", "options", "touches", "distance", "touchDistance", "box", "touchBBox", "scale", "ds", "angle", "touchAngle", "da", "gesture", "startDistance", "startAngle", "prevEvent", "number", "Infinity", "isNaN", "id", "before", "install", "scope", "actions", "Interactable", "defaults", "prototype", "gesturable", "object", "this", "enabled", "setPerAction", "setOnEvents", "bool", "methodDict", "listeners", "interactions:action-start", "interactions:action-move", "interactions:action-end", "[object Object]", "arg", "length", "gestureOptions", "action", "getCursor" ], "mappings": "OACOA,MAAiC,wCAIjCC,MAAQ,mCACHC,MAAkB,mCAuG9B,SAASC,GAAoBC,YAAEA,EAAFC,OAAeA,EAAfC,MAAuBA,IAClD,GAAkC,YAA9BF,EAAYG,SAASC,KAAsB,OAE/C,MAAMC,EAAWL,EAAYK,SAASC,KAAIC,GAAKA,EAAEC,UAC3CC,EAAqB,UAAVP,EACXQ,EAAmB,QAAVR,EACTS,EAAcX,EAAYY,aAAaC,QAAQF,YAIrD,GAFAV,EAAOa,QAAU,CAACT,EAAS,GAAIA,EAAS,IAEpCI,EACFR,EAAOc,SAAWjB,EAAakB,cAAcX,EAAUM,GACvDV,EAAOgB,IAAWnB,EAAaoB,UAAUb,GACzCJ,EAAOkB,MAAW,EAClBlB,EAAOmB,GAAW,EAClBnB,EAAOoB,MAAWvB,EAAawB,WAAWjB,EAAUM,GACpDV,EAAOsB,GAAW,EAElBvB,EAAYwB,QAAQC,cAAgBxB,EAAOc,SAC3Cf,EAAYwB,QAAQE,WAAazB,EAAOoB,WAErC,GAAIX,EAAQ,CACf,MAAMiB,EAAY3B,EAAY2B,UAE9B1B,EAAOc,SAAWY,EAAUZ,SAC5Bd,EAAOgB,IAAWU,EAAUV,IAC5BhB,EAAOkB,MAAWQ,EAAUR,MAC5BlB,EAAOmB,GAAW,EAClBnB,EAAOoB,MAAWM,EAAUN,MAC5BpB,EAAOsB,GAAW,OAGlBtB,EAAOc,SAAWjB,EAAakB,cAAcX,EAAUM,GACvDV,EAAOgB,IAAWnB,EAAaoB,UAAUb,GACzCJ,EAAOkB,MAAWlB,EAAOc,SAAWf,EAAYwB,QAAQC,cACxDxB,EAAOoB,MAAWvB,EAAawB,WAAWjB,EAAUM,GAEpDV,EAAOmB,GAAKnB,EAAOkB,MAAQnB,EAAYwB,QAAQL,MAC/ClB,EAAOsB,GAAKtB,EAAOoB,MAAQrB,EAAYwB,QAAQH,MAGjDrB,EAAYwB,QAAQT,SAAWd,EAAOc,SACtCf,EAAYwB,QAAQH,MAAQpB,EAAOoB,MAE/BxB,EAAG+B,OAAO3B,EAAOkB,QACjBlB,EAAOkB,QAAUU,EAAAA,IAChBC,MAAM7B,EAAOkB,SAChBnB,EAAYwB,QAAQL,MAAQlB,EAAOkB,OAIvC,MAAMK,EAAkB,CACtBO,GAAI,kBACJC,OAAQ,CAAC,eAAgB,kBACzBC,QA5GgBC,GAChB,MAAMC,QACJA,EADIC,aAEJA,EAFIC,SAGJA,GACEH,EAyBJE,EAAaE,UAAUC,WAAa,SAAmD1B,GACrF,OAAIhB,EAAG2C,OAAO3B,IACZ4B,KAAK5B,QAAQW,QAAQkB,SAA8B,IAApB7B,EAAQ6B,QACvCD,KAAKE,aAAa,UAAW9B,GAC7B4B,KAAKG,YAAY,UAAW/B,GAErB4B,MAGL5C,EAAGgD,KAAKhC,IACV4B,KAAK5B,QAAQW,QAAQkB,QAAU7B,EAExB4B,MAGFA,KAAK5B,QAAQW,SAGtBW,EAAQ7B,IAAIkB,QAAUA,EACtBW,EAAQW,WAAWtB,QAAU,aAE7Ba,EAASF,QAAQX,QAAUA,EAAQa,UA0DnCU,UAAW,CACTC,4BAA6BjD,EAC7BkD,2BAA4BlD,EAC5BmD,0BAA2BnD,EAE3BoD,oBAAuBnD,YAAAA,IACrBA,EAAYwB,QAAU,CACpBH,MAAO,EACPN,SAAU,EACVI,MAAO,EACPO,WAAY,EACZD,cAAe,IAInB0B,mBAAoBC,GAClB,GAAIA,EAAIpD,YAAYK,SAASgD,OAAS,EACpC,OAGF,MAAMC,EAAiBF,EAAIxC,aAAaC,QAAQW,QAEhD,OAAM8B,GAAkBA,EAAeZ,SAIvCU,EAAIG,OAAS,CAAEnD,KAAM,YAEd,QANP,IAUJiC,SAAU,GAGVmB,YACE,MAAO,oBAIIhC", "sourcesContent": [ "import { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport Interaction, { DoPhaseArg } from '@interactjs/core/Interaction'\nimport { Options } from '@interactjs/core/defaultOptions'\nimport { Scope, Plugin } from '@interactjs/core/scope'\nimport { ActionMethod, GesturableOptions, Rect, PointerType } from '@interactjs/types/index'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport type GesturableMethod = 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: GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface ActionMap {\n gesture?: typeof gesture\n }\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\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: Rect // enclosing box of all points\n touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n iEvent: GestureEvent\n interaction: Interaction<'gesture'>\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: InstanceType, options: GesturableOptions | boolean) {\n if (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 (is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as Options\n } as GesturableMethod\n\n actions.map.gesture = gesture\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps ({ interaction, iEvent, 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 = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = pointerUtils.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) {\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 = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = pointerUtils.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 (is.number(iEvent.scale) &&\n iEvent.scale !== Infinity &&\n !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nconst gesture: Plugin = {\n id: 'actions/gesture',\n before: ['actions/drag', 'actions/resize'],\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 'auto-start:check': arg => {\n if (arg.interaction.pointers.length < 2) {\n return undefined\n }\n\n const gestureOptions = arg.interactable.options.gesture\n\n if (!(gestureOptions && gestureOptions.enabled)) {\n return undefined\n }\n\n arg.action = { name: 'gesture' }\n\n return false\n },\n },\n\n defaults: {\n },\n\n getCursor () {\n return ''\n },\n}\n\nexport default gesture\n" ] }