{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/src/components/halo/lively-hand.js"],"names":["Morph","pt","Selecting","GrabItem","LivelyHand","initialize","setAttribute","lively","removeEventListener","outerWorldContext","addEventListener","e","onPointerDown","info","get","isMetaNode","world","worldContext","isWorld","document","body","parentElement","parentNode","grab","element","drop","pos","getGlobalPosition","appendChild","setGlobalPosition","childNodes","forEach","droptarget","dropTarget","elementUnderHand","evt","path","composedPath","slice","indexOf","srcElement","filter","ea","isIgnoredOnMagnify","canDropInto","startGrabbing","target","style","visibility","clientX","clientY","onPointerMove","onPointerUp","altKey","preferences","window","LastEvent2","preventDefault","dropIndicator","remove","showElement","border","innerHTML","migrate","hand","querySelector","ensureHand"],"mappings":"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","file":"lively-hand.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport { pt } from \"src/client/graphics.js\"\nimport Selecting from \"src/client/morphic/selecting.js\"\nimport GrabItem from \"src/components/halo/lively-halo-grab-item.js\"\n\n\n/*\n * Classic old Morphic-like drag and drop of graphical elements\n */\n\nexport default class LivelyHand extends Morph {\n\n  initialize() {\n    this.setAttribute(\"data-lively4-donotpersist\", \"all\");\n    lively.removeEventListener(\"Hand\", this.outerWorldContext())\n    lively.addEventListener(\"Hand\", this.outerWorldContext(), \"pointerdown\",\n      e => this.onPointerDown(e))\n  }\n\n  get info() {\n    return this.get(\"#info\")\n  }\n\n  get isMetaNode() {\n    return true\n  }\n\n  outerWorldContext() {\n    var world = this.worldContext()\n    return world.isWorld ?\n      world :\n      document.body.parentElement\n  }\n\n\n  worldContext() {\n    return this.parentNode || document.body\n  }\n\n  grab(element) {\n    this.drop()\n    var pos = lively.getGlobalPosition(element)\n    this.appendChild(element)\n    lively.setGlobalPosition(element, pos)\n  }\n\n  drop() {\n    this.childNodes.forEach(element => {\n      var pos = lively.getGlobalPosition(element)\n      var droptarget = this.dropTarget || this.worldContext()\n      droptarget.appendChild(element)\n      lively.setGlobalPosition(element, pos)\n    })\n  }\n\n  elementUnderHand(evt) {\n\n    var path = evt.composedPath().slice(evt.composedPath().indexOf(evt.srcElement))\n      .filter(ea => !Selecting.isIgnoredOnMagnify(ea) &&\n        GrabItem.canDropInto(this, ea)\n      )\n    return path[0]\n  }\n\n  startGrabbing(target, evt) {\n    // this.style.display = \"block\"\n    this.style.visibility = \"visible\"\n    if (evt) {\n      lively.setGlobalPosition(this, pt(evt.clientX, evt.clientY));\n\n    }\n    lively.addEventListener(\"Hand\", document.body.parentElement, \"pointermove\",\n      e => this.onPointerMove(e))\n    lively.addEventListener(\"Hand\", document.body.parentElement, \"pointerup\",\n      e => this.onPointerUp(e))\n    this.grab(target)\n  }\n\n  onPointerDown(evt) {\n    // document.body.parentElement.setPointerCapture(evt.pointerId)\n    if (evt.altKey && !lively.preferences.get(\"DisableAltGrab\")) {\n      window.LastEvent2 = evt\n\n      var target = this.elementUnderHand(evt)\n      if (!target) return;\n      // lively.notify(\"grab this\" + target)\n      evt.preventDefault()\n      this.startGrabbing(target, evt)\n    }\n    // this.offset = lively.globalPosition(this)\n  }\n\n  onPointerMove(evt) {\n    if (this.dropIndicator) this.dropIndicator.remove()\n    this.dropTarget = this.elementUnderHand(evt)\n    if (this.dropTarget) {\n      this.dropIndicator = lively.showElement(this.dropTarget)\n      this.dropIndicator.style.border = \"3px dashed rgba(0,100,0,0.5)\"\n      this.dropIndicator.innerHTML = \"\"\n    }\n    lively.setGlobalPosition(this, pt(evt.clientX, evt.clientY))\n  }\n\n  onPointerUp(evt) {\n    if (this.dropIndicator) this.dropIndicator.remove()\n\n    // document.body.parentElement.releasePointerCapture(evt.pointerId)\n    lively.removeEventListener(\"Hand\", document.body.parentElement, \"pointermove\")\n    lively.removeEventListener(\"Hand\", document.body.parentElement, \"pointerup\")\n    this.drop()\n    this.style.visibility = \"hidden\"\n  }\n\n  static migrate() {\n    var hand = document.body.querySelector(\":scope > lively-hand\")\n    if (hand) {\n      hand.remove()\n      lively.ensureHand() // lazy... reinitialize\n    }\n  }\n\n}\n\n\n// does not work for booting .... \n// LivelyHand.migrate()\n"]}