JSFiddle - React, Tailwind, and code Playground

HTML

<body><script>
var data = [{ date:"1988-01-01",value:12681 },
{ date:"1988-01-02",value:13264 },
{ date:"1988-01-03",value:13953 },
{ date:"1988-01-04",value:13921 },
{ date:"1988-01-05",value:13932 },
{ date:"1988-01-06",value:13157 },
{ date:"1988-01-07",value:11159 },
{ date:"1988-01-08",value:11631 },
{ date:"1988-01-09",value:12045 },
{ date:"1988-01-10",value:13160 },
{ date:"1988-01-11",value:14240 },
{ date:"1988-01-12",value:14302 },
{ date:"1988-01-13",value:14353 },
{ date:"1988-01-14",value:14451 },
{ date:"1988-01-15",value:14496 },
{ date:"1988-01-16",value:13041 },
{ date:"1988-01-17",value:13337 },
{ date:"1988-01-18",value:12396 },
{ date:"1988-01-19",value:13721 },
{ date:"1988-01-20",value:13745 },
{ date:"1988-01-21",value:14170 },
{ date:"1988-01-22",value:14570 },
{ date:"1988-01-23",value:13059 },
{ date:"1988-01-24",value:13858 },
{ date:"1988-01-25",value:13947 },
{ date:"1988-01-26",value:14188 },
{ date:"1988-01-27",value:14493 },
{ date:"1988-01-28",value:14445 },
{ date:"1988-01-29",value:14589 },
{ date:"1988-01-30",value:13125 },
{ date:"1988-01-31",value:13766 },
{ date:"1988-02-01",value:14083 },
{ date:"1988-02-02",value:14175 },
{ date:"1988-02-03",value:13931 },
{ date:"1988-02-04",value:13677 },
{ date:"1988-02-05",value:14039 },
{ date:"1988-02-06",value:12703 },
{ date:"1988-02-07",value:13584 },
{ date:"1988-02-08",value:14281 },
{ date:"1988-02-09",value:14432 },
{ date:"1988-02-10",value:13875 },
{ date:"1988-02-11",value:13188 },
{ date:"1988-02-12",value:13403 },
{ date:"1988-02-13",value:12862 },
{ date:"1988-02-14",value:13446 },
{ date:"1988-02-15",value:14315 },
{ date:"1988-02-16",value:14471 },
{ date:"1988-02-17",value:14646 },
{ date:"1988-02-18",value:14412 },
{ date:"1988-02-19",value:14319 },
{ date:"1988-02-20",value:12963 },
{ date:"1988-02-21",value:13789 },
{ date:"1988-02-22",value:14512 },
{ date:"1988-02-23",value:14521 },
{ date:"1988-02-24",value:14634 },
{ date:"1988-02-25",value:14692 },
{...

CSS

svg {
  font: 10px sans-serif;
}

.axis {
  shape-rendering: crispEdges;
}

.axis path, .axis line {
  fill: none;
  stroke-width: .5px;
}

.x.axis path {
  stroke: #000;
}

.x.axis line {
  stroke: #fff;
  stroke-opacity: .5;
}

.y.axis line {
  stroke: #ddd;
}

path.line {
  fill: none;
  stroke: #000;
  stroke-width: .5px;
}

rect.pane {
  cursor: move;
  fill: none;
  pointer-events: all;
}

JavaScript

var margin = {top: 20, right: 60, bottom: 30, left: 20},
    width = 460 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;

var parseDate = d3.time.format("%Y-%m-%d").parse,
    formatDate = d3.time.format("%Y");

var x = d3.time.scale()
    .range([0, width]);

var y = d3.scale.linear()
    .range([height, 0]);

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .tickSize(-height, 0)
    .tickPadding(6);

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("right")
    .tickSize(-width)
    .tickPadding(6);

var area = d3.svg.area()
    .interpolate("step-after")
    .x(function(d) { return x(d.date); })
    .y0(y(0))
    .y1(function(d) { return y(d.value); });

var line = d3.svg.line()
    .interpolate("step-after")
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.value); });

var svg = d3.select("body").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

var zoom = d3.behavior.zoom()
    .on("zoom", draw);

var gradient = svg.append("defs").append("linearGradient")
    .attr("id", "gradient")
    .attr("x2", "0%")
    .attr("y2", "100%");

gradient.append("stop")
    .attr("offset", "0%")
    .attr("stop-color", "#fff")
    .attr("stop-opacity", .5);

gradient.append("stop")
    .attr("offset", "100%")
    .attr("stop-color", "#999")
    .attr("stop-opacity", 1);

svg.append("clipPath")
    .attr("id", "clip")
  .append("rect")
    .attr("x", x(0))
    .attr("y", y(1))
    .attr("width", x(1) - x(0))
    .attr("height", y(0) - y(1));

svg.append("g")
    .attr("class", "y axis")
    .attr("transform", "translate(" + width + ",0)");

svg.append("path")
    .attr("class", "area")
    .attr("clip-path", "url(#clip)")
    .style("fill", "url(#gradient)");

svg.append("g")
    .attr("class", "x axis")
    .attr("transform",...