JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<br/>
<!-- Just so that JSFiddle's Result label doesn't overlap the Chart -->
<div id="chartContainer1" style="height: 200px; width: 100%;"></div>
<div id="chartContainer2" style="height: 200px; width: 100%;"></div>

JavaScript

var chart1 = new CanvasJS.Chart("chartContainer1", {
  animationEnabled: true,
  title: {
    text: "Retirement Contribution"
  },
  axisY: {
    minimum: -100
  },
  data: [{
    type: "stackedBar",
    dataPoints: [
      { label:"IRA", y: -40 }
    ]
  },{
    type: "stackedBar",
    dataPoints: [
      { label:"IRA", y: -40 }
    ]
  },]
});
chart1.render();

var chart2 = new CanvasJS.Chart("chartContainer2", {
  animationEnabled: true,
  title: {
    text: ""
  },
  axisY: {
    minimum: -100
  },
  data: [{
    type: "stackedBar",
    dataPoints: [
      { label:"SEP-IRA", y: -40 }
    ]
  },{
    type: "stackedBar",
    dataPoints: [
      { label:"SEP-IRA", y: -40 }
    ]
  },]
});
chart2.render();

var xSnapDistance = 3;
var ySnapDistance = 5;

var xValue, yValue;

var mouseDown = false;
var selectedDataSeries = null;
var selectedDataPointX = null;
var selectedDatapointIndex = null;
var selectedSumIndex = null;
var changeCursor = false;
var timerId = null;
var chartType = "stackedBar";


function getPosition(e, chart) {
  var parentOffset = $(chart.container).offset();
  var relX = e.pageX - parentOffset.left;
  var relY = e.pageY - parentOffset.top;
  xValue = Math.round(chart1.axisX[0].convertPixelToValue(relY));
  yValue = Math.round(chart1.axisY[0].convertPixelToValue(relX));
}

function searchDataPoint(stackedValues) {
  for (x in stackedValues) {
    if (stackedValues.hasOwnProperty(x) && (xValue >= Number(x) - xSnapDistance && xValue <= Number(x) + xSnapDistance)) {
      for (var i = 0; i < stackedValues[x].length; i++)
        if (yValue >= stackedValues[x][i].stackedSum - ySnapDistance && yValue <= stackedValues[x][i].stackedSum + ySnapDistance) {
          if (mouseDown) {
            selectedDataPointX = x;
            selectedDataSeries = stackedValues[x][i].dataSeries;
            selectedDatapointIndex = stackedValues[x][i].dataPointIndex;
            selectedSumIndex = i;
            return;
          } else {
            changeCursor =...