{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-croquet/src/client/svg.js"],"names":["pt","rect","SVG","getPathVertices","p","getAttribute","split","map","ea","m","pos","c","x1","parseFloat","y1","toString","JSON","stringify","x2","y2","setPathVertices","vertices","s","join","setAttribute","resetBounds","svgElement","path","lively","getPosition","bounds","getBBox","v","pathPos","forEach","x","y","setPosition","addPt","setExtent","width","height","childBounds","result","childNodes","r","getBoundingClientRect","b","union"],"mappings":"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","file":"svg.js","sourcesContent":["import {pt, rect} from 'src/client/graphics.js';\n\n/*\n * Kitchensink for all SVG manipulation utilities\n */\n\nexport default class SVG {\n  \n   static getPathVertices(p) {\n    return p.getAttribute(\"d\").split(/(?=[A-Za-z] +)/).map( ea => {\n      var m = ea.split(/ +/)\n      var pos = {c: m[0], x1: parseFloat(m[1]), y1: parseFloat(m[2]), toString: function() { return JSON.stringify(this)}}\n      if (m[3]) {\n        pos.x1 = parseFloat(m[3]);\n        pos.y1 = parseFloat(m[4]);\n        pos.x2 = parseFloat(m[1]);\n        pos.y2 = parseFloat(m[2]);\n      }\n      return pos  \n    })\n  }\n  \n  static setPathVertices(p, vertices) {\n    var s = vertices.map(ea => {\n        var s = ea.c  \n        if (typeof ea.x2 !== 'undefined') \n          s +=  \" \" + ea.x2 + \" \" + ea.y2 // first the helper points\n        s += \" \" + ea.x1 + \" \" + ea.y1;\n        return s \n      }).join(\" \")\n    p.setAttribute(\"d\", s)\n    return s\n  }\n  \n  static resetBounds(svgElement, path) {\n    var pos = lively.getPosition(svgElement)\n    var bounds = svgElement.getBBox()\n    var v = this.getPathVertices(path) \n    var pathPos = lively.getPosition(path)\n    v.forEach(ea => {\n      ea.x1 -= bounds.x - pathPos.x\n      ea.y1 -= bounds.y - pathPos.y\n    })\n    lively.setPosition(svgElement, pos.addPt(pt(bounds.x, bounds.y)))\n    this.setPathVertices(path, v)\n    lively.setExtent(svgElement, pt(bounds.width + 1, bounds.height + 1))\n    lively.setPosition(path, pt(0,0))\n\n    // make sure the width is never 0\n\n  }\n  \n  /* \n   * ## Computes the bounds of the children of an svg element\n   * ``\n   * lively.showRect(SVG.childBounds(that.get(\"svg\")))\n   * ``\n   */ \n  static childBounds(svgElement) {\n    var result \n    svgElement.childNodes.forEach(ea => {\n        var r = ea.getBoundingClientRect()   \n        var b = rect(r.x, r.y, r.width, r.height)\n        result = (result || b).union(b)\n    })\n    return result\n  }\n\n}\n\n\n"]}