JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://igniteui.com/js/modernizr.min.js"></script>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
<script src="https://cdn-na.infragistics.com/igniteui/latest/js/infragistics.core.js"></script>
<script src="https://cdn-na.infragistics.com/igniteui/latest/js/infragistics.dv.js"></script>
<script src="https://igniteui.com/js-data/Data"></script>
<link href="https://cdn-na.infragistics.com/igniteui/latest/css/themes/infragistics/infragistics.theme.css" rel="stylesheet"></link>
<link href="https://cdn-na.infragistics.com/igniteui/latest/css/structure/infragistics.css" rel="stylesheet"></link>
<link href="https://cdn-na.infragistics.com/igniteui/latest/css/structure/modules/infragistics.ui.chart.css" rel="stylesheet"></link>
<link href="https://cdn-na.infragistics.com/igniteui/latest/css/structure/modules/infragistics.ui.financialchart.css" rel="stylesheet"></link>

<div id="chart" style="width:95%;height:500px"></div>

JavaScript

$(function () {
        
            function CalloutItem(index, value, content) {
                this.index = index;
                this.value = value;
                this.content = content;
            }

            var data = PriceData.AMZN();
            var calloutData = [];
            
            function generateCalloutData() {
                var intervalSplit = Math.floor(Math.random() * 300) + 280;
                var intervalDiv = Math.floor(Math.random() * 400) + 360;
                var index = 0;
                var priceLowest = new CalloutItem(index, Number.MAX_SAFE_INTEGER, "MIN PRICE");
                var priceHighest = new CalloutItem(index, Number.MIN_SAFE_INTEGER, "MAX PRICE");
                calloutData.push(priceLowest);
                calloutData.push(priceHighest);

                for (var item of data) {// finding item with lowest price
                    if (priceLowest.value > item.close)
                    {
                        priceLowest.value = item.close;
                        priceLowest.index = index;
                    }
                    // finding item with highest price
                    if (priceHighest.value < item.close)
                    {
                        priceHighest.value = item.close;
                        priceHighest.index = index;
                    }
                    
                    // creating SPLIT/DIVIDEND events at specific intervals
                    if (index % intervalSplit === 5)
                    {
                        var stockEvent = new CalloutItem(index, item.close, "SPLIT");
                        calloutData.push(stockEvent);
                    }
                    else if (index % intervalDiv === 5)
                    {
                        var stockEvent = new CalloutItem(index, item.close, "DIV");
                        calloutData.push(stockEvent);
                    }
                    
                    ++index;
                }
...