UNPKG

@snapdrag/core

Version:

Core logic for Snapdrag drag and drop library

1 lines 23.8 kB
{"version":3,"sources":["../src/constants.ts","../src/droppable.ts","../src/utils/defaultPointerHandlers.ts","../src/draggable.ts"],"names":["DRAGGABLE_ATTRIBUTE","DROPPABLE_ATTRIBUTE","DROPPABLE_FORCE_ATTRIBUTE","registeredDropTargets","Droppable","config","element","createDroppable","defaultPointerDownHandler","handler","defaultPointerMoveHandler","defaultPointerUpHandler","defaultPointerCancelHandler","Draggable","_dragElement","_dragStartTriggered","_dragStartEvent","_newDropTargets","_currentDropTargets","_pointerEventsDestructor","_pluginsSnapshot","_currentData","_disabledDropTargets","_acceptedDropTargets","_safePointerMoveHandler","event","_pointerMoveHandler","err","_cleanup","_safePointerUpHandler","_pointerUpHandler","_safePointerCancelHandler","_pointerCancelHandler","_safePointerDownHandler","_pointerDownHandler","setAttribute","pointerDownDestructor","_getDropTargets","targetElements","dropTargets","dropTargetAttribute","dropTarget","_handleDragStart","dragStartArgs","plugin","_handleDragMove","dragMoveArgs","_handleDragSourceEnd","dropArgs","_getDropHandlerArgs","dropElement","dragEndArgs","_handleTargetDragInOrMove","dropHandlerArgs","args","_handleTargetDragOut","disabled","data","pointerConfig","dragElement","pointerMoveHandler","pointerUpHandler","pointerCancelHandler","pointerMoveDestructor","pointerUpDestructor","pointerCancelDestructor","_populateDisabledDropTargets","accepts","shouldAccept","createDraggable"],"mappings":"aAAaA,IAAAA,CAAAA,CAAsB,gBACtBC,CAAAA,CAAAA,CAAsB,gBACtBC,CAAAA,CAAAA,CAA4B,uBCClC,IAAMC,CAAwB,CAAA,IAAI,OAE5BC,CAAAA,CAAAA,CAAN,KAAsC,CAC3C,WAAmBC,CAAAA,CAAAA,CAAyB,CAAzB,IAAA,CAAA,MAAA,CAAAA,CAEnB,CAAA,IAAA,CAAO,SAAaA,CAAAA,CAAAA,EAA4B,CAC9C,IAAA,CAAK,MAASA,CAAAA,EAChB,CAEA,CAAA,IAAA,CAAO,MAAUC,CAAAA,CAAAA,GACfA,EAAQ,YAAaL,CAAAA,CAAAA,CAAqB,MAAM,CAAA,CAEhDE,CAAsB,CAAA,GAAA,CAAIG,CAAS,CAAA,IAAI,CAEhC,CAAA,IAAM,CACXA,CAAAA,CAAQ,eAAgBL,CAAAA,CAAmB,CAE3CE,CAAAA,CAAAA,CAAsB,MAAOG,CAAAA,CAAO,EACtC,CAAA,EAf2C,CAkB7C,IAAI,IAAO,EAAA,CACT,OAAO,IAAA,CAAK,MAAO,CAAA,IACrB,CAEA,IAAI,UAAoB,CACtB,OAAO,CAAC,CAAC,IAAK,CAAA,MAAA,CAAO,QACvB,CACF,EAEO,SAASC,CAAgBF,CAAAA,CAAAA,CAAqC,CACnE,OAAO,IAAID,CAAAA,CAAUC,CAAM,CAC7B,CCjCO,SAASG,CAA0BF,CAAAA,CAAAA,CAAsBG,CAA8B,CAAA,CAC5F,OAAAH,CAAAA,CAAQ,gBAAiB,CAAA,aAAA,CAAeG,CAAO,CAAA,CAExC,IAAM,CACXH,CAAQ,CAAA,mBAAA,CAAoB,aAAeG,CAAAA,CAAO,EACpD,CACF,CAEO,SAASC,CAA0BD,CAAAA,CAAAA,CAA8B,CACtE,OAAA,QAAA,CAAS,gBAAiB,CAAA,aAAA,CAAeA,CAAO,CAAA,CAEzC,IAAM,CACX,QAAS,CAAA,mBAAA,CAAoB,aAAeA,CAAAA,CAAO,EACrD,CACF,CAEO,SAASE,CAAwBF,CAAAA,CAAAA,CAA8B,CACpE,OAAA,QAAA,CAAS,iBAAiB,WAAaA,CAAAA,CAAO,CAEvC,CAAA,IAAM,CACX,QAAA,CAAS,mBAAoB,CAAA,WAAA,CAAaA,CAAO,EACnD,CACF,CAEO,SAASG,CAAAA,CAA4BH,CAA8B,CAAA,CACxE,OAAS,QAAA,CAAA,gBAAA,CAAiB,eAAiBA,CAAAA,CAAO,CAE3C,CAAA,IAAM,CACX,QAAA,CAAS,mBAAoB,CAAA,eAAA,CAAiBA,CAAO,EACvD,CACF,CCVaI,IAAAA,CAAAA,CAAN,KAAsC,CAqB3C,WAAmBR,CAAAA,CAAAA,CAAyB,CAAzB,IAAA,CAAA,MAAA,CAAAA,CApBnB,CAAA,IAAA,CAAQS,CAAmC,CAAA,IAAA,CAE3C,IAAQC,CAAAA,CAAAA,CAAsB,KAE9B,CAAA,IAAA,CAAQC,CAAuC,CAAA,IAAA,CAE/C,IAAQC,CAAAA,CAAAA,CAAkC,IAAI,GAAA,CAE9C,IAAQC,CAAAA,CAAAA,CAAsC,IAAI,GAAA,CAElD,IAAQC,CAAAA,CAAAA,CAA8C,IAEtD,CAAA,IAAA,CAAQC,CAAiC,CAAA,GAEzC,IAAQC,CAAAA,CAAAA,CAA2B,IAEnC,CAAA,IAAA,CAAQC,CAAuB,CAAA,IAAI,GAEnC,CAAA,IAAA,CAAQC,CAAuB,CAAA,IAAI,GAwSnC,CAAA,IAAA,CAAQC,CAA2BC,CAAAA,CAAAA,EAAwB,CACzD,GAAI,CACF,IAAA,CAAKC,CAAoBD,CAAAA,CAAK,EAChC,CAAA,MAASE,CAAK,CAAA,CACZ,MAAKC,IAAAA,CAAAA,CAAAA,EAECD,CAAAA,CACR,CACF,CAAA,CAEA,IAAQE,CAAAA,CAAAA,CAAyBJ,CAAwB,EAAA,CACvD,GAAI,CACF,IAAKK,CAAAA,CAAAA,CAAkBL,CAAK,EAC9B,CAASE,MAAAA,CAAAA,CAAK,CACZ,MAAA,IAAA,CAAKC,CAAS,EAAA,CAERD,CACR,CACF,CAEA,CAAA,IAAA,CAAQI,CAA6BN,CAAAA,CAAAA,EAAwB,CAC3D,GAAI,CACF,IAAA,CAAKO,CAAsBP,CAAAA,CAAK,EAClC,CAAA,MAASE,CAAK,CAAA,CACZ,WAAKC,CAAS,EAAA,CAERD,CACR,CACF,CAEA,CAAA,IAAA,CAAQM,CAA2BR,CAAAA,CAAAA,EAAwB,CACzD,GAAI,CACF,IAAA,CAAKS,CAAoBT,CAAAA,CAAK,EAChC,CAAA,MAASE,CAAK,CAAA,CACZ,MAAKC,IAAAA,CAAAA,CAAAA,EAECD,CAAAA,CACR,CACF,CAAA,CAEA,IAAO,CAAA,SAAA,CAAatB,CAA4B,EAAA,CAC9C,IAAK,CAAA,MAAA,CAASA,EAChB,CAEA,CAAA,IAAA,CAAO,MAAS,CAAA,CAACC,CAAsB6B,CAAAA,CAAAA,CAAe,IAAqB,GAAA,CAGzE,IAAMC,CAAAA,CAAAA,CAFqB,IAAK,CAAA,MAAA,CAAO,aAAe,EAAA,WAAA,EAAe5B,CAEpBF,EAAAA,CAAAA,CAAS,IAAK2B,CAAAA,CAAuB,CAEtF,CAAA,OAAIE,CAAgB,EAAA,CAAC7B,CAAQ,CAAA,YAAA,CAAaN,CAAmB,CAAA,EAC3DM,CAAQ,CAAA,YAAA,CAAaN,CAAqB,CAAA,MAAM,EAG3C,IAAM,CACX,IAAK4B,CAAAA,CAAAA,EAELQ,CAAAA,CAAAA,EAEID,CAAAA,CAAAA,EACF7B,CAAQ,CAAA,eAAA,CAAgBN,CAAmB,EAE/C,CACF,EApW6C,CAErCqC,CAAAA,CAAgBZ,CAAqC,CAAA,CAG3D,IAAMa,CAAAA,CAFqB,QAAS,CAAA,iBAAA,CAAkBb,CAAM,CAAA,CAAA,CAAGA,CAAM,CAAA,CAAC,CAExB,EAAA,EAExCc,CAAAA,CAAAA,CAAc,IAAI,GAAA,CAExB,OAAAD,CAAAA,CAAe,OAAShC,CAAAA,CAAAA,EAAY,CAClC,IAAMkC,CAAsBlC,CAAAA,CAAAA,CAAQ,YAAaL,CAAAA,CAAmB,CAEpE,CAAA,GAAI,CAACuC,CAAAA,EAAuBA,CAAwB,GAAA,OAAA,CAClD,OAGF,IAAMC,CAAatC,CAAAA,CAAAA,CAAsB,GAAIG,CAAAA,CAAO,CAEhDmC,CAAAA,CAAAA,EACFF,CAAY,CAAA,GAAA,CAAIjC,CAASmC,CAAAA,CAAU,EAEvC,CAAC,EAEMF,CACT,CAEQG,CAAiBjB,CAAAA,CAAAA,CAAqB,CAC5C,IAAMkB,CAAqC,CAAA,CACzC,KAAAlB,CAAAA,CAAAA,CACA,WAAa,CAAA,IAAA,CAAKX,CAClB,CAAA,cAAA,CAAgB,IAAKE,CAAAA,CAAAA,CACrB,IAAM,CAAA,IAAA,CAAKK,CACb,CAAA,CAEA,OAAI,IAAA,CAAK,MAAO,CAAA,UAAA,EAAc,CAAC,IAAA,CAAK,MAAO,CAAA,UAAA,CAAWsB,CAAa,CAAA,CAC1D,KAGT,EAAA,IAAA,CAAK,MAAO,CAAA,WAAA,GAAcA,CAAa,CAAA,CAEvC,IAAKvB,CAAAA,CAAAA,CAAiB,OAASwB,CAAAA,CAAAA,EAAW,CACxCA,CAAAA,CAAO,WAAcD,GAAAA,CAAa,EACpC,CAAC,CAEM,CAAA,IAAA,CACT,CAEQE,CAAAA,CAAgBpB,CAAqB,CAAA,CAC3C,IAAMqB,CAAAA,CAAe,CACnB,KAAA,CAAArB,CACA,CAAA,WAAA,CAAa,IAAKX,CAAAA,CAAAA,CAClB,cAAgB,CAAA,IAAA,CAAKE,EACrB,WAAa,CAAA,IAAA,CAAKO,CAClB,CAAA,IAAA,CAAM,IAAKF,CAAAA,CACb,CAEA,CAAA,IAAA,CAAK,MAAO,CAAA,UAAA,GAAayB,CAAY,CAAA,CAErC,IAAK1B,CAAAA,CAAAA,CAAiB,OAASwB,CAAAA,CAAAA,EAAW,CACxCA,CAAAA,CAAO,UAAaE,GAAAA,CAAY,EAClC,CAAC,EACH,CAEQC,CAAqBtB,CAAAA,CAAAA,CAAqB,CAChD,IAAMuB,CAAW,CAAA,IAAA,CAAKC,CAAoBxB,CAAAA,CAAK,CAE/C,CAAA,IAAA,CAAKF,CAAqB,CAAA,OAAA,CAAQ,CAACkB,CAAAA,CAAYS,CAAgB,GAAA,CAC7DT,CAAW,CAAA,MAAA,CAAO,MAAS,GAAA,CACzB,GAAGO,CAAAA,CACH,UAAAP,CAAAA,CAAAA,CACA,WAAAS,CAAAA,CACF,CAAC,EACH,CAAC,CAAA,CAED,IAAMC,CAAAA,CAAc,CAClB,KAAA,CAAA1B,CACA,CAAA,WAAA,CAAauB,CAAS,CAAA,WAAA,CACtB,eAAgBA,CAAS,CAAA,cAAA,CACzB,WAAaA,CAAAA,CAAAA,CAAS,WACtB,CAAA,IAAA,CAAM,IAAK3B,CAAAA,CACb,CAEA,CAAA,IAAA,CAAK,MAAO,CAAA,SAAA,GAAY8B,CAAW,CAAA,CAEnC,IAAK/B,CAAAA,CAAAA,CAAiB,OAASwB,CAAAA,CAAAA,EAAW,CACxCA,CAAAA,CAAO,SAAYO,GAAAA,CAAW,EAChC,CAAC,EACH,CAEQF,CAAoBxB,CAAAA,CAAAA,CAAqB,CAC/C,OAAO,CACL,KAAAA,CAAAA,CAAAA,CACA,WAAa,CAAA,IAAA,CAAKX,CAClB,CAAA,cAAA,CAAgB,IAAKE,CAAAA,CAAAA,CACrB,WAAa,CAAA,IAAA,CAAKO,CAClB,CAAA,UAAA,CAAY,IAAK,CAAA,MAAA,CAAO,IACxB,CAAA,UAAA,CAAY,IAAKF,CAAAA,CACnB,CACF,CAEQ+B,CAA0BC,CAAAA,CAAAA,CAAkC,CAClE,IAAA,CAAK9B,CAAqB,CAAA,OAAA,CAAQ,CAACkB,CAAAA,CAAYS,CAAgB,GAAA,CAC7D,IAAMI,CAAO,CAAA,CACX,GAAGD,CAAAA,CACH,UAAAZ,CAAAA,CAAAA,CACA,WAAAS,CAAAA,CACF,CAEI,CAAA,IAAA,CAAKhC,CAAoB,CAAA,GAAA,CAAIgC,CAAW,CAAA,CAC1CT,CAAW,CAAA,MAAA,CAAO,UAAaa,GAAAA,CAAI,CAEnCb,CAAAA,CAAAA,CAAW,MAAO,CAAA,QAAA,GAAWa,CAAI,EAErC,CAAC,EACH,CAEQC,CAAAA,CAAqBF,CAAkC,CAAA,CAC7D,IAAKnC,CAAAA,CAAAA,CAAoB,OAAQ,CAAA,CAACuB,CAAYS,CAAAA,CAAAA,GAAgB,CACxD,IAAA,CAAKjC,CAAgB,CAAA,GAAA,CAAIiC,CAAW,CAAA,GAIxC,IAAK3B,CAAAA,CAAAA,CAAqB,MAAO2B,CAAAA,CAAW,CAExC,CAAA,CAAA,IAAA,CAAK5B,CAAqB,CAAA,MAAA,CAAO4B,CAAW,CAAA,EAIhDT,CAAW,CAAA,MAAA,CAAO,SAAY,GAAA,CAC5B,GAAGY,CAAAA,CACH,UAAAZ,CAAAA,CAAAA,CACA,WAAAS,CAAAA,CACF,CAAC,CACH,EAAA,CAAC,EACH,CAEQhB,CAAoBT,CAAAA,CAAAA,CAAqB,CAC/C,GAAI,CAACA,CAAAA,CAAM,SACT,CAAA,OAGF,GAAM,CAAE,QAAA+B,CAAAA,CAAAA,CAAU,IAAAC,CAAAA,CAAAA,CAAM,aAAAC,CAAAA,CAAc,CAAI,CAAA,IAAA,CAAK,MAE/C,CAAA,GAAIF,CACF,CAAA,OAKF,IAAMG,CAAAA,CAFSlC,CAAM,CAAA,MAAA,CAEM,OAAQ,CAAA,CAAA,CAAA,EAAIzB,CAAmB,CAAA,CAAA,CAAG,CAE7D,CAAA,GAAI,CAAC2D,CAAAA,EAAeA,CAAY,CAAA,YAAA,CAAa3D,CAAmB,CAAA,GAAM,OACpE,CAAA,OAGF,IAAKc,CAAAA,CAAAA,CAAe6C,CACpB,CAAA,IAAA,CAAK3C,CAAkBS,CAAAA,CAAAA,CAEvB,IAAKJ,CAAAA,CAAAA,CACH,OAAOoC,CAAAA,EAAS,UACXA,CAAAA,CAAAA,CAA8B,CAAE,WAAA,CAAAE,CAAa,CAAA,cAAA,CAAgBlC,CAAM,CAAC,EACrEgC,CAEN,CAAA,IAAMG,CAAqBF,CAAAA,CAAAA,EAAe,WAAehD,EAAAA,CAAAA,CACnDmD,CAAmBH,CAAAA,CAAAA,EAAe,SAAa/C,EAAAA,CAAAA,CAC/CmD,CAAuBJ,CAAAA,CAAAA,EAAe,aAAiB9C,EAAAA,CAAAA,CAEvDmD,CAAwBH,CAAAA,CAAAA,CAAmB,IAAKpC,CAAAA,CAAuB,CACvEwC,CAAAA,CAAAA,CAAsBH,CAAiB,CAAA,IAAA,CAAKhC,CAAqB,CAAA,CACjEoC,CAA0BH,CAAAA,CAAAA,CAAqB,IAAK/B,CAAAA,CAAyB,CAEnF,CAAA,IAAA,CAAKZ,CAA2B,CAAA,IAAM,CACpC4C,CAAAA,EACAC,CAAAA,CAAAA,EACAC,CAAAA,CAAAA,GACF,CAAA,CAEA,IAAK7C,CAAAA,CAAAA,CAAmB,IAAK,CAAA,MAAA,CAAO,OAAS,EAAA,KAAA,EAAW,EAAA,GAC1D,CAEQ8C,CAA6BzC,CAAAA,CAAAA,CAAqB,CACxD,IAAA,CAAKR,CAAgB,CAAA,OAAA,CAAQ,CAACwB,CAAAA,CAAYnC,CAAY,GAAA,CACpD,GAAI,IAAA,CAAKgB,EAAqB,GAAIhB,CAAAA,CAAO,CACvC,CAAA,OAGF,GAAImC,CAAAA,CAAW,QAAYnC,EAAAA,CAAAA,CAAQ,OAAQ,CAAA,CAAA,CAAA,EAAIJ,CAAyB,CAAA,SAAA,CAAW,CAAG,CAAA,CACpF,IAAKoB,CAAAA,CAAAA,CAAqB,GAAIhB,CAAAA,CAAO,CACrC,CAAA,MACF,CAEA,GAAM,CAAE,OAAA,CAAA6D,CAAQ,CAAA,CAAI1B,CAAW,CAAA,MAAA,CAE3B2B,CAAe,CAAA,IAAA,CAiBnB,GAfI,KAAA,CAAM,OAAQD,CAAAA,CAAO,CACvBC,CAAAA,CAAAA,CAAeD,CAAQ,CAAA,QAAA,CAAS,IAAK,CAAA,MAAA,CAAO,IAAI,CAAA,CACvC,OAAOA,CAAAA,EAAY,UACvB,CAAA,IAAA,CAAK5C,CAAqB,CAAA,GAAA,CAAIjB,CAAO,CAAA,GACxC8D,CAAeD,CAAAA,CAAAA,CAAQ,CACrB,IAAA,CAAM,IAAK,CAAA,MAAA,CAAO,IAClB,CAAA,IAAA,CAAM,IAAK9C,CAAAA,CAAAA,CACX,OAAS,CAAA,IAAA,CAAKP,EACd,KAAAW,CAAAA,CACF,CAAC,CAAA,CAAA,CAGH2C,CAAeD,CAAAA,CAAAA,GAAY,IAAK,CAAA,MAAA,CAAO,IAGrC,CAAA,CAACC,CAAc,CAAA,CACjB,IAAK9C,CAAAA,CAAAA,CAAqB,GAAIhB,CAAAA,CAAO,CACrC,CAAA,MACF,CAEA,IAAA,CAAKiB,CAAqB,CAAA,GAAA,CAAIjB,CAASmC,CAAAA,CAAU,EACnD,CAAC,EACH,CAEQf,CAAoBD,CAAAA,CAAAA,CAAqB,CAC/C,GAAI,CAACA,CAAAA,CAAM,SACT,CAAA,OAGF,GAAI,CAAC,IAAKV,CAAAA,CAAAA,CAAqB,CAC7B,GAAI,CAAC,IAAA,CAAK2B,CAAiBjB,CAAAA,CAAK,CAC9B,CAAA,OAGF,IAAKV,CAAAA,CAAAA,CAAsB,KAC7B,CAEA,IAAKE,CAAAA,CAAAA,CAAkB,IAAKoB,CAAAA,CAAAA,CAAgBZ,CAAK,CAAA,CAEjD,IAAKyC,CAAAA,CAAAA,CAA6BzC,CAAK,CAAA,CAEvC,IAAM4B,CAAkB,CAAA,IAAA,CAAKJ,CAAoBxB,CAAAA,CAAK,CAEtD,CAAA,IAAA,CAAK2B,CAA0BC,CAAAA,CAAe,CAE9C,CAAA,IAAA,CAAKE,CAAqBF,CAAAA,CAAe,CAEzC,CAAA,IAAA,CAAKR,CAAgBpB,CAAAA,CAAK,CAE1B,CAAA,IAAA,CAAKP,CAAsB,CAAA,IAAA,CAAKD,EAClC,CAEQa,CAAkBL,CAAAA,CAAAA,CAAqB,CACxCA,CAAAA,CAAM,SAIP,GAAA,IAAA,CAAKV,CACP,EAAA,IAAA,CAAKgC,CAAqBtB,CAAAA,CAAK,CAGjC,CAAA,IAAA,CAAKG,CAAS,EAAA,EAChB,CAEQI,CAAAA,CAAsBP,CAAqB,CAAA,CACjD,GAAKA,CAAAA,CAAM,SAIX,CAAA,CAAA,GAAI,IAAKV,CAAAA,CAAAA,CAAqB,CAE5B,IAAMsC,CAAkB,CAAA,IAAA,CAAKJ,CAAoBxB,CAAAA,CAAK,CACtD,CAAA,IAAA,CAAK8B,CAAqBF,CAAAA,CAAe,CAEzC,CAAA,IAAA,CAAKN,CAAqBtB,CAAAA,CAAK,EACjC,CACA,KAAKG,CAAS,GAAA,CAChB,CAEQA,CAAAA,EAAW,CACjB,IAAA,CAAKT,CAA2B,IAAA,CAChC,IAAKA,CAAAA,CAAAA,CAA2B,IAEhC,CAAA,IAAA,CAAKL,CAAe,CAAA,IAAA,CACpB,IAAKC,CAAAA,CAAAA,CAAsB,KAC3B,CAAA,IAAA,CAAKE,CAAgB,CAAA,KAAA,EACrB,CAAA,IAAA,CAAKC,CAAoB,CAAA,KAAA,EACzB,CAAA,IAAA,CAAKG,CAAe,CAAA,IAAA,CAEpB,IAAKC,CAAAA,CAAAA,CAAqB,KAAM,EAAA,CAChC,IAAKC,CAAAA,CAAAA,CAAqB,KAAM,EAAA,CAEhC,IAAKH,CAAAA,CAAAA,CAAiB,OAASwB,CAAAA,CAAAA,EAAW,CACxCA,CAAAA,CAAO,OAAU,KACnB,CAAC,CAAA,CAED,IAAKxB,CAAAA,CAAAA,CAAmB,GAC1B,CAiEF,EAEO,SAASiD,CAAAA,CAA2ChE,CAAW,CAAA,CACpE,OAAO,IAAIQ,CAAUR,CAAAA,CAAM,CAC7B","file":"index.cjs","sourcesContent":["export const DRAGGABLE_ATTRIBUTE = \"data-draggable\";\nexport const DROPPABLE_ATTRIBUTE = \"data-droppable\";\nexport const DROPPABLE_FORCE_ATTRIBUTE = \"data-droppable-force\";\n","import { DROPPABLE_ATTRIBUTE } from \"./constants\";\nimport { Destructor, DroppableConfig, IDroppable } from \"./types\";\n\nexport const registeredDropTargets = new WeakMap<HTMLElement, IDroppable>();\n\nexport class Droppable implements IDroppable {\n constructor(public config: DroppableConfig) {}\n\n public setConfig = (config: DroppableConfig) => {\n this.config = config;\n };\n\n public listen = (element: HTMLElement): Destructor => {\n element.setAttribute(DROPPABLE_ATTRIBUTE, \"true\");\n\n registeredDropTargets.set(element, this);\n\n return () => {\n element.removeAttribute(DROPPABLE_ATTRIBUTE);\n\n registeredDropTargets.delete(element);\n };\n };\n\n get data() {\n return this.config.data;\n }\n\n get disabled(): boolean {\n return !!this.config.disabled;\n }\n}\n\nexport function createDroppable(config: DroppableConfig): IDroppable {\n return new Droppable(config);\n}\n","import { PointerEventHandler } from \"../types\";\n\nexport function defaultPointerDownHandler(element: HTMLElement, handler: PointerEventHandler) {\n element.addEventListener(\"pointerdown\", handler);\n\n return () => {\n element.removeEventListener(\"pointerdown\", handler);\n };\n}\n\nexport function defaultPointerMoveHandler(handler: PointerEventHandler) {\n document.addEventListener(\"pointermove\", handler);\n\n return () => {\n document.removeEventListener(\"pointermove\", handler);\n };\n}\n\nexport function defaultPointerUpHandler(handler: PointerEventHandler) {\n document.addEventListener(\"pointerup\", handler);\n\n return () => {\n document.removeEventListener(\"pointerup\", handler);\n };\n}\n\nexport function defaultPointerCancelHandler(handler: PointerEventHandler) {\n document.addEventListener(\"pointercancel\", handler);\n\n return () => {\n document.removeEventListener(\"pointercancel\", handler);\n };\n}\n","import { DRAGGABLE_ATTRIBUTE, DROPPABLE_ATTRIBUTE, DROPPABLE_FORCE_ATTRIBUTE } from \"./constants\";\nimport { registeredDropTargets } from \"./droppable\";\nimport {\n Destructor,\n DraggableConfig,\n DraggableDataFactory,\n DragStarHandlerArgs,\n DropHandlerArgs,\n DropTargetsMap,\n IDraggable,\n IDroppable,\n PluginType,\n} from \"./types\";\nimport {\n defaultPointerDownHandler,\n defaultPointerMoveHandler,\n defaultPointerUpHandler,\n defaultPointerCancelHandler,\n} from \"./utils/defaultPointerHandlers\";\n\ntype PartialDropArgs = Omit<DropHandlerArgs, \"dropTarget\" | \"dropElement\">;\n\nexport class Draggable implements IDraggable {\n private _dragElement: HTMLElement | null = null;\n\n private _dragStartTriggered = false;\n\n private _dragStartEvent: PointerEvent | null = null;\n\n private _newDropTargets: DropTargetsMap = new Map();\n\n private _currentDropTargets: DropTargetsMap = new Map();\n\n private _pointerEventsDestructor: Destructor | null = null;\n\n private _pluginsSnapshot: PluginType[] = [];\n\n private _currentData: any | null = null;\n\n private _disabledDropTargets = new Set<HTMLElement>();\n\n private _acceptedDropTargets = new Map<HTMLElement, IDroppable>();\n\n constructor(public config: DraggableConfig) {}\n\n private _getDropTargets(event: PointerEvent): DropTargetsMap {\n const targetElementsList = document.elementsFromPoint(event.x, event.y);\n\n const targetElements = (targetElementsList ?? []) as HTMLElement[];\n\n const dropTargets = new Map() as DropTargetsMap;\n\n targetElements.forEach((element) => {\n const dropTargetAttribute = element.getAttribute(DROPPABLE_ATTRIBUTE);\n\n if (!dropTargetAttribute || dropTargetAttribute === \"false\") {\n return;\n }\n\n const dropTarget = registeredDropTargets.get(element);\n\n if (dropTarget) {\n dropTargets.set(element, dropTarget);\n }\n });\n\n return dropTargets;\n }\n\n private _handleDragStart(event: PointerEvent) {\n const dragStartArgs: DragStarHandlerArgs = {\n event,\n dragElement: this._dragElement!,\n dragStartEvent: this._dragStartEvent!,\n data: this._currentData!,\n };\n\n if (this.config.shouldDrag && !this.config.shouldDrag(dragStartArgs)) {\n return false;\n }\n\n this.config.onDragStart?.(dragStartArgs);\n\n this._pluginsSnapshot.forEach((plugin) => {\n plugin.onDragStart?.(dragStartArgs);\n });\n\n return true;\n }\n\n private _handleDragMove(event: PointerEvent) {\n const dragMoveArgs = {\n event,\n dragElement: this._dragElement!,\n dragStartEvent: this._dragStartEvent!,\n dropTargets: this._acceptedDropTargets,\n data: this._currentData!,\n };\n\n this.config.onDragMove?.(dragMoveArgs);\n\n this._pluginsSnapshot.forEach((plugin) => {\n plugin.onDragMove?.(dragMoveArgs);\n });\n }\n\n private _handleDragSourceEnd(event: PointerEvent) {\n const dropArgs = this._getDropHandlerArgs(event);\n\n this._acceptedDropTargets.forEach((dropTarget, dropElement) => {\n dropTarget.config.onDrop?.({\n ...dropArgs,\n dropTarget,\n dropElement,\n });\n });\n\n const dragEndArgs = {\n event,\n dragElement: dropArgs.dragElement,\n dragStartEvent: dropArgs.dragStartEvent,\n dropTargets: dropArgs.dropTargets,\n data: this._currentData!,\n };\n\n this.config.onDragEnd?.(dragEndArgs);\n\n this._pluginsSnapshot.forEach((plugin) => {\n plugin.onDragEnd?.(dragEndArgs);\n });\n }\n\n private _getDropHandlerArgs(event: PointerEvent) {\n return {\n event,\n dragElement: this._dragElement!,\n dragStartEvent: this._dragStartEvent!,\n dropTargets: this._acceptedDropTargets,\n sourceType: this.config.kind,\n sourceData: this._currentData!,\n } as PartialDropArgs;\n }\n\n private _handleTargetDragInOrMove(dropHandlerArgs: PartialDropArgs) {\n this._acceptedDropTargets.forEach((dropTarget, dropElement) => {\n const args = {\n ...dropHandlerArgs,\n dropTarget,\n dropElement,\n };\n\n if (this._currentDropTargets.has(dropElement)) {\n dropTarget.config.onDragMove?.(args);\n } else {\n dropTarget.config.onDragIn?.(args);\n }\n });\n }\n\n private _handleTargetDragOut(dropHandlerArgs: PartialDropArgs) {\n this._currentDropTargets.forEach((dropTarget, dropElement) => {\n if (this._newDropTargets.has(dropElement)) {\n return;\n }\n\n this._acceptedDropTargets.delete(dropElement);\n\n if (this._disabledDropTargets.delete(dropElement)) {\n return;\n }\n\n dropTarget.config.onDragOut?.({\n ...dropHandlerArgs,\n dropTarget,\n dropElement,\n });\n });\n }\n\n private _pointerDownHandler(event: PointerEvent) {\n if (!event.isPrimary) {\n return;\n }\n\n const { disabled, data, pointerConfig } = this.config;\n\n if (disabled) {\n return;\n }\n\n const target = event.target as HTMLElement;\n\n const dragElement = target.closest(`[${DRAGGABLE_ATTRIBUTE}]`) as HTMLElement;\n\n if (!dragElement || dragElement.getAttribute(DRAGGABLE_ATTRIBUTE) === \"false\") {\n return;\n }\n\n this._dragElement = dragElement;\n this._dragStartEvent = event;\n\n this._currentData =\n typeof data === \"function\"\n ? (data as DraggableDataFactory)({ dragElement, dragStartEvent: event })\n : data;\n\n const pointerMoveHandler = pointerConfig?.pointerMove ?? defaultPointerMoveHandler;\n const pointerUpHandler = pointerConfig?.pointerUp ?? defaultPointerUpHandler;\n const pointerCancelHandler = pointerConfig?.pointerCancel ?? defaultPointerCancelHandler;\n\n const pointerMoveDestructor = pointerMoveHandler(this._safePointerMoveHandler);\n const pointerUpDestructor = pointerUpHandler(this._safePointerUpHandler);\n const pointerCancelDestructor = pointerCancelHandler(this._safePointerCancelHandler);\n\n this._pointerEventsDestructor = () => {\n pointerMoveDestructor();\n pointerUpDestructor();\n pointerCancelDestructor();\n };\n\n this._pluginsSnapshot = this.config.plugins?.slice() ?? [];\n }\n\n private _populateDisabledDropTargets(event: PointerEvent) {\n this._newDropTargets.forEach((dropTarget, element) => {\n if (this._disabledDropTargets.has(element)) {\n return;\n }\n\n if (dropTarget.disabled || element.closest(`[${DROPPABLE_FORCE_ATTRIBUTE}=\"false\"]`)) {\n this._disabledDropTargets.add(element);\n return;\n }\n\n const { accepts } = dropTarget.config;\n\n let shouldAccept = true;\n\n if (Array.isArray(accepts)) {\n shouldAccept = accepts.includes(this.config.kind);\n } else if (typeof accepts === \"function\") {\n if (!this._acceptedDropTargets.has(element)) {\n shouldAccept = accepts({\n kind: this.config.kind,\n data: this._currentData!,\n element: this._dragElement!,\n event,\n });\n }\n } else {\n shouldAccept = accepts === this.config.kind;\n }\n\n if (!shouldAccept) {\n this._disabledDropTargets.add(element);\n return;\n }\n\n this._acceptedDropTargets.set(element, dropTarget);\n });\n }\n\n private _pointerMoveHandler(event: PointerEvent) {\n if (!event.isPrimary) {\n return;\n }\n\n if (!this._dragStartTriggered) {\n if (!this._handleDragStart(event)) {\n return;\n }\n\n this._dragStartTriggered = true;\n }\n\n this._newDropTargets = this._getDropTargets(event);\n\n this._populateDisabledDropTargets(event);\n\n const dropHandlerArgs = this._getDropHandlerArgs(event);\n\n this._handleTargetDragInOrMove(dropHandlerArgs);\n\n this._handleTargetDragOut(dropHandlerArgs);\n\n this._handleDragMove(event);\n\n this._currentDropTargets = this._newDropTargets;\n }\n\n private _pointerUpHandler(event: PointerEvent) {\n if (!event.isPrimary) {\n return;\n }\n\n if (this._dragStartTriggered) {\n this._handleDragSourceEnd(event);\n }\n\n this._cleanup();\n }\n\n private _pointerCancelHandler(event: PointerEvent) {\n if (!event.isPrimary) {\n return;\n }\n\n if (this._dragStartTriggered) {\n // Simulate drag out for current targets before ending\n const dropHandlerArgs = this._getDropHandlerArgs(event);\n this._handleTargetDragOut(dropHandlerArgs);\n // Trigger drag end for the source\n this._handleDragSourceEnd(event);\n }\n this._cleanup();\n }\n\n private _cleanup() {\n this._pointerEventsDestructor?.();\n this._pointerEventsDestructor = null;\n\n this._dragElement = null;\n this._dragStartTriggered = false;\n this._newDropTargets.clear();\n this._currentDropTargets.clear();\n this._currentData = null;\n\n this._disabledDropTargets.clear();\n this._acceptedDropTargets.clear();\n\n this._pluginsSnapshot.forEach((plugin) => {\n plugin.cleanup?.();\n });\n\n this._pluginsSnapshot = [];\n }\n\n private _safePointerMoveHandler = (event: PointerEvent) => {\n try {\n this._pointerMoveHandler(event);\n } catch (err) {\n this._cleanup();\n\n throw err;\n }\n };\n\n private _safePointerUpHandler = (event: PointerEvent) => {\n try {\n this._pointerUpHandler(event);\n } catch (err) {\n this._cleanup();\n\n throw err;\n }\n };\n\n private _safePointerCancelHandler = (event: PointerEvent) => {\n try {\n this._pointerCancelHandler(event);\n } catch (err) {\n this._cleanup();\n\n throw err;\n }\n };\n\n private _safePointerDownHandler = (event: PointerEvent) => {\n try {\n this._pointerDownHandler(event);\n } catch (err) {\n this._cleanup();\n\n throw err;\n }\n };\n\n public setConfig = (config: DraggableConfig) => {\n this.config = config;\n };\n\n public listen = (element: HTMLElement, setAttribute = true): Destructor => {\n const pointerDownHandler = this.config.pointerConfig?.pointerDown ?? defaultPointerDownHandler;\n\n const pointerDownDestructor = pointerDownHandler(element, this._safePointerDownHandler);\n\n if (setAttribute && !element.hasAttribute(DRAGGABLE_ATTRIBUTE)) {\n element.setAttribute(DRAGGABLE_ATTRIBUTE, \"true\");\n }\n\n return () => {\n this._cleanup();\n\n pointerDownDestructor();\n\n if (setAttribute) {\n element.removeAttribute(DRAGGABLE_ATTRIBUTE);\n }\n };\n };\n}\n\nexport function createDraggable<T extends DraggableConfig>(config: T) {\n return new Draggable(config);\n}\n"]}