{"version":3,"sources":["https://lively-kernel.org/lively4S2/lively4-markus/src/components/d3/d3-plaintree.js"],"names":["Morph","d3","debounce","D3PlainTree","initialize","updateViz","addEventListener","evt","onExtentChanged","value","_value","getTreeData","treeData","setTreeData","data","bounds","getBoundingClientRect","shadowRoot","querySelector","innerHTML","margin","top","right","bottom","left","width","height","svg","select","attr","append","g","tree","size","cluster","root","hierarchy","eachBefore","d","id","parent","name","link","selectAll","descendants","slice","enter","diagonal","node","children","y","x","style","text","collapse","_children","forEach","ea","livelyInspect","contentNode","inspector","appendChild","display","lively","notify","livelyExample","json","lively4url","livelyMigrate","other","dataName"],"mappings":"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","file":"d3-plaintree.js","sourcesContent":["import Morph from \"src/components/widgets/lively-morph.js\"\nimport d3 from \"src/external/d3.v5.js\"\n\nimport { debounce } from \"utils\";\n\n\nexport default class D3PlainTree extends Morph {\n\n  initialize() {  \n    this.d3 = d3 // for scripting...\n    this.updateViz()\n    this.addEventListener('extent-changed', ((evt) => { debugger; this.onExtentChanged(evt); })::debounce(500));\n  }\n\n  get value() {\n    return this._value || \"tree\"\n  }\n  \n  \n\n  set value(value) {\n    this._value = value\n  }\n\n  getTreeData() {\n    return this.treeData\n  }\n\n  setTreeData(data) {\n    this.treeData = data;\n    this.updateViz()\n  }\n\n  updateViz() {\n    var bounds = this.getBoundingClientRect()\n    this.shadowRoot.querySelector(\"svg\").innerHTML = \"\"\n\n    \n    var treeData = this.getTreeData()\n    if (!treeData) return; // nothing to render\n    \n    var margin = { top: 20, right: 120, bottom: 20, left: 120 }\n    var width = bounds.width,\n      height = bounds.height;\n\n    var svg = d3.select(this.shadowRoot.querySelector(\"svg\"))\n      .attr(\"width\", width + margin.right + margin.left)\n      .attr(\"height\", height + margin.top + margin.bottom)\n      .append(\"g\")\n      .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n    this.svg = svg\n\n    var g = svg.append(\"g\").attr(\"transform\", \"translate(-60,0)\");\n\n    var tree = d3.tree()\n      .size([height, width - 160]);\n\n    var cluster = d3.cluster()\n      .size([height, width - 160]);\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    tree(root); // or \n    // cluster(root)\n\n    var link = g.selectAll(\".link\")\n      .data(root.descendants().slice(1))\n      .enter().append(\"path\")\n      .attr(\"class\", \"link\")\n      .attr(\"d\", this.diagonal);\n\n    var node = g.selectAll(\".node\")\n      .data(root.descendants())\n      .enter().append(\"g\")\n      .attr(\"class\", function(d) { return \"node\" + (d.children ? \" node--internal\" : \" node--leaf\"); })\n      .attr(\"transform\", function(d) { return \"translate(\" + d.y + \",\" + d.x + \")\"; });\n\n    node.append(\"circle\")\n      .attr(\"r\", 2.5);\n\n    node.append(\"text\")\n      .attr(\"dy\", 3)\n      .attr(\"x\", function(d) { return d.children ? -8 : 8; })\n      .style(\"text-anchor\", function(d) { return d.children ? \"end\" : \"start\"; })\n      .text(function(d) { return d.data.name });    \n  }\n\n    diagonal(d) {\n      return \"M\" + d.y + \",\" + d.x +\n        \"C\" + (d.parent.y + 100) + \",\" + d.x +\n        \" \" + (d.parent.y + 100) + \",\" + d.parent.x +\n        \" \" + d.parent.y + \",\" + d.parent.x;\n    }\n\n  // Collapse the node and all it's children\n  collapse(d) {\n    if (d.children) {\n      d._children = d.children\n      d._children.forEach(ea => this.collapse(ea))\n      d.children = null\n    }\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  onExtentChanged() {\n    lively.notify(\"extent changed\")\n    this.updateViz()\n  }\n\n  async livelyExample() {\n\n    this.setTreeData(await d3.json(lively4url + \"/src/components/demo/flare.json\"))\n\n  }\n\n  livelyMigrate(other) {\n    this.treeData = other.treeData\n    this.dataName = other.dataName\n  }\n\n}\n"]}