{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-petrinet/src/components/halo/lively-halo-handle-item.js"],"names":["HaloItem","nodes","events","pt","Preferences","Snapping","Grid","Strings","HaloHandleItem","isMetaNode","initialize","lively","addEventListener","e","onMouseDown","evt","HaloService","isDragging","start","document","body","parentElement","move","onPointerUp","removeEventListener","stop","preventDefault","target","window","that","snapping","halo","info","showInfoBox","update","haloResizeStart","initialBounds","getBounds","eventOffset","globalPosition","removeRestrictions","delta","subPt","cornerOrSide","id","newPos","addPt","rounded","optSnapPosition","newBounds","prefixSelector","style","position","setBounds","setPosition","topLeft","setExtent","width","height","altKey","snapBounds","innerHTML","x","y","showHalos","node","minWidth","minHeight","maxWidth","maxHeight"],"mappings":"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","file":"lively-halo-handle-item.js","sourcesContent":["import HaloItem from 'src/components/halo/lively-halo-item.js';\nimport * as nodes from 'src/client/morphic/node-helpers.js'\nimport * as events from 'src/client/morphic/event-helpers.js'\nimport {pt} from 'src/client/graphics.js';\nimport Preferences from 'src/client/preferences.js';\nimport Snapping from \"src/client/morphic/snapping.js\"\nimport {Grid} from 'src/client/morphic/snapping.js';\nimport Strings from 'src/client/strings.js';\n\nexport default class HaloHandleItem extends HaloItem {\n  \n  get isMetaNode() {\n    return true\n  }\n  \n  initialize() {\n    lively.addEventListener(\"Morphic\", this, 'mousedown',  e => this.onMouseDown(e));\n  }\n\n  onMouseDown(evt) {\n    HaloService.isDragging  =true\n    this.start(evt);\n\n    // attach mousemove handler to body only after mousedown occured\n    lively.addEventListener(\"HaloResize\", document.body.parentElement, 'pointermove', (evt) => {\n      this.move(evt);\n    });\n    // and capture the following mouse up anywere \n    lively.addEventListener(\"HaloResize\", document.body.parentElement, 'pointerup',  e => this.onPointerUp(e));\n  }\n\n  onPointerUp(evt) {\n    lively.removeEventListener(\"HaloResize\", document.body.parentElement, 'pointerup');\n    lively.removeEventListener(\"HaloResize\", document.body.parentElement, 'pointermove');\n\n    this.stop(evt);\n  }\n\n  start(evt) {\n    evt.preventDefault();\n    this.target = window.that\n    this.snapping = new Snapping(this.target) \n    \n    if(this.halo.info)\n      this.halo.info.stop();\n    this.halo.info = lively.showInfoBox(this.target)\n    this.halo.info.update()\n\n    if (this.target.haloResizeStart) {\n      this.target.haloResizeStart(evt, this)\n    } else {\n      this.initialBounds = lively.getBounds(this.target)\n      this.eventOffset = events.globalPosition(evt)\n      this.removeRestrictions(this.target)\n    }\n  }\n\n  move(evt) {\n    \n    evt.preventDefault();\n    \n    var delta = events.globalPosition(evt).subPt(this.eventOffset)\n\n    var cornerOrSide = this.id\n    var newPos = this.initialBounds[cornerOrSide]().addPt(delta).rounded()\n    \n    newPos = Grid.optSnapPosition(newPos, evt) \n\n    var newBounds = this.initialBounds[Strings.prefixSelector(\"with\", cornerOrSide)](newPos)\n\n    if ( this.target.style.position == \"absolute\") {\n      lively.setBounds(this.target, newBounds)\n    } else {\n      \n      // this.target.style.left  =  + \"px\"\n      // this.target.style.top  = ( newBounds.y - this.initialBounds.y) + \"px\"\n      lively.setPosition(this.target, \n        newBounds.topLeft().subPt(this.initialBounds.topLeft()), \"relative\")\n      \n      lively.setExtent(this.target, pt(newBounds.width, newBounds.height))\n    }\n    \n    if(!evt.altKey && this.target.style.position == \"absolute\") {\n       this.snapping.snapBounds(cornerOrSide)\n    }\n    \n    this.halo.info.innerHTML = `${newPos.x}, ${newPos.y}`\n    HaloService.showHalos(window.that);\n  \n  }\n\n  stop(evt) {\n    HaloService.isDragging = false\n    this.halo.info.stop()\n    evt.preventDefault();\n  }\n\n  removeRestrictions(node) {\n    node.style.minWidth = null;\n    node.style.minHeight = null;\n    node.style.maxWidth = null;\n    node.style.maxHeight = null;\n  }\n    \n}"]}