{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/components/d3/d3-radialtree.js"],"names":["Morph","d3","debounce","scriptManager","radialPoint","x","y","Math","cos","PI","sin","D3RadialRree","getTreeData","treeData","data","getAttribute","JSON","parse","e","console","warn","constructor","name","setTreeData","updateViz","initialize","addEventListener","evt","onExtentChanged","svgNode","shadowRoot","querySelector","innerHTML","bounds","getBoundingClientRect","width","height","svg","select","attr","color","scaleOrdinal","schemeBlues","append","style","zoom","call","scaleExtent","on","event","transform","g","tree","size","separation","a","b","parent","depth","root","hierarchy","eachBefore","d","id","link","selectAll","links","enter","linkRadial","angle","radius","node","descendants","children","dataColor","undefined","dataSize","dataClick","text","livelyExample","addScript","sqrt","colorScale","scaleSequential","interpolatePiYG","json","lively4url","livelyPrepareSave","stringify","setAttribute","livelyInspect","contentNode","inspector","appendChild","display","livelyMigrate","other","dataName"],"mappings":"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","file":"d3-radialtree.js","sourcesContent":["import Morph from \"src/components/widgets/lively-morph.js\"\nimport d3 from \"src/external/d3.v5.js\"\nimport { debounce } from \"utils\";\nimport scriptManager from  \"src/client/script-manager.js\";\n\n// #TODO use lib\nfunction radialPoint(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n\nexport default class D3RadialRree extends Morph {\n\n  getTreeData() {\n    if (!this.treeData) {\n      var data = this.getAttribute(\"tree-data\")\n      if (data) {\n        try {\n          this.treeData = JSON.parse(data)\n        } catch(e) {\n          console.warn(this.constructor.name + \": could not parse tree-data: \" + e)\n        }\n      } else {\n        this.treeData = {}\n      }\n    }\n    return this.treeData\n  }\n  \n  setTreeData(data) {\n    this.treeData = data;\n    this.updateViz()\n  }\n  \n  async initialize() {   \n    this.d3 = d3 // for scripts... that cannot use modules\n    this.updateViz()\n    this.addEventListener('extent-changed', ((evt) => { this.onExtentChanged(evt); })::debounce(500));\n    // window.d3 = d3\n    // System.import(\"src/client/container-scoped-d3.js\")\n  }\n  \n  updateViz() {\n    var svgNode = this.shadowRoot.querySelector(\"svg\")\n    svgNode.innerHTML = \"\"\n    var bounds = this.getBoundingClientRect()      \n    var width = bounds.width,\n      height = bounds.height;\n\n    var svg = d3.select(svgNode)\n      .attr(\"width\", width )\n      .attr(\"height\", height)\n    \n    var  \n      // color = d3.scaleOrdinal(d3.schemeAccent),\n      color = d3.scaleOrdinal(d3.schemeBlues[9]);\n    \n    // Zoom and Pan - Behavior\n    svg.append(\"rect\") // the \"additional rect\" captures events\n      .attr(\"width\", width)\n      .attr(\"height\", height)\n      .style(\"fill\", \"none\")\n    var zoom = svg.append(\"g\"); // this intermediate \"g\" node moves the view\n    svg.style(\"pointer-events\", \"all\")\n        .call(d3.zoom()\n          .scaleExtent([1 / 2, 4])\n          .on(\"zoom\", () => zoom.attr(\"transform\", d3.event.transform)));\n    \n    var g = zoom.append(\"g\")\n      .attr(\"transform\", \"translate(\" + (width / 2 + 40) + \",\" + (height / 2 + 90) + \")\");\n    var tree = d3.tree()\n        .size([2 * Math.PI, 500 ])\n        .separation((a, b) => (a.parent == b.parent ? 1 : 2) / a.depth);\n     \n    var data = this.getTreeData()\n    var root =  tree(d3.hierarchy(data)\n      .eachBefore((d) => { d.data.id = (d.parent ? d.parent.data.id + \".\" : \"\") + d.data.name}))      \n        \n    var link = g.selectAll(\".link\")\n      .data(root.links())\n      .enter().append(\"path\")\n        .attr(\"class\", \"link\")\n        .attr(\"d\", d3.linkRadial()\n            .angle(d => d.x)\n            .radius(d =>d.y));\n\n    var node = g.selectAll(\".node\")\n      .data(root.descendants())\n      .enter().append(\"g\")\n        .attr(\"class\", d  => \"node\" + (d.children ? \" node--internal\" : \" node--leaf\"))\n        .attr(\"fill\", d => this.dataColor ? this.dataColor(d) : undefined)\n        .attr(\"transform\", d => \"translate(\" + radialPoint(d.x, d.y) + \")\")\n        \n        \n    node.append(\"circle\")\n        .attr(\"r\", d => this.dataSize ? this.dataSize(d) : 2.5)\n        .on(\"click\", (d) => {\n          if(this.dataClick) this.dataClick(d, d3.event)\n        });\n\n    node.append(\"text\")\n        .attr(\"dy\", \"0.31em\")\n        .attr(\"x\", d => d.x < Math.PI === !d.children ? 6 : -6)\n        .attr(\"text-anchor\", d => d.x < Math.PI === !d.children ? \"start\" : \"end\")\n        .attr(\"transform\", d => \"rotate(\" + (d.x < Math.PI ? d.x - Math.PI / 2 : d.x + Math.PI / 2) * 180 / Math.PI + \")\")\n        .text(d => d.data.name)\n  }\n  \n  \n  onExtentChanged() {\n    this.updateViz()\n  }\n  \n  async livelyExample() {\n    \n    scriptManager.addScript(this, function(d) { return Math.sqrt(d.data.size) * 0.1 }, {name: \"dataSize\"});    \n    scriptManager.addScript(this, function(d) { \n      if (this.colorScale) {\n        \n      }\n      this.colorScale = this.d3.scaleSequential(d3.interpolatePiYG)\n      return this.colorScale(d.data.size * 0.0001) \n    }, {name: \"dataColor\"});\n    \n    scriptManager.addScript(this, (d) => {\n      return d.id\n    } , {name: \"dataTitle\"});\n    \n    \n    this.setTreeData(await d3.json(lively4url + \"/src/components/demo/flare.json\"))\n    \n    \n  }\n \n  livelyPrepareSave() {\n    if (this.treeData) {\n      var data = JSON.stringify(this.treeData)\n      this.setAttribute(\"tree-data\", data)\n    }    \n  }\n  \n  livelyInspect(contentNode, inspector) {\n    if (this.treeData) {\n      contentNode.appendChild(inspector.display(this.treeData, false, \"#tree-data\", this));\n    }\n  }\n  \n  livelyMigrate(other) {\n    this.treeData = other.treeData\n    this.dataName = other.dataName\n    this.dataColor = other.dataColor\n    this.dataSize = other.dataSize\n\n  }\n  \n}\n"]}