{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/components/widgets/lively-resizer.js"],"names":["Morph","pt","Grid","Resizer","initialize","addEventListener","evt","onPointerMoveStart","originalLengths","Map","originalFlexs","getElement","target","parentElement","parentNode","host","getWidth","element","getBoundingClientRect","width","getHeight","height","getOriginalLength","get","setOriginalLength","l","set","getOriginalFlex","setOriginalFlex","setHeight","h","flex","newFlex","setFlex","style","setWidth","w","getFlex","parseFloat","getComputedStyle","flexGrow","f","getLength","setLength","value","x","y","dispatchEvent","CustomEvent","getEventLength","clientX","clientY","subPt","lively","getGlobalPosition","document","body","count","dragOffset","stopPropagation","documentElement","onPointerMove","onPointerMoveEnd","pos","delta","newExtent","addPt","snapPt","preventDefault","removeEventListener"],"mappings":"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","file":"lively-resizer.js","sourcesContent":["'use strict';\n\nimport 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    // console.log(\"intialize separator \" )\n    // #TODO #Refactor, because we use drag and drop semantically now, use PointerEvents here...\n    \n    this.addEventListener('pointerdown', (evt) => { this.onPointerMoveStart(evt) });\n    \n    this.originalLengths = new Map()\n    this.originalFlexs = new Map()\n  }\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    }\n    return null\n  }\n\n  getWidth(element) {\n    if (!element) return 0\n    return element.getBoundingClientRect().width\n  }\n\n  getHeight(element) {\n    if (!element) return 0\n    return element.getBoundingClientRect().height\n  }\n\n  getOriginalLength(element) {\n    if (!element) return 0\n    return this.originalLengths.get(element)\n  }\n\n  setOriginalLength(element, l) {\n    if (!element) return\n    return this.originalLengths.set(element, l)\n  }\n\n  getOriginalFlex(element) {\n    if (!element) return 0\n    return this.originalFlexs.get(element)\n  }\n\n  setOriginalFlex(element, l) {\n    if (!element) return\n    return this.originalFlexs.set(element, l)\n  }\n\n  setHeight(element, h) {\n    if (!element) return\n    var flex = this.getOriginalFlex(element)\n    if (flex > 0 ) {\n      var newFlex = h / this.getOriginalLength(element) * flex\n      // console.log(\"new flex \" + newFlex)\n      this.setFlex(element, newFlex)\n    } else {\n      element.style.height = h + \"px\";\n    }\n  }\n\n  setWidth(element, w) {\n    if (!element) return\n    var flex = this.getOriginalFlex(element)\n    if (flex > 0 ) {\n      var newFlex = w / this.getOriginalLength(element) * flex\n      // console.log(\"new flex \" + newFlex)\n      this.setFlex(element, newFlex)\n    } else {\n      element.style.width = w + \"px\";\n    }\n  }\n\n  getFlex(element) {\n    if (!element) return 0\n    return parseFloat(getComputedStyle(element).flexGrow)\n  }\n\n  setFlex(element, f) {\n    if (f  == 0) {\n      f = 0.1; // we cannot distinguish between flex and not flex otherwise...\n    }\n    if (!element) return\n    element.style.flex = f\n  }\n\n  getLength(element) {\n    return pt(this.getWidth(element), this.getHeight(element))\n  }\n\n  setLength(element, value) {\n    this.setWidth(element, value.x)\n    this.setHeight(element, value.y)\n    element.dispatchEvent(new CustomEvent(\"extent-changed\"))\n  }\n\n\n  getEventLength(evt) {\n    return pt(evt.clientX, evt.clientY).subPt(lively.getGlobalPosition(document.body))\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.setOriginalLength(element, this.getLength(element))\n    // this.setOriginalFlex(element, this.getFlex(element))  \n      \n    this.dragOffset = this.getEventLength(evt);\n\n    evt.stopPropagation();\n    \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 = this.getEventLength(evt)\n    // lively.showPoint(pos.addPt(lively.getGlobalPosition(document.body)))\n    \n    var delta = pos.subPt(this.dragOffset)\n\n    var newExtent = this.getOriginalLength(element).addPt(delta)    \n\n    newExtent = Grid.snapPt(newExtent,100,10)\n\n\n    // lively.notify(\"pos \" + pos + \" newExtent \" + newExtent)\n    \n    \n    // 2. constrain new values\n    if (newExtent.x < 0) {\n      newExtent.x = 0\n    }\n    if (newExtent.y < 0) {\n      newExtent.y = 0\n    }\n    // 3. update new values\n    this.setLength(element, newExtent)\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}\n"]}