{"version":3,"file":"svg.draggable.min.js","sources":["../node_modules/@babel/runtime/helpers/esm/createClass.js","../src/svg.draggable.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"],"sourcesContent":["function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}","import { Box, Element, G, extend, off, on } from '@svgdotjs/svg.js'\n\r\nconst getCoordsFromEvent = (ev) => {\r\n  if (ev.changedTouches) {\r\n    ev = ev.changedTouches[0]\r\n  }\r\n  return { x: ev.clientX, y: ev.clientY }\r\n}\r\n\r\n// Creates handler, saves it\r\nclass DragHandler {\r\n  constructor (el) {\r\n    el.remember('_draggable', this)\r\n    this.el = el\r\n\r\n    this.drag = this.drag.bind(this)\r\n    this.startDrag = this.startDrag.bind(this)\r\n    this.endDrag = this.endDrag.bind(this)\r\n  }\r\n\r\n  // Enables or disabled drag based on input\r\n  init (enabled) {\r\n    if (enabled) {\r\n      this.el.on('mousedown.drag', this.startDrag)\r\n      this.el.on('touchstart.drag', this.startDrag)\r\n    } else {\r\n      this.el.off('mousedown.drag')\r\n      this.el.off('touchstart.drag')\r\n    }\r\n  }\r\n\r\n  // Start dragging\r\n  startDrag (ev) {\n    const isMouse = !ev.type.indexOf('mouse')\n\n    // Check for left button\r\n    if (isMouse && (ev.which || ev.buttons) !== 1) {\r\n      return\r\n    }\r\n\r\n    // Fire beforedrag event\r\n    if (this.el.dispatch('beforedrag', { event: ev, handler: this }).defaultPrevented) {\r\n      return\r\n    }\r\n\r\n    // Prevent browser drag behavior as soon as possible\r\n    ev.preventDefault()\r\n\r\n    // Prevent propagation to a parent that might also have dragging enabled\r\n    ev.stopPropagation()\r\n\r\n    // Make sure that start events are unbound so that one element\r\n    // is only dragged by one input only\r\n    this.init(false)\r\n\r\n    this.box = this.el.bbox()\r\n    this.lastClick = this.el.point(getCoordsFromEvent(ev))\r\n\r\n    // We consider the drag done, when a touch is canceled, too\r\n    const eventMove = (isMouse ? 'mousemove' : 'touchmove') + '.drag'\r\n    const eventEnd = (isMouse ? 'mouseup' : 'touchcancel.drag touchend') + '.drag'\r\n\r\n    // Bind drag and end events to window\r\n    on(window, eventMove, this.drag)\r\n    on(window, eventEnd, this.endDrag)\r\n\r\n    // Fire dragstart event\r\n    this.el.fire('dragstart', { event: ev, handler: this, box: this.box })\r\n  }\r\n\r\n  // While dragging\r\n  drag (ev) {\r\n\r\n    const { box, lastClick } = this\r\n\r\n    const currentClick = this.el.point(getCoordsFromEvent(ev))\r\n    const x = box.x + (currentClick.x - lastClick.x)\r\n    const y = box.y + (currentClick.y - lastClick.y)\r\n    const newBox = new Box(x, y, box.w, box.h)\r\n\r\n    if (this.el.dispatch('dragmove', {\r\n      event: ev,\r\n      handler: this,\r\n      box: newBox\r\n    }).defaultPrevented) return\r\n\r\n    this.move(x, y)\r\n    return newBox\r\n  }\r\n\r\n  move (x, y) {\r\n    // Svg elements bbox depends on their content even though they have\r\n    // x, y, width and height - strange!\r\n    // Thats why we handle them the same as groups\r\n    if (this.el.type === 'svg') {\r\n      G.prototype.move.call(this.el, x, y)\r\n    } else {\r\n      this.el.move(x, y)\r\n    }\r\n  }\r\n\r\n  endDrag (ev) {\n    // final drag\r\n    const box = this.drag(ev)\r\n\r\n    // fire dragend event\r\n    this.el.fire('dragend', { event: ev, handler: this, box })\r\n\r\n    // unbind events\r\n    off(window, 'mousemove.drag')\r\n    off(window, 'touchmove.drag')\r\n    off(window, 'mouseup.drag')\r\n    off(window, 'touchend.drag')\n\n    // Rebind initial Events\n    this.init(true)\n  }\r\n}\r\n\r\nextend(Element, {\r\n  draggable (enable = true) {\r\n    const dragHandler = this.remember('_draggable') || new DragHandler(this)\r\n    dragHandler.init(enable)\r\n    return this\r\n  }\r\n})\r\n","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}"],"names":["_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","getCoordsFromEvent","ev","changedTouches","x","clientX","y","clientY","DragHandler","el","instance","Constructor","TypeError","remember","this","drag","bind","startDrag","endDrag","protoProps","staticProps","enabled","on","off","isMouse","type","indexOf","which","buttons","dispatch","event","handler","defaultPrevented","preventDefault","stopPropagation","init","box","bbox","lastClick","point","eventMove","eventEnd","window","fire","currentClick","newBox","Box","w","h","move","G","prototype","call","Element","draggable","enable"],"mappings":";0BAAA,SAASA,EAAkBC,EAAQC,GACjC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,ICJlD,IAAMO,EAAqB,SAACC,UACtBA,EAAGC,iBACLD,EAAKA,EAAGC,eAAe,IAElB,CAAEC,EAAGF,EAAGG,QAASC,EAAGJ,EAAGK,UAI1BC,wBACSC,ICXA,SAAyBC,EAAUC,GAChD,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,8CDUpBH,EAAGI,SAAS,aAAcC,WACrBL,GAAKA,OAELM,KAAOD,KAAKC,KAAKC,KAAKF,WACtBG,UAAYH,KAAKG,UAAUD,KAAKF,WAChCI,QAAUJ,KAAKI,QAAQF,KAAKF,MDPtB,IAAsBH,EAAaQ,EAAYC,SAAzBT,KAAaQ,8BCW1CE,GACAA,QACGZ,GAAGa,GAAG,iBAAkBR,KAAKG,gBAC7BR,GAAGa,GAAG,kBAAmBR,KAAKG,kBAE9BR,GAAGc,IAAI,uBACPd,GAAGc,IAAI,sDAKLrB,OACHsB,GAAWtB,EAAGuB,KAAKC,QAAQ,cAG7BF,GAAwC,KAA5BtB,EAAGyB,OAASzB,EAAG0B,UAK3Bd,KAAKL,GAAGoB,SAAS,aAAc,CAAEC,MAAO5B,EAAI6B,QAASjB,OAAQkB,mBAKjE9B,EAAG+B,iBAGH/B,EAAGgC,uBAIEC,MAAK,QAELC,IAAMtB,KAAKL,GAAG4B,YACdC,UAAYxB,KAAKL,GAAG8B,MAAMtC,EAAmBC,QAG5CsC,GAAahB,EAAU,YAAc,aAAe,QACpDiB,GAAYjB,EAAU,UAAY,6BAA+B,QAGvEF,KAAGoB,OAAQF,EAAW1B,KAAKC,MAC3BO,KAAGoB,OAAQD,EAAU3B,KAAKI,cAGrBT,GAAGkC,KAAK,YAAa,CAAEb,MAAO5B,EAAI6B,QAASjB,KAAMsB,IAAKtB,KAAKsB,oCAI5DlC,OAEIkC,EAAmBtB,KAAnBsB,IAAKE,EAAcxB,KAAdwB,UAEPM,EAAe9B,KAAKL,GAAG8B,MAAMtC,EAAmBC,IAChDE,EAAIgC,EAAIhC,GAAKwC,EAAaxC,EAAIkC,EAAUlC,GACxCE,EAAI8B,EAAI9B,GAAKsC,EAAatC,EAAIgC,EAAUhC,GACxCuC,EAAS,IAAIC,MAAI1C,EAAGE,EAAG8B,EAAIW,EAAGX,EAAIY,OAEpClC,KAAKL,GAAGoB,SAAS,WAAY,CAC/BC,MAAO5B,EACP6B,QAASjB,KACTsB,IAAKS,IACJb,6BAEEiB,KAAK7C,EAAGE,GACNuC,+BAGHzC,EAAGE,GAIc,QAAjBQ,KAAKL,GAAGgB,KACVyB,IAAEC,UAAUF,KAAKG,KAAKtC,KAAKL,GAAIL,EAAGE,QAE7BG,GAAGwC,KAAK7C,EAAGE,mCAIXJ,OAEDkC,EAAMtB,KAAKC,KAAKb,QAGjBO,GAAGkC,KAAK,UAAW,CAAEb,MAAO5B,EAAI6B,QAASjB,KAAMsB,IAAAA,IAGpDb,MAAImB,OAAQ,kBACZnB,MAAImB,OAAQ,kBACZnB,MAAImB,OAAQ,gBACZnB,MAAImB,OAAQ,sBAGPP,MAAK,QDxGI9C,EAAkBsB,EAAYwC,UAAWhC,GACrDC,GAAa/B,EAAkBsB,EAAaS,iBC2G3CiC,UAAS,CACdC,yBAAWC,oEACWzC,KAAKD,SAAS,eAAiB,IAAIL,EAAYM,OACvDqB,KAAKoB,GACVzC"}