{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-leo/src/components/widgets/lively-resizer.js"],"names":["Morph","pt","Grid","Resizer","initialize","addEventListener","evt","onPointerMoveStart","getElement","target","parentElement","parentNode","host","count","element","originalExtent","lively","getExtent","originalPosition","getPosition","dragOffset","stopPropagation","document","documentElement","onPointerMove","onPointerMoveEnd","clientX","pos","delta","subPt","classList","contains","newPosition","addPt","Math","min","x","y","newExtent","setPosition","setExtent","snapPt","dispatchEvent","CustomEvent","preventDefault","removeEventListener","livelyExample","div2","div","topRight","style","color","appendChild","topLeft","bottomLeft","bottomRight","remove"],"mappings":"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","file":"lively-resizer.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport {pt}  from 'src/client/graphics.js';\nimport {Grid} from 'src/client/morphic/snapping.js';\n\n\nexport default class Resizer extends Morph {\n  initialize() {    \n    this.addEventListener('pointerdown', (evt) => { this.onPointerMoveStart(evt) });\n  }\n\n  getElement() {\n    if (this.target) {\n      return this.target\n    } else if (this.parentElement) {\n      return this.parentElement \n    } else if (this.parentNode && this.parentNode.host) {\n      return this.parentNode.host\n    }\n    return null\n  }\n  \n  onPointerMoveStart(evt) {\n    this.count = 0\n    var element = this.getElement()\n    if (!element) return; // do nothging... should this happen?\n    \n    this.originalExtent = lively.getExtent(element)\n    this.originalPosition = lively.getPosition(element)\n      \n    this.dragOffset = lively.getPosition(evt);\n    evt.stopPropagation();\n    \n    lively.addEventListener('lively-resizer-drag', document.documentElement, 'pointermove',\n      evt => this.onPointerMove(evt), true);\n    lively.addEventListener('lively-resizer-drag', document.documentElement, 'pointerup',\n      evt => this.onPointerMoveEnd(evt));\n  \n  }\n  \n  onPointerMove(evt) {\n    if (!evt.clientX) return\n\n    var element = this.getElement()\n    if (!element) return; // do nothging... should this happen?\n\n    this.count++ \n    if (this.count == 1) return; // ignore the first event because it seems to be off\n    \n    // 1. calculate values\n    var pos = lively.getPosition(evt);\n    // lively.showPoint(pos.addPt(lively.getGlobalPosition(document.body)))\n    \n    var delta = pos.subPt(this.dragOffset)\n\n    // 3. update new values\n\n    if (this.classList.contains(\"top-left\")) {\n      var newPosition = this.originalPosition.addPt(pt(Math.min(delta.x, this.originalExtent.x), \n                                                       Math.min(delta.y, this.originalExtent.y)))    \n      var newExtent = this.originalExtent.addPt(pt(-delta.x, -delta.y))    \n            \n      lively.setPosition(element,  newPosition)  \n      lively.setExtent(element, newExtent)   \n\n    } else  if (this.classList.contains(\"top-right\")) {\n      var newPosition = this.originalPosition.addPt(pt(0, Math.min(delta.y, this.originalExtent.y)))    \n      var newExtent = this.originalExtent.addPt(pt(delta.x, -delta.y))    \n      \n      lively.setPosition(element,  newPosition)  \n      lively.setExtent(element, newExtent)   \n\n    } else if (this.classList.contains(\"bottom-left\")) {\n      var newPosition = this.originalPosition.addPt(pt(Math.min(delta.x, this.originalExtent.x), 0))    \n      var newExtent = this.originalExtent.addPt(pt(-delta.x, delta.y))    \n      \n      lively.setPosition(element,  newPosition)  \n      lively.setExtent(element, newExtent)   \n\n    } else {\n      \n      var newExtent = this.originalExtent.addPt(delta)    \n      \n      newExtent = Grid.snapPt(newExtent,100,10)  // #TODO transfere this to the other corners!\n\n      lively.setExtent(element, newExtent)   \n    }\n\n    element.dispatchEvent(new CustomEvent(\"extent-changed\"))\n    \n    evt.stopPropagation();\n    evt.preventDefault();\n  }\n  \n  onPointerMoveEnd(evt) {\n    evt.stopPropagation();\n    evt.preventDefault();\n    \n    lively.removeEventListener('lively-resizer-drag',  document.documentElement)\n  }\n  \n  async livelyExample() {\n    \n    var div2 = <div style=\"background-color: gray; top:100px; position: absolute; left:100px;width:100px; height:100px\"></div>\n    var div = <div style=\"background-color: lightgray\">{div2}</div>\n\n    var topRight = await (<lively-resizer class=\"top-right\"></lively-resizer>)        \n    topRight.target = div2    \n    topRight.style.color = \"green\"\n    div2.appendChild(topRight)\n\n    var topLeft = await (<lively-resizer class=\"top-left\"></lively-resizer>)        \n    topLeft.target = div2    \n    topLeft.style.color = \"yellow\"\n    div2.appendChild(topLeft)\n\n    \n    var bottomLeft = await (<lively-resizer class=\"bottom-left\"></lively-resizer>)        \n    bottomLeft.target = div2    \n    bottomLeft.style.color = \"blue\"\n    div2.appendChild(bottomLeft)\n\n    //default    \n    var bottomRight = await (<lively-resizer class=\"bottom-right\"></lively-resizer>)        \n    bottomRight.target = div2    \n    bottomRight.style.color = \"red\"\n    div2.appendChild(bottomRight)\n    \n    this.parentElement.appendChild(div)\n    this.remove()\n  }\n  \n\n}\n"]}