RDM: Adding a parent concept to dropdown doesn't include child concepts
Originally reported by: **Dennis Wuthrich (Bitbucket: [dwuthrich](http://bitbucket.org/dwuthrich), GitHub: [dwuthrich](http://github.com/dwuthrich))**

---

When adding a concept to a dropdown, the RDM should automatically add any child concepts to the dropdown as well.  Example: adding a concept such as "funerary" to the "Heritage Resource Type" dropdown only adds the selected concept, but not all the children under the funerary concept.

---
- Bitbucket: https://bitbucket.org/arches/arches3/issue/256

diff --git a/arches/app/media/css/arches.css b/arches/app/media/css/arches.css
index ba828dd5b..e9fe8a9e7 100644
--- a/arches/app/media/css/arches.css
+++ b/arches/app/media/css/arches.css
@@ -4929,7 +4929,7 @@ ul.jqtree-tree li.jqtree-ghost span.jqtree-line {
     stroke: #454545;
     stroke-width: 2px;
     fill: #dcecfa;
-    opacity: 1.;
+    opacity: 1;
     cursor: pointer;
 }
 
@@ -5003,6 +5003,7 @@ ul.jqtree-tree li.jqtree-ghost span.jqtree-line {
     fill: rgb(220, 236, 250);
     opacity: 1;
     cursor: pointer;
+    z-index: 200000;
 }
 
 .relatedlink {
diff --git a/arches/app/media/js/bindings/related-resources-graph.js b/arches/app/media/js/bindings/related-resources-graph.js
index 0b9fd728d..a073cec81 100644
--- a/arches/app/media/js/bindings/related-resources-graph.js
+++ b/arches/app/media/js/bindings/related-resources-graph.js
@@ -27,22 +27,19 @@ define([
             };
             var texts;
             var selectedNode;
-            var force = d3.layout.force()
-                .charge(-500)
-                .linkDistance(200)
-                .gravity(0.05)
-                .friction(0.55)
-                .linkStrength(function(l, i) {
-                    return 1;
-                })
-                .theta(0.8)
-                .size([width, height]);
 
+            var simulation = d3.forceSimulation(data.nodes)
+                .force("link", d3.forceLink(data.links).id(d => d.id).distance(function(d){
+                    return 200;
+                }))
+                .force("charge", d3.forceManyBody().strength(-500))
+                .force("center", d3.forceCenter(width / 2, height / 2)); 
+                
             var nodeList = options.nodeList;
             var currentResource = options.currentResource;
 
             var selectNode = function(d) {
-                vis.selectAll("circle")
+                nodesElement.selectAll("circle")
                     .attr("class", function(d1) {
                         var className = 'node-' + (d.isRoot ? 'current' : 'ancestor');
                         if (d1 === d) {
@@ -52,7 +49,7 @@ define([
                         }
                         return className;
                     });
-                vis.selectAll("line")
+                linksElement.selectAll("line")
                     .attr('class', function(l) {
                         return (l.source === d || l.target === d) ? 'linkMouseover' : 'link';
                     });
@@ -61,11 +58,11 @@ define([
             };
 
             var clearHover = function(d) {
-                vis.selectAll("line")
+                linksElement.selectAll("line")
                     .attr('class', function(l) {
                         return 'link';
                     });
-                vis.selectAll("circle").attr("class", function(d1) {
+                nodesElement.selectAll("circle").attr("class", function(d1) {
                     var className = 'node-' + (d1.isRoot ? 'current' : 'ancestor');
                     if (d1.selected()) {
                         className += '-selected';
@@ -75,7 +72,7 @@ define([
             };
 
             var hoverNode = function(d) {
-                vis.selectAll("circle")
+                nodesElement.selectAll("circle")
                     .attr("class", function(d1) {
                         var className = 'node-' + (d.isRoot ? 'current' : 'ancestor');
                         if (d1 === d) {
@@ -94,7 +91,7 @@ define([
                         }
                         return className;
                     });
-                vis.selectAll("line")
+                linksElement.selectAll("line")
                     .attr('class', function(l) {
                         return (l.source === d || l.target === d) ? 'linkMouseover' : 'link';
                     });
@@ -107,7 +104,7 @@ define([
                         selectNode(item);
                     } else {
                         nodeSelection.removeAll();
-                        vis.selectAll("circle")
+                        nodesElement.selectAll("circle")
                             .attr("class", function(d1) {
                                 return 'node-' + (d1.isRoot ? 'current' : 'ancestor');
                             });
@@ -128,37 +125,36 @@ define([
                 };
             };
 
-            var redraw = function() {
-                vis.attr("transform",
-                    "translate(" + d3.event.translate + ")" +
-                    " scale(" + d3.event.scale + ")");
-            };
-
             var svg = d3.select(element).append("svg:svg")
-                .attr("width", width)
-                .attr("height", height)
-                .call(d3.behavior.zoom().on("zoom", redraw));
-
-            var vis = svg.append('svg:g');
+                .attr("viewBox", [0, 0, width, height])
+                .call(d3.zoom()
+                    .extent([[0, 0], [width, height]])
+                    .scaleExtent([1, 8])
+                    .on("zoom", function(event) {
+                        groupElement.attr("transform", event.transform);
+                    }));
+
+            var groupElement = svg.append('svg:g');
+            var linksElement = groupElement.append('svg:g');
+            var nodesElement = groupElement.append('svg:g');
 
             var update = function() {
-                $(window).trigger("resize");
-                data = {
-                    nodes: force.nodes(data.nodes).nodes(),
-                    links: force.links(data.links).links()
-                };
                 var linkMap = linkMap;
+        
+                $(window).trigger("resize");
+                simulation.nodes(data.nodes);
+                simulation.force("link").links(data.links);
+                simulation.restart();
 
-                var link = vis.selectAll("line")
-                    .data(data.links);
-                link.enter()
-                    .insert("line", "circle")
+                var link = linksElement.selectAll("line")
+                    .data(data.links)
+                    .join("line")
                     .attr("class", "link")
-                    .on("mouseover", function(d) {
+                    .on("mouseover", function(event, d) {
                         var hoveredNodes = [];
                         var linkMap = linkMap;
                         d3.select(this).attr("class", "linkMouseover");
-                        vis.selectAll("circle").attr("class", function(d1) {
+                        nodesElement.selectAll("circle").attr("class", function(d1) {
                             var matrix;
                             var className = 'node-' + (d1.isRoot ? 'current' : 'ancestor');
                             if (d.source === d1 || d.target === d1) {
@@ -177,9 +173,9 @@ define([
                         });
                         nodeSelection(hoveredNodes);
                     })
-                    .on("mouseout", function(d) {
+                    .on("mouseout", function(event, d) {
                         d3.select(this).attr("class", "link");
-                        vis.selectAll("circle").attr("class", function(d1) {
+                        nodesElement.selectAll("circle").attr("class", function(d1) {
                             var className = 'node-' + (d1.isRoot ? 'current' : 'ancestor');
                             if (d1.selected()) {
                                 className += '-selected';
@@ -191,18 +187,11 @@ define([
                 link.exit()
                     .remove();
 
-                var drag = force.drag()
-                    .on("dragstart", function(d) {
-                        d3.event.sourceEvent.stopPropagation();
-                        d3.event.sourceEvent.preventDefault();
-                    });
-
-                var node = vis.selectAll("circle")
+                var node = nodesElement.selectAll("circle")
                     .data(data.nodes, function(d) {
                         return d.id;
-                    });
-                node.enter()
-                    .append("circle")
+                    })
+                    .join("circle")
                     .style('fill', function(d) {
                         return d.color;
                     })
@@ -212,8 +201,8 @@ define([
                     .attr("class", function(d) {
                         return 'node-' + (d.isRoot ? 'current' : 'ancestor');
                     })
-                    .on("mouseover", function(d) {
-                        vis.selectAll("circle")
+                    .on("mouseover", function(event, d) {
+                        nodesElement.selectAll("circle")
                             .attr("class", function(d1) {
                                 var className = 'node-' + (d.isRoot ? 'current' : 'ancestor');
                                 if (d1 === d) {
@@ -236,13 +225,13 @@ define([
                                 }
                                 return className;
                             });
-                        vis.selectAll("line")
+                        linksElement.selectAll("line")
                             .attr('class', function(l) {
                                 return (l.source === d || l.target === d) ? 'linkMouseover' : 'link';
                             });
                     })
-                    .on('mouseout', function(d) {
-                        vis.selectAll("circle")
+                    .on('mouseout', function(event, d) {
+                        nodesElement.selectAll("circle")
                             .attr("class", function(d1) {
                                 var className = 'node-' + (d.isRoot ? 'current' : 'ancestor');
                                 if (d1.selected()) {
@@ -260,15 +249,14 @@ define([
                         if (selectedState() === false) {
                             nodeSelection.removeAll();
                         }
-                        vis.selectAll("line")
+                        linksElement.selectAll("line")
                             .attr('class', 'link');
                     })
-
-                    .on("click", function(d) {
-                        if (!d3.event.defaultPrevented) {
+                    .on("click", function(event, d) {
+                        if (!event.defaultPrevented) {
                             d.loadcount(d.loadcount()+1);
                         }
-                        vis.selectAll("circle")
+                        nodesElement.selectAll("circle")
                             .attr("class", function(d1) {
                                 var className = 'node-' + (d.isRoot ? 'current' : 'ancestor');
                                 if (d1 === d) {
@@ -289,24 +277,41 @@ define([
                                 }
                                 return className;
                             });
-                        vis.selectAll("line")
+                        linksElement.selectAll("line")
                             .attr('class', function(l) {
                                 return (l.source === d || l.target === d) ? 'linkMouseover' : 'link';
                             });
                         updateNodeInfo(d);
                     })
-                    .call(drag);
-                node.exit()
-                    .remove();
+                    .call(d3.drag()
+                        .on("start", dragstarted)
+                        .on("drag", dragged)
+                        .on("end", dragended));
+
+                    function dragstarted(event, d) {
+                        if (!event.active) simulation.alphaTarget(0.3).restart();
+                        d.fx = d.x;
+                        d.fy = d.y;
+                    }
+                    
+                    function dragged(event, d) {
+                        d.fx = event.x;
+                        d.fy = event.y;
+                    }
+                    
+                    function dragended(event, d) {
+                        if (!event.active) simulation.alphaTarget(0);
+                        d.fx = null;
+                        d.fy = null;
+                    }    
 
                 if (texts) {
                     texts.remove();
                 }
 
-                texts = vis.selectAll("text.nodeLabels")
-                    .data(data.nodes);
-
-                texts.enter().append("text")
+                texts = nodesElement.selectAll("text.nodeLabels")
+                    .data(data.nodes)
+                    .join("text")
                     .attr("class", function(d){
                         return d.isRoot ? 'root-node-label' : 'nodeLabels';
                     })
@@ -315,7 +320,7 @@ define([
                         return d.name;
                     });
 
-                force.on("tick", function() {
+                simulation.on("tick", function() {
                     link.attr("x1", function(d) {
                             return d.source.x;
                         })
@@ -346,7 +351,6 @@ define([
 
                 });
 
-                force.start();
             };
 
             var updateNodeInfo = function(d) {
@@ -574,7 +578,7 @@ define([
                 var h = $el.parent().height();
                 svg.attr("width", w);
                 svg.attr("height", h);
-                force.size([w, h]);
+                svg.attr("viewBox", [0, 0, w, h]);
             }).trigger("resize");
 
 
diff --git a/arches/app/media/js/bindings/time-wheel.js b/arches/app/media/js/bindings/time-wheel.js
index 78d1c6c35..132fbcd32 100644
--- a/arches/app/media/js/bindings/time-wheel.js
+++ b/arches/app/media/js/bindings/time-wheel.js
@@ -6,40 +6,34 @@ define([
 ], function($, _, ko, d3) {
     var width = 300;
     var height = 300;
+    var radius = Math.min(width, height) / 8;
     ko.bindingHandlers.timeWheel = {
         init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
-            var radius = Math.min(width, height) / 2;
             var $el = $(element);
 
-            var vis = d3.select($el.find('.chart')[0]).append("svg")
+            var g = d3.select($el.find('.chart')[0]).append("svg")
                 .attr("preserveAspectRatio", "xMinYMin meet")
-                .attr("viewBox", "0 0 " + width + " " + height)
+                .attr("viewBox", [0, 0, width ,height])
                 .classed("svg-content", true)
                 .append("g")
                 .attr("class", "container")
                 .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
 
-            vis.append("svg:circle")
-                .attr("r", "0")
-                .style("opacity", 0);
-
-            ko.utils.domData.set(element, 'vis', vis);
+            ko.utils.domData.set(element, 'vis', g);
         },
 
         update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
-            var radius = Math.min(width, height) / 2;
-            var colortheme = d3.scale.category20c();
-            var x = d3.scale.linear()
-                .range([0, 2 * Math.PI]);
-            var y = d3.scale.sqrt()
-                .range([0, radius]);
+            // see https://observablehq.com/@d3/zoomable-sunburst for the example that informed much of this code
+            // also see http://bl.ocks.org/ropeladder/83915942ac42f17c087a82001418f2ee for the click/dblclick code
+
+            var colortheme = d3.scaleOrdinal(d3.schemeCategory10);
             var $el = $(element);
             var opts = ko.unwrap(valueAccessor());
             var configJSON = opts.config();
             var breadCrumb = opts.breadCrumb;
             var selectedPeriod = opts.selectedPeriod;
             var total = 0;
-            var data = null;
+            var depth = 0;
 
             // Breadcrumb dimensions: width, height, spacing, width of tip/tail.
             var b = {
@@ -49,91 +43,65 @@ define([
                 t: 10
             };
 
-            var vis = ko.utils.domData.get(element, 'vis');
-            vis.on("mouseleave", function () {
+            selectedPeriod.subscribe(function(d) {
+                if (!d) {
+                    clearHighlight();
+                }
+            })
+
+            var g = ko.utils.domData.get(element, 'vis');
+            g.on("mouseleave", function (event) {
                 var d = selectedPeriod();
                 if (d) {
-                    highlightPeriod(d);
+                    highlightPeriod(event, d);
                 } else {
                     clearHighlight();
                 }
             });
 
-            var partition = d3.layout.partition()
-                .sort(function(d, e) {
-                    return d.start - e.start;
-                })
-                .value(function(d) {
-                    return d.size;
-                });
-
-            if (configJSON) {
-                data = partition.nodes(configJSON);
-                total = _.find(data, function(d) {
-                    return d.name === 'root';
-                }).value;
-                breadCrumb(total + ' date values');
+            var partition = function(data) {
+                var root = d3.hierarchy(data)
+                    .sort(function(d, e) {
+                        return d.start - e.start;
+                    })
+                    .sum( function(d) { 
+                        // we only want leaf nodes to specify a size
+                        // otherwise the sunburst chart will be sparcely populated
+                        return d.children.length > 0 ? 0 : d.size;
+                    });
+                depth = root.height + 1;
+                return d3.partition()
+                    .size([2 * Math.PI, root.height + 1])
+                    (root);
             }
 
-            var arc = d3.svg.arc()
-                .startAngle(function(d) {
-                    return Math.max(0, Math.min(2 * Math.PI, x(d.x)));
-                })
-                .endAngle(function(d) {
-                    return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx)));
-                })
-                .innerRadius(function(d) {
-                    return Math.max(0, y(d.y));
-                })
-                .outerRadius(function(d) {
-                    return Math.max(0, y(d.y + d.dy));
-                });
-
-
-            var arcTween = function(d) {
-                var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
-                    yd = d3.interpolate(y.domain(), [d.y, 1]),
-                    yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
-                return function(d, i) {
-                    return i ?
-                        function(t) {
-                            return arc(d);
-                        } :
-                        function(t) {
-                            x.domain(xd(t));
-                            y.domain(yd(t)).range(yr(t));
-                            return arc(d);
-                        };
-                };
-            };
-
-            function clickcancel() {
+            var d3ClickManager = function() {
                 // we want to a distinguish single/double click
                 // details http://bl.ocks.org/couchand/6394506
-                var event = d3.dispatch('click', 'dblclick');
+                var dispatcher = d3.dispatch('click', 'dblclick');
                 function cc(selection) {
                     var down, tolerance = 5, last, wait = null, args;
                     // euclidean distance
                     function dist(a, b) {
                         return Math.sqrt(Math.pow(a[0] - b[0], 2), Math.pow(a[1] - b[1], 2));
                     }
-                    selection.on('mousedown', function() {
-                        down = d3.mouse(document.body);
+                    selection.on('mousedown', function(event) {
+                        down = d3.pointer(event);
                         last = +new Date();
                         args = arguments;
                     });
-                    selection.on('mouseup', function() {
-                        if (dist(down, d3.mouse(document.body)) > tolerance) {
+                    selection.on('mouseup', function(event) {
+                        if (dist(down, d3.pointer(event)) > tolerance) {
                             return;
                         } else {
                             if (wait) {
                                 window.clearTimeout(wait);
                                 wait = null;
-                                event.dblclick.apply(this, args);
+                                dispatcher.apply("dblclick", this, args);
                             } else {
                                 wait = window.setTimeout((function() {
                                     return function() {
-                                        event.click.apply(this, args);
+                                        dispatcher.apply("click", this, args);
                                         wait = null;
                                     };
                                 })(), 300);
@@ -141,77 +109,35 @@ define([
                         }
                     });
                 };
-                return d3.rebind(cc, event, 'on');
-            }
-            var cc = clickcancel();
-
-            var updateChart = function (data) {
-                // DATA JOIN - Join new data with old elements, if any.
-                var gs = vis.selectAll("g").data(data);
-
-                // ENTER
-                var g = gs.enter()
-                    .append("g")
-                    .on("mouseover", highlightPeriod)
-                    .call(cc);
-
-                // click and dblclick step on each other so we need this
-                cc.on("click", function(d) {
-                    selectedPeriod(d);
-                })
-                .on("dblclick", dblclick)
-
-                // UPDATE
-                var path = g.append("path");
-
-                gs.select('path')
-                    .style("fill", function(d) {
-                        return colortheme((d.children ? d : d.parent).name);
-                    })
-                    .each(function(d) {
-                      this.x0 = d.x;
-                      this.dx0 = d.dx;
-                    })
-                    .transition().duration(500)
-                    .attr("d", arc);
-
-
-                // EXIT - Remove old elements as needed.
-                gs.exit().transition().duration(500).style("fill-opacity", 1e-6).remove();
-
-            }
-
-            function dblclick(d) {
-                // console.log(d)
-                // fade out all text elements
-                if (d.size !== undefined) {
-                  d.size += 100;
+                // Copies a variable number of methods from source to target.
+                var d3rebind = function(target, source) {
+                    var i = 1, n = arguments.length, method;
+                    while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
+                    return target;
                 };
 
-                vis.selectAll('path').transition()
-                  .duration(750)
-                  .attrTween("d", arcTween(d))
-                  .each("end", function(e, i) {
-                      // check if the animated element's data e lies within the visible angle span given in d
-                      if (e.x >= d.x && e.x < (d.x + d.dx)) {
-                          // get a selection of the associated text element
-                          var arcText = d3.select(this.parentNode).select("text");
-                          // fade in the text element and recalculate positions
-                          arcText.transition().duration(750)
-                              .attr("opacity", 1)
-                              .attr("transform", function() {
-                                  return "rotate(" + computeTextRotation(e) + ")"
-                              })
-                              .attr("x", function(d) {
-                                  return y(d.y);
-                              });
-                      }
-                });
+                // Method is assumed to be a standard D3 getter-setter:
+                // If passed with no arguments, gets the value.
+                // If passed with arguments, sets the value and returns the target.
+                function d3_rebind(target, source, method) {
+                    return function() {
+                    var value = method.apply(source, arguments);
+                    return value === source ? target : value;
+                    };
+                }
+                return d3rebind(cc, dispatcher, 'on');
             }
+            var clickmanager = d3ClickManager();
+            clickmanager.on("click", function(event, d) {
+                selectedPeriod(d);
+            })
+            .on("dblclick", function(event, d) {
+                dblclick(d);
+            });
 
-            function highlightPeriod(d) {
-                count = d.size;
-                if (d.size < 1) {
+            function highlightPeriod(event, d) {
+                count = d.data.size;
+                if (d.data.size < 1) {
                     count = "< 1";
                 }
 
@@ -221,7 +147,7 @@ define([
                 var sequenceArray = [];
                 var current = d;
                 while (current.parent) {
-                    sequenceArray.unshift(current.name);
+                    sequenceArray.unshift(current.data.name);
                     current = current.parent;
                 }
 
@@ -234,26 +160,15 @@ define([
                     .style("opacity", 0.3);
 
                 // Then highlight only those that are an ancestor of the current segment.
-                vis.selectAll("path")
-                    .filter(function(node) {
-                        return (sequenceArray.indexOf(node.name) >= 0);
-                    })
-                    .style("opacity", 1);
+                path.filter(function(d) {
+                    return (sequenceArray.indexOf(d.data.name) >= 0);
+                })
+                .style("opacity", 1);
             }
 
             function clearHighlight(){
-                // Deactivate all segments during transition.
-                d3.selectAll("path").on("mouseover", null);
-
-                // Transition each segment to full opacity and then reactivate it.
                 d3.selectAll("path")
-                    .transition()
-                    .duration(1000)
-                    .style("opacity", 1)
-                    .each("end", function() {
-                        d3.select(this).on("mouseover", highlightPeriod);
-                    });
-
+                    .style("opacity", 1);
                 breadCrumb(total + ' date values')
             }
 
@@ -263,8 +178,91 @@ define([
                 }
             })
 
-            if(data){
-                updateChart(data);
+            if(!!configJSON){
+                var root = partition(configJSON);
+                total = configJSON.size;
+                breadCrumb(total + ' date values');
+    
+                root.each(function(d) {
+                    d.current = d;
+                });
+
+                var arc = d3.arc()
+                    .startAngle(function(d){
+                        return d.x0;
+                    })
+                    .endAngle(function(d){
+                        return d.x1;
+                    })
+                    .padAngle(function(d){
+                        return Math.min((d.x1 - d.x0) / 2, 0.005);
+                    })
+                    .padRadius(radius * 1.5)
+                    .innerRadius(function(d) {
+                        return d.y0 * radius;
+                    })
+                    .outerRadius(function(d) {
+                        return Math.max(d.y0 * radius, d.y1 * radius - 1);
+                    })
+
+                var path = g.append("g")
+                    .selectAll("path")
+                    .data(root.descendants().slice(1))
+                    .join("path")
+                    .attr("fill", d => { while (d.depth > 1) d = d.parent; return colortheme(d.data.name); })
+                    .attr("fill-opacity", d => arcVisible(d.current) ? (d.children ? 0.6 : 0.4) : 0)
+                    .attr("d", d => arc(d.current))
+                    .on("mouseover", highlightPeriod)
+                    .call(clickmanager);
+    
+                path.filter(d => d.children)
+                    .style("cursor", "pointer")
+
+                var format = d3.format(",d");
+    
+                path.append("title")
+                    .text(d => `${d.ancestors().map(d => d.data.name).reverse().join("/")}\n${format(d.value)}`);
+    
+                var parent = g.append("circle")
+                    .datum(root)
+                    .attr("r", radius)
+                    .attr("fill", "none")
+                    .attr("pointer-events", "all")
+                    .call(clickmanager);
+    
+                function dblclick(p) {
+                    parent.datum(p.parent || root);
+    
+                    root.each(d => d.target = {
+                    x0: Math.max(0, Math.min(1, (d.x0 - p.x0) / (p.x1 - p.x0))) * 2 * Math.PI,
+                    x1: Math.max(0, Math.min(1, (d.x1 - p.x0) / (p.x1 - p.x0))) * 2 * Math.PI,
+                    y0: Math.max(0, d.y0 - p.depth),
+                    y1: Math.max(0, d.y1 - p.depth)
+                    });
+    
+                    var t = g.transition().duration(750);
+    
+                    // Transition the data on all arcs, even the ones that aren’t visible,
+                    // so that if this transition is interrupted, entering arcs will start
+                    // the next transition from the desired position.
+                    path.transition(t)
+                        .tween("data", d => {
+                            var i = d3.interpolate(d.current, d.target);
+                            return t => d.current = i(t);
+                        })
+                        .filter(function(d) {
+                            return +this.getAttribute("fill-opacity") || arcVisible(d.target);
+                        })
+                        .attr("fill-opacity", d => arcVisible(d.target) ? (d.children ? 0.6 : 0.4) : 0)
+                        .attrTween("d", d => () => arc(d.current));
+    
+                }
+                
+                function arcVisible(d) {
+                    return true;
+                    return d.y1 <= depth && d.y0 >= 1 && d.x1 > d.x0;
+                }
+
             }
 
         }
diff --git a/arches/app/media/js/viewmodels/resource-instance-select.js b/arches/app/media/js/viewmodels/resource-instance-select.js
index 55d35488e..3f56580a5 100644
--- a/arches/app/media/js/viewmodels/resource-instance-select.js
+++ b/arches/app/media/js/viewmodels/resource-instance-select.js
@@ -16,8 +16,22 @@ define([
         this.renderContext = params.renderContext;
         this.multiple = params.multiple || false;
         this.value = params.value || undefined;
-        this.graphIsSemantic = params.graph ? !!params.graph.ontologyclass : false;
-        this.rootOntologyClass = params.graph ? params.graph.ontologyclass : undefined;
+        this.rootOntologyClass = '';
+        // depending on where the widget is being rendered there are several ways to get the ontologyclass 
+        if(params.state !== 'display_value'){
+            if(!!params.node.graph.get('root')){
+                this.rootOntologyClass = params.node.graph.get('root').ontologyclass();
+            }else if(!!params.graph && !!params.graph.ontologyclass){
+                this.rootOntologyClass = params.graph.ontologyclass;
+            }else {
+                $.getJSON('/graphs/' + params.node.get('graph_id'))
+                    .done(function(data){
+                        self.rootOntologyClass = data.graph.root.ontologyclass;
+                        self.graphIsSemantic = !!self.rootOntologyClass;
+                    });
+            }
+        }
+        this.graphIsSemantic = !!this.rootOntologyClass;
         this.resourceInstanceDisplayName = params.form && params.form.displayname ? params.form.displayname() : '';
         this.makeFriendly = ontologyUtils.makeFriendly;
         this.getSelect2ConfigForOntologyProperties = ontologyUtils.getSelect2ConfigForOntologyProperties;
diff --git a/arches/app/media/js/views/components/search/time-filter.js b/arches/app/media/js/views/components/search/time-filter.js
index c3b9e6c96..a2a45d69d 100644
--- a/arches/app/media/js/views/components/search/time-filter.js
+++ b/arches/app/media/js/views/components/search/time-filter.js
@@ -46,8 +46,8 @@ function($, _, ko, moment, BaseFilter, arches) {
                 this.graph_models = ko.observableArray();
                 this.selectedPeriod.subscribe(function (d) {
                     if (d) {
-                        var start = moment(0, 'YYYY').add(d.start, 'years').format(this.format);
-                        var end = moment(0, 'YYYY').add(d.end, 'years').format(this.format);
+                        var start = moment(0, 'YYYY').add(d.data.start, 'years').format(this.format);
+                        var end = moment(0, 'YYYY').add(d.data.end, 'years').format(this.format);
                         this.dateRangeType('custom');
                         this.filter.fromDate(end);
                         this.filter.toDate(end);
diff --git a/arches/app/media/js/views/concept-graph.js b/arches/app/media/js/views/concept-graph.js
deleted file mode 100644
index f8060da56..000000000
--- a/arches/app/media/js/views/concept-graph.js
+++ /dev/null
@@ -1,294 +0,0 @@
-define(['jquery', 'backbone', 'd3'], function($, Backbone) {
-    return Backbone.View.extend({
-
-        initialize: function() {
-            var self = this,
-                canvasd3 = this.$el.find(".svg"),
-                width = self.$el.parent().width(),
-                height = canvasd3.height(),
-                force = d3.layout.force()
-                    .charge(function(node, i) {
-                        if (node.type == 'Related'){
-                            return -3000;
-                        }
-                        return -1550;
-                    })
-                    .linkDistance(90)
-                    .gravity(0.05)
-                    .friction(0.55)
-                    .linkStrength(function(l, i) {
-                        return 1;
-                    })
-                    .theta(0.8)
-                    .size([width, height]),
-
-                svg = d3.select(canvasd3[0]).append("svg")
-                    .attr("width", width)
-                    .attr("height", height)
-                    .call(d3.behavior.zoom().on("zoom", function() {
-                        svg.attr("transform",
-                            "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");
-                    }))
-                    .append('svg:g'),
-
-                data = JSON.parse(this.$el.find('.graph_json_content').html()),
-
-                drag = force.drag()
-                    .on("dragstart", self.dragstart),
-
-                link = svg.selectAll(".link")
-                    .data(data.links)
-                    .enter().append("line")
-                    .attr("class", function(d) {
-                        if (d.relationship == "related") {
-                            return 'relatedlink';
-                        } else {
-                            return 'link';
-                        }
-                    })
-                    .attr("marker-end", "url(#arrowGray)")
-                    //add interactivity
-                    .on("mouseover", function(d) {
-                        d3.select(this)
-                            .attr("class", function(d) {
-                                if (d.relationship == "related") {
-                                    return 'linkMouseover relatedlink';
-                                } else {
-                                    return 'linkMouseover link';
-                                }
-                            });
-
-                        //add tooltup to show edge property
-                        link.append("title")
-                            .text(function(d) {
-                                return d.relationship;
-                            });
-                    })
-                    .on("mouseout", function(d) {
-                        d3.select(this)
-                            .attr("class", function(d) {
-                                if (d.relationship == "related") {
-                                    return 'relatedlink';
-                                } else {
-                                    return 'link';
-                                }
-                            });
-                    }),
-
-                node = svg.selectAll(".node").data(data.nodes)
-                    .enter().append("circle")
-                    .attr("r", function(d) {
-                        if (d.type == "Current") {
-                            return 30;
-                        } else if (d.type == "Ancestor" || d.type == "Root") {
-                            return 22;
-                        } else if (d.type == "Descendant") {
-                            return 16;
-                        } else {
-                            return 8;
-                        }
-                    })
-                    //.attr("class", "node")
-                    .attr("class", function(d) {
-                        if (d.type == "Current") {
-                            return "node-current";
-                        } else if (d.type == "Ancestor" || d.type == "Root") {
-                            return "node-ancestor";
-                        } else {
-                            return "node-descendent";
-                        }
-                    })
-                    .on("mouseover", function() {
-                        d3.select(this).attr("class", function(d) {
-                            if (d.type == "Current") {
-                                return "node-current-over";
-                            } else if (d.type == "Ancestor") {
-                                return "node-ancestor-over";
-                            } else {
-                                return "node-descendent-over";
-                            }
-                        });
-                    })
-                    .on("mouseout", function() {
-                        d3.select(this).attr("class", function(d) {
-                            //Update node class
-                            if (d.type == "Current") {
-                                return "node-current";
-                            } else if (d.type == "Ancestor") {
-                                return "node-ancestor";
-                            } else {
-                                return "node-descendent";
-                            }
-                        });
-                    })
-                    .on("click", function(d) {
-                        //Get the Node Name
-                        var nodeName = d.name;
-
-                        d3.select(self.$el.find('.node_info')[0])
-                            .select(".concept-label")
-                            .text(nodeName);
-                        $('.concept-label').data('conceptid', d.concept_id);
-
-                        $('.graph-concept-delete-link').hide();
-                        if (d.type === "Descendant") {
-                            $('.graph-concept-delete-link').data('id', d.concept_id);
-                            $('.graph-concept-delete-link').show();
-                        }
-
-                        //Show the form
-                        d3.select(self.$el.find('.node_info')[0]).classed("hidden", false);
-
-                        //Highlight the selected node.  Start by clearing the "node-selected" class from any previously clicked node
-                        d3.selectAll("circle").classed("node-selected", false);
-
-
-                        //Append the "node-selected" class to the clicked node
-                        if (d3.select(this).classed("node-ancestor-over")) {
-                            d3.select(this).attr("class", "node-ancestor node-selected");
-                        } else if (d3.select(this).classed("node-descendent-over")) {
-                            d3.select(this).attr("class", "node-descendent node-selected");
-                        } else if (d3.select(this).classed("node-current-over")) {
-                            d3.select(this).attr("class", "node-current node-selected");
-                        }
-                    })
-                    .on("dblclick", self.dblclick)
-                    .call(drag),
-
-                texts = svg.selectAll("text.nodeLabels")
-                    .data(data.nodes)
-                    .enter().append("text")
-                    .attr("class", function(d) {
-                        if (d.type == "Current") {
-                            return "node-current-label";
-                        } else if (d.type == "Ancestor" || d.type == "Root") {
-                            return "node-ancestor-label";
-                        } else {
-                            return "node-descendent-label";
-                        }
-                    })
-                    .attr("dy", ".35em")
-                    .text(function(d) {
-                        return d.name;
-                    }),
-
-                labels = svg.selectAll('text.edgeLabels')
-                    .data(data.links)
-                    .enter().append('text')
-                    .attr('class', 'edgeLabels');
-
-            data.nodes.forEach(function(d, i) {
-                if (d.type === 'Current') {
-                    d.fixed = true;
-                    d.x = width * 0.55;
-                    d.y = height * 0.55;
-                }
-                if (d.type === 'Root') {
-                    d.fixed = false;
-                    d.x = width * 0.1;
-                    d.y = height * 0.1;
-                }
-            });
-
-            //Manage D3 graph on resize of window
-            $(window).on("resize", function() {
-                var targetWidth = self.$el.width(),
-                    targetHeight = self.$el.height();
-                canvasd3.attr("width", targetWidth);
-                canvasd3.attr("height", targetHeight);
-
-                //Start the simulation
-                force.nodes(data.nodes)
-                    .links(data.links)
-                    .start();
-            }).trigger("resize");
-
-            svg.append('defs')
-                .append("svg:marker")
-                .attr("id", "arrowGray")
-                .attr("viewBox", "0 0 10 10")
-                .attr("refX", "28")
-                .attr("refY", "5")
-                .attr("markerUnits", "strokeWidth")
-                .attr("markerWidth", "5")
-                .attr("markerHeight", "2")
-                .attr("orient", "auto")
-                .append("svg:path")
-                .attr("d", "M 0 0 L 10 5 L 0 10 z")
-                .attr("fill", "#BBBBBB");
-
-            force.on("tick", function(e) {
-                //Push nodes toward their designated focus.
-                var k = 0.1 * e.alpha,
-                    foci = {
-                        "Root": {
-                            x: 0,
-                            y: 0
-                        }, // set to fixed above
-                        "Ancestor": {
-                            x: width * 0.1,
-                            y: height * 0.1
-                        },
-                        "Current": {
-                            x: 150,
-                            y: 250
-                        }, // set to fixed above
-                        "Descendant": {
-                            x: width * 0.55,
-                            y: height * 1.4
-                        },
-                        "Related": {
-                            x: width * 3.5,
-                            y: height * .5
-                        }
-                    };
-
-                data.nodes.forEach(function(o, i) {
-                    o.y += (foci[o.type].y - o.y) * k;
-                    o.x += (foci[o.type].x - o.x) * k;
-                });
-
-                link.attr("x1", function(d) {
-                        return d.source.x;
-                    })
-                    .attr("y1", function(d) {
-                        return d.source.y;
-                    })
-                    .attr("x2", function(d) {
-                        return d.target.x;
-                    })
-                    .attr("y2", function(d) {
-                        return d.target.y;
-                    });
-
-                node.attr("cx", function(d) {
-                        return d.x;
-                    })
-                    .attr("cy", function(d) {
-                        return d.y;
-                    });
-
-                texts.attr("x", function(d) {
-                        return d.x;
-                    })
-                    .attr("y", function(d) {
-                        return d.y;
-                    });
-
-                labels.attr("x", function(d) {
-                        return (d.source.x + d.target.x) / 2;
-                    })
-                    .attr("y", function(d) {
-                        return (d.source.y + d.target.y) / 2;
-                    });
-            });
-
-        },
-        dblclick: function(d) {
-            d3.select(this).classed("fixed", d.fixed = false);
-        },
-        dragstart: function(d) {
-            d3.select(this).classed("fixed", d.fixed = true);
-        }
-    });
-});
\ No newline at end of file
diff --git a/arches/app/media/js/views/graph-designer.js b/arches/app/media/js/views/graph-designer.js
index aa699476c..718b9e7d6 100644
--- a/arches/app/media/js/views/graph-designer.js
+++ b/arches/app/media/js/views/graph-designer.js
@@ -8,7 +8,6 @@ define([
     'viewmodels/alert-json',
     'models/graph',
     'models/report',
-    'views/graph/graph-manager/graph',
     'views/graph/graph-designer/graph-tree',
     'views/graph/graph-designer/node-form',
     'views/graph/graph-manager/branch-list',
@@ -23,7 +22,7 @@ define([
     'bindings/resizable-sidepanel',
     'datatype-config-components',
     'views/components/simple-switch'
-], function($, _, ko, koMapping, BaseManagerView, AlertViewModel, JsonErrorAlertViewModel, GraphModel, ReportModel, GraphView, GraphTree, NodeFormView, BranchListView, CardTreeViewModel, PermissionDesigner, data, arches, GraphSettingsViewModel, CardViewModel, viewData, reportLookup) {
+], function($, _, ko, koMapping, BaseManagerView, AlertViewModel, JsonErrorAlertViewModel, GraphModel, ReportModel, GraphTree, NodeFormView, BranchListView, CardTreeViewModel, PermissionDesigner, data, arches, GraphSettingsViewModel, CardViewModel, viewData, reportLookup) {
     var GraphDesignerView = BaseManagerView.extend({
         initialize: function(options) {
             var viewModel = options.viewModel;
@@ -170,9 +169,6 @@ define([
             viewModel.datatypes = _.keys(viewModel.graphModel.get('datatypelookup'));
 
             viewModel.graphModel.on('changed', function(model, response) {
-                if (viewModel.graphView) {
-                    viewModel.graphView.redraw(true);
-                }
                 viewModel.alert(null);
                 viewModel.loading(false);
                 if (response.status !== 200) {
@@ -477,40 +473,10 @@ define([
                 }
             });
 
-            viewModel.graphView = new GraphView({
-                el: $('#graph'),
-                graphModel: viewModel.graphModel,
-                nodeSize: 15,
-                nodeSizeOver: 20,
-                labelOffset: 10,
-                loading: this.loading
-            });
-
             viewModel.graphModel.on('select-node', function(node) {
-                // viewModel.graphView.zoomTo(node);
                 viewModel.graphTree.expandParentNode(node);
             });
 
-            viewModel.showPreview = function() {
-                viewModel.viewState('preview');
-                viewModel.graphView.resize();
-            };
-
-            /**
-            * update the sizing of elements on window resize
-            */
-            var resize = function() {
-                $('.grid').height($(window).height() - 208);
-                $('#graph').height($(window).height() - 100);
-                if (!!viewModel.graphView) {
-                    viewModel.graphView.resize();
-                }
-            };
-
-            $(window).resize(resize);
-
-            resize();
-
             BaseManagerView.prototype.initialize.apply(this, arguments);
         }
     });
diff --git a/arches/app/media/js/views/rdm/concept-report.js b/arches/app/media/js/views/rdm/concept-report.js
index 1ab8a73c9..d60940324 100644
--- a/arches/app/media/js/views/rdm/concept-report.js
+++ b/arches/app/media/js/views/rdm/concept-report.js
@@ -12,12 +12,11 @@ define([
     'views/rdm/modals/import-concept-form',
     'views/rdm/modals/add-child-form',
     'views/rdm/modals/add-image-form',
-    'views/concept-graph',
     'viewmodels/alert',
     'viewmodels/alert-json',
 ], function($, Backbone, arches, ConceptModel, ValueModel, ConceptParentModel, ValueEditor,
     RelatedConcept, RelatedMember, ManageParentForm, ImportConcept, AddChildForm,
-    AddImageForm, ConceptGraph, AlertViewModel, JsonErrorAlertViewModel) {
+    AddImageForm, AlertViewModel, JsonErrorAlertViewModel) {
     return Backbone.View.extend({
         events: {
             'click .concept-report-content *[data-action="viewconcept"]': 'conceptSelected',
@@ -75,9 +74,6 @@ define([
                                 self.$el.find(".concept-graph").toggle(300);
                                 self.$el.find(".graph-toggle").toggle();
                             });
-                            new ConceptGraph({
-                                el: self.$el.find(".concept-graph")
-                            });
                             if (showGraph) {
                                 self.$el.find(".graph-toggle").toggle();
                                 self.$el.find(".concept-tree").toggle(0);
diff --git a/arches/app/search/time_wheel.py b/arches/app/search/time_wheel.py
index b065c4e83..367117345 100644
--- a/arches/app/search/time_wheel.py
+++ b/arches/app/search/time_wheel.py
@@ -113,9 +113,15 @@ class TimeWheel(object):
             results = {"buckets": [query.search(index=RESOURCES_INDEX)["aggregations"]]}
             results_with_ranges = self.appendDateRanges(results, range_lookup)
             self.transformESAggToD3Hierarchy(results_with_ranges, root)
+
+            # calculate total number of docs
+            for child in root.children:
+                root.size = root.size + child.size
+
             if user.username in settings.CACHE_BY_USER:
                 key = "time_wheel_config_{0}".format(user.username)
                 cache.set(key, root, settings.CACHE_BY_USER[user.username])
+
             return root
 
     def transformESAggToD3Hierarchy(self, results, d3ItemInstance):
@@ -132,7 +138,10 @@ class TimeWheel(object):
             elif key == "key":
                 pass
             else:
-                d3ItemInstance.children.append(self.transformESAggToD3Hierarchy(value, d3Item(name=key)))
+                item = self.transformESAggToD3Hierarchy(value, d3Item(name=key))
+                # only append items if they have a document count > 0
+                if item.size > 0:
+                    d3ItemInstance.children.append(item)
 
         d3ItemInstance.children = sorted(d3ItemInstance.children, key=lambda item: item.start)
 
diff --git a/arches/app/templates/javascript.htm b/arches/app/templates/javascript.htm
index bd946e3a1..e3941bd50 100644
--- a/arches/app/templates/javascript.htm
+++ b/arches/app/templates/javascript.htm
@@ -27,7 +27,7 @@
             'backbone': '{{ STATIC_URL }}packages/backbone/backbone-min',
             'underscore': '{{ STATIC_URL }}packages/underscore/underscore-min',
             'jquery-validate': '{{ STATIC_URL }}packages/jquery-validation/dist/jquery.validate.min',
-            'd3': '{{ STATIC_URL }}packages/d3/d3.min',
+            'd3': '{{ STATIC_URL }}packages/d3/dist/d3.min',
             'dropzone': '{{ STATIC_URL }}packages/dropzone/dist/min/dropzone-amd-module.min',
             'ckeditor': '{{ STATIC_URL }}packages/ckeditor/ckeditor',
             'ckeditor-jquery': '{{ STATIC_URL }}packages/ckeditor/adapters/jquery',
diff --git a/arches/app/templates/views/graph-designer.htm b/arches/app/templates/views/graph-designer.htm
index 305248865..c00147715 100644
--- a/arches/app/templates/views/graph-designer.htm
+++ b/arches/app/templates/views/graph-designer.htm
@@ -57,12 +57,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
             </div>
         </h4>
 
-
-        <div class="btn-group btn-group-toggle" data-bind="visible: activeTab() === 'graph'">
-            <button class="btn btn-md viewstate-btn" data-bind="css: { active: viewState() === 'design' }, click: function(){viewState('design');}">{% trans "Design" %}</button>
-            <button class="btn btn-md viewstate-btn" data-bind="css: { active: viewState() === 'preview' }, click: showPreview">{% trans "Preview" %}</button>
-        </div>
-
         <div class="graph-settings-crud">
 
             <span data-bind="visible: graphSettingsVisible()" style="display: none;">
@@ -193,10 +187,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
                     </div>
                     <!--/ko-->
                 </div>
-
-                <div class="tab-pane fade in flex" style="position: relative;" data-bind="visible: viewState() === 'preview'">
-                    <div id="graph" class="flex"></div>
-                </div>
             </div>
 
             <!--ko if: activeTab() === 'card' -->
diff --git a/arches/app/templates/views/graph/card-configuration/component-forms/card-configuration.htm b/arches/app/templates/views/graph/card-configuration/component-forms/card-configuration.htm
deleted file mode 100644
index 6ad4735ed..000000000
--- a/arches/app/templates/views/graph/card-configuration/component-forms/card-configuration.htm
+++ /dev/null
@@ -1,101 +0,0 @@
-{% load i18n %}
-
-<!-- Title Block -->
-<div>
-    <div class="">
-        <h4 class="title-block-title" style=""> {% trans "Card Manager" %} </h4>
-    </div>
-</div>
-
-<!-- Tabs Content -->
-<div class="tab-content listing-container form-divider">
-
-    <!-- Card Container Base Settings Form -->
-    <div id="card-crud-settings" class="tab-pane fade in active">
-
-        <!-- Card Container Property -->
-        {% if graph.isresource and graph.ontology_id %}
-        <!-- ko if: !($root.card.isContainer()) -->
-        <div class="node-widget-label" style="">
-            <div class="control-label">
-                {% trans "Relation to Resource" %}
-            </div>
-            <div>
-                <select class="resources" data-bind="value: card().get('ontologyproperty'), options: $root.ontology_properties, valueAllowUnset: true, optionsCaption: '{% trans "Choose a relation..." %}', chosen: {disable_search_threshold: 10, width: '100%'}"></select>
-            </div>
-        </div>
-        <!-- /ko -->
-        {% endif %}
-
-        <div class="node-widget-label" style="">
-            <div class="control-label">
-                {% trans "Card Tab Title" %}
-            </div>
-            <div>
-                <input type="" placeholder="{% trans "Card name" %}" class="form-control input-md widget-input" data-bind="value: card().get('name'), valueUpdate: 'keyup'">
-            </div>
-        </div>
-
-        <div class="node-widget-label" style="">
-            <div class="control-label">
-                {% trans "Instructions" %}
-            </div>
-            <div>
-                <input type="" placeholder="{% trans " " %}" class="form-control input-md widget-input" data-bind="value: card().get('instructions'), valueUpdate: 'keyup'">
-            </div>
-        </div>
-
-        <div class="form-divider">
-            <h4 class="title-block-title" style=""> {% trans "Settings" %} </h4>
-        </div>
-
-        <!-- Card Visibility -->
-        <div data-bind="component: { name: 'views/components/simple-switch', params: {value: card().get('visible'), config:{label: '{% trans "Make Card Visible" %}', subtitle: '{% trans "Show this card by default" %}'}}}"></div>
-
-        <!-- Set Cardinaltiy -->
-        <div data-bind="component: { name: 'views/components/simple-switch', params: {value: card().get('cardinality'), config:{on: 'n', off: '1', label: '{% trans "Allow multiple values" %}', subtitle: '{% trans "Let users enter multiple values for this data entry card" %}'}}}"></div>
-
-        <!-- Multiple values tools -->
-        <div class="cardinality-form" data-bind="visible: card().get('cardinality')() === 'n'" style="display: none;">
-        </div>
-
-        <!-- Enable help -->
-        <div data-bind="component: { name: 'views/components/simple-switch', params: {value: card().get('helpenabled'), config:{label: '{% trans "Enable Card-level help" %}', subtitle: '{% trans "Provide specific user guidance for this card" %}'}}}"></div>
-
-        <!-- Tertiary Panel For Card Help Text-->
-        <div class="tertiary-panel help-text-crud" style="display: none;" data-bind="visible: card().get('helpenabled')">
-            <div class="tertiary-panel-content">
-                <div class="">
-                    <h4 class="title-block-title" style=""> {% trans "Card-Level Help" %} </h4>
-                </div>
-
-                <!-- Help CRUD -->
-                <div class="pad-all">
-                    <div class="node-widget-label" style="">
-                        <div class="control-label">
-                            {% trans "Help Panel Title" %}
-                        </div>
-                        <div class="col-sm-12 pad-no crud-widget-container">
-                            <input type="" placeholder="{% trans "Help title" %}" class="form-control input-md widget-input" data-bind='value: card().get("helptitle")'>
-                        </div>
-                    </div>
-
-                    <!--Rich text editor-->
-                    <div class="node-widget-label" style="">
-                        <div class="control-label">
-                            {% trans "Help Content" %}
-                        </div>
-                        <textarea rows="10" cols="80" data-bind="ckeditor: card().get('helptext'), ckeditorOptions: {}, valueUpdate: 'afterkeydown'"></textarea>
-                    </div>
-
-                    <!-- Preview help -->
-                    <div data-bind="component: { name: 'switch-widget', params: {value: helpPreviewActive, config:{label: '{% trans "Preview Help Panel" %}', subtitle: '{% trans "Display help panel, confirm content" %}'}}}"></div>
-                    <div class="toggle-container">
-                        <input id="preview-card-help" class="arches-switch" type="checkbox" data-switchery="true" style="display: none;">
-                    </div>
-                </div>
-            </div>
-        </div>
-
-    </div>
-</div>
diff --git a/arches/app/templates/views/graph/card-configuration/component-forms/card-container-configuration.htm b/arches/app/templates/views/graph/card-configuration/component-forms/card-container-configuration.htm
deleted file mode 100644
index 705cf5657..000000000
--- a/arches/app/templates/views/graph/card-configuration/component-forms/card-container-configuration.htm
+++ /dev/null
@@ -1,48 +0,0 @@
-{% load i18n %}
-
-<!-- Title Block -->
-<div>
-    <div class="">
-        <h4 class="title-block-title" style=""> {% trans "Card Container" %} </h4>
-    </div>
-</div>
-
-<!-- Tabs Content -->
-<div class="tab-content listing-container form-divider">
-
-    <!-- Card Container Base Settings Form -->
-    <div id="cc-settings" class="tab-pane fade in active">
-
-        <!-- Card Container Property -->
-        {% if graph.isresource and graph.ontology_id %}
-        <div class="node-widget-label" style="">
-            <div class="control-label">
-                {% trans "Relation to Resource" %}
-            </div>
-            <div>
-                <select class="resources" data-bind="value: card().get('ontologyproperty'), options: $root.ontology_properties, valueAllowUnset: true, optionsCaption: '{% trans "Choose a relation..." %}', chosen: {disable_search_threshold: 10, width: '100%'}"></select>
-            </div>
-        </div>
-        {% endif %}
-
-        <!-- Card Container Name -->
-        <div class="node-widget-label" style="">
-            <div class="control-label">
-                {% trans "Name" %}
-            </div>
-            <div>
-                <input type="" placeholder="{% trans "Card name" %}" id="" class="form-control input-md widget-input" data-bind="value: card().get('name'), valueUpdate: 'keyup'">
-            </div>
-        </div>
-
-        <div class="form-divider">
-            <h4 class="title-block-title" style=""> {% trans "Settings" %} </h4>
-        </div>
-
-        <!-- Card Visibility -->
-        <div data-bind="component: { name: 'views/components/simple-switch', params: {value: card().get('visible'), config:{label: '{% trans "Make Card Visible" %}', subtitle: '{% trans "Show this card by default" %}'}}}"></div>
-
-        <div data-bind="component: { name: 'views/components/simple-switch', params: {value: card().get('cardinality'), config:{on: 'n', off: '1', label: '{% trans "Allow multiple values" %}', subtitle: '{% trans "Let users enter multiple values for this data entry card" %}'}}}"></div>
-    </div>
-
-</div>
diff --git a/arches/app/templates/views/graph/card-configuration/component-forms/widget-configuration.htm b/arches/app/templates/views/graph/card-configuration/component-forms/widget-configuration.htm
deleted file mode 100644
index 16e5759c4..000000000
--- a/arches/app/templates/views/graph/card-configuration/component-forms/widget-configuration.htm
+++ /dev/null
@@ -1,69 +0,0 @@
-{% load i18n %}
-
-<!-- Title Block -->
-<div>
-    <div class="">
-        <h4 class="title-block-title" style=""> {% trans "Widget Manager" %} </h4>
-    </div>
-</div>
-
-<!-- Tabs Content -->
-<div class="tab-content listing-container form-divider">
-
-    <div id="widget-crud-settings" class="tab-pane fade in active">
-
-        <div class="node-widget-label" style="">
-            <div class="control-label">
-                {% trans "Widget Label" %}
-            </div>
-            <div class="pad-no">
-                <input type="" placeholder="{% trans "Widget Label" %}" id="" class="form-control input-md widget-input" data-bind="value: widget().get('label'), valueUpdate: 'keyup'">
-            </div>
-        </div>
-
-
-        <div data-bind='component: {
-            name: widgetLookup[widget().get("widget_id")()].name,
-            params: {
-                config: widget().configJSON,
-                configForm: true,
-                value: ko.observable(null),
-                node: widget().node,
-                graph: graph
-            }
-        }'></div>
-
-        <!-- ko if: widget().node.datatypeConfigComponent -->
-        <div data-bind='component: {
-            name: widget().node.datatypeConfigComponent,
-            params: widget().node
-        }'></div>
-        <!-- /ko -->
-
-
-        <div class="node-widget-label" style="">
-            <div class="control-label">
-                {% trans "Template" %}
-            </div>
-            <div class="pad-no" data-bind="with: widget">
-                <select class="design" data-bind="value: $data.get('widget_id'), options: $parent.widgetList(), optionsText: 'name', optionsValue: 'id', chosen: {disable_search_threshold: 10, width: '100%'}"></select>
-            </div>
-        </div>
-
-        <!-- ko if: ko.isObservable(card) -->
-        <div class="node-widget-label switch-panel" data-bind="css: {'disabled': checkIfImmutable() }">
-
-            <span class="switch switch-small arches-switch" data-bind="css: {'on': widget().node.isrequired(), 'disabled': checkIfImmutable() }, click: toggleRequired"><small></small></span>
-
-            <p class="control-label" style="margin-left: 40px; margin-top: -17px; margin-bottom: 0px;">
-                {% trans "Required" %}
-            </p>
-            <span style="margin-left: 40px; display: inline-block; color: #8ba2b9; font-size: 10px;">
-                {% trans "Activate to require that data be collected for this node when a card value is edited" %}
-            </span>
-        </div>
-        <!-- /ko -->
-
-    </div>
-
-</div>
diff --git a/arches/app/templates/views/graph/graph-designer/widget-configuration.htm b/arches/app/templates/views/graph/graph-designer/widget-configuration.htm
index 636abfafa..b8f3c696e 100644
--- a/arches/app/templates/views/graph/graph-designer/widget-configuration.htm
+++ b/arches/app/templates/views/graph/graph-designer/widget-configuration.htm
@@ -45,8 +45,7 @@
                 config: configJSON,
                 configForm: true,
                 value: ko.observable(null),
-                node: node,
-                graph: graph
+                node: node
             }
         }'></div>
 
diff --git a/arches/app/templates/views/rdm/concept-report.htm b/arches/app/templates/views/rdm/concept-report.htm
index 54401edee..b8ab0c872 100644
--- a/arches/app/templates/views/rdm/concept-report.htm
+++ b/arches/app/templates/views/rdm/concept-report.htm
@@ -122,10 +122,6 @@
 
                 <dt>
                     <h5 id="" class="section-headline">{% trans "Broader/Narrower Concepts" %}
-                        <span>
-                            <a href="javascript:void(0);" class="arches-RDM-link pull-right graph-toggle">{% trans "Show graph" %}</a>
-                            <a href="javascript:void(0);" class="arches-RDM-link pull-right graph-toggle" style="display: none;">{% trans "Show tree" %}</a>
-                        <span>
                     </h5>
                 </dt>
 
diff --git a/arches/install/package.json b/arches/install/package.json
index f745e6cb6..66920017e 100644
--- a/arches/install/package.json
+++ b/arches/install/package.json
@@ -17,7 +17,7 @@
         "ckeditor": "^4.6.2",
         "codemirror": "^5.24.0",
         "core-js": "^2.5.7",
-        "d3": "3.5.17",
+        "d3": "^6.1.1",
         "datatables.net": "~1.10.12",
         "datatables.net-bs": "~1.10.12",
         "datatables.net-buttons": "^1.5.4",
diff --git a/arches/install/yarn.lock b/arches/install/yarn.lock
index 5233d4a78..54e9f7e53 100644
--- a/arches/install/yarn.lock
+++ b/arches/install/yarn.lock
@@ -1291,6 +1291,108 @@ d3-array@1:
   resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
   integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
 
+"d3-array@1.2.0 - 2", d3-array@2, d3-array@>=2.5:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.7.1.tgz#b1f56065e9aba1ef6f0d0c8c9390b65421593352"
+  integrity sha512-dYWhEvg1L2+osFsSqNHpXaPQNugLT4JfyvbLE046I2PDcgYGFYc0w24GSJwbmcjjZYOPC3PNP2S782bWUM967Q==
+
+d3-axis@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-2.0.0.tgz#40aebb65626ffe6d95e9441fbf9194274b328a8b"
+  integrity sha512-9nzB0uePtb+u9+dWir+HTuEAKJOEUYJoEwbJPsZ1B4K3iZUgzJcSENQ05Nj7S4CIfbZZ8/jQGoUzGKFznBhiiQ==
+
+d3-brush@2:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-2.1.0.tgz#adadfbb104e8937af142e9a6e2028326f0471065"
+  integrity sha512-cHLLAFatBATyIKqZOkk/mDHUbzne2B3ZwxkzMHvFTCZCmLaXDpZRihQSn8UNXTkGD/3lb/W2sQz0etAftmHMJQ==
+  dependencies:
+    d3-dispatch "1 - 2"
+    d3-drag "2"
+    d3-interpolate "1 - 2"
+    d3-selection "2"
+    d3-transition "2"
+
+d3-chord@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-2.0.0.tgz#32491b5665391180560f738e5c1ccd1e3c47ebae"
+  integrity sha512-D5PZb7EDsRNdGU4SsjQyKhja8Zgu+SHZfUSO5Ls8Wsn+jsAKUUGkcshLxMg9HDFxG3KqavGWaWkJ8EpU8ojuig==
+  dependencies:
+    d3-path "1 - 2"
+
+"d3-color@1 - 2", d3-color@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e"
+  integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==
+
+d3-contour@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-2.0.0.tgz#80ee834988563e3bea9d99ddde72c0f8c089ea40"
+  integrity sha512-9unAtvIaNk06UwqBmvsdHX7CZ+NPDZnn8TtNH1myW93pWJkhsV25JcgnYAu0Ck5Veb1DHiCv++Ic5uvJ+h50JA==
+  dependencies:
+    d3-array "2"
+
+d3-delaunay@5:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-5.3.0.tgz#b47f05c38f854a4e7b3cea80e0bb12e57398772d"
+  integrity sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==
+  dependencies:
+    delaunator "4"
+
+"d3-dispatch@1 - 2", d3-dispatch@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-2.0.0.tgz#8a18e16f76dd3fcaef42163c97b926aa9b55e7cf"
+  integrity sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==
+
+d3-drag@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-2.0.0.tgz#9eaf046ce9ed1c25c88661911c1d5a4d8eb7ea6d"
+  integrity sha512-g9y9WbMnF5uqB9qKqwIIa/921RYWzlUDv9Jl1/yONQwxbOfszAWTCm8u7HOTgJgRDXiRZN56cHT9pd24dmXs8w==
+  dependencies:
+    d3-dispatch "1 - 2"
+    d3-selection "2"
+
+"d3-dsv@1 - 2", d3-dsv@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5"
+  integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==
+  dependencies:
+    commander "2"
+    iconv-lite "0.4"
+    rw "1"
+
+"d3-ease@1 - 2", d3-ease@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-2.0.0.tgz#fd1762bfca00dae4bacea504b1d628ff290ac563"
+  integrity sha512-68/n9JWarxXkOWMshcT5IcjbB+agblQUaIsbnXmrzejn2O82n3p2A9R2zEB9HIEFWKFwPAEDDN8gR0VdSAyyAQ==
+
+d3-fetch@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-2.0.0.tgz#ecd7ef2128d9847a3b41b548fec80918d645c064"
+  integrity sha512-TkYv/hjXgCryBeNKiclrwqZH7Nb+GaOwo3Neg24ZVWA3MKB+Rd+BY84Nh6tmNEMcjUik1CSUWjXYndmeO6F7sw==
+  dependencies:
+    d3-dsv "1 - 2"
+
+d3-force@2:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-2.1.1.tgz#f20ccbf1e6c9e80add1926f09b51f686a8bc0937"
+  integrity sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==
+  dependencies:
+    d3-dispatch "1 - 2"
+    d3-quadtree "1 - 2"
+    d3-timer "1 - 2"
+
+"d3-format@1 - 2", d3-format@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767"
+  integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==
+
+d3-geo@2:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-2.0.1.tgz#2437fdfed3fe3aba2812bd8f30609cac83a7ee39"
+  integrity sha512-M6yzGbFRfxzNrVhxDJXzJqSLQ90q1cCyb3EWFZ1LF4eWOBYxFypw7I/NFVBNXKNqxv1bqLathhYvdJ6DC+th3A==
+  dependencies:
+    d3-array ">=2.5"
+
 d3-geo@^1.6.3:
   version "1.11.9"
   resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.9.tgz#77eaed14ba62fc2c0aef55cd2943849c866f7ae6"
@@ -1298,10 +1400,143 @@ d3-geo@^1.6.3:
   dependencies:
     d3-array "1"
 
-d3@3.5.17:
-  version "3.5.17"
-  resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
-  integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=
+d3-hierarchy@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-2.0.0.tgz#dab88a58ca3e7a1bc6cab390e89667fcc6d20218"
+  integrity sha512-SwIdqM3HxQX2214EG9GTjgmCc/mbSx4mQBn+DuEETubhOw6/U3fmnji4uCVrmzOydMHSO1nZle5gh6HB/wdOzw==
+
+"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@2:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163"
+  integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==
+  dependencies:
+    d3-color "1 - 2"
+
+"d3-path@1 - 2", d3-path@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-2.0.0.tgz#55d86ac131a0548adae241eebfb56b4582dd09d8"
+  integrity sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==
+
+d3-polygon@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-2.0.0.tgz#13608ef042fbec625ba1598327564f03c0396d8e"
+  integrity sha512-MsexrCK38cTGermELs0cO1d79DcTsQRN7IWMJKczD/2kBjzNXxLUWP33qRF6VDpiLV/4EI4r6Gs0DAWQkE8pSQ==
+
+"d3-quadtree@1 - 2", d3-quadtree@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz#edbad045cef88701f6fee3aee8e93fb332d30f9d"
+  integrity sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==
+
+d3-random@2:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-2.2.2.tgz#5eebd209ef4e45a2b362b019c1fb21c2c98cbb6e"
+  integrity sha512-0D9P8TRj6qDAtHhRQn6EfdOtHMfsUWanl3yb/84C4DqpZ+VsgfI5iTVRNRbELCfNvRfpMr8OrqqUTQ6ANGCijw==
+
+d3-scale-chromatic@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz#c13f3af86685ff91323dc2f0ebd2dabbd72d8bab"
+  integrity sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==
+  dependencies:
+    d3-color "1 - 2"
+    d3-interpolate "1 - 2"
+
+d3-scale@3:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.2.2.tgz#36d4cbc94dc38bbb5bd91ba5eddb44c6d19bad3e"
+  integrity sha512-3Mvi5HfqPFq0nlyeFlkskGjeqrR/790pINMHc4RXKJ2E6FraTd3juaRIRZZHyMAbi3LjAMW0EH4FB1WgoGyeXg==
+  dependencies:
+    d3-array "1.2.0 - 2"
+    d3-format "1 - 2"
+    d3-interpolate "1.2.0 - 2"
+    d3-time "1 - 2"
+    d3-time-format "2 - 3"
+
+d3-selection@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-2.0.0.tgz#94a11638ea2141b7565f883780dabc7ef6a61066"
+  integrity sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==
+
+d3-shape@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-2.0.0.tgz#2331b62fa784a2a1daac47a7233cfd69301381fd"
+  integrity sha512-djpGlA779ua+rImicYyyjnOjeubyhql1Jyn1HK0bTyawuH76UQRWXd+pftr67H6Fa8hSwetkgb/0id3agKWykw==
+  dependencies:
+    d3-path "1 - 2"
+
+"d3-time-format@2 - 3", d3-time-format@3:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6"
+  integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==
+  dependencies:
+    d3-time "1 - 2"
+
+"d3-time@1 - 2", d3-time@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.0.0.tgz#ad7c127d17c67bd57a4c61f3eaecb81108b1e0ab"
+  integrity sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q==
+
+"d3-timer@1 - 2", d3-timer@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-2.0.0.tgz#055edb1d170cfe31ab2da8968deee940b56623e6"
+  integrity sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA==
+
+d3-transition@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-2.0.0.tgz#366ef70c22ef88d1e34105f507516991a291c94c"
+  integrity sha512-42ltAGgJesfQE3u9LuuBHNbGrI/AJjNL2OAUdclE70UE6Vy239GCBEYD38uBPoLeNsOhFStGpPI0BAOV+HMxog==
+  dependencies:
+    d3-color "1 - 2"
+    d3-dispatch "1 - 2"
+    d3-ease "1 - 2"
+    d3-interpolate "1 - 2"
+    d3-timer "1 - 2"
+
+d3-zoom@2:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-2.0.0.tgz#f04d0afd05518becce879d04709c47ecd93fba54"
+  integrity sha512-fFg7aoaEm9/jf+qfstak0IYpnesZLiMX6GZvXtUSdv8RH2o4E2qeelgdU09eKS6wGuiGMfcnMI0nTIqWzRHGpw==
+  dependencies:
+    d3-dispatch "1 - 2"
+    d3-drag "2"
+    d3-interpolate "1 - 2"
+    d3-selection "2"
+    d3-transition "2"
+
+d3@^6.1.1:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/d3/-/d3-6.1.1.tgz#c92f8dfb5d6889ee0d518ea1e0e6afb8642ef991"
+  integrity sha512-bJYW9wlS2uvP2EoMkcPptrUzLMHQKCbiSW+/la8iGSLZgs4KbI/f3Fch4RtnUA9PA+/nPlwyFYzTwDjX80Of8w==
+  dependencies:
+    d3-array "2"
+    d3-axis "2"
+    d3-brush "2"
+    d3-chord "2"
+    d3-color "2"
+    d3-contour "2"
+    d3-delaunay "5"
+    d3-dispatch "2"
+    d3-drag "2"
+    d3-dsv "2"
+    d3-ease "2"
+    d3-fetch "2"
+    d3-force "2"
+    d3-format "2"
+    d3-geo "2"
+    d3-hierarchy "2"
+    d3-interpolate "2"
+    d3-path "2"
+    d3-polygon "2"
+    d3-quadtree "2"
+    d3-random "2"
+    d3-scale "3"
+    d3-scale-chromatic "2"
+    d3-selection "2"
+    d3-shape "2"
+    d3-time "2"
+    d3-time-format "3"
+    d3-timer "2"
+    d3-transition "2"
+    d3-zoom "2"
 
 datatables.net-bs@>=1.10.9, datatables.net-bs@^1.10.15, datatables.net-bs@~1.10.12:
   version "1.10.20"
@@ -1411,6 +1646,11 @@ define-properties@^1.1.2, define-properties@^1.1.3:
   dependencies:
     object-keys "^1.0.12"
 
+delaunator@4:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-4.0.1.tgz#3d779687f57919a7a418f8ab947d3bddb6846957"
+  integrity sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==
+
 dom4@^2.0.1:
   version "2.1.5"
   resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.5.tgz#f98a94eb67b340f0fa5b42b0ee9c38cda035428e"
@@ -1700,6 +1940,13 @@ http-cache-semantics@3.8.1:
   resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
   integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
 
+iconv-lite@0.4:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
 ieee754@^1.1.12:
   version "1.1.13"
   resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
@@ -2466,7 +2713,7 @@ robust-sum@^1.0.0:
   resolved "https://registry.yarnpkg.com/robust-sum/-/robust-sum-1.0.0.tgz#16646e525292b4d25d82757a286955e0bbfa53d9"
   integrity sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k=
 
-rw@^1.3.3:
+rw@1, rw@^1.3.3:
   version "1.3.3"
   resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
   integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
@@ -2486,6 +2733,11 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
+"safer-buffer@>= 2.1.2 < 3":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
 select2@3.5.1:
   version "3.5.1"
   resolved "https://registry.yarnpkg.com/select2/-/select2-3.5.1.tgz#f2819489bbc65fd6d328be72bbe2b95dd7e87cfe"
['arches/app/media/js/views/components/search/time-filter.js', 'arches/app/media/css/arches.css', 'arches/app/templates/views/graph/graph-designer/widget-configuration.htm', 'arches/app/media/js/views/rdm/concept-report.js', 'arches/app/templates/javascript.htm', 'arches/app/templates/views/rdm/concept-report.htm', 'arches/install/package.json', 'arches/app/media/js/bindings/time-wheel.js', 'arches/app/search/time_wheel.py', 'arches/app/templates/views/graph-designer.htm', 'arches/app/media/js/views/graph-designer.js', 'arches/app/media/js/bindings/related-resources-graph.js', 'arches/app/media/js/viewmodels/resource-instance-select.js', 'arches/install/yarn.lock']