{ "version": 3, "sources": [ "dragAxis.ts" ], "names": [ "parentNode", "is", "autoStart", "id", "listeners", "[object Object]", "interaction", "eventTarget", "dx", "dy", "scope", "prepared", "name", "absX", "Math", "abs", "absY", "targetOptions", "interactable", "options", "drag", "startAxis", "currentAxis", "axis", "lockAxis", "element", "getDraggable", "manualStart", "testIgnoreAllow", "action", "getAction", "downPointer", "downEvent", "thisAxis", "checkStartAxis", "validateAction", "interactables", "forEachMatch" ], "mappings": "qBAISA,MAAkB,mCACpBC,MAAQ,6BAERC,MAAe,+BAmEP,CACbC,GAAI,sBACJC,UAAW,CAAEC,0BAnEOC,YAAEA,EAAFC,YAAeA,EAAfC,GAA4BA,EAA5BC,GAAgCA,GAAuCC,GAC3F,GAAkC,SAA9BJ,EAAYK,SAASC,KAAmB,OAG5C,MAAMC,EAAOC,KAAKC,IAAIP,GAChBQ,EAAOF,KAAKC,IAAIN,GAChBQ,EAAgBX,EAAYY,aAAaC,QAAQC,KACjDC,EAAYJ,EAAcI,UAC1BC,EAAeT,EAAOG,EAAO,IAAMH,EAAOG,EAAO,IAAM,KAO7D,GALAV,EAAYK,SAASY,KAAkC,UAA3BN,EAAcO,SACtCF,EAAY,GACZL,EAAcO,SAGE,OAAhBF,GAAsC,OAAdD,GAAsBA,IAAcC,EAAa,CAE1EhB,EAAwCK,SAASC,KAAO,KAGzD,IAAIa,EAAUlB,EAEd,MAAMmB,EAAyBR,IAC7B,GAAIA,IAAiBZ,EAAYY,aAAgB,OAEjD,MAAMC,EAAUb,EAAYY,aAAaC,QAAQC,KAEjD,IAAKD,EAAQQ,aACTT,EAAaU,gBAAgBT,EAASM,EAASlB,GAAc,CAC/D,MAAMsB,EAASX,EAAaY,UAC1BxB,EAAYyB,YAAazB,EAAY0B,UAAW1B,EAAamB,GAE/D,GAAII,GACgB,SAAhBA,EAAOjB,MAwBnB,EAAyBS,EAAmBH,KAC1C,IAAKA,EAAgB,OAAO,EAE5B,MAAMe,EAAWf,EAAaC,QAAQC,KAAKC,UAE3C,MAAsB,OAAdA,GAAmC,OAAbY,GAAqBA,IAAaZ,GA5BtDa,CAAeZ,EAAaJ,IAC5BhB,EAAUiC,eAAeN,EAAQX,EAAcO,EAASlB,EAAaG,GACvE,OAAOQ,IAMb,KAAOjB,EAAGwB,QAAQA,IAAU,CAC1B,MAAMP,EAAeR,EAAM0B,cAAcC,aAAaZ,EAASC,GAE/D,GAAIR,EAAc,CACfZ,EAAwCK,SAASC,KAAO,OACzDN,EAAYY,aAAeA,EAC3BZ,EAAYmB,QAAUA,EACtB,MAGFA,EAAUzB,EAAWyB", "sourcesContent": [ "import { Interactable } from '@interactjs/core/Interactable'\nimport Interaction from '@interactjs/core/Interaction'\nimport { SignalArgs, Scope, ActionName } from '@interactjs/core/scope'\nimport { Element } from '@interactjs/types/index'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart ({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n if (interaction.prepared.name !== 'drag') { return }\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy')\n\n interaction.prepared.axis = targetOptions.lockAxis === 'start'\n ? currentAxis[0] as 'x' | 'y' // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n (interaction as Interaction).prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget as Element\n\n const getDraggable = function (interactable: Interactable): Interactable | void {\n if (interactable === interaction.interactable) { return }\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart &&\n interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer, interaction.downEvent, interaction, element)\n\n if (action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n (interaction as Interaction).prepared.name = 'drag'\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element) as Element\n }\n }\n}\n\nfunction checkStartAxis (startAxis: string, interactable: Interactable) {\n if (!interactable) { return false }\n\n const thisAxis = interactable.options.drag.startAxis\n\n return (startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis)\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n" ] }