{"version":3,"names":["Graffle","pt","Halo","HaloService","default","SVG","debounce","Grid","events","load","lively","removeEventListener","document","body","addEventListener","evt","onKeyDown","onKeyUp","documentElement","onMouseDown","onMouseMove","onMouseUp","onSelectionHide","onSelectionChange","keysDown","showStyleBalloon","target","styleBalloon","openPart","style","zIndex","appendChild","setClientPosition","getClientBounds","bottomLeft","hideStyleBalloon","remove","selection","window","getSelection","activeElement","isContentEditable","shadowRoot","anchorNode","isCollapsed","element","getRangeAt","endContainer","parentElement","includes","tagName","preferences","get","isGlobalKeyboardFocusElement","composedPath","key","String","fromCharCode","keyCode","specialKeyDown","ctrlKey","metaKey","disabled","altKey","stopPropagation","preventDefault","hand","ensureHand","visibility","info","textContent","userSelect","changeFontSize","factor","fontSize","match","Math","round","Number","replace","changeCurrentFontSize","range","commonAncestorContainer","oldSize","execCommand","changeTextColor","color","startContainer","changeHiliteColor","currentPath","showHaloItems","eventPosition","clientX","clientY","startShapeDrawing","shape","createElement","backgroundColor","border","openAsLivelyContent","startTextDrawing","text","classList","add","width","height","whiteSpace","padding","contentEditable","touchAction","ensureTargetContainer","startConnectorDrawing","startPathDrawing","startFreehandDrawing","connector","components","openIn","targetContainer","that","showHalos","cp","halo","ensureControlPoint","getPath","currentControlPoint","setVerticePosition","start","targetElement","connectFrom","connectTo","freehand","create","currentFreehand","setExtent","onPointerDown","continueDrawing","path","offset","getClientPosition","pos","subPt","snapPt","setPosition","svgPath","querySelector","vertices","getPathVertices","length","addControlPoint","eventOffset","lastMouseUpPos","div","currentElement","lastMouseDown","find","ea","localName","showElement","move","onPointerMove","extent","getPosition","stop","hideHaloItems","onPointerUp","svg","bounds","childBounds","p1","p2","x","y","delta","moveBy","scaleBy","contains","focus","lastElement","currentConnectFrom"],"sources":["graffle.js"],"sourcesContent":["import {pt} from 'src/client/graphics.js';\nimport Halo from \"src/components/halo/lively-halo.js\"\nimport SVG from \"src/client/svg.js\"\nimport { debounce } from \"utils\";\nimport {Grid} from 'src/client/morphic/snapping.js';\nimport * as events from 'src/client/morphic/event-helpers.js'\n\nimport {default as HaloService} from \"src/components/halo/lively-halo.js\"\n\nexport default class Graffle {\n  \n  // Graffle.keysDown \n  static load() {\n    lively.removeEventListener(\"Graffle\", document.body)\n    lively.removeEventListener(\"Graffle\", document)\n    lively.addEventListener(\"Graffle\", document.body, \"keydown\", \n      (evt) => { this.onKeyDown(evt)}, true)\n    lively.addEventListener(\"Graffle\", document.body, \"keyup\", \n      (evt) => { this.onKeyUp(evt) }, true)\n    lively.removeEventListener(\"GraffleMouse\", document.documentElement)\n    lively.addEventListener(\"GraffleMouse\", document.documentElement, \"pointerdown\", \n      (evt) => { this.onMouseDown(evt) }, true)\n    lively.addEventListener(\"GraffleMouse\", document.documentElement, \"pointermove\", \n      (evt) => { this.onMouseMove(evt) })\n    lively.addEventListener(\"GraffleMouse\", document.documentElement, \"pointerup\", \n      (evt) => { this.onMouseUp(evt) })\n    lively.addEventListener(\"Graffle\", document, \"selectionchange\", \n      (evt) => { this.onSelectionHide(evt) } )\n    lively.addEventListener(\"Graffle\", document, \"selectionchange\", \n      ((evt) => { this.onSelectionChange(evt) })::debounce(600) )\n    this.keysDown = {}\n  }\n\n  \n  static async showStyleBalloon(target) {\n    if (!target) {\n      return;\n    }\n    // console.log(\"show balloon \" + target)\n    // lively.showElement(target)\n    if (!lively.styleBalloon) {\n      lively.styleBalloon = await lively.openPart(\"formatting\")\n      lively.styleBalloon.style.zIndex = 500\n    }\n    document.body.appendChild(lively.styleBalloon);\n    // lively.showElement(lively.styleBalloon)\n\n    // console.log(\"pos \" + lively.getClientBounds(target).bottomLeft())\n    lively.setClientPosition(lively.styleBalloon,\n      lively.getClientBounds(target).bottomLeft())\n  }\n  \n    \n  static async hideStyleBalloon() {\n    // console.log(\"hide balloon\")\n    if (lively.styleBalloon) {\n      lively.styleBalloon.remove()\n      \n      // lively.styleBalloon = null; // for developing\n    }\n  }\n  \n   static onSelectionHide(evt) {\n    // var selection = window.getSelection()\n    // if (!document.activeElement || !document.activeElement.isContentEditable) {\n    //   if (document.activeElement === document.body) {\n    //     this.hideStyleBalloon() \n    //   }\n    // } else if (!selection.anchorNode || !selection.isCollapsed) {\n    //   this.hideStyleBalloon() \n    // }\n    this.hideStyleBalloon() \n   }\n  \n  static onSelectionChange(evt) {\n    var selection = window.getSelection()\n    if (!document.activeElement || !document.activeElement.isContentEditable) {\n      return\n    }\n    if (document.activeElement.shadowRoot) {\n      selection = document.activeElement.shadowRoot.getSelection()\n    }\n    if (selection.anchorNode && !selection.isCollapsed) {\n      var element = selection.getRangeAt(0).endContainer.parentElement;\n      while([\"SPAN\", \"FONT\", \"A\", \"B\", \"I\"].includes(element.tagName)) {\n        element = element.parentElement\n      }\n      this.showStyleBalloon(element)\n    }\n  }\n  \n  static async onKeyDown(evt) {        \n    if (!lively.preferences.get(\"GraffleMode\")) return;\n\n    if (!lively.isGlobalKeyboardFocusElement(evt.composedPath()[0])) \n      return; \n    var key = String.fromCharCode(evt.keyCode)\n\n    // console.log(\"\" + Date.now() + \" down \" + key + \" \" +  evt.altKey)\n\n    this.keysDown[key] = true\n    if (this.specialKeyDown() && !(evt.ctrlKey || evt.metaKey)) {\n      lively.selection.disabled = true\n      if (!evt.ctrlKey && !evt.altKey && !evt.altKey) {\n        // console.log('disable ' + evt.keyCode)\n        evt.stopPropagation()\n        evt.preventDefault()\n      }\n      var hand = await lively.ensureHand();\n      if (hand) {\n        hand.style.visibility = \"visible\"\n        var info = \"\"\n        // #KeyboardShortcut HOLD-S+Drag create shape\n        if (this.keysDown[\"S\"]) {\n          info = \"shape\"\n        }\n        // #KeyboardShortcut HOLD-C+Drag create connector\n        if (this.keysDown[\"C\"]) {\n          info = \"connect\"\n        }\n        // #KeyboardShortcut HOLD-T+Drag create text\n        if (this.keysDown[\"T\"]) {\n          info = \"text\"\n        }\n        // #KeyboardShortcut HOLD-D+Drag create svg path\n        if (this.keysDown[\"D\"]) {\n          info = \"draw\"\n        }\n        // #KeyboardShortcut HOLD-F+Drag create freehand drawing\n        if (this.keysDown[\"F\"]) {\n          info = \"freehand\"\n        }\n\n        if (hand.info)\n          hand.info.textContent = info;\n          hand.info.style.userSelect = \"none\"\n      }\n    }\n  }\n  \n  static changeFontSize(element, factor) {\n      if (element) {\n        var fontSize = element.style.fontSize\n        if (!fontSize || !fontSize.match(/%$/)) {\n          fontSize = \"100%\"\n        }    \n        fontSize = \"\" + (Math.round(Number(fontSize.replace(/%/,\"\")) * factor)) + \"%\"\n        element.style.fontSize = fontSize\n        // lively.notify(\"font size: \" +  element.style.fontSize)\n      }\n  }  \n\n  \n  static changeCurrentFontSize(factor) {\n    var range = window.getSelection().getRangeAt(0);\n    var element = range.commonAncestorContainer.parentElement\n    var oldSize = element.style.fontSize\n\n    // make a new region \n    document.execCommand(\"styleWithCSS\", true, true)\n    document.execCommand(\"fontSize\", true, 1)    \n    element = window.getSelection().getRangeAt(0).commonAncestorContainer.parentElement\n    element.style.fontSize  = oldSize.match(\"%$\") ? oldSize : \"100%\";\n    this.changeFontSize(element, factor)\n  }  \n\n\n  static changeTextColor() {\n    var color = \"orange\"; // #TODO make this interactive... \n    var element = window.getSelection().getRangeAt(0).startContainer.parentElement;\n    if (element.style.color == color) {\n      color = \"black\"; // TODO how can we unset a color? \n    }\n    document.execCommand(\"styleWithCSS\", true, true)\n    document.execCommand(\"foreColor\", true, color)\n  }  \n  \n  static changeHiliteColor() {\n    var color = \"yellow\"; // #TODO make this interactive... \n    var element = window.getSelection().getRangeAt(0).startContainer.parentElement;\n    if (element.style.color == color) {\n      color = \"transparent\"; // TODO how can we unset a color? \n    }\n    document.execCommand(\"styleWithCSS\", true, true)\n    document.execCommand(\"hiliteColor\", true, color)\n  }  \n  \n  \n  static async onKeyUp(evt) {\n    var key = String.fromCharCode(evt.keyCode)\n    this.keysDown[key] = false\n    \n    // console.log(\"\" + Date.now() + \" up \" + key + \" \" +  evt.altKey)\n    \n    if (key == \"D\" || key == \"C\") {\n      this.currentPath = null;\n      HaloService.showHaloItems()\n    }\n    \n    lively.selection.disabled = false\n  \n    var hand = await lively.ensureHand();\n    if (hand) {\n      hand.style.visibility = \"hidden\"\n      if (hand.info) hand.info.textContent = \"\"\n    }\n    // if (this.lastElement)\n    //   this.lastElement.focus(); // no, we can focus.... and continue typing\n\n    if (evt.altKey &&   evt.keyCode == 187 /* + */) {\n      this.changeCurrentFontSize(1.1)\n    }\n    \n    if (evt.altKey &&  evt.keyCode == 189 /* - */) {\n      this.changeCurrentFontSize(0.9)\n    }\n\n    if (evt.altKey && key == \"C\") {\n      this.changeTextColor()\n    }\n\n    if (evt.altKey && key == \"H\") {\n      this.changeHiliteColor()\n    }\n  }\n  \n  static specialKeyDown() {\n    return this.keysDown[\"S\"] || this.keysDown[\"T\"] || this.keysDown[\"C\"] || this.keysDown[\"D\"] || this.keysDown[\"F\"]\n  }\n  \n  static eventPosition(evt) {\n     return pt(evt.clientX, evt.clientY)\n  }\n  \n  static async startShapeDrawing(evt) {\n    var shape = document.createElement(\"div\")\n    shape.style.backgroundColor = \"lightgray\"\n    shape.style.border = \"1px solid gray\"    \n    this.openAsLivelyContent(shape, evt)\n    return shape\n  }\n  \n  static async startTextDrawing(evt) {\n    var text = document.createElement(\"div\")\n    text.textContent = \"\"\n    text.classList.add(\"lively-text\")\n    \n    // #TODO move this to CSS as defaults?\n    text.style.width = \"auto\"\n    text.style.height = \"auto\"\n    text.style.whiteSpace = \"nowrap\";\n    text.style.padding = \"3px\"\n    \n    text.contentEditable = true\n    this.openAsLivelyContent(text, evt)\n    return text\n  }\n  \n   static async onMouseDown(evt) {    \n    if (!this.specialKeyDown()) return\n    evt.stopPropagation()\n    evt.preventDefault()\n    document.documentElement.style.touchAction = \"none\"    \n    this.ensureTargetContainer(evt)\n    if (this.keysDown[\"S\"]) {\n      await this.startShapeDrawing(evt)\n    } else if (this.keysDown[\"T\"]) {\n      await this.startTextDrawing(evt)\n    }  else if (this.keysDown[\"C\"]) {\n      await this.startConnectorDrawing(evt)\n    }  else if (this.keysDown[\"D\"]) {\n      await this.startPathDrawing(evt)\n    } else if (this.keysDown[\"F\"]) {\n      await this.startFreehandDrawing(evt)\n    }\n  }\n\n  static async startConnectorDrawing(evt) {\n    var connector = document.createElement(\"lively-connector\")\n    await lively.components.openIn(this.targetContainer, connector)\n    \n    // var connector = await (<lively-connector></lively-connector>)\n    // var connector = await lively.create(lively-connector, this.targetContainer)\n    \n    lively.setClientPosition(connector, pt(evt.clientX, evt.clientY))\n    window.that = connector\n    HaloService.showHalos(connector)\n    let cp = lively.halo.ensureControlPoint(connector.getPath(), 1, true)\n    this.currentControlPoint = cp\n    cp.setVerticePosition(pt(0,0))\n    cp.start(evt, connector)\n    this.currentPath = connector        \n    this.openAsLivelyContent(connector, evt)\n    if (cp.targetElement) {\n      connector.connectFrom(cp.targetElement)\n    }   \n    connector.connectTo(lively.hand)\n    return connector\n  }\n  \n  static async startFreehandDrawing(evt) {\n    var freehand = await lively.create(\"lively-drawboard\")\n    freehand.freehand()\n    this.currentFreehand = freehand\n    this.openAsLivelyContent(freehand, evt)\n    lively.setExtent(freehand, pt(100,100))\n    freehand.onPointerDown(evt)\n    return freehand\n  }\n  \n  static async startPathDrawing(evt) {\n    var continueDrawing = true && this.currentPath;\n    if (!this.currentPath) {\n      var path = await lively.openPart(\"path\", this.targetContainer)\n      this.currentPath = path\n      window.that = path\n      this.openAsLivelyContent(path, evt) \n      // split position in global and local part to snap locally...\n      var offset = lively.getClientPosition(path.parentElement)\n      var pos = pt(evt.clientX, evt.clientY).subPt(offset)\n      \n      if (!evt.ctrlKey) {\n        pos = Grid.snapPt(pos, 10, 5) \n      }\n      HaloService.showHalos(path)\n      lively.setPosition(path, pos)\n    } \n    var svgPath = this.currentPath.querySelector(\"path\")\n    var vertices = SVG.getPathVertices(svgPath)\n    let cp = lively.halo.ensureControlPoint(svgPath, vertices.length - 1)\n    this.currentControlPoint = cp\n    if (continueDrawing) {\n      cp.addControlPoint()        \n    } else {\n      cp.setVerticePosition(pt(0,0))\n    }\n    cp.start(evt, this.currentPath)\n    if (continueDrawing) {\n      cp.eventOffset = this.lastMouseUpPos // #ContinueHere \n    }\n    return path\n  }\n  \n  static openAsLivelyContent(div, evt) {\n    div.classList.add(\"lively-content\")\n    this.currentElement = div\n    this.targetContainer.appendChild(div)\n    var pos = this.eventPosition(evt)    \n    \n    lively.setClientPosition(div, pos)\n    this.lastMouseDown = pos;\n    return div\n  }\n  \n  static ensureTargetContainer(evt) {\n    \n    var targetContainer = evt.composedPath().find(ea => ea.localName == \"lively-figure\")\n    if (!targetContainer) {\n      targetContainer = evt.composedPath().find(ea => ea.tagName == \"LIVELY-CONTAINER\")\n    }\n    if (targetContainer) {\n      lively.showElement(targetContainer)\n      this.targetContainer = targetContainer\n    } else {\n      this.targetContainer = document.body\n    }\n  }\n  \n  static onMouseMove(evt) {\n    if (this.specialKeyDown()) {\n        lively.setClientPosition(lively.hand, pt(evt.clientX - 2, evt.clientY -2))    \n    }\n    if (this.currentControlPoint) {\n      this.currentControlPoint.move(evt)\n    }\n    if (this.currentFreehand) {\n      this.currentFreehand.onPointerMove(evt)\n    }\n    \n    if (!this.lastMouseDown || !this.currentElement) return;\n    var extent = this.eventPosition(evt).subPt(this.lastMouseDown)\n    if (!this.currentPath && !this.currentFreehand) {\n      lively.setExtent(this.currentElement, extent)\n    }\n  }\n\n  static onMouseUp(evt) {\n    if (!evt) return;\n    this.lastMouseUpPos = lively.getPosition(evt)\n    if (this.currentControlPoint) {\n      this.currentControlPoint.stop(evt)\n       if (!this.keysDown[\"T\"]) {\n          HaloService.hideHaloItems()        \n        } \n    }\n    if (this.currentFreehand) {\n      this.currentFreehand.onPointerUp(evt)      \n      var svg = this.currentFreehand.get(\"#svg\")\n      var path = svg.querySelector(\"path\")\n\n      var bounds = SVG.childBounds(svg)\n      var p1 = lively.getClientPosition(this.currentFreehand)\n      if (!bounds) return;\n      \n      var p2 = pt(bounds.x, bounds.y)\n      var delta = p2.subPt(p1)\n\n      lively.moveBy(this.currentFreehand, delta)\n      lively.moveBy(path, delta.scaleBy(-1))\n      lively.setExtent(this.currentFreehand, pt(bounds.width, bounds.height))\n      \n      this.currentFreehand = null\n      this.currentElement = null\n      // lively.showElement(svg)\n  \n      // lively.setClientPosition(this.currentFreehand, bounds.topLeft())\n      // lively.setExtent(this.currentFreehand, pt(bounds.width, bounds.height))\n    } else if(this.currentElement) {\n      if (this.currentElement.classList.contains(\"lively-text\")) {\n        if (!this.keysDown[\"T\"]) {\n          this.currentElement.focus()        \n        } \n      }\n      this.lastMouseDown = null\n      this.currentElement = null\n      this.lastElement = this.currentElement\n      document.documentElement.style.touchAction = \"\"\n    } else {\n      this.lastElement = null\n    }\n    this.currentControlPoint = null\n    this.currentConnectFrom = null\n  }\n}\n\nGraffle.load()"],"mappings":"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"}