JSFiddle - React, Tailwind, and code Playground

HTML

<form oninput="chargeOut.value=chargeInput.value">
<table style="width:150px">
  <tr><td colspan="2">Charge: 
     <output name="chargeOut" for="chargeInput"> </output>
  </td></tr>
  <tr><td colspan="2" align="center">
     <input type="range" id="chargeInput" name="chargeInput" min="-350" 
       max="-1" value="-60" style="width:100%">
  </td></tr>
</table>
</form>

<form oninput="linkStrOut.value=linkStrInput.value">
<table style="width:150px">
  <tr><td colspan="2">Link Strength: 
     <output name="linkStrOut" for="linkStrInput"> </output>
  </td></tr>
  <tr><td colspan="2" align="center">
     <input type="range" id="linkStrInput" name="linkStrInput" min="0" 
        max="1" value="0.03" step="0.01" style="width:100%">
  </td></tr>
</table>
</form>
    <div id='graph'></div>

JavaScript

var width = 960,
    height = 500;

var color = d3.scale.category20();

var force = d3.layout.force()
    .charge(-120)
    .linkDistance(30)
    .size([width, height]);

var svg = d3.select("#graph").append("svg")
    .attr("width", width)
    .attr("height", height);

function load(graph) {

  force
      .nodes(graph.nodes)
      .links(graph.links)
      .start();

  var link = svg.selectAll(".link")
      .data(graph.links)
    .enter().append("line")
      .attr("class", "link")
      .style("stroke-width", function(d) { return Math.sqrt(d.value); });

  var node = svg.selectAll(".node")
      .data(graph.nodes)
    .enter().append("circle")
      .attr("class", "node")
      .attr("r", 5)
      .style("fill", function(d) { return color(d.group); })
      .call(force.drag);

  node.append("title")
      .text(function(d) { return d.name; });

  force.on("tick", function() {
    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; });
  });
}

d3.select("#chargeInput").on("input", function () {
    force.theta(ParseInt(chargeInput.value)/100).start()
})

d3.select("#linkStrInput").on("input", function () {
    force.linkStrength(linkStrInput.value).start()
})

load({
  "nodes":[
    {"name":"Myriel","group":1},
    {"name":"Napoleon","group":1},
    {"name":"Mlle.Baptistine","group":1},
    {"name":"Mme.Magloire","group":1},
    {"name":"CountessdeLo","group":1},
    {"name":"Geborand","group":1},
    {"name":"Champtercier","group":1},
    {"name":"Cravatte","group":1},
    {"name":"Count","group":1},
    {"name":"OldMan","group":1},
    {"name":"Labarre","group":2},
    {"name":"Valjean","group":2},
    {"name":"Marguerite","group":3},
    {"name":"Mme.deR","group":2},
   ...