{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/components/d3/d3-bundleview.js"],"names":["Morph","d3","cop","isLeaf","d","children","length","DEFAULT_COLOR_LEAF_NODE","DEFAULT_COLOR_DIRECTORY","COLOR_NODE_HOVERED","COLOR_NODE_descendant","COLOR_NODE_ancestor","COLOR_NODE_target","COLOR_NODE_source","DEFAULT_IDENTIFIER","bundleviewCount","walkTree","root","beforeChildren","afterChildren","forEach","child","i","randomLeaf","index","parseInt","Math","random","Bundleview","zoomTransitionTime","sizeMetricTransitionTime","preprocessData","links","nodesByID","Map","node","set","id","link","source","get","target","getSizeMetricsFor","leaf","metrics","leafData","data","Object","keys","attributes","attributeName","Number","isFinite","result","constructor","input","rootContainer","component","bundleviewID","innerRadius","bundleTension","domainRoot","nodes","relations","console","log","width","height","radius","min","select","attr","realSVG","append","defs","gradient","svg","sizeMetrics","currentSizeMetric","partition","size","PI","hierrachy","hierarchy","sum","rootNode","rootArcWidth","rootArcOffset","sizeMetricChanged","value","lively","notify","newlyLayoutedData","descendants","path","transition","duration","attrTween","arcTween","call","colorStyleTween","n","styleNodeWith","lockedNode","currentColorMetric","hiddenLineSegment","hiddenArcTween","lineTween","sizeMetricSelection","html","selectAll","enter","property","on","getColorMetricsFor","useLinearColorScale","maxValue","NEGATIVE_INFINITY","minValue","POSITIVE_INFINITY","max","linearColorScale","scaleLinear","domain","range","interpolate","interpolateLab","violetToYellowColors","violetToYellowDomain","map","color","interpolateHcl","accumulateSize","reduce","acc","accumulateColor","sizeSum","values","Set","add","ordinalColorScale","scale","category20","Array","from","colorMetrics","name","styleTween","style","colorMetricChanged","colorMetricSelection","pieInverter","converterForInnerLayout","x","clamp","getArcInnerRadius","y1","getArcOuterRadius","y0","getArcMiddleRadius","outerMargin","arc","startAngle","x0","endAngle","x1","outerRadius","lowerHalf","middleAngle","polarToCartesian","centerX","centerY","angleInDegrees","angleInRadians","cos","y","sin","describeArc","start","end","arcSweep","join","radialLineGenerator","undefined","Error","stop","isNaN","radToDeg","invert","match","originalLine","radialLine","curve","curveBundle","beta","angle","line","nodeDisplayedAsRoot","enterElem","datum","hierarchicalEdgeBundleEnterElementGroup","highlightNode","unhighlightNode","event","shiftKey","openInspector","element","button","clickedOnNode","isLocked","unlockNode","lockNode","args","preventDefault","stopPropagation","each","stash","classed","zoomToNode","isDescendentOf","desc","ance","parent","arcTweenZoom","hiddenArcTweenZoom","labels","updateGradients","updateLabelText","lineTweenZoom","dataClick","debugColor","scaleOrdinal","schemeCategory10","tooltips","text","label","filter","bundleLinks","bundeledLinks","absoluteRadiantToDisplayedRelative","r","mA","mB","radiant","degrees","clearMarkers","descendant","ancestor","markDescendants","markAncestors","l","highlightedNode","colorMetric","x0a","x1a","getCommonArcTween","a","arcGenerator","oi","tween","t","b","xd","newdomain","interpolations","point","interpolatedPoints","rootDisplay","yd","commonArcTweenZoom","displayedRoot","foo","arcShare","D3Bundleview","initialize","windowTitle","addEventListener","evt","onExtentChanged","svgWidth","svgHeight","paint","w","h","ratio","percentage","sw","sh","left","top","transformOrigin","transform","bounds","getTotalGlobalBounds","display","json","JSON","parse","stringify","setData","getData","livelyPreMigrate","livelyMigrate","other","livelyInspect","contentNode","inspector","livelyPrepareSave","livelyExample","fetch","then"],"mappings":"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","file":"d3-bundleview.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport d3 from 'src/external/d3.v5.js';\nimport * as cop from 'src/client/ContextJS/src/contextjs.js'\n\n/*MD # D3 Bundleview \n\n![](d3-bundleview.png){height=400px}\n\nMD*/\n\n\nexport function isLeaf(d) { return !d.children || d.children.length === 0; }\n\nconst DEFAULT_COLOR_LEAF_NODE = \"#6666af\";\nconst DEFAULT_COLOR_DIRECTORY = \"#999999\";\n\nconst COLOR_NODE_HOVERED = 'steelblue';\nconst COLOR_NODE_descendant = '#dfd89d';\nconst COLOR_NODE_ancestor = '#efe8ad';\nconst COLOR_NODE_target = '#d62728';\nconst COLOR_NODE_source = '#2ca02c';\n\nconst DEFAULT_IDENTIFIER = 'default';\n\nvar bundleviewCount = 0;\n\nexport function walkTree(root, beforeChildren = () => {}, afterChildren = () => {}) {\n  beforeChildren(root);\n  if (root.children) {\n    root.children.forEach((child, i) => {\n      walkTree(child, beforeChildren, afterChildren);\n    })\n  }\n  afterChildren(root);\n}\n\nexport function randomLeaf(root) {\n  if (isLeaf(root)) { return root; }\n\n  var index = parseInt((Math.random() * root.children.length), 10);\n  return randomLeaf(root.children[index]);\n}\n\nexport class Bundleview {\n  static get zoomTransitionTime() { return 1000; }\n  static get sizeMetricTransitionTime() { return 1500; }\n\n  preprocessData(root, links) {\n    this.nodesByID = new Map();\n    walkTree(root, node => {\n      this.nodesByID.set(node.id, node); // #TODO this does not work any more, because the nodes here are not the nodes in the vis...\n    });\n    links.forEach(link => {\n      link.source = this.nodesByID.get(link.source);\n      link.target = this.nodesByID.get(link.target);\n    });\n    return [root, links];\n  }\n\n  getSizeMetricsFor(root) {\n\n    var leaf = randomLeaf(root);\n    var metrics = {\n      [DEFAULT_IDENTIFIER]: (d) => {\n        if (!isLeaf(d)) return 0\n        return 1\n      }\n    };\n    var leafData = leaf.data || leaf // #Hack, to work around initial cyclic dependeny....\n    Object.keys(leafData.attributes).forEach(attributeName => {\n      if (Number.isFinite(leafData.attributes[attributeName])) {\n        metrics[attributeName] = d => {\n          var data = d.data || d // I honestly don't know any more... :-(\n          if (!data.attributes) return 1;\n          var result = Number(data.attributes[attributeName])\n          // console.log(\"size metric for \" + attributeName + \" \" + result)\n          return result\n        };\n        walkTree(root, node => {\n          if (!isLeaf(node)) { return; }\n        });\n      }\n    });\n    return metrics;\n  }\n\n  constructor(input, rootContainer, component) {\n    this.component = component\n\n\n    var bundleviewID = bundleviewCount++;\n    // Declarations\n    var innerRadius = 0.65,\n      bundleTension = 0.85;\n\n    // Stuff that does something\n\n    var [domainRoot, links] = this.preprocessData(input.nodes, input.relations);\n\n\n    console.log('init bundleview with', root, links);\n\n    var width = 700,\n      height = 600,\n      radius = Math.min(width, height) / 2;\n    //var color = d3.scale.category20c();\n\n    rootContainer = d3.select(rootContainer);\n\n    rootContainer.attr(\"title\", \"\") // override outter tooltips\n\n\n    var realSVG = rootContainer.append(\"svg\");\n\n    // gradient as reference for hierarchical edge bundles\n    var defs = realSVG.append('defs');\n    var gradient = defs.append('linearGradient')\n      .attr(\"id\", 'bundleview-gradient')\n      // .attr('gradientTransform', 'translate(0.5, 0.5),rotate(270),translate(-0.5, -0.5)')\n      .attr('gradientTransform', 'rotate(270, 0.5, 0.5)')\n    ;\n    gradient.append('stop').attr('stop-color', '#2ca02c');\n    gradient.append('stop')\n      .attr('stop-color', '#d62728')\n      .attr('offset', '100%');\n\n    var svg = realSVG\n      .attr(\"width\", width)\n      .attr(\"height\", height)\n      .append(\"g\")\n      .attr(\"transform\", \"translate(\" + width / 2 + \",\" + height / 2 + \")\");\n\n    var sizeMetrics = this.getSizeMetricsFor(domainRoot);\n    let currentSizeMetric = sizeMetrics[DEFAULT_IDENTIFIER];\n\n    var partition = d3.partition()\n      .size([2 * Math.PI, 1])\n\n    var nodes = new Map()\n    var hierrachy = d3.hierarchy(domainRoot)\n\n    hierrachy.sum((d) => currentSizeMetric(d)) //\n    var rootNode = partition(hierrachy);\n    var root = rootNode // just to be sure!\n\n    var rootArcWidth = 2 * Math.PI; // initally it is the full circle\n    var rootArcOffset = 0; // we could also look into root...\n\n    walkTree(rootNode, node => {\n      nodes.set(node.data.id, node) // nodes are not the nodes of the data tree\n    })\n\n    function sizeMetricChanged(value) {\n      lively.notify(\"sizeMetrics \", value)\n      currentSizeMetric = value;\n\n      // we have to relayout...\n      hierrachy.sum((d) => currentSizeMetric(d)) //\n      rootNode = partition(hierrachy);\n      root = rootNode\n\n      var newlyLayoutedData = rootNode.descendants();\n\n      path\n        .data(newlyLayoutedData)\n        .transition()\n        .duration(Bundleview.sizeMetricTransitionTime)\n        .attrTween(\"d\", arcTween)\n        .call(colorStyleTween, \"fill\", n => styleNodeWith(n, lockedNode, currentColorMetric));\n\n      hiddenLineSegment\n        .data(newlyLayoutedData)\n        .transition()\n        .duration(Bundleview.sizeMetricTransitionTime)\n        .attrTween(\"d\", hiddenArcTween);\n\n      link\n        .transition()\n        .duration(Bundleview.sizeMetricTransitionTime)\n        .attrTween(\"d\", lineTween);\n    }\n    this.sizeMetricChanged = sizeMetricChanged;\n\n    let sizeMetricSelection = rootContainer.append(\"form\");\n    sizeMetricSelection\n      .html('Size Metric: ');\n    sizeMetricSelection.selectAll('label')\n      .html('Metrics')\n      .data(Object.keys(sizeMetrics))\n      .enter()\n      .append('label')\n      .html(d => d)\n      .append('input')\n      .attr(\"type\", 'radio')\n      .attr('name', 'mode')\n      .attr('value', d => d)\n      .property('checked', (d, i) => d === DEFAULT_IDENTIFIER)\n      .on('change', function() {\n        sizeMetricChanged(sizeMetrics[this.value]);\n      });\n\n    function getColorMetricsFor(node) {\n      var leaf = randomLeaf(node);\n      var metrics = {\n        [DEFAULT_IDENTIFIER]: d => isLeaf(d) ?\n          DEFAULT_COLOR_LEAF_NODE : DEFAULT_COLOR_DIRECTORY\n      };\n\n      Object.keys(leaf.data.attributes).forEach(attributeName => {\n        var useLinearColorScale = Number.isFinite(leaf.data.attributes[attributeName]);\n        if (useLinearColorScale) {\n          let maxValue = Number.NEGATIVE_INFINITY,\n            minValue = Number.POSITIVE_INFINITY;\n          walkTree(root, node => {\n            if (isLeaf(node)) {\n              maxValue = Math.max(maxValue, node.data.attributes[attributeName]);\n              minValue = Math.min(minValue, node.data.attributes[attributeName]);\n            }\n          });\n\n          let linearColorScale = d3.scaleLinear()\n            .domain([minValue, (minValue + maxValue) / 2, maxValue])\n            .range([\"red\", \"white\", \"green\"])\n            .range([\"#001e5e\", \"#f56f72\", \"#fffef5\"]) // darkblue to yellow\n            .interpolate(d3.interpolateLab);\n\n          let violetToYellowColors = [ // pale violet over blue and green to yellow\n            \"#6F3E4F\", \"#74455B\", \"#764D67\", \"#785573\", \"#775E7F\", \"#74678A\",\n            \"#707194\", \"#6A7B9E\", \"#6385A6\", \"#5A8FAC\", \"#5098B1\", \"#47A2B4\",\n            \"#3EACB5\", \"#3AB5B4\", \"#3BBEB2\", \"#42C7AD\", \"#4FCFA8\", \"#60D7A1\",\n            \"#72DE99\", \"#87E591\", \"#9CEB89\", \"#B3F180\", \"#CBF579\", \"#E3FA73\"\n          ];\n          let violetToYellowDomain = violetToYellowColors.map((color, index) =>\n            minValue + (maxValue - minValue) * index / (violetToYellowColors.length - 1)\n          );\n\n          linearColorScale = d3.scaleLinear()\n            .domain(violetToYellowDomain)\n            .range(violetToYellowColors)\n            .interpolate(d3.interpolateHcl);\n\n          linearColorScale = d3.scaleLinear()\n            .domain([minValue, maxValue])\n            .range([\"#ff7637\", \"#00a238\"])\n            .range([\"#ffffe5\", \"#0073a5\"])\n            .range([\"#0042a1\", \"#fffef5\"]) // darkblue to yellow\n            .range([\"#3a2265\", \"#ffffd3\"]) // darkblue to yellow v2\n            .range([\"#005083\", \"#ffffe3\"]) // greenish blue to yellow\n            //.range([\"#800026\", \"#ffffcc\"]) // red to yellow\n            //.range([\"#ffe48e\", \"#b60026\"]) // yellow to red (higher saturation)\n            //.range([\"#533F57\", \"#E7FC74\"]) // dark violet to yellow\n            .interpolate(d3.interpolateHcl);\n\n          metrics[attributeName] = d => {\n            if (isLeaf(d)) {\n              return linearColorScale(d.data.attributes[attributeName])\n            }\n\n            function accumulateSize(n) {\n              if (isLeaf(n)) {\n                return currentSizeMetric(n);\n              }\n              return n.children.reduce((acc, child) => acc + accumulateSize(child), 0);\n            }\n\n            function accumulateColor(n) {\n              if (isLeaf(n)) {\n                return n.data.attributes[attributeName];\n              }\n              var sizeSum = accumulateSize(n);\n              return n.children.reduce((acc, child) => {\n                return acc + accumulateColor(child) * accumulateSize(child)\n              }, 0) / sizeSum;\n            }\n            return linearColorScale(accumulateColor(d));\n          };\n        } else {\n          // categorical scale\n          let values = new Set();\n          walkTree(root, node => {\n            if (isLeaf(node)) {\n              values.add(node.data.attributes[attributeName]);\n            }\n          });\n          let ordinalColorScale = d3.scale.category20()\n            .domain(...(Array.from(values)));\n          metrics[attributeName] = d => isLeaf(d) ?\n            ordinalColorScale(d.data.attributes[attributeName]) :\n            DEFAULT_COLOR_DIRECTORY;\n        }\n      });\n      return metrics;\n    }\n\n\n    var colorMetrics = getColorMetricsFor(root);\n    let currentColorMetric = colorMetrics[DEFAULT_IDENTIFIER];\n\n    function colorStyleTween(transition, name, value) {\n      transition.styleTween(name, function(d, i) {\n        // TODO: aggregate values for directories\n        //if(!isLeaf(d)) { return null;}\n        return d3.interpolate(this.style[name], value(d));\n      });\n    }\n\n    function colorMetricChanged(scale) {\n      currentColorMetric = scale;\n      path.transition()\n        .duration(750)\n        .call(colorStyleTween, \"fill\", n => styleNodeWith(n, lockedNode, scale));\n    }\n    this.colorMetricChanged = colorMetricChanged;\n\n    let colorMetricSelection = rootContainer.append(\"form\");\n    colorMetricSelection\n      .html('Color Metric: ');\n    colorMetricSelection.selectAll('label')\n      .html('Metrics')\n      .data(Object.keys(colorMetrics))\n      .enter()\n      .append('label')\n      .html(d => d)\n      .append('input')\n      .attr(\"type\", 'radio')\n      .attr('name', 'mode')\n      .attr('value', d => d)\n      .property('checked', (d, i) => d === DEFAULT_IDENTIFIER)\n      .on('change', function() {\n        colorMetricChanged(colorMetrics[this.value]);\n      });\n\n    var pieInverter = d3.scaleLinear()\n      .domain([0, 1])\n      .range([1, innerRadius]);\n    var converterForInnerLayout = d3.scaleLinear()\n      .domain([0, 1])\n      .range([0, innerRadius]);\n\n    var x = d3.scaleLinear()\n      .domain([0, 2 * Math.PI])\n      .range([0, (2 - 0.00001) * Math.PI])\n      .clamp(true);\n\n    function getArcInnerRadius(d) {\n      return radius * (isLeaf(d) ?\n        innerRadius :\n        pieInverter(d.y1)\n      );\n    }\n\n    function getArcOuterRadius(d) {\n      return pieInverter(d.y0) * radius;\n    }\n\n    function getArcMiddleRadius(d) {\n      return (getArcInnerRadius(d) + getArcOuterRadius(d)) / 2;\n    }\n    var outerMargin = 10;\n\n\n    var arc = d3.arc()\n      .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x0))); })\n      .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x1))); })\n      .innerRadius(d => Math.min(radius + outerMargin, getArcInnerRadius(d)))\n      .outerRadius(d => Math.min(radius + outerMargin, getArcOuterRadius(d)));\n\n    function lowerHalf(d) {\n      var middleAngle = d.x0 + (d.x1 - d.x0) / 2;\n      return Math.PI / 2 < middleAngle && middleAngle < Math.PI * 1.5;\n    }\n\n    function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n      var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;\n\n      return {\n        x: centerX + (radius * Math.cos(angleInRadians)),\n        y: centerY + (radius * Math.sin(angleInRadians))\n      };\n    }\n\n    // http://stackoverflow.com/a/18473154/1152174\n    function describeArc(x, y, radius, startAngle, endAngle) {\n      var start = polarToCartesian(x, y, radius, endAngle);\n      var end = polarToCartesian(x, y, radius, startAngle);\n\n      var arcSweep = endAngle - startAngle <= 180 ? \"0\" : \"1\";\n\n\n      var d = [\n        \"M\", start.x, start.y,\n        \"A\", radius, radius, 0, arcSweep, 0, end.x, end.y\n      ].join(\" \");\n\n      return d;\n    }\n\n    function radialLineGenerator(d) {\n      if (d.x0 == undefined || d.x1 == undefined) throw new Error(\"x0 and x1 were undefined\")\n      // if (d.data.label != \"scale\") return \"\" // for debugging\n\n      var start = x(d.x0)\n      var stop = x(d.x1)\n      if (isNaN(start) || isNaN(stop)) {\n        debugger\n      }\n\n      var result = describeArc(\n        0, 0,\n        getArcMiddleRadius(d), // radius \n        radToDeg.invert(start), // start angle\n        radToDeg.invert(stop) // stop angle\n      );\n      if (result && result.match(\"NaN\")) {\n        debugger\n      }\n      return result\n    }\n\n\n    var radToDeg = d3.scaleLinear()\n      .domain([0, 360])\n      .range([0, 2 * Math.PI]);\n\n    var originalLine = d3.radialLine()\n      .curve(d3.curveBundle.beta(bundleTension))\n      .radius(function(d) {\n        return radius * (isLeaf(d) ?\n          innerRadius :\n          Math.max(0, Math.min(innerRadius, converterForInnerLayout(d.y1)))\n        );\n      })\n      .angle(function(d) {\n        return x(d.x0 + (d.x1 - d.x0) / 2); // Position curve in the center of pie piece\n      });\n    var line = function(d) {\n      var result = originalLine(d)\n      //           if (result.match(/NaN/)) {\n      //             debugger    \n\n      //             // again... debug into it\n      //             // originalLine(d)\n      //           }\n      return result\n    }\n\n    // Keep track of the node that is currently being displayed as the root.\n    var nodeDisplayedAsRoot = rootNode;\n\n\n    var enterElem = svg.datum(root).append(\"g\").selectAll(\"path\")\n      .data(rootNode.descendants())\n      .enter();\n\n\n    var hierarchicalEdgeBundleEnterElementGroup = enterElem.append(\"g\")\n      /* Invoke the tip in the context of your visualization */\n      //            .call(tip)\n      .on('mouseover', function(d) {\n\n\n        if (!lockedNode) {\n          highlightNode(d);\n        }\n      })\n      .on(\"mouseout\", d => {\n\n        // tooltip.classed(\"hidden\", true);\n        //                tip.hide(d);\n        if (!lockedNode) {\n          unhighlightNode();\n        }\n      })\n      .on('mousedown', function(d) {\n        if (d3.event.shiftKey) {\n          lively.openInspector({ element: this, d: d })\n          return\n        }\n\n        if (d3.event.button == 0) {\n          clickedOnNode(d)\n        } else {\n          // rightclick\n          if (isLocked(d)) {\n            unlockNode(d);\n          } else {\n            lockNode(d);\n          }\n        }\n\n\n      })\n      .on('contextmenu', function(d, ...args) {\n        d3.event.preventDefault();\n        d3.event.stopPropagation();\n      })\n\n\n    var path = hierarchicalEdgeBundleEnterElementGroup.append(\"path\")\n      //.attr(\"display\", function(d) { return null; return d.depth ? null : \"none\"; }) // hide inner ring\n      .attr(\"d\", arc)\n      //.style(\"fill\", function(d) { return color((d.children ? d : d.parent).label); })\n      .style(\"fill-rule\", \"evenodd\")\n      .each(stash)\n      .classed('node', true)\n      .classed('node--leaf', isLeaf)\n      .style('fill', currentColorMetric //d => isLeaf(d) ? null /*'#6666af'*/ : null\n      );\n    var node = path;\n\n\n    function zoomToNode(d) {\n\n\n      function isDescendentOf(desc, ance) {\n        return desc === ance || (desc.parent && isDescendentOf(desc.parent, ance));\n      }\n      if (lockedNode && !isDescendentOf(lockedNode, d)) {\n        unlockNode();\n      }\n\n      nodeDisplayedAsRoot = d;\n      \n      rootArcWidth = d.x1 - d.x0\n      rootArcOffset = d.x0\n      \n      path\n        .transition()\n        .duration(Bundleview.zoomTransitionTime)\n        .attrTween(\"d\", arcTweenZoom(nodeDisplayedAsRoot));\n\n      hiddenLineSegment\n        .transition()\n        .duration(Bundleview.zoomTransitionTime)\n        .attrTween(\"d\", hiddenArcTweenZoom(nodeDisplayedAsRoot));\n\n      labels\n        .classed('label--invisible', d => { return false; });\n\n      updateGradients();\n      \n      updateLabelText(labels)\n\n      link\n        .transition()\n        .duration(Bundleview.zoomTransitionTime)\n        .attrTween(\"d\", lineTweenZoom(nodeDisplayedAsRoot));\n    }\n\n    function clickedOnNode(d) {\n      if (isLeaf(d)) {\n        if (component.dataClick) {\n          component.dataClick(d, d3.event)\n        }\n        return console.log('clicked on leaf node', d);\n      } else {\n        return zoomToNode(d);\n      }\n    }\n\n    var hiddenLineSegment = defs.datum(root).selectAll(\"path\")\n      .data(rootNode.descendants())\n      .enter().append(\"path\")\n      .each(stash)\n      .attr('id', (d, i) => 'bundleview_node_' + bundleviewID + '_' + i)\n      .attr(\"d\", radialLineGenerator);\n\n    var debugColor = d3.scaleOrdinal(d3.schemeCategory10);\n\n    // FOR DEBUGGING \"hiddenLineSegment\"\n    // var debugLineSegment = svg.datum(root).append(\"g\").selectAll(\"path\")\n    //     .data(rootNode.descendants())\n    //     .enter().append(\"path\")\n    //     .each(stash)\n    //     .attr(\"fill\", \"none\" )\n    //     .attr(\"stroke\", \"rgba(250,0,0,0.5)\" )\n    //     .style('stroke-width', 4)\n    //     .style('stroke-opacity', 0.8)\n    //     .style('stroke', d => {debugger ; return d.data && debugColor(d.data.id) })\n    //     .attr(\"d\", radialLineGenerator);\n\n\n    var labels = hierarchicalEdgeBundleEnterElementGroup.append(\"text\")\n      .classed('bundle--text', true)\n      .append(\"textPath\")\n      .attr(\"startOffset\", \"50%\")\n      .style(\"text-anchor\", \"middle\") // \n      .style('alignment-baseline', 'central')\n      .attr(\"xlink:href\", (d, i) => '#bundleview_node_' + bundleviewID + '_' + i)\n\n    updateLabelText(labels)\n\n\n    var tooltips = hierarchicalEdgeBundleEnterElementGroup.append(\"title\")\n      .text(d => {\n        return `${d.data.label} id: ${d.data.id}` +\n          Object.keys(colorMetrics)\n          .filter(name => name !== DEFAULT_IDENTIFIER && d.data.attributes && d.data.attributes[name])\n          .map(name => ` ${name}: ${d.data.attributes[name]}`)\n          .join(\" \");\n      })\n\n    function bundleLinks(links) {\n\n      return links.map(link => {\n\n        return nodes.get(link.source.id).path(nodes.get(link.target.id)) // data tree !== node tree\n      })\n    }\n\n    var bundeledLinks = bundleLinks(links)\n    var link = svg.append(\"g\").selectAll(\".link\")\n\n      .data(bundeledLinks) //bundle(links)\n\n      .enter().append(\"path\")\n      // only for interactions?\n      // .each(d => {\n      //     if(d.length > 3) {\n      //         // remove the least common ancestor\n      //         let lastNode = d[0],\n      //             currentNode;\n      //         for(var i = 1; i < d.length; i++) {\n      //             currentNode = d[i];\n      //             if(currentNode.parent === lastNode) {\n      //                 d.splice(i-1, 1);\n      //                 break;\n      //             }\n      //             lastNode = d[i];\n      //         }\n      //     }\n      // })\n\n      .each(function(d) {\n        d.source = d[0];\n        d.target = d[d.length - 1];\n      })\n      .attr(\"class\", \"link\")\n      // .each(function(d) { debugger })  \n      .attr(\"d\", (d) => { var result = line(d); return result })\n       \n      .attr('stroke', d => `url(#bundleview-gradient_${d.source.data.id}_${d.target.data.id})`)\n\n      .on('click', function(d) {\n        \n        lively.openInspector({ element: this, d: d })\n      })\n\n      //.attr(\"d\", line)\n      .on('mouseover', function(d) {\n        console.log('over ' + d)\n      })\n      // .on(\"mouseout\", d => {\n      // })\n\n\n    function updateGradients() {\n      gradient\n      .attr('gradientTransform', function(d) {\n        function absoluteRadiantToDisplayedRelative(r) {\n          return (r / rootArcWidth) * 2 * Math.PI + rootArcOffset;\n        }\n        var mA = absoluteRadiantToDisplayedRelative((d.source.x0 + d.source.x1) / 2);\n        var mB = absoluteRadiantToDisplayedRelative((d.target.x0 + d.target.x1) / 2);\n        var radiant = ((mA + mB) / 2);\n        var degrees = (radiant / Math.PI * 180) + (mB > mA ? 0 : 180)\n        return `rotate(${degrees}, 0.5, 0.5)`;\n      });\n    }\n    var gradient = defs.selectAll('linearGradient').data(bundeledLinks)\n    .enter().append('linearGradient')\n      .attr(\"id\", d => `bundleview-gradient_${d.source.data.id}_${d.target.data.id}`)\n      // .attr('gradientTransform', 'translate(0.5, 0.5),rotate(270),translate(-0.5, -0.5)')\n    updateGradients()\n    gradient.append('stop').attr('stop-color', '#2ca02c');\n    gradient.append('stop')\n      .attr('stop-color', '#d62728')\n      .attr('offset', '100%');\n\n\n    var lockedNode;\n\n    function clearMarkers(nodes) {\n      // clear node markers\n      node\n        .each(function(n) { n.target = n.source = n.descendant = n.ancestor = false; });\n    }\n\n    function highlightNode(d) {\n\n      function markDescendants(n) {\n        if (n.children) {\n          n.children.forEach(child => {\n            child.descendant = true;\n            markDescendants(child);\n          });\n        }\n      }\n\n      function markAncestors(n) {\n        if (n.parent) {\n          markAncestors(n.parent);\n          n.parent.ancestor = true;\n        }\n      }\n\n      clearMarkers(node);\n\n      markDescendants(d);\n      markAncestors(d);\n\n      link\n        .each(function(d) {\n          d.source = d[0];\n          d.target = d[d.length - 1];\n        })\n        .classed(\"link--target\", function(l) {\n          if (l.target === d || l.target.descendant) {\n            return l.source.source = true;\n          }\n        })\n        .classed(\"link--source\", function(l) {\n          if (l.source === d || l.source.descendant) {\n            return l.target.target = true;\n          }\n        })\n        .classed(\"link--none\", function(l) {\n          if (l.target === d) { return false; }\n          if (l.target.descendant) { return false; }\n          if (l.source === d) { return false; }\n          if (l.source.descendant) { return false; }\n          return true;\n        });\n      //.filter(function(l) { return l.target === d || l.source === d; })\n      //.each(function() { this.parentNode.appendChild(this); });\n\n      node\n        .classed(\"node--hovered\", function(n) { return n === d; })\n        .classed(\"node--descendant\", function(n) { return n.descendant; })\n        .classed(\"node--ancestor\", function(n) { return n.ancestor; })\n        .classed(\"node--target\", function(n) { return n.target; })\n        .classed(\"node--source\", function(n) { return n.source; })\n        .classed(\"node--none\", function(n) {\n          if (n === d) { return false; }\n          if (n.target) { return false; }\n          if (n.source) { return false; }\n          if (n.descendant) { return false; }\n          if (n.ancestor) { return false; }\n          return true;\n        })\n        .style('fill', n => styleNodeWith(n, d, currentColorMetric));\n\n      labels\n        .classed(\"bundle--text--none\", function(n) {\n          if (n === d) { return false; }\n          if (n.target) { return false; }\n          if (n.source) { return false; }\n          if (n.descendant) { return false; }\n          if (n.ancestor) { return false; }\n          return true;\n        });\n    }\n\n    function styleNodeWith(n, highlightedNode, colorMetric) {\n      if (n === highlightedNode) { return COLOR_NODE_HOVERED; }\n      if (n.target) { return COLOR_NODE_target; }\n      if (n.source) { return COLOR_NODE_source; }\n      if (n.descendant && (!isLeaf(n) || currentColorMetric === colorMetrics[DEFAULT_IDENTIFIER])) { return COLOR_NODE_descendant; }\n      if (n.ancestor) { return COLOR_NODE_ancestor; }\n      return colorMetric(n);\n    }\n\n    function unhighlightNode() {\n      clearMarkers(node);\n\n      link\n        .classed(\"link--target\", false)\n        .classed(\"link--source\", false)\n        .classed(\"link--none\", false);\n\n      node\n        .classed(\"node--hovered\", false)\n        .classed(\"node--descendant\", false)\n        .classed(\"node--ancestor\", false)\n        .classed(\"node--target\", false)\n        .classed(\"node--source\", false)\n        .classed(\"node--none\", false)\n        .style('fill', currentColorMetric);\n\n      labels\n        .classed(\"bundle--text--none\", false);\n    }\n\n    function isLocked(d) {\n      return lockedNode === d;\n    }\n\n    function lockNode(d) {\n      lockedNode = d;\n      highlightNode(d);\n    }\n\n    function unlockNode(d) {\n      lockedNode = undefined;\n      unhighlightNode();\n    }\n\n    // Stash the old values for transition.\n    function stash(d) {\n      d.x0a = d.x0;\n      d.x1a = d.x1;\n    }\n\n    // Interpolate the arcs in data space.\n    function getCommonArcTween(a, i, arcGenerator) {\n      var oi = d3.interpolate({ x0: a.x0a, x1: a.x1a }, a);\n\n      function tween(t) {\n        var b = oi(t);\n        a.x0a = b.x0;\n        a.x1a = b.x1;\n        return arcGenerator(b);\n      }\n      if (i === 0) {\n        // If we are on the first arc, adjust the x domain to match the root node\n        // at the current zoom level. (We only need to do this once.)\n        if (nodeDisplayedAsRoot.x0 === undefined || nodeDisplayedAsRoot.x1 === undefined) {\n          debugger\n        }\n        var xd = d3.interpolate(x.domain(), [nodeDisplayedAsRoot.x0, nodeDisplayedAsRoot.x1]);\n        return function(t) {\n          var newdomain = xd(t)\n          if (isNaN(newdomain[0])) {\n            debugger\n          }\n          x.domain(newdomain);\n          return tween(t);\n        };\n      } else {\n        return tween;\n      }\n    }\n\n    function arcTween(d, i) { return getCommonArcTween(d, i, arc); }\n\n    function hiddenArcTween(d, i) { return getCommonArcTween(d, i, radialLineGenerator); }\n\n    // depends on that the .stash method was called for each point\n    function lineTween(a) {\n      var length = a.length,\n        interpolations = a.map(point => d3.interpolate({ x0: point.x0a, x1: point.x1a }, point));\n      // d3.interpolate({x0: 1, x1: 2},{x0: 5, x1: 8})(0.5)\n\n      return function(t) {\n        var interpolatedPoints = interpolations.map(i => i(t));\n        interpolatedPoints.forEach((b, index) => {\n          a[index].x0a = b.x0;\n          a[index].x1a = b.x1;\n        });\n        return line(interpolatedPoints);\n      };\n    }\n\n    // depends on that the .stash method was called for each point\n    function lineTweenZoom(rootDisplay) {\n      return function(a, i) {\n        var length = a.length,\n          interpolations = a.map(point => d3.interpolate({ x0: point.x0a, x1: point.x1a }, point));\n\n        function tween(t) {\n          // return line(t) // #TODO\n\n          var interpolatedPoints = interpolations.map(i => i(t));\n          interpolatedPoints.forEach((b, index) => {\n            a[index].x0a = b.x0;\n            a[index].x1a = b.x1;\n          });\n\n          return line(interpolatedPoints);\n        }\n\n        if (i === 0) {\n          var xd = d3.interpolate(x.domain(), [rootDisplay.x0, rootDisplay.x1]),\n            yd = d3.interpolate(converterForInnerLayout.domain(), [rootDisplay.y0, 1]);\n          return function(t) {\n            x.domain(xd(t));\n            converterForInnerLayout.domain(yd(t));\n            return tween(t);\n          };\n        } else {\n          return tween;\n        }\n      }\n    }\n\n    // When zooming: interpolate the scales.\n    function commonArcTweenZoom(displayedRoot, arcGenerator) {\n      var xd = d3.interpolate(x.domain(), [displayedRoot.x0, displayedRoot.x1]),\n        yd = d3.interpolate(pieInverter.domain(), [displayedRoot.y0, 1]);\n      return function(d, i) {\n        return i ?\n          function(t) { return arcGenerator(d); } :\n          function foo(t) {\n            x.domain(xd(t));\n            pieInverter.domain(yd(t));\n            return arcGenerator(d);\n          };\n      };\n    }\n\n    function arcTweenZoom(d) { return commonArcTweenZoom(d, arc); }\n\n    function hiddenArcTweenZoom(d) { return commonArcTweenZoom(d, radialLineGenerator); }\n\n    function updateLabelText(labels) {\n      labels.text(d => {\n        var arcShare = (d.x1 - d.x0) / rootArcWidth\n        if (arcShare < 0.02) return; // in ANGLE of pie piece, don't show to small rabel\n        return d.data.label\n      });\n    }\n  }\n}\n\nexport default class D3Bundleview extends Morph {\n  initialize() {\n    this.windowTitle = \"D3Bundleview\";\n\n    this.addEventListener('extent-changed', evt => this.onExtentChanged());\n  }\n\n  onExtentChanged() {\n    lively.notify('extent changed');\n\n    const svgWidth = 700,\n      svgHeight = 600;\n    const paint = (w, h) => {\n      var ratio = Math.min(w / svgWidth, h / svgHeight);\n\n      const percentage = 1.0;\n      var sw = (svgWidth * ratio) * percentage,\n        sh = (svgHeight * ratio) * percentage;\n\n      this.get('#rootContainer').style.left = (w - sw) / 2 + 'px';\n      this.get('#rootContainer').style.top = (h - sh) / 2 + 'px';\n\n      this.get('#rootContainer').style.transformOrigin = 'top left';\n      this.get('#rootContainer').style.transform = 'scale(' + (ratio * percentage) + ')';\n\n    }\n\n    const bounds = lively.getTotalGlobalBounds(this);\n\n    paint(bounds.width, bounds.height);\n  }\n\n  display(json) {\n    // the json becomes un-reusable later\n    this.json = JSON.parse(JSON.stringify(json));\n    new Bundleview(json, this.get('#rootContainer'), this);\n    this.onExtentChanged()\n  }\n\n  setData(data) {\n    this.display(data)\n  }\n\n  getData() {\n    return this.json\n  }\n\n  livelyPreMigrate() {\n    // is called on the old object before the migration\n  }\n\n  livelyMigrate(other) {\n    if (other.json) {\n      this.display(other.json);\n    }\n  }\n\n  livelyInspect(contentNode, inspector) {\n    // do nothing\n  }\n\n  livelyPrepareSave() {\n\n  }\n\n\n  async livelyExample() {\n    const json = await fetch(\n      'https://raw.githubusercontent.com/onsetsu/d3-bundleview/master/example/flare-compat.json').then(r => r.json());\n\n    this.display(json);\n  }\n}\n"]}