{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/src/components/widgets/lively-resizer.js"],"names":["Morph","pt","Grid","Preferences","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","maybeSnapToGrid","point","get","snapPt","newPosition","newExtent","classList","contains","addPt","Math","min","x","y","addX","addY","notify","setPosition","setExtent","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\nimport Preferences from \"src/client/preferences.js\"\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    // #TODO transfer this to all corners!\n    function maybeSnapToGrid(point) {\n      if (!Preferences.get(\"SnapWindowsInGrid\")) {\n        return point\n      }\n      return Grid.snapPt(point, 100, 10)\n    }\n\n    let newPosition, newExtent;\n    if (this.classList.contains(\"top-left\")) {\n      newPosition = this.originalPosition.addPt(pt(Math.min(delta.x, this.originalExtent.x), \n                                                       Math.min(delta.y, this.originalExtent.y)))    \n      newExtent = this.originalExtent.addPt(pt(-delta.x, -delta.y))    \n    } else if (this.classList.contains(\"top-right\")) {\n      newPosition = this.originalPosition.addPt(pt(0, Math.min(delta.y, this.originalExtent.y)))    \n      newExtent = this.originalExtent.addPt(pt(delta.x, -delta.y))    \n    } else if (this.classList.contains(\"bottom-left\")) {\n      newPosition = this.originalPosition.addPt(pt(Math.min(delta.x, this.originalExtent.x), 0))    \n      newExtent = this.originalExtent.addPt(pt(-delta.x, delta.y))    \n    } else if (this.classList.contains(\"bottom-right\")) {\n      newPosition = this.originalPosition\n      newExtent = maybeSnapToGrid(this.originalExtent.addPt(delta))\n    } else if (this.classList.contains(\"left\")) {\n      newPosition = this.originalPosition.addX(Math.min(delta.x, this.originalExtent.x))    \n      newExtent = this.originalExtent.addX(-delta.x)\n    } else if (this.classList.contains(\"top\")) {\n      newPosition = this.originalPosition.addY(Math.min(delta.y, this.originalExtent.y))    \n      newExtent = this.originalExtent.addY(-delta.y)\n    } else if (this.classList.contains(\"bottom\")) {\n      newPosition = this.originalPosition\n      newExtent = maybeSnapToGrid(this.originalExtent.addY(delta.y))\n    } else if (this.classList.contains(\"right\")) {\n      newPosition = this.originalPosition\n      newExtent = maybeSnapToGrid(this.originalExtent.addX(delta.x))\n    } else {\n      lively.notify('unknown resizer anchor')\n      return\n    }\n\n    lively.setPosition(element, newPosition)\n    lively.setExtent(element, newExtent)\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"]}