diff --git a/js/app/charts.js b/js/app/charts.js index 4a5c7b69b..626dabd08 100644 --- a/js/app/charts.js +++ b/js/app/charts.js @@ -45,28 +45,13 @@ charts default configuration */ if (window.Apex) { + var borderColor = 'rgba(0, 0, 0, 0.09)'; + var mutedColor = '#888e9a'; + window.Apex = { - grid: { - show: false, - padding: { - right: 0, - left: 0, - bottom: 0, - top: 0 - } - }, - - dataLabels: { - enabled: false - }, - - plotOptions: { - pie: { - expandOnClick: false, - }, - }, - chart: { + fontFamily: 'inherit', + foreColor: 'inherit', toolbar: { show: false, }, @@ -78,6 +63,36 @@ if (window.Apex) { } }, + grid: { + show: false, + position: 'back', + borderColor: borderColor, + padding: { + right: 0, + left: 0, + bottom: 0, + top: 0 + } + }, + + dataLabels: { + enabled: false, + offsetY: -6, + dropShadow: { + enabled: false, + }, + }, + + plotOptions: { + pie: { + expandOnClick: false, + dataLabels: { + offset: -8, + minAngleToShowLabel: 10, + }, + }, + }, + stroke: { width: 2, curve: 'smooth', @@ -89,17 +104,30 @@ if (window.Apex) { }, markers: { - strokeWidth: 1 + size: 0, + strokeWidth: 1, + radius: 2, + hover: { + size: 4, + } }, legend: { - show: true + show: true, + fontSize: '14px', + markers: { + width: 8, + height: 8 + }, + itemMargin: { + horizontal: 0, + vertical: 8 + }, }, title: { style: { fontSize: '14px', - fontFamily: 'inherit' } }, @@ -109,13 +137,22 @@ if (window.Apex) { xaxis: { labels: { - show: false + style: { + colors: mutedColor, + fontSize: '12px', + } }, tooltip: { enabled: false }, axisBorder: { - show: false + color: borderColor, + height: 0 + }, + axisTicks: { + show: true, + height: 4, + color: borderColor } }, diff --git a/pages/_data/charts.yml b/pages/_data/charts.yml index 9c8419c99..480ef7401 100644 --- a/pages/_data/charts.yml +++ b/pages/_data/charts.yml @@ -32,11 +32,11 @@ development-activity: color: blue data: [0, 5, 1, 2, 7, 5, 6, 8, 24, 7, 12, 5, 6, 3, 2, 2, 6, 30, 10, 10, 15, 14, 47, 65, 55] -employment: +line: name: Employment Growth display: true type: line - hide-legend: true + show-grid: true categories: ['2013', '2014', '2015', '2016', '2017', '2018'] series: - name: Development @@ -49,12 +49,13 @@ employment: color: green data: [17, 18, 21, 20, 30, 29] -line-chart-stroke: +line-stroke: name: Line chart display: true type: line stroke-curve: straight hide-legend: true + show-grid: true categories: ['2013', '2014', '2015', '2016', '2017', '2018', '2019'] series: - name: Development @@ -67,12 +68,13 @@ line-chart-stroke: color: green data: [7, 10, 11, 18, 18, 18, 24] -stepline-chart: +stepline: name: Stepline display: true type: line hide-legend: true stroke-curve: stepline + show-grid: true series: - name: Development color: orange @@ -83,7 +85,10 @@ temperature: display: true type: line show-labels: true + show-data-labels: true + show-markers: true hide-legend: true + show-grid: true categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] series: - name: Tokyo @@ -228,6 +233,8 @@ pie: name: Lorem ipsum display: true type: pie + hide-legend: true + show-data-labels: true series: - name: A color: blue-darker @@ -246,6 +253,7 @@ donut: name: Lorem ipsum display: true type: donut + hide-legend: true series: - name: Maximum color: green diff --git a/pages/_includes/cards/charts/card.html b/pages/_includes/cards/charts/card.html new file mode 100644 index 000000000..4585fd5bb --- /dev/null +++ b/pages/_includes/cards/charts/card.html @@ -0,0 +1,17 @@ +{% if include.data %} +{% assign data = include.data %} +{% else %} +{% assign data = site.data.charts[include.name] %} +{% endif %} +{% assign key = 'chart-' | append: include.name %} +
+ {% unless include.hide-title %} +
+

{{ include.title | default: data.name }}

+
+ {% endunless %} +
+
+
+
+{% include js/charts.html id=key chart-id=include.name %} diff --git a/pages/_includes/js/charts.html b/pages/_includes/js/charts.html index 40c9e2f0a..05937a4a4 100644 --- a/pages/_includes/js/charts.html +++ b/pages/_includes/js/charts.html @@ -49,6 +49,18 @@ $(document).ready(function(){ {% endif %} {% endif %} + {% if data.show-grid %} + grid: { + show: true, + }, + {% endif %} + + {% if data.show-data-labels %} + dataLabels: { + enabled: true, + }, + {% endif %} + {% if data.categories or data.days-labels-count %} xaxis: { {% if data.categories %}categories: [{% for category in data.categories %}'{{ category }}'{% unless forloop.last %}, {% endunless %}{% endfor %}],{% endif %} @@ -95,7 +107,13 @@ $(document).ready(function(){ {% if data.hide-points %} point: { show: false - } + }, + {% endif %} + + {% if data.show-markers %} + markers: { + size: 2 + }, {% endif %} })).render(); }); diff --git a/pages/charts.html b/pages/charts.html index 022ab4b26..f31208094 100644 --- a/pages/charts.html +++ b/pages/charts.html @@ -6,18 +6,10 @@ menu: charts
{% for chart in site.data.charts %} {% if chart[1].display %} - {% assign data = chart[0] %} - {% assign key = 'chart-' | append: data %} + {% assign chart-name = chart[0] %} + {% assign chart-data = chart[1] %}
-
-
-

{{ chart[1].name }}

-
-
-
-
-
- {% include js/charts.html id=key chart-id=data %} + {% include cards/charts/card.html name=chart-name data=chart-data %}
{% endif %} {% endfor %} diff --git a/pages/index.html b/pages/index.html index ef6860cd3..9526f22f7 100644 --- a/pages/index.html +++ b/pages/index.html @@ -108,6 +108,16 @@ menu: level-1.level-2.level-3.level-4 {% include cards/small-stats-3.html number=621 title="Products" percentage=-1 %}
+
+ {% include cards/charts/card.html name="temperature" title="A" height=12 %} +
+
+ {% include cards/charts/card.html name="donut" title="B" height=12 %} +
+
+ {% include cards/charts/card.html name="pie" title="C" height=12 %} +
+ {% comment %}
{% comment %}{% include cards/development-activity.html %}{% endcomment %} diff --git a/scss/ui/_buttons.scss b/scss/ui/_buttons.scss index 819052bb4..aba584f8c 100644 --- a/scss/ui/_buttons.scss +++ b/scss/ui/_buttons.scss @@ -28,7 +28,7 @@ } .btn-secondary { - @include button-variant(#fff, $border-color, #fff, $border-color); + @include button-variant(transparent, $border-color, #fff, $border-color); color: $text-muted; &:hover { diff --git a/static/libs/apexcharts/apexcharts.common.js b/static/libs/apexcharts/apexcharts.common.js index bbcf8aec1..73c856e63 100644 --- a/static/libs/apexcharts/apexcharts.common.js +++ b/static/libs/apexcharts/apexcharts.common.js @@ -1,5 +1,5 @@ /*! - * ApexCharts v3.6.2 + * ApexCharts v3.6.12 * (c) 2018-2019 Juned Chhipa * Released under the MIT License. */ @@ -192,6 +192,18 @@ function () { key: "isObject", value: function isObject(item) { return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; + } + }, { + key: "listToArray", + value: function listToArray(list) { + var i, + array = []; + + for (i = 0; i < list.length; i++) { + array[i] = list[i]; + } + + return array; } // to extend defaults with user options // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 @@ -327,6 +339,34 @@ function () { if (val === null) return val; return parseFloat(val); } + }, { + key: "noExponents", + value: function noExponents(val) { + var data = String(val).split(/[eE]/); + if (data.length == 1) return data[0]; + var z = '', + sign = val < 0 ? '-' : '', + str = data[0].replace('.', ''), + mag = Number(data[1]) + 1; + + if (mag < 0) { + z = sign + '0.'; + + while (mag++) { + z += '0'; + } + + return z + str.replace(/^\-/, ''); + } + + mag -= str.length; + + while (mag--) { + z += '0'; + } + + return str + z; + } }, { key: "getDimensions", value: function getDimensions(el) { @@ -543,56 +583,34 @@ function () { _createClass(Filters, [{ key: "getDefaultFilter", - value: function getDefaultFilter(el) { + value: function getDefaultFilter(el, i) { var w = this.w; el.unfilter(true); var filter = new window.SVG.Filter(); filter.size('120%', '180%', '-5%', '-40%'); if (w.config.states.normal.filter !== 'none') { - this.applyFilter(el, w.config.states.normal.filter.type, w.config.states.normal.filter.value); + this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); } else { if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow); + this.dropShadow(el, w.config.chart.dropShadow, i); } } } }, { key: "addNormalFilter", - value: function addNormalFilter(el) { + value: function addNormalFilter(el, i) { var w = this.w; if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow); + this.dropShadow(el, w.config.chart.dropShadow, i); } - } - }, { - key: "addDesaturateFilter", - value: function addDesaturateFilter(el) { - var _this = this; - - var w = this.w; - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this.addShadow(add, shadowAttr); - } else { - filter = add; - } - - filter.colorMatrix('matrix', [0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 1.0, 0]).colorMatrix('saturate', 0); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); } // appends dropShadow to the filter object which can be chained with other filter effects }, { key: "addLightenFilter", - value: function addLightenFilter(el, attrs) { - var _this2 = this; + value: function addLightenFilter(el, i, attrs) { + var _this = this; var w = this.w; var intensity = attrs.intensity; @@ -608,7 +626,7 @@ function () { var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { - filter = _this2.addShadow(add, shadowAttr); + filter = _this.addShadow(add, i, shadowAttr); } else { filter = add; } @@ -626,8 +644,8 @@ function () { }, { key: "addDarkenFilter", - value: function addDarkenFilter(el, attrs) { - var _this3 = this; + value: function addDarkenFilter(el, i, attrs) { + var _this2 = this; var w = this.w; var intensity = attrs.intensity; @@ -643,7 +661,7 @@ function () { var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { - filter = _this3.addShadow(add, shadowAttr); + filter = _this2.addShadow(add, i, shadowAttr); } else { filter = add; } @@ -659,19 +677,19 @@ function () { } }, { key: "applyFilter", - value: function applyFilter(el, filter) { - var intensity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5; + value: function applyFilter(el, i, filter) { + var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; switch (filter) { case 'none': { - this.addNormalFilter(el); + this.addNormalFilter(el, i); break; } case 'lighten': { - this.addLightenFilter(el, { + this.addLightenFilter(el, i, { intensity: intensity }); break; @@ -679,18 +697,12 @@ function () { case 'darken': { - this.addDarkenFilter(el, { + this.addDarkenFilter(el, i, { intensity: intensity }); break; } - case 'desaturate': - { - this.addDesaturateFilter(el); - break; - } - default: // do nothing break; @@ -699,13 +711,13 @@ function () { }, { key: "addShadow", - value: function addShadow(add, attrs) { + value: function addShadow(add, i, attrs) { var blur = attrs.blur, top = attrs.top, left = attrs.left, color = attrs.color, opacity = attrs.opacity; - var shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); + var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); return add.blend(add.source, shadowBlur); } // directly adds dropShadow to the element and returns the same element. // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow @@ -713,6 +725,7 @@ function () { }, { key: "dropShadow", value: function dropShadow(el, attrs) { + var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var top = attrs.top, left = attrs.left, blur = attrs.blur, @@ -720,6 +733,7 @@ function () { opacity = attrs.opacity, noUserSpaceOnUse = attrs.noUserSpaceOnUse; el.unfilter(true); + color = Array.isArray(color) ? color[i] : color; var filter = new window.SVG.Filter(); filter.size('120%', '180%', '-5%', '-40%'); el.filter(function (add) { @@ -752,7 +766,7 @@ function () { var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { - this.applyFilter(el, activeFilter.type, activeFilter.value); + this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); } } } @@ -1208,7 +1222,9 @@ function () { _ref2$shouldClipToGri = _ref2.shouldClipToGrid, shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, - bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat; + bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, + _ref2$drawShadow = _ref2.drawShadow, + drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; var w = this.w; var filters = new Filters(this.ctx); var anim = new Animations(this.ctx); @@ -1254,12 +1270,12 @@ function () { if (w.config.states.normal.filter.type !== 'none') { - filters.getDefaultFilter(el, w.config.states.normal.filter.type, w.config.states.normal.filter.value); + filters.getDefaultFilter(el, realIndex); } else { - if (w.config.chart.dropShadow.enabled) { + if (w.config.chart.dropShadow.enabled && drawShadow) { if (!w.config.chart.dropShadow.enabledSeries || w.config.chart.dropShadow.enabledSeries && w.config.chart.dropShadow.enabledSeries.indexOf(realIndex) !== -1) { var shadow = w.config.chart.dropShadow; - filters.dropShadow(el, shadow); + filters.dropShadow(el, shadow, realIndex); } } } @@ -1427,6 +1443,7 @@ function () { fontFamily = opts.fontFamily, foreColor = opts.foreColor, opacity = opts.opacity; + if (typeof text === 'undefined') text = ''; if (!textAnchor) { textAnchor = 'start'; @@ -1453,7 +1470,7 @@ function () { x: x, y: y, 'text-anchor': textAnchor, - 'dominant-baseline': 'central', + 'dominant-baseline': 'auto', 'font-size': fontSize, 'font-family': fontFamily, fill: foreColor, @@ -1556,7 +1573,7 @@ function () { if (w.config.states.hover.filter.type !== 'none') { if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { var hoverFilter = w.config.states.hover.filter; - filters.applyFilter(path, hoverFilter.type, hoverFilter.value); + filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); } } } @@ -1589,7 +1606,7 @@ function () { } if (w.config.states.hover.filter.type !== 'none') { - filters.getDefaultFilter(path); + filters.getDefaultFilter(path, i); } } }, { @@ -1615,11 +1632,11 @@ function () { var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; elPaths.forEach(function (elPath) { elPath.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(elPath); + filters.getDefaultFilter(elPath, i); }); elCircles.forEach(function (circle) { circle.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(circle); + filters.getDefaultFilter(circle, i); }); } @@ -1637,11 +1654,11 @@ function () { var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { - filters.applyFilter(path, activeFilter.type, activeFilter.value); + filters.applyFilter(path, i, activeFilter.type, activeFilter.value); } } else { if (w.config.states.active.filter.type !== 'none') { - filters.getDefaultFilter(path); + filters.getDefaultFilter(path, i); } } @@ -1829,13 +1846,14 @@ function () { max: undefined, min: undefined, floating: false, - decimalsInFloat: 2, + decimalsInFloat: undefined, labels: { show: true, minWidth: 0, maxWidth: 160, offsetX: 0, offsetY: 0, + align: undefined, rotate: 0, padding: 20, style: { @@ -2041,6 +2059,7 @@ function () { updated: undefined, click: undefined, legendClick: undefined, + markerClick: undefined, selection: undefined, dataPointSelection: undefined, dataPointMouseEnter: undefined, @@ -2052,6 +2071,7 @@ function () { foreColor: '#373d3f', fontFamily: 'Helvetica, Arial, sans-serif', height: 'auto', + parentHeightOffset: 15, id: undefined, group: undefined, offsetX: 0, @@ -2126,19 +2146,20 @@ function () { plotOptions: { bar: { horizontal: false, - endingShape: 'flat', - // TODO: deprecate in 4.0 columnWidth: '70%', // should be in percent 0 - 100 barHeight: '70%', // should be in percent 0 - 100 distributed: false, + endingShape: 'flat', colors: { ranges: [], backgroundBarColors: [], backgroundBarOpacity: 1 }, dataLabels: { + maxItems: 100, + hideOverflowingLabels: true, position: 'top' // top, center, bottom // TODO: provide stackedLabels for stacked charts which gives additions of values @@ -2157,6 +2178,7 @@ function () { radius: 2, enableShades: true, shadeIntensity: 0.5, + reverseNegativeShade: true, distributed: false, colorScale: { inverse: false, @@ -2232,7 +2254,7 @@ function () { total: { show: false, label: 'Total', - color: '#373d3f', + color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; @@ -2241,6 +2263,7 @@ function () { } } }, + rangeBar: {}, pie: { size: undefined, customScale: 1, @@ -2249,8 +2272,9 @@ function () { expandOnClick: true, dataLabels: { // These are the percentage values which are displayed on slice - offset: 0 // offset by which labels will move outside - + offset: 0, + // offset by which labels will move outside + minAngleToShowLabel: 10 }, donut: { size: '65%', @@ -2278,7 +2302,7 @@ function () { total: { show: false, label: 'Total', - color: '#373d3f', + color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; @@ -2371,7 +2395,7 @@ function () { yaxis: { lines: { show: true, - animate: true + animate: false } }, row: { @@ -2530,6 +2554,7 @@ function () { }, tooltip: { enabled: true, + enabledOnSeries: undefined, shared: true, followCursor: false, // when disabled, the tooltip will show on top of the series instead of mouse position @@ -2689,6 +2714,7 @@ function () { }, yaxis: this.yAxis, theme: { + mode: 'light', palette: 'palette1', // If defined, it will overwrite globals.colors variable monochrome: { @@ -2722,7 +2748,7 @@ function () { this.w = ctx.w; this.graphics = new Graphics(this.ctx); - if (this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal) { + if (this.w.globals.isBarHorizontal) { this.invertAxis = true; } @@ -2753,11 +2779,9 @@ function () { el: annoElArray[i], index: 0 }); - } // after placing the annotations on svg, set any vertically placed annotations + } // background sizes needs to be calculated after text is drawn, so calling them last - this.setOrientations(w.config.annotations.xaxis); // background sizes needs to be calculated after text is drawn, so calling them last - this.annotationsBackground(); } } @@ -2768,11 +2792,15 @@ function () { var min = this.invertAxis ? w.globals.minY : w.globals.minX; var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; var x1 = (anno.x - min) / (range / w.globals.gridWidth); + var text = anno.label.text; if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { var catIndex = w.globals.labels.indexOf(anno.x); var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - x1 = parseFloat(xLabel.getAttribute('x')); + + if (xLabel) { + x1 = parseFloat(xLabel.getAttribute('x')); + } } var strokeDashArray = anno.strokeDashArray; @@ -2796,22 +2824,23 @@ function () { x2 = temp; } - var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x2 - x1, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); + if (text) { + var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 + 0 + anno.offsetY, // y1 + x2 - x1, // x2 + w.globals.gridHeight + anno.offsetY, // y2 + 0, // radius + anno.fillColor, // color + anno.opacity, // opacity, + 1, // strokeWidth + anno.borderColor, // strokeColor + strokeDashArray // stokeDashArray + ); + parent.appendChild(rect.node); + } } var textY = anno.label.position === 'top' ? -3 : w.globals.gridHeight; - var text = anno.label.text ? anno.label.text : ''; var elText = this.graphics.drawText({ x: x1 + anno.label.offsetX, y: textY + anno.label.offsetY, @@ -2825,7 +2854,9 @@ function () { elText.attr({ rel: index }); - parent.appendChild(elText.node); + parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations + + this.setOrientations(anno, index); } }, { key: "drawXAxisAnnotations", @@ -2852,16 +2883,19 @@ function () { if (this.invertAxis) { var catIndex = w.globals.labels.indexOf(anno.y); var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - y1 = parseFloat(xLabel.getAttribute('y')); + + if (xLabel) { + y1 = parseFloat(xLabel.getAttribute('y')); + } } else { y1 = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y1 = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } - var text = anno.label.text ? anno.label.text : ''; + var text = anno.label.text; if (anno.y2 === null) { var line = this.graphics.drawLine(0 + anno.offsetX, // x1 @@ -2878,11 +2912,13 @@ function () { var _xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (_catIndex + 1) + ')'); - y2 = parseFloat(_xLabel.getAttribute('y')); + if (_xLabel) { + y2 = parseFloat(_xLabel.getAttribute('y')); + } } else { y2 = w.globals.gridHeight - (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y2 = (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } @@ -2893,18 +2929,20 @@ function () { y2 = temp; } - var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 - y2 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 - y2, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); + if (text) { + var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 + y2 + anno.offsetY, // y1 + w.globals.gridWidth + anno.offsetX, // x2 + y1 - y2, // y2 + 0, // radius + anno.fillColor, // color + anno.opacity, // opacity, + 1, // strokeWidth + anno.borderColor, // strokeColor + strokeDashArray // stokeDashArray + ); + parent.appendChild(rect.node); + } } var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; @@ -2942,6 +2980,7 @@ function () { value: function clearAnnotations(ctx) { var w = ctx.w; var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); + annos = Utils.listToArray(annos); annos.forEach(function (a) { while (a.firstChild) { a.removeChild(a.firstChild); @@ -2974,7 +3013,7 @@ function () { y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseInt(anno.label.style.fontSize) + anno.marker.size; pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } @@ -2983,7 +3022,7 @@ function () { y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } @@ -3044,39 +3083,36 @@ function () { } }, { key: "setOrientations", - value: function setOrientations(annos) { - var _this4 = this; - + value: function setOrientations(anno) { var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var w = this.w; - annos.map(function (anno, index) { - if (anno.label.orientation === 'vertical') { - var i = annoIndex !== null ? annoIndex : index; - var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - if (xAnno !== null) { - var xAnnoCoord = xAnno.getBoundingClientRect(); - xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); + if (anno.label.orientation === 'vertical') { + var i = annoIndex !== null ? annoIndex : 0; + var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - if (anno.label.position === 'top') { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); - } else { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); - } + if (xAnno !== null) { + var xAnnoCoord = xAnno.getBoundingClientRect(); + xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); - var annoRotatingCenter = _this4.graphics.rotateAroundCenter(xAnno); - - var x = annoRotatingCenter.x; - var y = annoRotatingCenter.y; - xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); + if (anno.label.position === 'top') { + xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); + } else { + xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); } + + var annoRotatingCenter = this.graphics.rotateAroundCenter(xAnno); + var x = annoRotatingCenter.x; + var y = annoRotatingCenter.y; + xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); } - }); + } } }, { key: "addBackgroundToAnno", value: function addBackgroundToAnno(annoEl, anno) { var w = this.w; + if (!anno.label.text) return null; var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); var coords = annoEl.getBoundingClientRect(); var pleft = anno.label.style.padding.left; @@ -3099,7 +3135,7 @@ function () { }, { key: "annotationsBackground", value: function annotationsBackground() { - var _this5 = this; + var _this4 = this; var w = this.w; @@ -3109,9 +3145,11 @@ function () { if (annoLabel) { var parent = annoLabel.parentNode; - var elRect = _this5.addBackgroundToAnno(annoLabel, anno); + var elRect = _this4.addBackgroundToAnno(annoLabel, anno); - parent.insertBefore(elRect.node, annoLabel); + if (elRect) { + parent.insertBefore(elRect.node, annoLabel); + } } }; @@ -3166,8 +3204,11 @@ function () { }); parentNode.appendChild(elText.node); var textRect = elText.bbox(); - var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); - elText.before(elRect); + + if (text) { + var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); + elText.before(elRect); + } if (pushToMemory) { w.globals.memory.methodsToExec.push({ @@ -3200,6 +3241,10 @@ function () { }, { key: "addPointAnnotationExternal", value: function addPointAnnotationExternal(params, pushToMemory, context) { + if (typeof this.invertAxis === 'undefined') { + this.invertAxis = context.w.globals.isBarHorizontal; + } + this.addAnnotationExternal({ params: params, pushToMemory: pushToMemory, @@ -3267,7 +3312,10 @@ function () { var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); var elRect = this.addBackgroundToAnno(axesAnnoLabel, anno); - parent.insertBefore(elRect.node, axesAnnoLabel); + + if (elRect) { + parent.insertBefore(elRect.node, axesAnnoLabel); + } if (pushToMemory) { w.globals.memory.methodsToExec.push({ @@ -3284,6 +3332,244 @@ function () { return Annotations; }(); +/** + * DateTime Class to manipulate datetime values. + * + * @module DateTime + **/ + +var DateTime = +/*#__PURE__*/ +function () { + function DateTime(ctx) { + _classCallCheck(this, DateTime); + + this.ctx = ctx; + this.w = ctx.w; + this.months31 = [1, 3, 5, 7, 8, 10, 12]; + this.months30 = [2, 4, 6, 9, 11]; + this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + } + + _createClass(DateTime, [{ + key: "isValidDate", + value: function isValidDate(date) { + return !isNaN(this.parseDate(date)); + } + }, { + key: "getUTCTimeStamp", + value: function getUTCTimeStamp(dateStr) { + if (!Date.parse(dateStr)) { + return dateStr; + } + + return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); + } + }, { + key: "parseDate", + value: function parseDate(dateStr) { + var parsed = Date.parse(dateStr); + + if (!isNaN(parsed)) { + return this.getUTCTimeStamp(dateStr); + } + + var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); + output = this.getUTCTimeStamp(output); + return output; + } // https://stackoverflow.com/a/11252167/6495043 + + }, { + key: "treatAsUtc", + value: function treatAsUtc(dateStr) { + var result = new Date(dateStr); + result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); + return result; + } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 + + }, { + key: "formatDate", + value: function formatDate(date, format) { + var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var locale = this.w.globals.locale; + var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); + var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); + var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); + var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); + + function ii(i, len) { + var s = i + ''; + len = len || 2; + + while (s.length < len) { + s = '0' + s; + } + + return s; + } + + if (convertToUTC) { + date = this.treatAsUtc(date); + } + + var y = utc ? date.getUTCFullYear() : date.getFullYear(); + format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); + format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); + format = format.replace(/(^|[^\\])y/g, '$1' + y); + var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; + format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); + format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); + format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); + format = format.replace(/(^|[^\\])M/g, '$1' + M); + var d = utc ? date.getUTCDate() : date.getDate(); + format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); + format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); + format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); + format = format.replace(/(^|[^\\])d/g, '$1' + d); + var H = utc ? date.getUTCHours() : date.getHours(); + format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); + format = format.replace(/(^|[^\\])H/g, '$1' + H); + var h = H > 12 ? H - 12 : H === 0 ? 12 : H; + format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); + format = format.replace(/(^|[^\\])h/g, '$1' + h); + var m = utc ? date.getUTCMinutes() : date.getMinutes(); + format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); + format = format.replace(/(^|[^\\])m/g, '$1' + m); + var s = utc ? date.getUTCSeconds() : date.getSeconds(); + format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); + format = format.replace(/(^|[^\\])s/g, '$1' + s); + var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); + format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); + f = Math.round(f / 10); + format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); + f = Math.round(f / 10); + format = format.replace(/(^|[^\\])f/g, '$1' + f); + var T = H < 12 ? 'AM' : 'PM'; + format = format.replace(/(^|[^\\])TT+/g, '$1' + T); + format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); + var t = T.toLowerCase(); + format = format.replace(/(^|[^\\])tt+/g, '$1' + t); + format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); + var tz = -date.getTimezoneOffset(); + var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; + + if (!utc) { + tz = Math.abs(tz); + var tzHrs = Math.floor(tz / 60); + var tzMin = tz % 60; + K += ii(tzHrs) + ':' + ii(tzMin); + } + + format = format.replace(/(^|[^\\])K/g, '$1' + K); + var day = (utc ? date.getUTCDay() : date.getDay()) + 1; + format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); + format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); + format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); + format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); + format = format.replace(/\\(.)/g, '$1'); + return format; + } + }, { + key: "getTimeUnitsfromTimestamp", + value: function getTimeUnitsfromTimestamp(minX, maxX) { + var w = this.w; + + if (w.config.xaxis.min !== undefined) { + minX = w.config.xaxis.min; + } + + if (w.config.xaxis.max !== undefined) { + maxX = w.config.xaxis.max; + } + + var minYear = new Date(minX).getFullYear(); + var maxYear = new Date(maxX).getFullYear(); + var minMonth = new Date(minX).getMonth(); + var maxMonth = new Date(maxX).getMonth(); + var minDate = new Date(minX).getDate(); + var maxDate = new Date(maxX).getDate(); + var minHour = new Date(minX).getHours(); + var maxHour = new Date(maxX).getHours(); + var minMinute = new Date(minX).getMinutes(); + var maxMinute = new Date(maxX).getMinutes(); + return { + minMinute: minMinute, + maxMinute: maxMinute, + minHour: minHour, + maxHour: maxHour, + minDate: minDate, + maxDate: maxDate, + minMonth: minMonth, + maxMonth: maxMonth, + minYear: minYear, + maxYear: maxYear + }; + } + }, { + key: "isLeapYear", + value: function isLeapYear(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; + } + }, { + key: "calculcateLastDaysOfMonth", + value: function calculcateLastDaysOfMonth(month, year, subtract) { + var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked + + return days - subtract; + } + }, { + key: "determineDaysOfYear", + value: function determineDaysOfYear(year) { + var days = 365; + + if (this.isLeapYear(year)) { + days = 366; + } + + return days; + } + }, { + key: "determineRemainingDaysOfYear", + value: function determineRemainingDaysOfYear(year, month, date) { + var dayOfYear = this.daysCntOfYear[month] + date; + if (month > 1 && this.isLeapYear()) dayOfYear++; + return dayOfYear; + } + }, { + key: "determineDaysOfMonths", + value: function determineDaysOfMonths(month, year) { + var days = 30; + month = Utils.monthMod(month); + + switch (true) { + case this.months30.indexOf(month) > -1: + if (month === 2) { + if (this.isLeapYear(year)) { + days = 29; + } else { + days = 28; + } + } + + break; + + case this.months31.indexOf(month) > -1: + days = 31; + break; + + default: + days = 31; + break; + } + + return days; + } + }]); + + return DateTime; +}(); + /** * ApexCharts Default Class for setting default options for all chart types. * @@ -3467,6 +3753,79 @@ function () { } }; } + }, { + key: "rangeBar", + value: function rangeBar() { + return { + stroke: { + width: 0 + }, + plotOptions: { + bar: { + dataLabels: { + position: 'center' + } + } + }, + dataLabels: { + enabled: false, + formatter: function formatter(val, _ref2) { + var ctx = _ref2.ctx, + seriesIndex = _ref2.seriesIndex, + dataPointIndex = _ref2.dataPointIndex, + w = _ref2.w; + var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; + var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; + return end - start; + }, + style: { + colors: ['#fff'] + } + }, + tooltip: { + shared: false, + followCursor: true, + custom: function custom(_ref3) { + var ctx = _ref3.ctx, + seriesIndex = _ref3.seriesIndex, + dataPointIndex = _ref3.dataPointIndex, + w = _ref3.w; + var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; + var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; + var startVal = ''; + var endVal = ''; + var color = w.globals.colors[seriesIndex]; + + if (w.config.tooltip.x.formatter === undefined) { + if (w.config.xaxis.type === 'datetime') { + var datetimeObj = new DateTime(ctx); + startVal = datetimeObj.formatDate(new Date(start), w.config.tooltip.x.format, true, true); + endVal = datetimeObj.formatDate(new Date(end), w.config.tooltip.x.format, true, true); + } else { + startVal = start; + endVal = end; + } + } else { + startVal = w.config.tooltip.x.formatter(start); + endVal = w.config.tooltip.x.formatter(end); + } + + var ylabel = w.globals.labels[dataPointIndex]; + return '
' + '
' + (w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '') + '
' + '
' + ylabel + ': ' + startVal + ' - ' + endVal + '
' + '
'; + } + }, + xaxis: { + tooltip: { + enabled: false + }, + crosshairs: { + stroke: { + width: 0 + } + } + } + }; + } }, { key: "area", value: function area() { @@ -3854,7 +4213,7 @@ function () { opts.xaxis.categories = []; opts.labels = []; - opts.chart.zoom.enabled = false; + opts.chart.zoom.enabled = opts.chart.zoom.enabled || false; return opts; } }]); @@ -4084,21 +4443,22 @@ function () { if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { // Negative numbers present in series gl.hasNegs = true; + } + + if (gl.isMultipleYAxis) { baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives - if (gl.isMultipleYAxis) { - for (var _i2 = 0; _i2 < yRatio.length; _i2++) { - baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); - } - } else { - baseLineY.push(-gl.minY / yRatio[0]); + for (var _i2 = 0; _i2 < yRatio.length; _i2++) { + baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); } - - baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart - - baseLineX = gl.minX / xRatio; } else { - baseLineY.push(0); + baseLineY.push(-gl.minY / yRatio[0]); + + if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { + baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart + + baseLineX = gl.minX / xRatio; + } } return { @@ -4268,6 +4628,10 @@ function () { chartDefaults = defaults.candlestick(); break; + case 'rangeBar': + chartDefaults = defaults.rangeBar(); + break; + case 'histogram': chartDefaults = defaults.bar(); break; @@ -4310,12 +4674,17 @@ function () { if (opts.chart.stacked && opts.chart.stackType === '100%') { defaults.stacked100(); - } + } // If user has specified a dark theme, make the tooltip dark too + + + this.checkForDarkTheme(window.Apex); // check global window Apex options + + this.checkForDarkTheme(opts); // check locally passed options opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; var combo = CoreUtils.checkComboSeries(opts.series); - if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.tickPlacement !== 'between') { + if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric' && opts.xaxis.tickPlacement !== 'between') { opts = Defaults.convertCatToNumeric(opts); } @@ -4398,6 +4767,27 @@ function () { opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); return opts; } + }, { + key: "checkForDarkTheme", + value: function checkForDarkTheme(opts) { + if (opts.theme && opts.theme.mode === 'dark') { + if (!opts.tooltip) { + opts.tooltip = {}; + } + + if (opts.tooltip.theme !== 'light') { + opts.tooltip.theme = 'dark'; + } + + if (!opts.chart.foreColor) { + opts.chart.foreColor = '#f6f7f8'; + } + + if (!opts.theme.palette) { + opts.theme.palette = 'palette4'; + } + } + } }, { key: "checkEmptySeries", value: function checkEmptySeries(ser) { @@ -4422,16 +4812,12 @@ function () { console.warn('Scroller has been deprecated since v2.0.0. Please remove the configuration for chart.scroller'); } - if (config.chart.type === 'bar' && config.plotOptions.bar.horizontal) { - // No time series for horizontal bars - if (config.xaxis.type === 'datetime') { - throw new Error('Timelines on bars are not supported yet. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } // No multiple yaxis for bars - - + if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { + // No multiple yaxis for bars if (config.yaxis.length > 1) { throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } + } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side + if (config.yaxis[0].reversed) { config.yaxis[0].opposite = true; @@ -4444,7 +4830,7 @@ function () { config.chart.zoom.enabled = false; // no zooming for horz bars } - if (config.chart.type === 'bar') { + if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { if (config.tooltip.shared) { if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); @@ -4453,10 +4839,11 @@ function () { if (config.plotOptions.bar.horizontal) { config.states.hover.type = 'none'; + config.tooltip.shared = false; } if (!config.tooltip.followCursor) { - console.warn('followCursor option in shared columns cannot be turned off.'); + console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); config.tooltip.followCursor = true; } } @@ -4514,6 +4901,8 @@ function () { scrolled: [] }, colors: [], + clientX: null, + clientY: null, fill: { colors: [] }, @@ -4545,6 +4934,10 @@ function () { lastYAxis: [], series: [], // the MAIN series array (y values) + seriesRangeStart: [], + // the clone of series becomes the start in range + seriesRangeEnd: [], + // the end values in range chart seriesPercent: [], // the percentage values of the given series seriesTotals: [], @@ -4558,6 +4951,8 @@ function () { // Don't mutate the labels, many things including tooltips depends on it! timelineLabels: [], // store the timeline Labels in another variable + invertedTimelineLabels: [], + // for rangebar timeline seriesNames: [], // same as labels, used in non axis charts noLabelsProvided: false, @@ -4570,9 +4965,11 @@ function () { ancillaryCollapsedSeries: [], // when user collapses an "alwaysVisible" series, it goes into this array ancillaryCollapsedSeriesIndices: [], - // this stores the index of the collapsedSeries whose y-axis is always visible + // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible risingSeries: [], // when user re-opens a collapsed series, it goes here + dataFormatXNumeric: false, + // boolean value to indicate user has passed numeric x values selectedDataPoints: [], ignoreYAxisIndexes: [], // when series are being collapsed in multiple y axes, ignore certain index @@ -4600,6 +4997,7 @@ function () { // Max Z value in charts with Z axis maxZ: -Number.MAX_VALUE, // Max Z value in charts with Z axis + minXDiff: Number.MAX_VALUE, mousedown: false, lastClientPosition: {}, // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning @@ -4636,6 +5034,8 @@ function () { methodsToExec: [] }, shouldAnimate: true, + skipLastTimelinelabel: false, + // when last label is cropped, skip drawing it delayedElements: [], // element which appear after animation has finished axisCharts: true, @@ -4857,6 +5257,15 @@ function () { this.seriesIndex = this.getSeriesIndex(opts); var fillColors = this.getFillColors(); var fillColor = fillColors[this.seriesIndex]; + + if (typeof fillColor === 'function') { + fillColor = fillColor({ + seriesIndex: this.seriesIndex, + value: opts.value, + w: w + }); + } + var fillType = this.getFillType(this.seriesIndex); var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; var defaultColor = fillColor; @@ -5071,6 +5480,7 @@ function () { var _this = this; var w = this.w; + var i = seriesIndex; var p = pointsPos; var elPointsWrap = null; var graphics = new Graphics(this.ctx); @@ -5114,6 +5524,17 @@ function () { opts.pSize = marker.size; } }); + + if (w.config.series[i].data[j]) { + if (w.config.series[i].data[j].fillColor) { + opts.pointFillColor = w.config.series[i].data[j].fillColor; + } + + if (w.config.series[i].data[j].strokeColor) { + opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; + } + } + point = graphics.drawMarker(p.x[q], p.y[q], opts); point.attr('rel', dataPointIndex); point.attr('j', dataPointIndex); @@ -5269,29 +5690,37 @@ function () { key: "drawPoint", value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { var w = this.w; + var i = realIndex; var anim = new Animations(this.ctx); var filters = new Filters(this.ctx); var fill = new Fill(this.ctx); + var markers = new Markers(this.ctx); var graphics = new Graphics(this.ctx); + var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); var pathFillCircle = fill.fillPath({ seriesNumber: realIndex, - patternUnits: 'objectBoundingBox' + patternUnits: 'objectBoundingBox', + value: w.globals.series[realIndex][j] }); var circle = graphics.drawCircle(radius); + + if (w.config.series[i].data[dataPointIndex]) { + if (w.config.series[i].data[dataPointIndex].fillColor) { + pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; + } + } + circle.attr({ cx: x, cy: y, - fill: pathFillCircle + fill: pathFillCircle, + stroke: markerConfig.pointStrokeColor, + strokeWidth: markerConfig.pWidth }); if (w.config.chart.dropShadow.enabled) { - filters.dropShadow(circle, { - top: w.config.chart.dropShadow.top, - left: w.config.chart.dropShadow.left, - blur: w.config.chart.dropShadow.blur, - color: w.config.chart.dropShadow.color, - opacity: w.config.chart.dropShadow.opacity - }); + var dropShadow = w.config.chart.dropShadow; + filters.dropShadow(circle, dropShadow, realIndex); } if (this.initialAnim && !w.globals.dataChanged) { @@ -5348,7 +5777,6 @@ function () { index: realIndex, 'default-marker-size': finishRadius }); - var markers = new Markers(this.ctx); filters.setSelectionFilter(circle, realIndex, dataPointIndex); markers.addEvents(circle); circle.node.classList.add('apexcharts-marker'); @@ -5432,6 +5860,7 @@ function () { }, { key: "drawDataLabel", value: function drawDataLabel(pos, i, j) { + var align = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'top'; // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions // all other charts like bars / heatmaps will define their own drawDataLabel routine var w = this.w; @@ -5455,6 +5884,10 @@ function () { x = pos.x[q] + dataLabelsConfig.offsetX; y = pos.y[q] + dataLabelsConfig.offsetY - w.globals.markers.size[i] - 5; + if (align === 'bottom') { + y = y + w.globals.markers.size[i] * 2 + parseInt(dataLabelsConfig.style.fontSize) * 1.4; + } + if (!isNaN(x)) { // a small hack as we have 2 points for the first val to connect it if (j === 1 && q === 0) dataPointIndex = 0; @@ -5469,8 +5902,9 @@ function () { var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); y = centerTextInBubbleCoords.y; } else { - if (typeof val !== 'undefined') { + if (typeof val !== 'undefined' && val !== null) { text = w.config.dataLabels.formatter(val, { + ctx: this.ctx, seriesIndex: i, dataPointIndex: dataPointIndex, w: w @@ -5576,8 +6010,6 @@ function () { * @module Bar **/ -var DATA_LABELS_WARNING_THRESHOLD = 50; - var Bar = /*#__PURE__*/ function () { @@ -5602,7 +6034,6 @@ function () { this.baseLineInvertedY = xyRatios.baseLineInvertedY; } - this.minXDiff = Number.MAX_VALUE; this.yaxisIndex = 0; this.seriesLen = 0; } @@ -5617,28 +6048,24 @@ function () { _createClass(Bar, [{ key: "draw", value: function draw(series, seriesIndex) { - var _this = this; - var w = this.w; var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); + this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.initVariables(series); var ret = graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); if (w.config.dataLabels.enabled) { - if (this.totalItems > DATA_LABELS_WARNING_THRESHOLD) { + if (this.totalItems > w.config.plotOptions.bar.dataLabels.maxItems) { console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); } } - var _loop = function _loop(i, bc) { + for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, pathFrom = void 0; var x = void 0, @@ -5658,29 +6085,27 @@ function () { var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + class: "apexcharts-series", rel: i + 1, + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), 'data:realIndex': realIndex }); - - _this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); + this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); if (series[i].length > 0) { - _this.visibleI = _this.visibleI + 1; + this.visibleI = this.visibleI + 1; } var strokeWidth = 0; var barHeight = 0; var barWidth = 0; - if (_this.yRatio.length > 1) { - _this.yaxisIndex = realIndex; + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; } - _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; - - var initPositions = _this.initialPositions(); - + this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; + var initPositions = this.initialPositions(); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; @@ -5690,7 +6115,7 @@ function () { xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; - if (!_this.horizontal) { + if (!this.horizontal) { xArrj.push(x + barWidth / 2); } // eldatalabels @@ -5699,25 +6124,25 @@ function () { class: 'apexcharts-datalabels' }); - var _loop2 = function _loop2(j, tj) { - if (typeof _this.series[i][j] === 'undefined' || series[i][j] === null) { - _this.isNullValue = true; + for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { + if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { + this.isNullValue = true; } else { - _this.isNullValue = false; + this.isNullValue = false; } if (w.config.stroke.show) { - if (_this.isNullValue) { + if (this.isNullValue) { strokeWidth = 0; } else { - strokeWidth = Array.isArray(_this.strokeWidth) ? _this.strokeWidth[realIndex] : _this.strokeWidth; + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; } } var paths = null; - if (_this.isHorizontal) { - paths = _this.drawBarPaths({ + if (this.isHorizontal) { + paths = this.drawBarPaths({ indexes: { i: i, j: j, @@ -5734,8 +6159,9 @@ function () { yDivision: yDivision, elSeries: elSeries }); + barWidth = this.series[i][j] / this.invertedYRatio; } else { - paths = _this.drawColumnPaths({ + paths = this.drawColumnPaths({ indexes: { i: i, j: j, @@ -5752,6 +6178,7 @@ function () { strokeWidth: strokeWidth, elSeries: elSeries }); + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; } pathTo = paths.pathTo; @@ -5764,23 +6191,8 @@ function () { } yArrj.push(y); - var seriesNumber = _this.barOptions.distributed ? j : i; - var fillColor = null; - - if (_this.barOptions.colors.ranges.length > 0) { - var colorRange = _this.barOptions.colors.ranges; - colorRange.map(function (range) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - var pathFill = fill.fillPath({ - seriesNumber: _this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor - }); - elSeries = _this.renderSeries({ + var pathFill = this.getPathFillColor(series, i, j, realIndex); + elSeries = this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, @@ -5795,27 +6207,47 @@ function () { barHeight: barHeight, barWidth: barWidth, elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: _this.visibleI, + visibleSeries: this.visibleI, type: 'bar' }); - }; - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - _loop2(j, tj); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrj; w.globals.seriesYvalues[realIndex] = yArrj; ret.add(elSeries); - }; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - _loop(i, bc); } return ret; } + }, { + key: "getPathFillColor", + value: function getPathFillColor(series, i, j, realIndex) { + var w = this.w; + var fill = new Fill(this.ctx); + var fillColor = null; + var seriesNumber = this.barOptions.distributed ? j : i; + + if (this.barOptions.colors.ranges.length > 0) { + var colorRange = this.barOptions.colors.ranges; + colorRange.map(function (range) { + if (series[i][j] >= range.from && series[i][j] <= range.to) { + fillColor = range.color; + } + }); + } + + if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { + fillColor = w.config.series[i].data[j].fillColor; + } + + var pathFill = fill.fillPath({ + seriesNumber: this.barOptions.distributed ? seriesNumber : realIndex, + color: fillColor, + value: series[i][j] + }); + return pathFill; + } }, { key: "renderSeries", value: function renderSeries(_ref) { @@ -5844,6 +6276,10 @@ function () { lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; } + if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { + lineFill = w.config.series[i].data[j].strokeColor; + } + if (this.isNullValue) { pathFill = 'none'; } @@ -5865,6 +6301,7 @@ function () { className: "apexcharts-".concat(type, "-area"), id: "apexcharts-".concat(type, "-area") }); + renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); var filters = new Filters(this.ctx); filters.setSelectionFilter(renderedPath, realIndex, j); elSeries.add(renderedPath); @@ -5891,8 +6328,6 @@ function () { }, { key: "initVariables", value: function initVariables(series) { - var _this2 = this; - var w = this.w; this.series = series; this.totalItems = 0; @@ -5907,16 +6342,7 @@ function () { } if (w.globals.isXNumeric) { - // get the least x diff if numeric x axis is present - w.globals.seriesX.forEach(function (sX, i) { - sX.forEach(function (s, j) { - if (j > 0) { - var xDiff = s - w.globals.seriesX[i][j - 1]; - _this2.minXDiff = Math.min(xDiff, _this2.minXDiff); - } - }); - }); // get max visible items - + // get max visible items for (var j = 0; j < series[sl].length; j++) { if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { this.visibleItems++; @@ -5958,22 +6384,7 @@ function () { if (w.globals.isXNumeric) { // max barwidth should be equal to minXDiff to avoid overlap - if (this.minXDiff === Number.MAX_VALUE) { - // possibly a single dataPoint (fixes react-apexcharts/issue#34) - var len = w.globals.labels.length; - - if (w.globals.timelineLabels.length > 0) { - len = w.globals.timelineLabels.length; - } - - if (len < 3) { - len = 3; - } - - this.minXDiff = (w.globals.maxX - w.globals.minX) / len; - } - - xDivision = this.minXDiff / this.xRatio; + xDivision = w.globals.minXDiff / this.xRatio; barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; } @@ -6030,8 +6441,16 @@ function () { x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } - pathTo = pathTo + graphics.line(x, barYPosition) + graphics.line(x, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); + var endingShapeOpts = { + barHeight: barHeight, + strokeWidth: strokeWidth, + barYPosition: barYPosition, + x: x, + zeroW: zeroW + }; + var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); + pathTo = pathTo + graphics.line(endingShape.newX, barYPosition) + endingShape.path + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); + pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + endingShape.ending_p_from + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); if (!w.globals.isXNumeric) { y = y + yDivision; @@ -6094,8 +6513,16 @@ function () { y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; } - pathTo = pathTo + graphics.line(barXPosition, y) + graphics.line(barXPosition + barWidth - strokeWidth, y) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition, zeroH); - pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition, zeroH); + var endingShapeOpts = { + barWidth: barWidth, + strokeWidth: strokeWidth, + barXPosition: barXPosition, + y: y, + zeroH: zeroH + }; + var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); + pathTo = pathTo + graphics.line(barXPosition, endingShape.newY) + endingShape.path + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); + pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + endingShape.ending_p_from + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); if (!w.globals.isXNumeric) { x = x + xDivision; @@ -6172,7 +6599,7 @@ function () { var bcx = x + parseFloat(barWidth * visibleSeries); var bcy = y + parseFloat(barHeight * visibleSeries); - if (w.globals.isXNumeric) { + if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { bcx = x + parseFloat(barWidth * (visibleSeries + 1)) - strokeWidth; bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; } @@ -6203,6 +6630,7 @@ function () { renderedPath: renderedPath, bcy: bcy, barHeight: barHeight, + barWidth: barWidth, textRects: textRects, strokeWidth: strokeWidth, dataLabelsX: dataLabelsX, @@ -6246,6 +6674,9 @@ function () { val: series[i][j], i: realIndex, j: j, + barWidth: barWidth, + barHeight: barHeight, + textRects: textRects, dataLabelsConfig: dataLabelsConfig }); return dataLabels; @@ -6256,10 +6687,10 @@ function () { var w = this.w; var i = opts.i, j = opts.j, - realIndex = opts.realIndex, y = opts.y, bcx = opts.bcx, barWidth = opts.barWidth, + barHeight = opts.barHeight, textRects = opts.textRects, dataLabelsY = opts.dataLabelsY, barDataLabelsConfig = opts.barDataLabelsConfig, @@ -6267,7 +6698,6 @@ function () { offX = opts.offX, offY = opts.offY; var dataLabelsX; - var barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; bcx = bcx - strokeWidth / 2; @@ -6279,7 +6709,7 @@ function () { var valIsNegative = this.series[i][j] <= 0; - if (w.config.yaxis[this.yaxisIndex].reversed) { + if (this.isReversed) { y = y - barHeight; } @@ -6312,6 +6742,14 @@ function () { break; } + if (!w.config.chart.stacked) { + if (dataLabelsY < 0) { + dataLabelsY = 0 + strokeWidth; + } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { + dataLabelsY = w.globals.gridHeight - strokeWidth; + } + } + return { bcx: bcx, bcy: y, @@ -6328,6 +6766,7 @@ function () { j = opts.j, bcy = opts.bcy, barHeight = opts.barHeight, + barWidth = opts.barWidth, textRects = opts.textRects, dataLabelsX = opts.dataLabelsX, strokeWidth = opts.strokeWidth, @@ -6336,10 +6775,9 @@ function () { offY = opts.offY; var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; var dataLabelsY = bcy - dataPointsDividedHeight + barHeight / 2 + textRects.height / 2 + offY - 3; - var barWidth = this.series[i][j] / this.invertedYRatio; var valIsNegative = this.series[i][j] <= 0; - if (w.config.yaxis[this.yaxisIndex].reversed) { + if (this.isReversed) { x = x + barWidth; } @@ -6372,10 +6810,12 @@ function () { break; } - if (dataLabelsX < 0) { - dataLabelsX = textRects.width + strokeWidth; - } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { - dataLabelsX = dataLabelsX - textRects.width - strokeWidth; + if (!w.config.chart.stacked) { + if (dataLabelsX < 0) { + dataLabelsX = dataLabelsX + textRects.width + strokeWidth; + } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { + dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; + } } return { @@ -6393,6 +6833,9 @@ function () { val = _ref5.val, i = _ref5.i, j = _ref5.j, + textRects = _ref5.textRects, + barHeight = _ref5.barHeight, + barWidth = _ref5.barWidth, dataLabelsConfig = _ref5.dataLabelsConfig; var w = this.w; var dataLabels = new DataLabels(this.ctx); @@ -6415,6 +6858,29 @@ function () { }); } + if (val === 0 && w.config.chart.stacked) { + // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element + text = ''; + } + + if (w.config.chart.stacked && this.barOptions.dataLabels.hideOverflowingLabels) { + // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect + // Note: This issue is only seen in stacked charts + if (this.isHorizontal) { + barWidth = this.series[i][j] / this.yRatio[this.yaxisIndex]; + + if (textRects.width / 1.6 > barWidth) { + text = ''; + } + } else { + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; + + if (textRects.height / 1.6 > barHeight) { + text = ''; + } + } + } + dataLabels.plotDataLabelsText({ x: x, y: y, @@ -6430,6 +6896,91 @@ function () { return elDataLabelsWrap; } + /** barEndingShape draws the various shapes on top of bars/columns + * @memberof Bar + * @param {object} w - chart context + * @param {object} opts - consists several properties like barHeight/barWidth + * @param {array} series - global primary series + * @param {int} i - current iterating series's index + * @param {int} j - series's j of i + * @return {object} path - ending shape whether round/arrow + * ending_p_from - similar to pathFrom + * newY - which is calculated from existing y and new shape's top + **/ + + }, { + key: "barEndingShape", + value: function barEndingShape(w, opts, series, i, j) { + var graphics = new Graphics(this.ctx); + + if (this.isHorizontal) { + var endingShape = null; + var endingShapeFrom = ''; + var x = opts.x; + + if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { + var inverse = series[i][j] < 0; + var eX = opts.barHeight / 2 - opts.strokeWidth; + if (inverse) eX = -opts.barHeight / 2 - opts.strokeWidth; + + if (!w.config.chart.stacked) { + if (this.barOptions.endingShape === 'rounded') { + x = opts.x - eX / 2; + } + } + + switch (this.barOptions.endingShape) { + case 'flat': + endingShape = graphics.line(x, opts.barYPosition + opts.barHeight - opts.strokeWidth); + break; + + case 'rounded': + endingShape = graphics.quadraticCurve(x + eX, opts.barYPosition + (opts.barHeight - opts.strokeWidth) / 2, x, opts.barYPosition + opts.barHeight - opts.strokeWidth); + break; + } + } + + return { + path: endingShape, + ending_p_from: endingShapeFrom, + newX: x + }; + } else { + var _endingShape = null; + var _endingShapeFrom = ''; + var y = opts.y; + + if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { + var _inverse = series[i][j] < 0; + + var eY = opts.barWidth / 2 - opts.strokeWidth; + if (_inverse) eY = -opts.barWidth / 2 - opts.strokeWidth; + + if (!w.config.chart.stacked) { + // the shape exceeds the chart height, hence reduce y + if (this.barOptions.endingShape === 'rounded') { + y = y + eY / 2; + } + } + + switch (this.barOptions.endingShape) { + case 'flat': + _endingShape = graphics.line(opts.barXPosition + opts.barWidth - opts.strokeWidth, y); + break; + + case 'rounded': + _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - opts.strokeWidth) / 2, y - eY, opts.barXPosition + opts.barWidth - opts.strokeWidth, y); + break; + } + } + + return { + path: _endingShape, + ending_p_from: _endingShapeFrom, + newY: y + }; + } + } }]); return Bar; @@ -6457,24 +7008,20 @@ function (_Bar) { _createClass(BarStacked, [{ key: "draw", value: function draw(series, seriesIndex) { - var _this = this; - var w = this.w; this.graphics = new Graphics(this.ctx); this.fill = new Fill(this.ctx); this.bar = new Bar(this.ctx, this.xyRatios); var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.series = series; this.initVariables(series); if (w.config.chart.stackType === '100%') { - this.series = w.globals.seriesPercent.slice(); - series = this.series; + series = w.globals.seriesPercent.slice(); } + this.series = series; this.totalItems = 0; this.prevY = []; // y position on chart @@ -6509,11 +7056,10 @@ function (_Bar) { var ret = this.graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); var x = 0; var y = 0; - var _loop = function _loop(i, bc) { + for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, pathFrom = void 0; var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) @@ -6528,29 +7074,26 @@ function (_Bar) { var yArrValues = []; var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - if (_this.yRatio.length > 1) { - _this.yaxisIndex = realIndex; + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; } - _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; // el to which series will be drawn + this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // el to which series will be drawn - var elSeries = _this.graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + var elSeries = this.graphics.group({ + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); // eldatalabels - - var elDataLabelsWrap = _this.graphics.group({ + var elDataLabelsWrap = this.graphics.group({ class: 'apexcharts-datalabels' }); - var strokeWidth = 0; var barHeight = 0; var barWidth = 0; - - var initPositions = _this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); - + var initPositions = this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; @@ -6559,28 +7102,28 @@ function (_Bar) { barWidth = initPositions.barWidth; xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; - _this.yArrj = []; - _this.yArrjF = []; - _this.yArrjVal = []; - _this.xArrj = []; - _this.xArrjF = []; - _this.xArrjVal = []; // if (!this.horizontal) { + this.yArrj = []; + this.yArrjF = []; + this.yArrjVal = []; + this.xArrj = []; + this.xArrjF = []; + this.xArrjVal = []; // if (!this.horizontal) { // this.xArrj.push(x + barWidth / 2) // } - var _loop2 = function _loop2(j) { + for (var j = 0; j < w.globals.dataPoints; j++) { if (w.config.stroke.show) { - if (_this.isNullValue) { + if (this.isNullValue) { strokeWidth = 0; } else { - strokeWidth = Array.isArray(_this.strokeWidth) ? _this.strokeWidth[realIndex] : _this.strokeWidth; + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; } } var paths = null; - if (_this.isHorizontal) { - paths = _this.drawBarPaths({ + if (this.isHorizontal) { + paths = this.drawBarPaths({ indexes: { i: i, j: j, @@ -6597,8 +7140,9 @@ function (_Bar) { yDivision: yDivision, elSeries: elSeries }); + barWidth = this.series[i][j] / this.invertedYRatio; } else { - paths = _this.drawColumnPaths({ + paths = this.drawColumnPaths({ indexes: { i: i, j: j, @@ -6615,6 +7159,7 @@ function (_Bar) { strokeWidth: strokeWidth, elSeries: elSeries }); + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; } pathTo = paths.pathTo; @@ -6623,24 +7168,8 @@ function (_Bar) { x = paths.x; xArrValues.push(x); yArrValues.push(y); - var seriesNumber = w.config.plotOptions.bar.distributed ? j : i; - var fillColor = null; - - if (_this.barOptions.colors.ranges.length > 0) { - var colorRange = _this.barOptions.colors.ranges; - colorRange.map(function (range, index) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - var pathFill = _this.fill.fillPath({ - seriesNumber: _this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor - }); - - elSeries = _this.renderSeries({ + var pathFill = this.bar.getPathFillColor(series, i, j, realIndex); + elSeries = this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, @@ -6658,33 +7187,19 @@ function (_Bar) { type: 'bar', visibleSeries: 0 }); - }; - - for (var j = 0; j < w.globals.dataPoints; j++) { - _loop2(j); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrValues; w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array - _this.prevY.push(_this.yArrj); - - _this.prevYF.push(_this.yArrjF); - - _this.prevYVal.push(_this.yArrjVal); - - _this.prevX.push(_this.xArrj); - - _this.prevXF.push(_this.xArrjF); - - _this.prevXVal.push(_this.xArrjVal); - + this.prevY.push(this.yArrj); + this.prevYF.push(this.yArrjF); + this.prevYVal.push(this.yArrjVal); + this.prevX.push(this.xArrj); + this.prevXF.push(this.xArrjF); + this.prevXVal.push(this.xArrjVal); ret.add(elSeries); - }; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - _loop(i, bc); } return ret; @@ -6709,8 +7224,7 @@ function (_Bar) { barWidth = xDivision; if (w.globals.isXNumeric) { - // max barwidth should be equal to minXDiff to avoid overlap - xDivision = this.minXDiff / this.xRatio; + xDivision = w.globals.minXDiff / this.xRatio; barWidth = xDivision * parseInt(this.barOptions.columnWidth) / 100; } else { barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth) / 100; @@ -6787,8 +7301,22 @@ function (_Bar) { x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } - this.xArrj.push(x); - this.xArrjF.push(Math.abs(barXPosition - x)); + var endingShapeOpts = { + barHeight: barHeight, + strokeWidth: strokeWidth, + invertedYRatio: this.invertedYRatio, + barYPosition: barYPosition, + x: x + }; + var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); + + if (this.series.length > 1 && i !== this.endingShapeOnSeriesNumber) { + // revert back to flat shape if not last series + endingShape.path = this.graphics.line(endingShape.newX, barYPosition + barHeight - strokeWidth); + } + + this.xArrj.push(endingShape.newX); + this.xArrjF.push(Math.abs(barXPosition - endingShape.newX)); this.xArrjVal.push(this.series[i][j]); pathTo = this.graphics.move(barXPosition, barYPosition); pathFrom = this.graphics.move(barXPosition, barYPosition); @@ -6797,7 +7325,7 @@ function (_Bar) { pathFrom = this.bar.getPathFrom(realIndex, j, false); } - pathTo = pathTo + this.graphics.line(x, barYPosition) + this.graphics.line(x, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); + pathTo = pathTo + this.graphics.line(endingShape.newX, barYPosition) + endingShape.path + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { @@ -6877,8 +7405,16 @@ function (_Bar) { } y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - this.yArrj.push(y); - this.yArrjF.push(Math.abs(barYPosition - y)); + var endingShapeOpts = { + barWidth: barWidth, + strokeWidth: strokeWidth, + yRatio: this.yRatio[this.yaxisIndex], + barXPosition: barXPosition, + y: y + }; + var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); + this.yArrj.push(endingShape.newY); + this.yArrjF.push(Math.abs(barYPosition - endingShape.newY)); this.yArrjVal.push(this.series[i][j]); pathTo = this.graphics.move(barXPosition, barYPosition); pathFrom = this.graphics.move(barXPosition, barYPosition); @@ -6887,8 +7423,8 @@ function (_Bar) { pathFrom = this.bar.getPathFrom(realIndex, j, false); } - pathTo = pathTo + this.graphics.line(barXPosition, y) + this.graphics.line(barXPosition + barWidth - strokeWidth, y) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition, barYPosition); + pathTo = pathTo + this.graphics.line(barXPosition, endingShape.newY) + endingShape.path + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); + pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { @@ -6909,6 +7445,38 @@ function (_Bar) { y: y }; } + /* + * When user clicks on legends, the collapsed series will be filled with [0,0,0,...,0] + * We need to make sure, that the last series is not [0,0,0,...,0] + * as we need to draw shapes on the last series (for stacked bars/columns only) + * Hence, we are collecting all inner arrays in series which has [0,0,0...,0] + **/ + + }, { + key: "checkZeroSeries", + value: function checkZeroSeries(_ref3) { + var series = _ref3.series; + var w = this.w; + + for (var zs = 0; zs < series.length; zs++) { + var total = 0; + + for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) { + total += series[zs][zsj]; + } + + if (total === 0) { + this.zeroSerieses.push(zs); + } + } // After getting all zeroserieses, we need to ensure whether endingshapeonSeries is not in that zeroseries array + + + for (var s = series.length - 1; s >= 0; s--) { + if (this.zeroSerieses.indexOf(s) > -1 && s === this.endingShapeOnSeriesNumber) { + this.endingShapeOnSeriesNumber -= 1; + } + } + } }]); return BarStacked; @@ -6918,8 +7486,6 @@ function (_Bar) { * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. * * @module CandleStick - * The whole calculation for stacked bar/column is different from normal bar/column, - * hence it makes sense to derive a new class for it extending most of the props of Parent Bar **/ var CandleStick = @@ -6941,14 +7507,13 @@ function (_Bar) { var fill = new Fill(this.ctx); this.candlestickOptions = this.w.config.plotOptions.candlestick; var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); + this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.initVariables(series); var ret = graphics.group({ class: 'apexcharts-candlestick-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, @@ -6966,7 +7531,8 @@ function (_Bar) { var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); @@ -7042,7 +7608,8 @@ function (_Bar) { yArrj.push(y); var pathFill = fill.fillPath({ seriesNumber: realIndex, - color: color + color: color, + value: series[i][j] }); var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; elSeries = this.renderSeries({ @@ -7111,12 +7678,6 @@ function (_Bar) { } var barXPosition = x + barWidth * this.visibleI; - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, zeroH); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { y1 = zeroH; @@ -7127,7 +7688,15 @@ function (_Bar) { l2 = zeroH - ohlc.l / yRatio; } + pathTo = graphics.move(barXPosition, zeroH); + pathFrom = graphics.move(barXPosition, y1); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j, true); + } + pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); + pathFrom = pathFrom + graphics.move(barXPosition, y1); if (!w.globals.isXNumeric) { x = x + xDivision; @@ -7258,244 +7827,6 @@ function () { return Crosshairs; }(); -/** - * DateTime Class to manipulate datetime values. - * - * @module DateTime - **/ - -var DateTime = -/*#__PURE__*/ -function () { - function DateTime(ctx) { - _classCallCheck(this, DateTime); - - this.ctx = ctx; - this.w = ctx.w; - this.months31 = [1, 3, 5, 7, 8, 10, 12]; - this.months30 = [2, 4, 6, 9, 11]; - this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - } - - _createClass(DateTime, [{ - key: "isValidDate", - value: function isValidDate(date) { - return !isNaN(this.parseDate(date)); - } - }, { - key: "getUTCTimeStamp", - value: function getUTCTimeStamp(dateStr) { - if (!Date.parse(dateStr)) { - return dateStr; - } - - return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); - } - }, { - key: "parseDate", - value: function parseDate(dateStr) { - var parsed = Date.parse(dateStr); - - if (!isNaN(parsed)) { - return this.getUTCTimeStamp(dateStr); - } - - var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); - output = this.getUTCTimeStamp(output); - return output; - } // https://stackoverflow.com/a/11252167/6495043 - - }, { - key: "treatAsUtc", - value: function treatAsUtc(dateStr) { - var result = new Date(dateStr); - result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); - return result; - } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 - - }, { - key: "formatDate", - value: function formatDate(date, format) { - var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var locale = this.w.globals.locale; - var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); - var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); - var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); - var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); - - function ii(i, len) { - var s = i + ''; - len = len || 2; - - while (s.length < len) { - s = '0' + s; - } - - return s; - } - - if (convertToUTC) { - date = this.treatAsUtc(date); - } - - var y = utc ? date.getUTCFullYear() : date.getFullYear(); - format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); - format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); - format = format.replace(/(^|[^\\])y/g, '$1' + y); - var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; - format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); - format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); - format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); - format = format.replace(/(^|[^\\])M/g, '$1' + M); - var d = utc ? date.getUTCDate() : date.getDate(); - format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); - format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); - format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); - format = format.replace(/(^|[^\\])d/g, '$1' + d); - var H = utc ? date.getUTCHours() : date.getHours(); - format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); - format = format.replace(/(^|[^\\])H/g, '$1' + H); - var h = H > 12 ? H - 12 : H === 0 ? 12 : H; - format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); - format = format.replace(/(^|[^\\])h/g, '$1' + h); - var m = utc ? date.getUTCMinutes() : date.getMinutes(); - format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); - format = format.replace(/(^|[^\\])m/g, '$1' + m); - var s = utc ? date.getUTCSeconds() : date.getSeconds(); - format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); - format = format.replace(/(^|[^\\])s/g, '$1' + s); - var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); - format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])f/g, '$1' + f); - var T = H < 12 ? 'AM' : 'PM'; - format = format.replace(/(^|[^\\])TT+/g, '$1' + T); - format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); - var t = T.toLowerCase(); - format = format.replace(/(^|[^\\])tt+/g, '$1' + t); - format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); - var tz = -date.getTimezoneOffset(); - var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; - - if (!utc) { - tz = Math.abs(tz); - var tzHrs = Math.floor(tz / 60); - var tzMin = tz % 60; - K += ii(tzHrs) + ':' + ii(tzMin); - } - - format = format.replace(/(^|[^\\])K/g, '$1' + K); - var day = (utc ? date.getUTCDay() : date.getDay()) + 1; - format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); - format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); - format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); - format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); - format = format.replace(/\\(.)/g, '$1'); - return format; - } - }, { - key: "getTimeUnitsfromTimestamp", - value: function getTimeUnitsfromTimestamp(minX, maxX) { - var w = this.w; - - if (w.config.xaxis.min !== undefined) { - minX = w.config.xaxis.min; - } - - if (w.config.xaxis.max !== undefined) { - maxX = w.config.xaxis.max; - } - - var minYear = new Date(minX).getFullYear(); - var maxYear = new Date(maxX).getFullYear(); - var minMonth = new Date(minX).getMonth(); - var maxMonth = new Date(maxX).getMonth(); - var minDate = new Date(minX).getDate(); - var maxDate = new Date(maxX).getDate(); - var minHour = new Date(minX).getHours(); - var maxHour = new Date(maxX).getHours(); - var minMinute = new Date(minX).getMinutes(); - var maxMinute = new Date(maxX).getMinutes(); - return { - minMinute: minMinute, - maxMinute: maxMinute, - minHour: minHour, - maxHour: maxHour, - minDate: minDate, - maxDate: maxDate, - minMonth: minMonth, - maxMonth: maxMonth, - minYear: minYear, - maxYear: maxYear - }; - } - }, { - key: "isLeapYear", - value: function isLeapYear(year) { - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "calculcateLastDaysOfMonth", - value: function calculcateLastDaysOfMonth(month, year, subtract) { - var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked - - return days - subtract; - } - }, { - key: "determineDaysOfYear", - value: function determineDaysOfYear(year) { - var days = 365; - - if (this.isLeapYear(year)) { - days = 366; - } - - return days; - } - }, { - key: "determineRemainingDaysOfYear", - value: function determineRemainingDaysOfYear(year, month, date) { - var dayOfYear = this.daysCntOfYear[month] + date; - if (month > 1 && this.isLeapYear()) dayOfYear++; - return dayOfYear; - } - }, { - key: "determineDaysOfMonths", - value: function determineDaysOfMonths(month, year) { - var days = 30; - month = Utils.monthMod(month); - - switch (true) { - case this.months30.indexOf(month) > -1: - if (month === 2) { - if (this.isLeapYear(year)) { - days = 29; - } else { - days = 28; - } - } - - break; - - case this.months31.indexOf(month) > -1: - days = 31; - break; - - default: - days = 31; - break; - } - - return days; - } - }]); - - return DateTime; -}(); - /** * ApexCharts HeatMap Class. * @module HeatMap @@ -7511,6 +7842,7 @@ function () { this.w = ctx.w; this.xRatio = xyRatios.xRatio; this.yRatio = xyRatios.yRatio; + this.negRange = false; this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; this.rectRadius = this.w.config.plotOptions.heatmap.radius; this.strokeWidth = this.w.config.stroke.width; @@ -7530,6 +7862,7 @@ function () { var yDivision = w.globals.gridHeight / w.globals.series.length; var y1 = 0; var rev = false; + this.checkColorRange(); var heatSeries = series.slice(); if (w.config.yaxis[0].reversed) { @@ -7540,7 +7873,8 @@ function () { for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series apexcharts-heatmap-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series apexcharts-heatmap-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); @@ -7548,7 +7882,7 @@ function () { if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; var filters = new Filters(this.ctx); - filters.dropShadow(elSeries, shadow); + filters.dropShadow(elSeries, shadow, i); } var x1 = 0; @@ -7557,13 +7891,21 @@ function () { var colorShadePercent = 1; var heatColorProps = this.determineHeatColor(i, j); - if (w.globals.hasNegs) { + if (w.globals.hasNegs || this.negRange) { var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; - if (heatColorProps.percent < 0) { - colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; + if (w.config.plotOptions.heatmap.reverseNegativeShade) { + if (heatColorProps.percent < 0) { + colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); + } else { + colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); + } } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; + if (heatColorProps.percent < 0) { + colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; + } else { + colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; + } } } else { colorShadePercent = 1 - heatColorProps.percent / 100; @@ -7654,6 +7996,22 @@ function () { w.config.yaxis[0].labels.offsetY = -(divisor / 2); return ret; } + }, { + key: "checkColorRange", + value: function checkColorRange() { + var _this = this; + + var w = this.w; + var heatmap = w.config.plotOptions.heatmap; + + if (heatmap.colorScale.ranges.length > 0) { + heatmap.colorScale.ranges.map(function (range, index) { + if (range.from < 0) { + _this.negRange = true; + } + }); + } + } }, { key: "determineHeatColor", value: function determineHeatColor(i, j) { @@ -7685,8 +8043,10 @@ function () { color = range.color; min = range.from; max = range.to; - total = Math.abs(max) + Math.abs(min); - percent = 100 * val / total; + + var _total = Math.abs(max) + Math.abs(min); + + percent = 100 * val / (_total === 0 ? _total - 0.000001 : _total); } }); } @@ -7743,7 +8103,7 @@ function () { }, { key: "animateHeatMap", value: function animateHeatMap(el, x, y, width, height, speed) { - var _this = this; + var _this2 = this; var animations = new Animations(this.ctx); animations.animateRect(el, { @@ -7757,7 +8117,7 @@ function () { width: width, height: height }, speed, function () { - _this.w.globals.animationEnded = true; + _this2.w.globals.animationEnded = true; }); } }, { @@ -7922,7 +8282,8 @@ function () { for (var i = 0; i < sectorAngleArr.length; i++) { // if(sectorAngleArr[i]>0) { var elPieArc = graphics.group({ - class: "apexcharts-series apexcharts-pie-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series apexcharts-pie-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), id: 'apexcharts-series-' + i, rel: i + 1 }); @@ -7934,7 +8295,8 @@ function () { var angle = endAngle - startAngle; var pathFill = fill.fillPath({ seriesNumber: i, - size: this.size + size: this.size, + value: series[i] }); // additionaly, pass size for gradient drawing in the fillPath function var path = this.getChangedPath(prevStartAngle, prevEndAngle); @@ -7947,14 +8309,14 @@ function () { classes: 'apexcharts-pie-area' }); elPath.attr({ - id: 'apexcharts-pie-slice-' + i, + id: "apexcharts-".concat(w.config.chart.type, "-slice-").concat(i), index: 0, j: i }); if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, shadow); + filters.dropShadow(elPath, shadow, i); } this.addListeners(elPath, this.donutDataLabels); @@ -8019,7 +8381,7 @@ function () { var yPos = labelPosition.y; var text = 100 * (endAngle - startAngle) / 360 + '%'; - if (angle !== 0) { + if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { var formatter = w.config.dataLabels.formatter; if (formatter !== undefined) { @@ -8191,14 +8553,15 @@ function () { var w = this.w; var me = this; var path; - var size = me.size + 3; - var elPath = w.globals.dom.Paper.select('#apexcharts-pie-slice-' + i).members[0]; + var size = me.size + 4; + var elPath = w.globals.dom.Paper.select("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(i)).members[0]; var pathFrom = elPath.attr('d'); if (elPath.attr('data:pieClicked') === 'true') { elPath.attr({ 'data:pieClicked': 'false' }); + this.revertDataLabelsInner(elPath.node, this.donutDataLabels); var origPath = elPath.attr('data:pathOrig'); elPath.attr({ d: origPath @@ -8413,7 +8776,9 @@ function () { } }, { key: "revertDataLabelsInner", - value: function revertDataLabelsInner(el, dataLabelsConfig) { + value: function revertDataLabelsInner(el, dataLabelsConfig, event) { + var _this = this; + var w = this.w; var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); @@ -8421,18 +8786,32 @@ function () { var pie = new Pie(this.ctx); pie.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); } else { - if (w.globals.selectedDataPoints.length) { - if (w.globals.selectedDataPoints[0].length > 0) { - var index = w.globals.selectedDataPoints[0]; + var slices = document.querySelectorAll(".apexcharts-pie-area"); + var sliceOut = false; + slices.forEach(function (s) { + if (s.getAttribute('data:pieClicked') === 'true') { + sliceOut = true; - var _el = w.globals.dom.baseEl.querySelector("#apexcharts-pie-slice-".concat(index)); - - this.printDataLabelsInner(_el, dataLabelsConfig); - } else { - dataLabelsGroup.style.opacity = 0; + _this.printDataLabelsInner(s, dataLabelsConfig); + } + }); + + if (!sliceOut) { + if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { + if (w.globals.selectedDataPoints[0].length > 0) { + var index = w.globals.selectedDataPoints[0]; + + var _el = w.globals.dom.baseEl.querySelector("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(index)); + + this.printDataLabelsInner(_el, dataLabelsConfig); + } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { + dataLabelsGroup.style.opacity = 0; + } + } else { + if (dataLabelsGroup && w.globals.series.length > 1) { + dataLabelsGroup.style.opacity = 0; + } } - } else if (w.globals.selectedDataPoints.length === 0 || dataLabelsGroup !== null && w.globals.series.length > 1) { - dataLabelsGroup.style.opacity = 0; } } } @@ -8509,7 +8888,8 @@ function () { series.forEach(function (s, i) { // el to which series will be drawn var elSeries = _this.graphics.group().attr({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); @@ -8561,7 +8941,8 @@ function () { pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, pathTo: paths.linePathsTo[p], strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width, - fill: 'none' + fill: 'none', + drawShadow: false })); elSeries.add(renderedLinePath); @@ -8573,15 +8954,16 @@ function () { pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, pathTo: paths.areaPathsTo[p], strokeWidth: 0, - fill: pathFill + fill: pathFill, + drawShadow: false })); if (w.config.chart.dropShadow.enabled) { var filters = new Filters(_this.ctx); var shadow = w.config.chart.dropShadow; - filters.dropShadow(renderedAreaPath, _objectSpread({}, shadow, { + filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { noUserSpaceOnUse: true - })); + }), i); } elSeries.add(renderedAreaPath); @@ -9070,7 +9452,8 @@ function (_Pie) { for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { var elRadialBarArc = graphics.group({ - class: "apexcharts-series apexcharts-radial-series ".concat(Utils.escapeString(w.globals.seriesNames[i])) + class: "apexcharts-series apexcharts-radial-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]) }); g.add(elRadialBarArc); elRadialBarArc.attr({ @@ -9081,7 +9464,8 @@ function (_Pie) { opts.size = opts.size - strokeWidth - this.margin; var pathFill = fill.fillPath({ seriesNumber: i, - size: opts.size + size: opts.size, + value: opts.series[i] }); var startAngle = this.startAngle; var prevStartAngle = void 0; @@ -9126,7 +9510,7 @@ function (_Pie) { if (w.config.chart.dropShadow.enabled) { var _shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, _shadow); + filters.dropShadow(elPath, _shadow, i); } this.addListeners(elPath, this.radialDataLabels); @@ -9135,7 +9519,7 @@ function (_Pie) { elRadialBarArc.add(elPath); elPath.attr({ - id: 'apexcharts-radialArc-' + i, + id: 'apexcharts-radialbar-slice-' + i, index: 0, j: i }); @@ -9238,6 +9622,318 @@ function (_Pie) { return Radial; }(Pie); +/** + * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. + * + * @module RangeBar + **/ + +var RangeBar = +/*#__PURE__*/ +function (_Bar) { + _inherits(RangeBar, _Bar); + + function RangeBar() { + _classCallCheck(this, RangeBar); + + return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); + } + + _createClass(RangeBar, [{ + key: "draw", + value: function draw(series, seriesIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var fill = new Fill(this.ctx); + this.rangeBarOptions = this.w.config.plotOptions.rangeBar; + this.series = series; + this.seriesRangeStart = w.globals.seriesRangeStart; + this.seriesRangeEnd = w.globals.seriesRangeEnd; + this.initVariables(series); + var ret = graphics.group({ + class: 'apexcharts-rangebar-series apexcharts-plot-series' + }); + + for (var i = 0, bc = 0; i < series.length; i++, bc++) { + var pathTo = void 0, + pathFrom = void 0; + var x = void 0, + y = void 0, + xDivision = void 0, + // xDivision is the GRIDWIDTH divided by number of datapoints (columns) + yDivision = void 0, + // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) + zeroH = void 0, + // zeroH is the baseline where 0 meets y axis + zeroW = void 0; // zeroW is the baseline where 0 meets x axis + + var yArrj = []; // hold y values of current iterating series + + var xArrj = []; // hold x values of current iterating series + + var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn + + var elSeries = graphics.group({ + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), + rel: i + 1, + 'data:realIndex': realIndex + }); + + if (series[i].length > 0) { + this.visibleI = this.visibleI + 1; + } + + var strokeWidth = 0; + var barHeight = 0; + var barWidth = 0; + + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; + } + + var initPositions = this.initialPositions(); + y = initPositions.y; + yDivision = initPositions.yDivision; + barHeight = initPositions.barHeight; + zeroW = initPositions.zeroW; + x = initPositions.x; + barWidth = initPositions.barWidth; + xDivision = initPositions.xDivision; + zeroH = initPositions.zeroH; + xArrj.push(x + barWidth / 2); // eldatalabels + + var elDataLabelsWrap = graphics.group({ + class: 'apexcharts-datalabels' + }); + + for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { + if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { + this.isNullValue = true; + } else { + this.isNullValue = false; + } + + if (w.config.stroke.show) { + if (this.isNullValue) { + strokeWidth = 0; + } else { + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; + } + } + + var paths = null; + + if (this.isHorizontal) { + paths = this.drawRangeBarPaths({ + indexes: { + i: i, + j: j, + realIndex: realIndex, + bc: bc + }, + barHeight: barHeight, + strokeWidth: strokeWidth, + pathTo: pathTo, + pathFrom: pathFrom, + zeroW: zeroW, + x: x, + y: y, + yDivision: yDivision, + elSeries: elSeries + }); + barWidth = paths.barWidth; + } else { + paths = this.drawRangeColumnPaths({ + indexes: { + i: i, + j: j, + realIndex: realIndex, + bc: bc + }, + x: x, + y: y, + xDivision: xDivision, + pathTo: pathTo, + pathFrom: pathFrom, + barWidth: barWidth, + zeroH: zeroH, + strokeWidth: strokeWidth, + elSeries: elSeries + }); + barHeight = paths.barHeight; + } + + pathTo = paths.pathTo; + pathFrom = paths.pathFrom; + y = paths.y; + x = paths.x; // push current X + + if (j > 0) { + xArrj.push(x + barWidth / 2); + } + + yArrj.push(y); + var pathFill = fill.fillPath({ + seriesNumber: realIndex + }); + var lineFill = w.globals.stroke.colors[realIndex]; + elSeries = this.renderSeries({ + realIndex: realIndex, + pathFill: pathFill, + lineFill: lineFill, + j: j, + i: i, + pathFrom: pathFrom, + pathTo: pathTo, + strokeWidth: strokeWidth, + elSeries: elSeries, + x: x, + y: y, + series: series, + barHeight: barHeight, + barWidth: barWidth, + elDataLabelsWrap: elDataLabelsWrap, + visibleSeries: this.visibleI, + type: 'rangebar' + }); + } // push all x val arrays into main xArr + + + w.globals.seriesXvalues[realIndex] = xArrj; + w.globals.seriesYvalues[realIndex] = yArrj; + ret.add(elSeries); + } + + return ret; + } + }, { + key: "drawRangeColumnPaths", + value: function drawRangeColumnPaths(_ref) { + var indexes = _ref.indexes, + x = _ref.x, + y = _ref.y, + strokeWidth = _ref.strokeWidth, + xDivision = _ref.xDivision, + pathTo = _ref.pathTo, + pathFrom = _ref.pathFrom, + barWidth = _ref.barWidth, + zeroH = _ref.zeroH; + var w = this.w; + var graphics = new Graphics(this.ctx); + var i = indexes.i; + var j = indexes.j; + var yRatio = this.yRatio[this.yaxisIndex]; + var realIndex = indexes.realIndex; + var range = this.getRangeValue(realIndex, j); + var y1 = Math.min(range.start, range.end); + var y2 = Math.max(range.start, range.end); + + if (w.globals.isXNumeric) { + x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; + } + + var barXPosition = x + barWidth * this.visibleI; + + if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { + y1 = zeroH; + } else { + y1 = zeroH - y1 / yRatio; + y2 = zeroH - y2 / yRatio; + } + + var barHeight = Math.abs(y2 - y1); + pathTo = graphics.move(barXPosition, zeroH); + pathFrom = graphics.move(barXPosition, y1); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j, true); + } + + pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); + pathFrom = pathFrom + graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1); + + if (!w.globals.isXNumeric) { + x = x + xDivision; + } + + return { + pathTo: pathTo, + pathFrom: pathFrom, + barHeight: barHeight, + x: x, + y: y2, + barXPosition: barXPosition + }; + } + }, { + key: "drawRangeBarPaths", + value: function drawRangeBarPaths(_ref2) { + var indexes = _ref2.indexes, + x = _ref2.x, + y = _ref2.y, + yDivision = _ref2.yDivision, + pathTo = _ref2.pathTo, + pathFrom = _ref2.pathFrom, + barHeight = _ref2.barHeight, + zeroW = _ref2.zeroW; + var w = this.w; + var graphics = new Graphics(this.ctx); + var i = indexes.i; + var j = indexes.j; + var realIndex = indexes.realIndex; + var x1 = zeroW; + var x2 = zeroW; + + if (w.globals.isXNumeric) { + y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; + } + + var barYPosition = y + barHeight * this.visibleI; + + if (typeof this.series[i][j] !== 'undefined' && this.series[i][j] !== null) { + x1 = zeroW + this.seriesRangeStart[i][j] / this.invertedYRatio; + x2 = zeroW + this.seriesRangeEnd[i][j] / this.invertedYRatio; + } + + pathTo = graphics.move(zeroW, barYPosition); + pathFrom = graphics.move(zeroW, barYPosition); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j); + } + + var barWidth = Math.abs(x2 - x1); + pathTo = graphics.move(x1, barYPosition) + graphics.line(x2, barYPosition) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); + pathFrom = pathFrom + graphics.line(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); + + if (!w.globals.isXNumeric) { + y = y + yDivision; + } + + return { + pathTo: pathTo, + pathFrom: pathFrom, + barWidth: barWidth, + x: x2, + y: y, + barYPosition: barYPosition + }; + } + }, { + key: "getRangeValue", + value: function getRangeValue(i, j) { + var w = this.w; + return { + start: w.globals.seriesRangeStart[i][j], + end: w.globals.seriesRangeEnd[i][j] + }; + } + }]); + + return RangeBar; +}(Bar); + /** * ApexCharts Line Class responsible for drawing Line / Area Charts. * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions @@ -9283,6 +9979,17 @@ function () { for (var i = 0; i < series.length; i++) { // width divided into equal parts + if (type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { + // a small adjustment to allow gradient line to draw correctly for all same values + + /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ + if (coreUtils.seriesHaveSameValues(i)) { + var gSeries = series[i].slice(); + gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; + series[i] = gSeries; + } + } + var xDivision = w.globals.gridWidth / w.globals.dataPoints; var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; @@ -9307,7 +10014,7 @@ function () { var x = w.globals.padHorizontal + categoryAxisCorrection; var y = 1; - if (w.globals.isXNumeric) { + if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio; } @@ -9320,7 +10027,8 @@ function () { var areaPaths = []; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])) + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) }); // points var elPointsMain = graphics.group({ @@ -9443,7 +10151,8 @@ function () { linePath: linePath, areaPath: areaPath, linePaths: linePaths, - areaPaths: areaPaths + areaPaths: areaPaths, + seriesIndex: seriesIndex }); areaPaths = calculatedPaths.areaPaths; linePaths = calculatedPaths.linePaths; @@ -9491,8 +10200,9 @@ function () { }); } + var dataLabelAlign = !series[i][j + 1] || series[i][j + 1] > series[i][j] ? 'top' : 'bottom'; var dataLabels = new DataLabels(this.ctx); - var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1); + var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null, dataLabelAlign); if (drawnLabels !== null) { elDataLabelsWrap.add(drawnLabels); @@ -9522,6 +10232,24 @@ function () { id: "apexcharts-".concat(type) }; + if (type === 'area') { + var pathFill = fill.fillPath({ + seriesNumber: realIndex + }); + + for (var p = 0; p < areaPaths.length; p++) { + var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { + pathFrom: pathFromArea, + pathTo: areaPaths[p], + stroke: 'none', + strokeWidth: 0, + strokeLineCap: null, + fill: pathFill + })); + elSeries.add(renderedPath); + } + } + if (w.config.stroke.show && !this.pointsChart) { var lineFill = null; @@ -9535,34 +10263,15 @@ function () { lineFill = w.globals.stroke.colors[realIndex]; } - for (var p = 0; p < linePaths.length; p++) { - var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { + for (var _p = 0; _p < linePaths.length; _p++) { + var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { pathFrom: pathFromLine, - pathTo: linePaths[p], + pathTo: linePaths[_p], stroke: lineFill, strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width, strokeLineCap: w.config.stroke.lineCap, fill: 'none' })); - elSeries.add(renderedPath); - } - } // we have drawn the lines, now if it is area chart, we need to fill paths - - - if (type === 'area') { - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - - for (var _p = 0; _p < areaPaths.length; _p++) { - var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromArea, - pathTo: areaPaths[_p], - stroke: 'none', - strokeWidth: 0, - strokeLineCap: null, - fill: pathFill - })); elSeries.add(_renderedPath); } @@ -9594,12 +10303,22 @@ function () { linePath = _ref.linePath, areaPath = _ref.areaPath, linePaths = _ref.linePaths, - areaPaths = _ref.areaPaths; + areaPaths = _ref.areaPaths, + seriesIndex = _ref.seriesIndex; var w = this.w; var graphics = new Graphics(this.ctx); - var curve = Array.isArray(w.config.stroke.curve) ? w.config.stroke.curve[i] : w.config.stroke.curve; // logic of smooth curve derived from chartist + var curve = w.config.stroke.curve; + + if (Array.isArray(w.config.stroke.curve)) { + if (Array.isArray(seriesIndex)) { + curve = w.config.stroke.curve[seriesIndex[i]]; + } else { + curve = w.config.stroke.curve[i]; + } + } // logic of smooth curve derived from chartist // CREDITS: https://gionkunz.github.io/chartist-js/ + if (curve === 'smooth') { var length = (x - pX) * 0.35; @@ -9727,12 +10446,10 @@ function () { pathFromLine = w.globals.previousPaths[pp].paths[0].d; } else if (gpp.type === 'area') { this.appendPathFrom = false; + pathFromArea = w.globals.previousPaths[pp].paths[0].d; if (w.config.stroke.show) { - pathFromLine = w.globals.previousPaths[pp].paths[0].d; - pathFromArea = w.globals.previousPaths[pp].paths[1].d; - } else { - pathFromArea = w.globals.previousPaths[pp].paths[0].d; + pathFromLine = w.globals.previousPaths[pp].paths[1].d; } } } @@ -9794,359 +10511,6 @@ function () { return Line; }(); -/** - * ApexCharts YAxis Class for drawing Y-Axis. - * - * @module YAxis - **/ - -var YAxis = -/*#__PURE__*/ -function () { - function YAxis(ctx) { - _classCallCheck(this, YAxis); - - this.ctx = ctx; - this.w = ctx.w; - this.xaxisFontSize = this.w.config.xaxis.labels.style.fontSize; - this.axisFontFamily = this.w.config.xaxis.labels.style.fontFamily; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); - this.xaxisForeColors = this.w.config.xaxis.labels.style.colors; - this.xAxisoffX = 0; - - if (this.w.config.xaxis.position === 'bottom') { - this.xAxisoffX = this.w.globals.gridHeight; - } - } - - _createClass(YAxis, [{ - key: "drawYaxis", - value: function drawYaxis(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; - var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis', - rel: realIndex, - transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' - }); - - if (!w.config.yaxis[realIndex].show) { - return elYaxis; - } - - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g' - }); - elYaxis.add(elYaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks - - var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; - - var l = w.globals.translateY; - var lbFormatter = w.globals.yLabelFormatters[realIndex]; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.yaxis[realIndex].labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var xPad = w.config.yaxis[realIndex].labels.padding; - - if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { - xPad = xPad * -1; - } - - var label = graphics.drawText({ - x: xPad, - y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, - text: val, - textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', - fontSize: yaxisFontSize, - fontFamily: yaxisFontFamily, - foreColor: w.config.yaxis[realIndex].labels.style.color, - cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass - }); - elYaxisTexts.add(label); - var labelRotatingCenter = graphics.rotateAroundCenter(label.node); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - l = l + labelsDivider; - } - } - - if (w.config.yaxis[realIndex].title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title' - }); - var x = 0; - - if (w.config.yaxis[realIndex].opposite) { - x = w.globals.translateYAxisX[realIndex]; - } - - var elYAxisTitleText = graphics.drawText({ - x: x, - y: w.globals.gridHeight / 2 + w.globals.translateY, - text: w.config.yaxis[realIndex].title.text, - textAnchor: 'end', - foreColor: w.config.yaxis[realIndex].title.style.color, - fontSize: w.config.yaxis[realIndex].title.style.fontSize, - fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elYaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var _x = 31 + axisBorder.offsetX; - - if (w.config.yaxis[realIndex].opposite) { - _x = -31 - axisBorder.offsetX; - } - - var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); - elYaxis.add(elVerticalLine); - this.drawAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); - } - - return elYaxis; - } // This actually becomes horizonal axis (for bar charts) - - }, { - key: "drawYaxisInversed", - value: function drawYaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis apexcharts-yaxis-inversed' - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks - - var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; - - var l = labelsDivider + w.config.xaxis.labels.offsetX; - var lbFormatter = w.globals.xLabelFormatter; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.xaxis.labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var elTick = graphics.drawText({ - x: w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX), - y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, - text: '', - textAnchor: 'middle', - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elTick); - elTick.tspan(val); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = val; - elTick.node.appendChild(elTooltipTitle); - l = l + labelsDivider; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' - }); - var elYAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2, - y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elXaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); - elXaxis.add(elVerticalLine); - } - - return elXaxis; - } - }, { - key: "drawAxisTicks", - value: function drawAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { - var w = this.w; - var graphics = new Graphics(this.ctx); // initial label position = 0; - - var t = w.globals.translateY; - - if (axisTicks.show) { - if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; - - for (var i = tickAmount; i >= 0; i--) { - var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; - - if (this.isBarHorizontal) { - tY = labelsDivider * i; - } - - var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); - elYaxis.add(elTick); - t = t + labelsDivider; - } - } - } - }, { - key: "yAxisTitleRotate", - value: function yAxisTitleRotate(realIndex, yAxisOpposite) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yAxisLabelsCoord = { - width: 0, - height: 0 - }; - var yAxisTitleCoord = { - width: 0, - height: 0 - }; - var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); - - if (elYAxisLabelsWrap !== null) { - yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); - } - - var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); - - if (yAxisTitle !== null) { - yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); - } - - if (yAxisTitle !== null) { - var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); - yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); - } - - if (yAxisTitle !== null) { - var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); - - if (!yAxisOpposite) { - yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } else { - yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } - } - } - }, { - key: "xPaddingForYAxisTitle", - value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { - var w = this.w; - var oppositeAxisCount = 0; - var x = 0; - var padd = 10; - - if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { - return { - xPos: x, - padd: 0 - }; - } - - if (yAxisOpposite) { - x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; - oppositeAxisCount += 1; - - if (oppositeAxisCount === 0) { - x = x - padd / 2; - } - } else { - x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; - - if (this.isBarHorizontal) { - padd = 25; - x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; - } - } - - return { - xPos: x, - padd: padd - }; - } // sets the x position of the y-axis by counting the labels width, title width and any offset - - }, { - key: "setYAxisXPosition", - value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { - var _this = this; - - var w = this.w; - var xLeft = 0; - var xRight = 0; - var leftOffsetX = 21; - var rightOffsetX = 1; - - if (w.config.yaxis.length > 1) { - this.multipleYs = true; - } - - w.config.yaxis.map(function (yaxe, index) { - var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; - var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; - - if (!yaxe.opposite) { - xLeft = w.globals.translateX - leftOffsetX; - - if (!shouldNotDrawAxis) { - leftOffsetX = leftOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; - } else { - if (_this.isBarHorizontal) { - xRight = w.globals.gridWidth + w.globals.translateX - 1; - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; - } else { - xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; - - if (!shouldNotDrawAxis) { - rightOffsetX = rightOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; - } - } - }); - } - }]); - - return YAxis; -}(); - /** * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. * @@ -10254,8 +10618,10 @@ function () { } else { w.globals.yLabelFormatters[i] = function (val) { if (Utils.isNumber(val)) { - if (w.globals.yValueDecimal !== 0 || w.globals.maxY - w.globals.minY < 1) { - return val.toFixed(yaxe.decimalsInFloat); + if (w.globals.yValueDecimal !== 0) { + return val.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); + } else if (w.globals.maxY - w.globals.minY < 5) { + return val.toFixed(1); } else { return val.toFixed(0); } @@ -10287,6 +10653,83 @@ function () { return Formatters; }(); +var AxesUtils = +/*#__PURE__*/ +function () { + function AxesUtils(ctx) { + _classCallCheck(this, AxesUtils); + + this.ctx = ctx; + this.w = ctx.w; + } // Based on the formatter function, get the label text and position + + + _createClass(AxesUtils, [{ + key: "getLabel", + value: function getLabel(labels, timelineLabels, x, i) { + var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; + var w = this.w; + var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; + var label; + var xlbFormatter = w.globals.xLabelFormatter; + var customFormatter = w.config.xaxis.labels.formatter; + var xFormat = new Formatters(this.ctx); + label = xFormat.xLabelFormat(xlbFormatter, rawLabel); + + if (customFormatter !== undefined) { + label = customFormatter(rawLabel, labels[i], i); + } + + if (timelineLabels.length > 0) { + x = timelineLabels[i].position; + label = timelineLabels[i].value; + } else { + if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { + label = ''; + } + } + + if (typeof label === 'undefined') label = ''; + label = label.toString(); + + if (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { + label = ''; + } + + return { + x: x, + text: label + }; + } + }, { + key: "drawYAxisTicks", + value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { + var w = this.w; + var graphics = new Graphics(this.ctx); // initial label position = 0; + + var t = w.globals.translateY; + + if (axisTicks.show) { + if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; + + for (var i = tickAmount; i >= 0; i--) { + var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; + + if (w.globals.isBarHorizontal) { + tY = labelsDivider * i; + } + + var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); + elYaxis.add(elTick); + t = t + labelsDivider; + } + } + } + }]); + + return AxesUtils; +}(); + /** * ApexCharts XAxis Class for drawing X-Axis. * @@ -10333,6 +10776,7 @@ function () { // as we are not providing multiple yaxis for bar charts this.yaxis = w.config.yaxis[0]; + this.axesUtils = new AxesUtils(ctx); } _createClass(XAxis, [{ @@ -10366,39 +10810,13 @@ function () { xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; } - var xlbFormatter = w.globals.xLabelFormatter; - var customFormatter = w.config.xaxis.labels.formatter; var labelsLen = labels.length; if (w.config.xaxis.labels.show) { for (var _i = 0; _i <= labelsLen - 1; _i++) { - var rawLabel = typeof labels[_i] === 'undefined' ? '' : labels[_i]; - var label = void 0; - var xFormat = new Formatters(this.ctx); - label = xFormat.xLabelFormat(xlbFormatter, rawLabel); - - if (customFormatter !== undefined) { - label = customFormatter(rawLabel, this.xaxisLabels[_i], _i); - } - var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; - - if (w.globals.timelineLabels.length > 0) { - x = w.globals.timelineLabels[_i].position; - label = w.globals.timelineLabels[_i].value; - } else { - if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { - label = ''; - } - } - - label = label.toString(); - - if (label.indexOf('NaN') === 0 || label === 'undefined' || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || this.drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { - label = ''; - } - - this.drawnLabels.push(label); + var label = this.axesUtils.getLabel(labels, w.globals.timelineLabels, x, _i, this.drawnLabels); + this.drawnLabels.push(label.text); var offsetYCorrection = 28; if (w.globals.rotateXLabels) { @@ -10406,7 +10824,7 @@ function () { } var elTick = graphics.drawText({ - x: x, + x: label.x, y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection, text: '', textAnchor: 'middle', @@ -10415,10 +10833,17 @@ function () { foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[_i] : this.xaxisForeColors, cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass }); + + if (_i === labelsLen - 1) { + if (w.globals.skipLastTimelinelabel) { + label.text = ''; + } + } + elXaxisTexts.add(elTick); - graphics.addTspan(elTick, label, this.xaxisFontFamily); + graphics.addTspan(elTick, label.text, this.xaxisFontFamily); var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label; + elTooltipTitle.textContent = label.text; elTick.node.appendChild(elTooltipTitle); xPos = xPos + colWidth; } @@ -10498,15 +10923,14 @@ function () { fontSize: ylabels.style.fontSize, fontFamily: ylabels.style.fontFamily, cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass - }); // let labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node) - // if (ylabels.rotate !== 0) { - // elLabel.node.setAttribute( - // 'transform', - // `rotate(${ylabels.rotate} ${labelRotatingCenter.x} ${labelRotatingCenter.y})` - // ) - // } - + }); elYaxisTexts.add(elLabel); + + if (w.config.yaxis[realIndex].labels.rotate !== 0) { + var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); + elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); + } + yPos = yPos + colHeight; } } @@ -10532,13 +10956,8 @@ function () { if (w.config.xaxis.axisBorder.show) { var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, this.yaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elYaxis.add(elHorzLine); // let x = w.globals.yAxisWidths[0] / 2 - // if (w.config.yaxis[0].opposite) { - // x = -w.globals.yAxisWidths[0] / 2 - // } - - var yaxis = new YAxis(this.ctx); - yaxis.drawAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); + elYaxis.add(elHorzLine); + this.axesUtils.drawYAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); } return elYaxis; @@ -10623,7 +11042,7 @@ function () { for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { var _tSpan = xAxisTexts[_xat].childNodes; - if (w.config.xaxis.labels.trim && w.config.chart.type !== 'bar' && w.config.plotOptions.bar.horizontal) { + if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { graphics.placeTextWithEllipsis(_tSpan[0], _tSpan[0].textContent, width); } } @@ -10658,6 +11077,394 @@ function () { return XAxis; }(); +/** + * ApexCharts YAxis Class for drawing Y-Axis. + * + * @module YAxis + **/ + +var YAxis = +/*#__PURE__*/ +function () { + function YAxis(ctx) { + _classCallCheck(this, YAxis); + + this.ctx = ctx; + this.w = ctx.w; + var w = this.w; + this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; + this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; + this.xaxisForeColors = w.config.xaxis.labels.style.colors; + this.xAxisoffX = 0; + + if (w.config.xaxis.position === 'bottom') { + this.xAxisoffX = w.globals.gridHeight; + } + + this.drawnLabels = []; + this.axesUtils = new AxesUtils(ctx); + } + + _createClass(YAxis, [{ + key: "drawYaxis", + value: function drawYaxis(realIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; + var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; + var elYaxis = graphics.group({ + class: 'apexcharts-yaxis', + rel: realIndex, + transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' + }); + + if (!w.config.yaxis[realIndex].show) { + return elYaxis; + } + + var elYaxisTexts = graphics.group({ + class: 'apexcharts-yaxis-texts-g' + }); + elYaxis.add(elYaxisTexts); + var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks + + var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; + + var l = w.globals.translateY; + var lbFormatter = w.globals.yLabelFormatters[realIndex]; + var labels = w.globals.yAxisScale[realIndex].result.slice(); + + if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { + labels.reverse(); + } + + if (w.config.yaxis[realIndex].labels.show) { + for (var i = tickAmount; i >= 0; i--) { + var val = labels[i]; + val = lbFormatter(val, i); + var xPad = w.config.yaxis[realIndex].labels.padding; + + if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { + xPad = xPad * -1; + } + + var label = graphics.drawText({ + x: xPad, + y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, + text: val, + textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', + fontSize: yaxisFontSize, + fontFamily: yaxisFontFamily, + foreColor: w.config.yaxis[realIndex].labels.style.color, + cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass + }); + elYaxisTexts.add(label); + var labelRotatingCenter = graphics.rotateAroundCenter(label.node); + + if (w.config.yaxis[realIndex].labels.rotate !== 0) { + label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); + } + + l = l + labelsDivider; + } + } + + if (w.config.yaxis[realIndex].title.text !== undefined) { + var elYaxisTitle = graphics.group({ + class: 'apexcharts-yaxis-title' + }); + var x = 0; + + if (w.config.yaxis[realIndex].opposite) { + x = w.globals.translateYAxisX[realIndex]; + } + + var elYAxisTitleText = graphics.drawText({ + x: x, + y: w.globals.gridHeight / 2 + w.globals.translateY, + text: w.config.yaxis[realIndex].title.text, + textAnchor: 'end', + foreColor: w.config.yaxis[realIndex].title.style.color, + fontSize: w.config.yaxis[realIndex].title.style.fontSize, + fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, + cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass + }); + elYaxisTitle.add(elYAxisTitleText); + elYaxis.add(elYaxisTitle); + } + + var axisBorder = w.config.yaxis[realIndex].axisBorder; + + if (axisBorder.show) { + var _x = 31 + axisBorder.offsetX; + + if (w.config.yaxis[realIndex].opposite) { + _x = -31 - axisBorder.offsetX; + } + + var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); + elYaxis.add(elVerticalLine); + this.axesUtils.drawYAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); + } + + return elYaxis; + } // This actually becomes horizonal axis (for bar charts) + + }, { + key: "drawYaxisInversed", + value: function drawYaxisInversed(realIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var elXaxis = graphics.group({ + class: 'apexcharts-xaxis apexcharts-yaxis-inversed' + }); + var elXaxisTexts = graphics.group({ + class: 'apexcharts-xaxis-texts-g', + transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") + }); + elXaxis.add(elXaxisTexts); + var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks + + var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; + + var l = labelsDivider + w.config.xaxis.labels.offsetX; + var lbFormatter = w.globals.xLabelFormatter; + var labels = w.globals.yAxisScale[realIndex].result.slice(); + var timelineLabels = w.globals.invertedTimelineLabels; + + if (timelineLabels.length > 0) { + this.xaxisLabels = timelineLabels.slice(); + labels = timelineLabels.slice(); + tickAmount = labels.length; + } + + if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { + labels.reverse(); + } + + var tl = timelineLabels.length; + + if (w.config.xaxis.labels.show) { + for (var i = tl ? 0 : tickAmount; tl ? i < tl - 1 : i >= 0; tl ? i++ : i--) { + var val = labels[i]; + val = lbFormatter(val, i); + var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); + + if (timelineLabels.length) { + var label = this.axesUtils.getLabel(labels, timelineLabels, x, i, this.drawnLabels); + x = label.x; + val = label.text; + this.drawnLabels.push(label.text); + } + + var elTick = graphics.drawText({ + x: x, + y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, + text: '', + textAnchor: 'middle', + foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, + fontSize: this.xaxisFontSize, + fontFamily: this.xaxisFontFamily, + cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass + }); + elXaxisTexts.add(elTick); + elTick.tspan(val); + var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); + elTooltipTitle.textContent = val; + elTick.node.appendChild(elTooltipTitle); + l = l + labelsDivider; + } + } + + if (w.config.xaxis.title.text !== undefined) { + var elYaxisTitle = graphics.group({ + class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' + }); + var elYAxisTitleText = graphics.drawText({ + x: w.globals.gridWidth / 2, + y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, + text: w.config.xaxis.title.text, + textAnchor: 'middle', + fontSize: w.config.xaxis.title.style.fontSize, + fontFamily: w.config.xaxis.title.style.fontFamily, + cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass + }); + elYaxisTitle.add(elYAxisTitleText); + elXaxis.add(elYaxisTitle); + } + + var axisBorder = w.config.yaxis[realIndex].axisBorder; + + if (axisBorder.show) { + var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); + elXaxis.add(elVerticalLine); + } + + return elXaxis; + } + }, { + key: "yAxisTitleRotate", + value: function yAxisTitleRotate(realIndex, yAxisOpposite) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var yAxisLabelsCoord = { + width: 0, + height: 0 + }; + var yAxisTitleCoord = { + width: 0, + height: 0 + }; + var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); + + if (elYAxisLabelsWrap !== null) { + yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); + } + + var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); + + if (yAxisTitle !== null) { + yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); + } + + if (yAxisTitle !== null) { + var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); + yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); + } + + if (yAxisTitle !== null) { + var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); + + if (!yAxisOpposite) { + yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); + } else { + yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); + } + } + } + }, { + key: "xPaddingForYAxisTitle", + value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { + var w = this.w; + var oppositeAxisCount = 0; + var x = 0; + var padd = 10; + + if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { + return { + xPos: x, + padd: 0 + }; + } + + if (yAxisOpposite) { + x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; + oppositeAxisCount += 1; + + if (oppositeAxisCount === 0) { + x = x - padd / 2; + } + } else { + x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; + + if (w.globals.isBarHorizontal) { + padd = 25; + x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; + } + } + + return { + xPos: x, + padd: padd + }; + } // sets the x position of the y-axis by counting the labels width, title width and any offset + + }, { + key: "setYAxisXPosition", + value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { + var w = this.w; + var xLeft = 0; + var xRight = 0; + var leftOffsetX = 21; + var rightOffsetX = 1; + + if (w.config.yaxis.length > 1) { + this.multipleYs = true; + } + + w.config.yaxis.map(function (yaxe, index) { + var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; + var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; + + if (!yaxe.opposite) { + xLeft = w.globals.translateX - leftOffsetX; + + if (!shouldNotDrawAxis) { + leftOffsetX = leftOffsetX + axisWidth + 20; + } + + w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; + } else { + if (w.globals.isBarHorizontal) { + xRight = w.globals.gridWidth + w.globals.translateX - 1; + w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; + } else { + xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; + + if (!shouldNotDrawAxis) { + rightOffsetX = rightOffsetX + axisWidth + 20; + } + + w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; + } + } + }); + } + }, { + key: "setYAxisTextAlignments", + value: function setYAxisTextAlignments() { + var w = this.w; + var yaxis = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis"); + yaxis = Utils.listToArray(yaxis); + yaxis.forEach(function (y, index) { + var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment + + if (yaxe.labels.align !== undefined) { + var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); + var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); + yAxisTexts = Utils.listToArray(yAxisTexts); + var rect = yAxisInner.getBoundingClientRect(); + + if (yaxe.labels.align === 'left') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'start'); + }); + + if (!yaxe.opposite) { + yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); + } + } else if (yaxe.labels.align === 'center') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'middle'); + }); + yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); + } else if (yaxe.labels.align === 'right') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'end'); + }); + + if (yaxe.opposite) { + yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); + } + } + } + }); + } + }]); + + return YAxis; +}(); + var Range = /*#__PURE__*/ function () { @@ -10666,16 +11473,17 @@ function () { this.ctx = ctx; this.w = ctx.w; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss // This routine creates the Y axis values for a graph. _createClass(Range, [{ key: "niceScale", - value: function niceScale(yMin, yMax) { - var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var ticks = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; + value: function niceScale(yMin, yMax, diff) { + var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; + var w = this.w; + var NO_MIN_MAX_PROVIDED = this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale; if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { // when all values are 0 @@ -10694,9 +11502,9 @@ function () { // If yMin and yMax are identical, then // adjust the yMin and yMax values to actually // make a graph. Also avoids division by zero errors. - yMin = yMin === 0 ? 0 : yMin - 0.1; // some small value + yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value - yMax = yMax === 0 ? 2 : yMax + 0.1; // some small value + yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value } // Calculate Min amd Max graphical labels and graph // increments. The number of ticks defaults to // 10 which is the SUGGESTED value. Any tick value @@ -10709,7 +11517,23 @@ function () { var result = []; // Determine Range - var range = yMax - yMin; + var range = Math.abs(yMax - yMin); + + if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { + /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ + yMax = yMax * 1.01; + } // for extremely small values - #fix #553 + + + if (range < 0.00001 && NO_MIN_MAX_PROVIDED && yMax < 10) { + yMax = yMax * 1.05; + } else if (diff > 0.1 && diff < 3 && NO_MIN_MAX_PROVIDED) { + /* fix https://github.com/apexcharts/apexcharts.js/issues/576 */ + + /* fix https://github.com/apexcharts/apexcharts.js/issues/588 */ + yMax = yMax + diff / 3; + } + var tiks = ticks + 1; // Adjust ticks if needed if (tiks < 2) { @@ -10739,10 +11563,9 @@ function () { if (val > ub) { break; } - } // TODO: need to remove this condition below which makes this function tightly coupled with w. + } - - if (this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale) { + if (NO_MIN_MAX_PROVIDED) { return { result: result, niceMin: result[0], @@ -10834,7 +11657,7 @@ function () { value: function setYScaleForIndex(index, minY, maxY) { var gl = this.w.globals; var cnf = this.w.config; - var y = this.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; + var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; if (typeof gl.yAxisScale[index] === 'undefined') { gl.yAxisScale[index] = []; @@ -10850,7 +11673,15 @@ function () { } else { // there is some data. Turn off the allSeriesCollapsed flag gl.allSeriesCollapsed = false; - gl.yAxisScale[index] = this.niceScale(minY, maxY, index, y.tickAmount ? y.tickAmount : 5); + + if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { + // fix https://github.com/apexcharts/apexcharts.js/issues/492 + gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); + } else { + var diff = Math.abs(maxY - minY); + gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 + y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5); + } } } } @@ -11059,7 +11890,6 @@ function () { this.ctx = ctx; this.w = ctx.w; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); this.scales = new Range(ctx); } @@ -11091,19 +11921,33 @@ function () { if (this.w.config.chart.type === 'candlestick') { seriesMin = gl.seriesCandleL; seriesMax = gl.seriesCandleH; + } else if (gl.isRangeData) { + seriesMin = gl.seriesRangeStart; + seriesMax = gl.seriesRangeEnd; } for (var i = startingIndex; i < len; i++) { gl.dataPoints = Math.max(gl.dataPoints, series[i].length); for (var j = 0; j < gl.series[i].length; j++) { - if (series[i][j] !== null && Utils.isNumber(series[i][j])) { + var val = series[i][j]; + + if (val !== null && Utils.isNumber(val)) { maxY = Math.max(maxY, seriesMax[i][j]); lowestY = Math.min(lowestY, seriesMin[i][j]); highestY = Math.max(highestY, seriesMin[i][j]); - if (Utils.isFloat(series[i][j])) { - gl.yValueDecimal = Math.max(gl.yValueDecimal, series[i][j].toString().split('.')[1].length); + if (this.w.config.chart.type === 'candlestick') { + maxY = Math.max(maxY, gl.seriesCandleO[i][j]); + maxY = Math.max(maxY, gl.seriesCandleH[i][j]); + maxY = Math.max(maxY, gl.seriesCandleL[i][j]); + maxY = Math.max(maxY, gl.seriesCandleC[i][j]); + highestY = maxY; + } + + if (Utils.isFloat(val)) { + val = Utils.noExponents(val); + gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); } if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { @@ -11184,17 +12028,20 @@ function () { if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') { - if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE) { - var diff = gl.maxY - lowestYInAllSeries; + if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility + ) { + var diff = gl.maxY - lowestYInAllSeries; - if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { - // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. - diff = 0; + if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { + // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. + diff = 0; + } + + gl.minY = lowestYInAllSeries - diff * 5 / 100; + /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ + + gl.maxY = gl.maxY + diff * 5 / 100; } - - gl.minY = lowestYInAllSeries - diff * 5 / 100; - gl.maxY = gl.maxY + diff * 5 / 100 + 0.05; - } } cnf.yaxis.map(function (yaxe, index) { @@ -11222,7 +12069,7 @@ function () { } }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there - if (this.isBarHorizontal) { + if (gl.isBarHorizontal) { if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { gl.minY = cnf.xaxis.min; } @@ -11247,13 +12094,20 @@ function () { gl.minYArr[0] = gl.yAxisScale[0].niceMin; gl.maxYArr[0] = gl.yAxisScale[0].niceMax; } + + return { + minY: gl.minY, + maxY: gl.maxY, + minYArr: gl.minYArr, + maxYArr: gl.maxYArr + }; } }, { key: "setXRange", value: function setXRange() { var gl = this.w.globals; var cnf = this.w.config; - var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided; // minX maxX starts here + var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; // minX maxX starts here if (gl.isXNumeric) { for (var i = 0; i < gl.series.length; i++) { @@ -11280,8 +12134,8 @@ function () { } // for numeric xaxis, we need to adjust some padding left and right for bar charts - if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && cnf.xaxis.type !== 'category') { - if (cnf.xaxis.type !== 'category') { + if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && gl.isXNumeric) { + if (cnf.xaxis.type !== 'category' || gl.isXNumeric) { var minX = gl.minX - gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; gl.minX = minX; gl.initialminX = minX; @@ -11291,7 +12145,7 @@ function () { } } - if (gl.isXNumeric || gl.noLabelsProvided) { + if ((gl.isXNumeric || gl.noLabelsProvided) && (!cnf.xaxis.convertedCatToNumeric || gl.dataFormatXNumeric)) { var ticks; if (cnf.xaxis.tickAmount === undefined) { @@ -11331,7 +12185,8 @@ function () { gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); if (gl.noLabelsProvided && gl.labels.length > 0) { - gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); + gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated + gl.seriesX = gl.labels.slice(); } } // we will still store these labels as the count for this will be different (to draw grid and labels placement) @@ -11356,6 +12211,49 @@ function () { gl.maxX = gl.maxX + 2; } } + + if (gl.isXNumeric) { + // get the least x diff if numeric x axis is present + gl.seriesX.forEach(function (sX, i) { + sX.forEach(function (s, j) { + if (j > 0) { + var xDiff = s - gl.seriesX[i][j - 1]; + gl.minXDiff = Math.min(xDiff, gl.minXDiff); + } + }); + }); + this.calcMinXDiffForTinySeries(); + } + + return { + minX: gl.minX, + maxX: gl.maxX + }; + } + }, { + key: "calcMinXDiffForTinySeries", + value: function calcMinXDiffForTinySeries() { + var w = this.w; + var len = w.globals.labels.length; + + if (w.globals.labels.length === 1) { + w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len / 3; + } else { + if (w.globals.minXDiff === Number.MAX_VALUE) { + // possibly a single dataPoint (fixes react-apexcharts/issue#34) + if (w.globals.timelineLabels.length > 0) { + len = w.globals.timelineLabels.length; + } + + if (len < 3) { + len = 3; + } + + w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len; + } + } + + return w.globals.minXDiff; } }, { key: "setZRange", @@ -11404,18 +12302,23 @@ function () { }, { key: "getSeriesByName", value: function getSeriesByName(seriesName) { - return this.w.globals.dom.baseEl.querySelector(".apexcharts-series.".concat(Utils.escapeString(seriesName))); + return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); } }, { key: "addCollapsedClassToSeries", value: function addCollapsedClassToSeries(elSeries, index) { var w = this.w; - for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { - if (w.globals.collapsedSeries[cs].index === index) { - elSeries.node.classList.add('apexcharts-series-collapsed'); + function iterateOnAllCollapsedSeries(series) { + for (var cs = 0; cs < series.length; cs++) { + if (series[cs].index === index) { + elSeries.node.classList.add('apexcharts-series-collapsed'); + } } } + + iterateOnAllCollapsedSeries(w.globals.collapsedSeries); + iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); } }, { key: "toggleSeriesOnHover", @@ -11790,7 +12693,6 @@ function () { this.isSparkline = this.w.config.chart.sparkline.enabled; this.xPadRight = 0; this.xPadLeft = 0; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); } /** * @memberof Dimensions @@ -11839,20 +12741,25 @@ function () { this.xAxisHeight = 0; } - if (!this.isBarHorizontal) { + if (!w.globals.isBarHorizontal) { this.yAxisWidth = this.getTotalYAxisWidth(); } else { this.yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; } - if (!w.globals.isMultipleYAxis) { - if (this.yAxisWidth < w.config.yaxis[0].labels.minWidth) { - this.yAxisWidth = w.config.yaxis[0].labels.minWidth; - } + var minYAxisWidth = 0; + var maxYAxisWidth = 0; + w.config.yaxis.forEach(function (y) { + minYAxisWidth += y.labels.minWidth; + maxYAxisWidth += y.labels.maxWidth; + }); - if (this.yAxisWidth > w.config.yaxis[0].labels.maxWidth) { - this.yAxisWidth = w.config.yaxis[0].labels.maxWidth; - } + if (this.yAxisWidth < minYAxisWidth) { + this.yAxisWidth = minYAxisWidth; + } + + if (this.yAxisWidth > maxYAxisWidth) { + this.yAxisWidth = maxYAxisWidth; } } }, { @@ -11881,7 +12788,7 @@ function () { gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; - if (this.isBarHorizontal) { + if (w.globals.isBarHorizontal) { gl.rotateXLabels = false; gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize) / 1.5); } @@ -12034,10 +12941,23 @@ function () { var w = this.w; - if (w.config.xaxis.type === 'category' && this.isBarHorizontal || w.config.xaxis.type === 'numeric') { + if (w.config.xaxis.type === 'category' && w.globals.isBarHorizontal || w.config.xaxis.type === 'numeric' || w.config.xaxis.type === 'datetime') { var rightPad = function rightPad(labels) { - if (w.config.grid.padding.right < labels.width) { - _this.xPadRight = labels.width / 2 + 1; + if (_this.timescaleLabels) { + // for timeline labels, we take the last label and check if it exceeds gridWidth + var lastTimescaleLabel = _this.timescaleLabels[_this.timescaleLabels.length - 1]; + var labelPosition = lastTimescaleLabel.position + labels.width; + + if (labelPosition > w.globals.gridWidth) { + w.globals.skipLastTimelinelabel = true; + } else { + // we have to make it false again in case of zooming/panning + w.globals.skipLastTimelinelabel = false; + } + } else if (w.config.xaxis.type !== 'datetime') { + if (w.config.grid.padding.right < labels.width) { + _this.xPadRight = labels.width / 2 + 1; + } } }; @@ -12047,16 +12967,16 @@ function () { } }; - var lineArea = w.config.chart.type === 'line' || w.config.chart.type === 'area'; + var isXNumeric = w.globals.isXNumeric; w.config.yaxis.forEach(function (yaxe, i) { - var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || lineArea || yaxe.opposite && _this.isBarHorizontal; + var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric || yaxe.opposite && w.globals.isBarHorizontal; if (shouldPad) { - if (lineArea && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || _this.isBarHorizontal && yaxe.opposite) { + if (isXNumeric && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || w.globals.isBarHorizontal && yaxe.opposite) { leftPad(xaxisLabelCoords); } - if (!_this.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || lineArea && !w.globals.isMultipleYAxis) { + if (!w.globals.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric && !w.globals.isMultipleYAxis) { rightPad(xaxisLabelCoords); } } @@ -12068,18 +12988,18 @@ function () { value: function titleSubtitleOffset() { var w = this.w; var gl = w.globals; - var gridShrinkOffset = this.isSparkline ? 0 : 10; + var gridShrinkOffset = this.isSparkline || !w.globals.axisCharts ? 0 : 10; if (w.config.title.text !== undefined) { gridShrinkOffset += w.config.title.margin; } else { - gridShrinkOffset += this.isSparkline ? 0 : 5; + gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; } if (w.config.subtitle.text !== undefined) { gridShrinkOffset += w.config.subtitle.margin; } else { - gridShrinkOffset += this.isSparkline ? 0 : 5; + gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; } if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && w.config.series.length > 1) { @@ -12136,8 +13056,13 @@ function () { value: function getxAxisTimeScaleLabelsCoords() { var w = this.w; var rect; - var timescaleLabels = w.globals.timelineLabels.slice(); - var labels = timescaleLabels.map(function (label) { + this.timescaleLabels = w.globals.timelineLabels.slice(); + + if (w.globals.isBarHorizontal && w.config.xaxis.type === 'datetime') { + this.timescaleLabels = w.globals.invertedTimelineLabels.slice(); + } + + var labels = this.timescaleLabels.map(function (label) { return label.value; }); // get the longest string from the labels array and also apply label formatter to it @@ -12180,19 +13105,20 @@ function () { height: coords.height }; } else { - var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter to it + var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter + + var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxies - fix #522 var val = xaxisLabels.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); // the labels gets changed for bar charts - if (this.isBarHorizontal) { + if (w.globals.isBarHorizontal) { val = w.globals.yAxisScale[0].result.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); } - var xlbFormatter = w.globals.xLabelFormatter; var xFormat = new Formatters(this.ctx); val = xFormat.xLabelFormat(xlbFormatter, val); var graphics = new Graphics(this.ctx); @@ -12203,7 +13129,7 @@ function () { }; if (rect.width * xaxisLabels.length > w.globals.svgWidth - lgWidthForSideLegends - this.yAxisWidth && w.config.xaxis.labels.rotate !== 0) { - if (!this.isBarHorizontal) { + if (!w.globals.isBarHorizontal) { w.globals.rotateXLabels = true; xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); rect.height = xLabelrect.height / 1.66; @@ -12251,7 +13177,7 @@ function () { val = w.globals.yAxisScale[index].niceMax; } - if (_this2.isBarHorizontal) { + if (w.globals.isBarHorizontal) { labelPad = 0; var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it @@ -12642,15 +13568,21 @@ function () { } }, { key: "recalcDimensionsBasedOnFormat", - value: function recalcDimensionsBasedOnFormat(filteredTimeScale) { + value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { var w = this.w; var reformattedTimescaleArray = this.formatDates(filteredTimeScale); var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); - w.globals.timelineLabels = removedOverlappingTS.slice(); // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords + + if (!inverted) { + w.globals.timelineLabels = removedOverlappingTS.slice(); + } else { + w.globals.invertedTimelineLabels = removedOverlappingTS.slice(); + } // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX // Dependency on Dimensions(), need to refactor correctly // TODO - find an alternate way to avoid calling this Heavy method twice + var dimensions = new Dimensions(this.ctx); dimensions.plotCoords(); } @@ -13174,10 +14106,13 @@ function () { var cnf = this.w.config; // const graphics = new Graphics(this.ctx) var ct = cnf.chart.type; - var axisChartsArrTypes = ['line', 'area', 'bar', 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; - var xyChartsArrTypes = ['line', 'area', 'bar', 'candlestick', 'scatter', 'bubble']; + var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', + 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; + var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', + 'candlestick', 'scatter', 'bubble']; gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; + gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; gl.chartClass = '.apexcharts' + gl.cuid; gl.dom.baseEl = this.el; gl.dom.elWrap = document.createElement('div'); @@ -13235,7 +14170,7 @@ function () { // if user has specified a particular type for particular series if (typeof ser[st].type !== 'undefined') { if (ser[st].type === 'column' || ser[st].type === 'bar') { - w.config.plotOptions.bar.horizontal = false; // bar not supported in mixed charts + w.config.plotOptions.bar.horizontal = false; // horizontal bars not supported in mixed charts, hence forcefully set to false columnSeries.series.push(series); columnSeries.i.push(st); @@ -13266,6 +14201,7 @@ function () { var candlestick = new CandleStick(this.ctx, xyRatios); var pie = new Pie(this.ctx); var radialBar = new Radial(this.ctx); + var rangeBar = new RangeBar(this.ctx, xyRatios); var radar = new Radar(this.ctx); var elGraph = []; @@ -13331,6 +14267,10 @@ function () { elGraph = candleStick.draw(gl.series); break; + case 'rangeBar': + elGraph = rangeBar.draw(gl.series); + break; + case 'heatmap': var heatmap = new HeatMap(this.ctx, xyRatios); elGraph = heatmap.draw(gl.series); @@ -13400,7 +14340,7 @@ function () { height: gl.svgHeight }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; - var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? 14 : 5; + var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; gl.dom.elWrap.style.width = gl.svgWidth + 'px'; gl.dom.elWrap.style.height = gl.svgHeight + 'px'; @@ -13437,6 +14377,8 @@ function () { gl.seriesCandleH = []; gl.seriesCandleL = []; gl.seriesCandleC = []; + gl.seriesRangeStart = []; + gl.seriesRangeEnd = []; gl.seriesPercent = []; gl.seriesX = []; gl.seriesZ = []; @@ -13479,6 +14421,7 @@ function () { gl.minDate = Number.MAX_VALUE; gl.minZ = Number.MAX_VALUE; gl.maxZ = -Number.MAX_VALUE; + gl.minXDiff = Number.MAX_VALUE; gl.yAxisScale = []; gl.xAxisScale = null; gl.xAxisTicksPositions = []; @@ -13554,6 +14497,8 @@ function () { } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); } + + gl.dataFormatXNumeric = true; } if (cnf.xaxis.type === 'datetime') { @@ -13589,8 +14534,8 @@ function () { for (var j = 0; j < ser[i].data.length; j++) { if (typeof ser[i].data[j].y !== 'undefined') { - if (Array.isArray(ser[i].data[j].y) && ser[i].data[j].y.length === 4) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[3])); + if (Array.isArray(ser[i].data[j].y)) { + this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); } @@ -13605,7 +14550,7 @@ function () { if (isXString || isXDate) { // user supplied '01/01/2017' or a date string (a JS date object is not supported) if (isXString) { - if (cnf.xaxis.type === 'datetime') { + if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); } else { // a category and not a numeric x value @@ -13616,11 +14561,15 @@ function () { if (cnf.xaxis.type === 'datetime') { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); } else { + gl.dataFormatXNumeric = true; + gl.isXNumeric = true; this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); } } } else { // a numeric value in x property + gl.isXNumeric = true; + gl.dataFormatXNumeric = true; this.twoDSeriesX.push(ser[activeI].data[_j2].x); } } @@ -13633,6 +14582,22 @@ function () { gl.isDataXYZ = true; } } + }, { + key: "handleRangeData", + value: function handleRangeData(ser, i) { + var gl = this.w.globals; + var range = {}; + + if (this.isFormat2DArray()) { + range = this.handleRangeDataFormat('array', ser, i); + } else if (this.isFormatXY()) { + range = this.handleRangeDataFormat('xy', ser, i); + } + + gl.seriesRangeStart.push(range.start); + gl.seriesRangeEnd.push(range.end); + return range; + } }, { key: "handleCandleStickData", value: function handleCandleStickData(ser, i) { @@ -13651,6 +14616,40 @@ function () { gl.seriesCandleC.push(ohlc.c); return ohlc; } + }, { + key: "handleRangeDataFormat", + value: function handleRangeDataFormat(format, ser, i) { + var rangeStart = []; + var rangeEnd = []; + var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; + var serObj = new Series(this.ctx); + var activeIndex = serObj.getActiveConfigSeriesIndex(); + + if (format === 'array') { + if (ser[activeIndex].data[0][1].length !== 2) { + throw new Error(err); + } + + for (var j = 0; j < ser[i].data.length; j++) { + rangeStart.push(ser[i].data[j][1][0]); + rangeEnd.push(ser[i].data[j][1][1]); + } + } else if (format === 'xy') { + if (ser[activeIndex].data[0].y.length !== 2) { + throw new Error(err); + } + + for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { + rangeStart.push(ser[i].data[_j3].y[0]); + rangeEnd.push(ser[i].data[_j3].y[1]); + } + } + + return { + start: rangeStart, + end: rangeEnd + }; + } }, { key: "handleCandleStickDataFormat", value: function handleCandleStickDataFormat(format, ser, i) { @@ -13676,11 +14675,11 @@ function () { throw new Error(err); } - for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { - serO.push(ser[i].data[_j3].y[0]); - serH.push(ser[i].data[_j3].y[1]); - serL.push(ser[i].data[_j3].y[2]); - serC.push(ser[i].data[_j3].y[3]); + for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { + serO.push(ser[i].data[_j4].y[0]); + serH.push(ser[i].data[_j4].y[1]); + serL.push(ser[i].data[_j4].y[2]); + serC.push(ser[i].data[_j4].y[3]); } } @@ -13709,6 +14708,11 @@ function () { return; } + if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { + gl.isRangeData = true; + this.handleRangeData(ser, i); + } + if (this.isMultiFormat()) { if (this.isFormat2DArray()) { this.handleFormat2DArray(ser, i); @@ -13791,33 +14795,47 @@ function () { return this.w; } + /** User possibly set string categories in xaxis.categories or labels prop + * Or didn't set xaxis labels at all - in which case we manually do it. + * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], + * this shouldn't be called + * @param {array} ser - the series which user passed to the config + */ + }, { key: "handleExternalLabelsData", value: function handleExternalLabelsData(ser) { var cnf = this.w.config; - var gl = this.w.globals; // user provided labels in category axis + var gl = this.w.globals; if (cnf.xaxis.categories.length > 0) { + // user provided labels in xaxis.category prop gl.labels = cnf.xaxis.categories; } else if (cnf.labels.length > 0) { + // user provided labels in labels props gl.labels = cnf.labels.slice(); } else if (this.fallbackToCategory) { + // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array gl.labels = gl.labels[0]; } else { - // user didn't provided labels, fallback to 1-2-3-4-5 + // user didn't provided any labels, fallback to 1-2-3-4-5 var labelArr = []; if (gl.axisCharts) { + // for axis charts, we get the longest series and create labels from it for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { labelArr.push(i + 1); - } + } // create gl.seriesX as it will be used in calculations of x positions + for (var _i = 0; _i < ser.length; _i++) { gl.seriesX.push(labelArr); - } + } // turn on the isXNumeric flag to allow minX and maxX to function properly + gl.isXNumeric = true; } // no series to pull labels from, put a 0-10 series + // possibly, user collapsed all series. Hence we can't work with above calc if (labelArr.length === 0) { @@ -13826,14 +14844,12 @@ function () { for (var _i2 = 0; _i2 < ser.length; _i2++) { gl.seriesX.push(labelArr); } - } + } // Finally, pass the labelArr in gl.labels which will be printed on x-axis + + + gl.labels = labelArr; // Turn on this global flag to indicate no labels were provided by user - gl.labels = labelArr; gl.noLabelsProvided = true; - - if (cnf.xaxis.type === 'category') { - gl.isXNumeric = false; - } } } // Segregate user provided data into appropriate vars @@ -13843,14 +14859,17 @@ function () { var w = this.w; var cnf = w.config; var gl = w.globals; - this.excludeCollapsedSeriesInYAxis(); + this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis + this.fallbackToCategory = false; this.resetGlobals(); this.isMultipleY(); if (gl.axisCharts) { + // axisCharts includes line / area / column / scatter this.parseDataAxisCharts(ser); } else { + // non-axis charts are pie / donut this.parseDataNonAxisCharts(ser); } @@ -13867,9 +14886,10 @@ function () { this.coreUtils.getStackedSeriesTotals(); } - this.coreUtils.getPercentSeries(); // user didn't provide a [[x,y],[x,y]] series, but a named series + this.coreUtils.getPercentSeries(); - if (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0) { + if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { + // x-axis labels couldn't be detected; hence try searching every option in config this.handleExternalLabelsData(ser); } } @@ -13893,10 +14913,17 @@ function () { xyRatios = this.coreUtils.getCalculatedRatios(); - if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined && isFinite(w.globals.minX) && isFinite(w.globals.maxX)) { + if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { var ts = new TimeScale(this.ctx); - var formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale); + var formattedTimeScale; + + if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { + formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); + ts.recalcDimensionsBasedOnFormat(formattedTimeScale, false); + } else if (w.globals.isBarHorizontal) { + formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); + ts.recalcDimensionsBasedOnFormat(formattedTimeScale, true); + } } } @@ -13913,7 +14940,7 @@ function () { if (gl.axisCharts && type !== 'radar') { var elXaxis, elYaxis; - if (type === 'bar' && cnf.plotOptions.bar.horizontal) { + if (gl.isBarHorizontal) { elYaxis = yAxis.drawYaxisInversed(0); elXaxis = xAxis.drawXaxisInversed(0); gl.dom.elGraphical.add(elXaxis); @@ -14418,6 +15445,7 @@ function () { value: function drawGrid() { var w = this.w; var xAxis = new XAxis(this.ctx); + var yaxis = new YAxis(this.ctx); var gl = this.w.globals; var elgrid = null; @@ -14435,6 +15463,8 @@ function () { if (elgrid !== null) { xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); } + + yaxis.setYAxisTextAlignments(); } } // This mask will clip off overflowing graphics from the drawable area @@ -14461,7 +15491,7 @@ function () { gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff'); var coreUtils = new CoreUtils(this); coreUtils.getLargestMarkerSize(); - var markerSize = w.globals.markers.largestSize + w.config.markers.hover.sizeOffset + 1; + var markerSize = w.globals.markers.largestSize + 1; gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff'); gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); @@ -14479,6 +15509,14 @@ function () { var elg = graphics.group({ class: 'apexcharts-grid' }); + var elgridLinesH = graphics.group({ + class: 'apexcharts-gridlines-horizontal' + }); + var elgridLinesV = graphics.group({ + class: 'apexcharts-gridlines-vertical' + }); + elg.add(elgridLinesH); + elg.add(elgridLinesV); var tickAmount = 8; for (var i = 0; i < w.globals.series.length; i++) { @@ -14490,9 +15528,8 @@ function () { } var xCount; - var inversedGrid = !!(w.config.plotOptions.bar.horizontal && w.config.chart.type === 'bar'); - if (!inversedGrid) { + if (!w.globals.isBarHorizontal) { xCount = this.xaxisLabels.length; // draw vertical lines if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { @@ -14509,7 +15546,7 @@ function () { if (w.config.grid.xaxis.lines.show && x1 > 0 && x1 < w.globals.gridWidth) { var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); line.node.classList.add('apexcharts-gridline'); - elg.add(line); + elgridLinesV.add(line); if (this.animX) { this.animateLine(line, { @@ -14523,7 +15560,15 @@ function () { } var xAxis = new XAxis(this.ctx); - xAxis.drawXaxisTicks(x1, elg); + + if (_i === xCount - 1) { + if (!w.globals.skipLastTimelinelabel) { + // skip drawing last label here + xAxis.drawXaxisTicks(x1, elg); + } + } else { + xAxis.drawXaxisTicks(x1, elg); + } } } else { var xCountForCategoryCharts = xCount; @@ -14545,7 +15590,7 @@ function () { _line.node.classList.add('apexcharts-gridline'); - elg.add(_line); + elgridLinesV.add(_line); if (this.animX) { this.animateLine(_line, { @@ -14575,7 +15620,7 @@ function () { for (var _i3 = 0; _i3 < tickAmount + 1; _i3++) { var _line2 = graphics.drawLine(_x, _y, _x2, _y2, w.config.grid.borderColor, strokeDashArray); - elg.add(_line2); + elgridLinesH.add(_line2); _line2.node.classList.add('apexcharts-gridline'); @@ -14615,7 +15660,7 @@ function () { _line3.node.classList.add('apexcharts-gridline'); - elg.add(_line3); + elgridLinesV.add(_line3); if (this.animX) { this.animateLine(_line3, { @@ -14645,7 +15690,7 @@ function () { for (var _i5 = 0; _i5 < w.globals.dataPoints + 1; _i5++) { var _line4 = graphics.drawLine(_x5, _y5, _x6, _y6, w.config.grid.borderColor, strokeDashArray); - elg.add(_line4); + elgridLinesH.add(_line4); _line4.node.classList.add('apexcharts-gridline'); @@ -15106,11 +16151,13 @@ function () { if (w.globals.axisCharts) { seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"); + seriesEls = Utils.listToArray(seriesEls); seriesEls.forEach(function (v) { realIndexes.push(parseInt(v.getAttribute('data:realIndex'))); }); } else { seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"); + seriesEls = Utils.listToArray(seriesEls); seriesEls.forEach(function (v) { realIndexes.push(parseInt(v.getAttribute('rel')) - 1); }); @@ -15229,6 +16276,16 @@ function () { // for non-axis charts i.e pie / donuts var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); + var type = w.config.chart.type; + + if (type === 'pie' || type === 'donut') { + var dataLabels = w.config.plotOptions.pie.donut.labels; + var graphics = new Graphics(this.ctx); + var pie = new Pie(this.ctx); + graphics.pathMouseDown(_seriesEl.members[0], null); + pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); + } + _seriesEl.fire('click'); } } @@ -15309,8 +16366,7 @@ function () { } else { for (var i = 0; i < res.length; i++) { if (width < res[i].breakpoint) { - newOptions = Utils.extend(config, newOptions); - newOptions = CoreUtils.extendArrayProps(newOptions, res[i].options); + newOptions = CoreUtils.extendArrayProps(config, res[i].options); newOptions = Utils.extend(w.config, newOptions); _this.overrideResponsiveOptions(newOptions); @@ -15366,6 +16422,7 @@ function () { value: function setDefaultColors() { var w = this.w; var utils = new Utils(); + w.globals.dom.elWrap.classList.add(w.config.theme.mode); if (w.config.colors === undefined) { w.globals.colors = this.predefined(); @@ -15432,7 +16489,7 @@ function () { this.pushExtraColors(w.globals.dataLabels.style.colors, 50); if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { - w.globals.radarPolygons.fill.colors = ['#fff']; + w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff']; } else { w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors; } @@ -15474,6 +16531,19 @@ function () { } } } + }, { + key: "updateThemeOptions", + value: function updateThemeOptions(options) { + options.chart = options.chart || {}; + options.tooltip = options.tooltip || {}; + var mode = options.theme.mode || 'light'; + var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; + var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; + options.tooltip.theme = mode; + options.chart.foreColor = foreColor; + options.theme.palette = palette; + return options; + } }, { key: "predefined", value: function predefined() { @@ -15493,7 +16563,7 @@ function () { break; case 'palette4': - this.colors = ['#546E7A', '#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a']; + this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; break; case 'palette5': @@ -15902,7 +16972,7 @@ function () { val = f.yLbFormatter(w.globals.series[tIndex][j], { series: w.globals.series, - seriesIndex: i, + seriesIndex: tIndex, dataPointIndex: j, w: w }); // discard 0 values in BARS @@ -16166,6 +17236,7 @@ function () { var tooltipEl = this.ttCtx.getElTooltip(); // override everything with a custom html tooltip and replace it tooltipEl.innerHTML = w.config.tooltip.custom({ + ctx: this.ctx, series: w.globals.series, seriesIndex: i, dataPointIndex: j, @@ -16369,7 +17440,7 @@ function () { if (w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top - tooltipRect.ttHeight / 2; + y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; } var newPositions = this.positionChecks(tooltipRect, x, y); @@ -16439,9 +17510,13 @@ function () { cx = pointsArr[capturedSeries][j][0]; cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); - point.setAttribute('r', hoverSize); - point.setAttribute('cx', cx); - point.setAttribute('cy', cy); // point.style.opacity = w.config.markers.hover.opacity + + if (point) { + point.setAttribute('r', hoverSize); + point.setAttribute('cx', cx); + point.setAttribute('cy', cy); + } // point.style.opacity = w.config.markers.hover.opacity + this.moveXCrosshairs(cx); @@ -16513,7 +17588,7 @@ function () { value: function moveStickyTooltipOverBars(j) { var w = this.w; var ttCtx = this.ttCtx; - var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); + var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; var bcy = 0; var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; @@ -16596,6 +17671,8 @@ function () { }, { key: "enlargeCurrentPoint", value: function enlargeCurrentPoint(rel, point) { + var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var w = this.w; if (w.config.chart.type !== 'bubble') { @@ -16604,6 +17681,12 @@ function () { var cx = point.getAttribute('cx'); var cy = point.getAttribute('cy'); + + if (x !== null && y !== null) { + cx = x; + cy = y; + } + this.tooltipPosition.moveXCrosshairs(cx); if (!this.fixedTooltip) { @@ -16792,21 +17875,27 @@ function () { ttItems: opt.ttItems, i: i, j: j, - shared: ttCtx.intersect ? false : w.config.tooltip.shared + shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared }); - ttCtx.marker.enlargeCurrentPoint(j, opt.paths); + + if (e.type === 'mouseup') { + ttCtx.markerClick(e, i, j); + } + x = cx; - y = cy - ttCtx.tooltipRect.ttHeight * 1.4; + y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; if (ttCtx.w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top; + y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; } if (val < 0) { y = cy; } + + ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); } return { @@ -16836,7 +17925,7 @@ function () { var barHeight = barXY.barHeight; var j = barXY.j; - if (ttCtx.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { + if (w.globals.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { x = barXY.x; y = barXY.y; strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; // bW = barXY.barWidth @@ -16880,16 +17969,16 @@ function () { } // move tooltip here - if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || ttCtx.isBarHorizontal && ttCtx.hasBars())) { + if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.hasBars())) { if (isReversed) { x = w.globals.gridWidth - x; } tooltipEl.style.left = x + w.globals.translateX + 'px'; var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex')); - var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; + var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; - if (isReversed && !(ttCtx.isBarHorizontal && ttCtx.hasBars())) { + if (isReversed && !(w.globals.isBarHorizontal && ttCtx.hasBars())) { y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; } @@ -16916,7 +18005,7 @@ function () { var barHeight = 0; var cl = e.target.classList; - if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area')) { + if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { var bar = e.target; var barRect = bar.getBoundingClientRect(); var seriesBound = opt.elGrid.getBoundingClientRect(); @@ -16948,7 +18037,7 @@ function () { }); if (w.config.tooltip.followCursor) { - if (w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { x = clientX - seriesBound.left + 15; y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; } else { @@ -16961,7 +18050,7 @@ function () { y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; } } else { - if (w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { x = cx; if (x < ttCtx.xyRatios.baseLineInvertedY) { @@ -17031,7 +18120,7 @@ function () { if (xaxisTooltip === null) { ttCtx.xaxisTooltip = document.createElement('div'); - ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass); + ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.xaxisTooltip); ttCtx.xaxisTooltipText = document.createElement('div'); ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); @@ -17063,7 +18152,7 @@ function () { if (yaxisTooltip === null) { ttCtx.yaxisTooltip = document.createElement('div'); - ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass); + ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.yaxisTooltip); if (i === 0) ttCtx.yaxisTooltipText = []; ttCtx.yaxisTooltipText.push(document.createElement('div')); @@ -17115,7 +18204,7 @@ function () { } } - if (w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { ttCtx.xcrosshairsWidth = 0; } @@ -17170,19 +18259,19 @@ function () { this.ctx = ctx; this.w = ctx.w; var w = this.w; + this.tConfig = w.config.tooltip; this.tooltipUtil = new Utils$1(this); this.tooltipLabels = new Labels(this); this.tooltipPosition = new Position(this); this.marker = new Marker(this); this.intersect = new Intersect(this); this.axesTooltip = new AxesTooltip(this); - this.showOnIntersect = w.config.tooltip.intersect; - this.showTooltipTitle = w.config.tooltip.x.show; - this.fixedTooltip = w.config.tooltip.fixed.enabled; + this.showOnIntersect = this.tConfig.intersect; + this.showTooltipTitle = this.tConfig.x.show; + this.fixedTooltip = this.tConfig.fixed.enabled; this.xaxisTooltip = null; this.yaxisTTEls = null; - this.isBarHorizontal = w.config.plotOptions.bar.horizontal; - this.isBarShared = !w.config.plotOptions.bar.horizontal && w.config.tooltip.shared; + this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; } _createClass(Tooltip, [{ @@ -17216,7 +18305,7 @@ function () { var tooltipEl = document.createElement('div'); tooltipEl.classList.add('apexcharts-tooltip'); - tooltipEl.classList.add(w.config.tooltip.theme); + tooltipEl.classList.add(this.tConfig.theme); w.globals.dom.elWrap.appendChild(tooltipEl); if (w.globals.axisCharts) { @@ -17229,7 +18318,7 @@ function () { } // we forcefully set intersect true for these conditions - if (w.globals.comboCharts && !w.config.tooltip.shared || w.config.tooltip.intersect && !w.config.tooltip.shared || w.config.chart.type === 'bar' && !w.config.tooltip.shared) { + if (w.globals.comboCharts && !this.tConfig.shared || this.tConfig.intersect && !this.tConfig.shared || (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { this.showOnIntersect = true; } @@ -17246,14 +18335,14 @@ function () { if (this.showTooltipTitle) { this.tooltipTitle = document.createElement('div'); this.tooltipTitle.classList.add('apexcharts-tooltip-title'); - this.tooltipTitle.style.fontFamily = w.config.tooltip.style.fontFamily || w.config.chart.fontFamily; - this.tooltipTitle.style.fontSize = w.config.tooltip.style.fontSize; + this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; + this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; tooltipEl.appendChild(this.tooltipTitle); } var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared - if ((w.globals.xyCharts || w.globals.comboCharts) && w.config.tooltip.shared) { + if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { if (!this.showOnIntersect) { ttItemsCnt = w.globals.series.length; } else { @@ -17274,14 +18363,21 @@ function () { for (var i = 0; i < ttItemsCnt; i++) { var gTxt = document.createElement('div'); gTxt.classList.add('apexcharts-tooltip-series-group'); + + if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { + if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { + gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); + } + } + var point = document.createElement('span'); point.classList.add('apexcharts-tooltip-marker'); point.style.backgroundColor = w.globals.colors[i]; gTxt.appendChild(point); var gYZ = document.createElement('div'); gYZ.classList.add('apexcharts-tooltip-text'); - gYZ.style.fontFamily = w.config.tooltip.style.fontFamily || w.config.chart.fontFamily; - gYZ.style.fontSize = w.config.tooltip.style.fontSize; // y values group + gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; + gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group var gYValText = document.createElement('div'); gYValText.classList.add('apexcharts-tooltip-y-group'); @@ -17315,7 +18411,7 @@ function () { var w = this.w; var type = w.config.chart.type; var tooltipEl = this.getElTooltip(); - var barOrCandlestick = !!(type === 'bar' || type === 'candlestick'); + var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); var hoverArea = w.globals.dom.Paper.node; var elGrid = this.getElGrid(); @@ -17338,8 +18434,8 @@ function () { if (w.globals.axisCharts) { if (type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble') { points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); - } else if (barOrCandlestick) { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area', '.apexcharts-series .apexcharts-candlestick-area'); + } else if (commonBar) { + points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); } else if (type === 'heatmap') { points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); } else if (type === 'radar') { @@ -17354,11 +18450,11 @@ function () { } } - var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || barOrCandlestick && this.hasBars() && w.config.tooltip.shared; + var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.hasBars() && this.tConfig.shared; if (validSharedChartTypes) { this.addPathsEventListeners([hoverArea], seriesHoverParams); - } else if (barOrCandlestick && !w.globals.comboCharts) { + } else if (commonBar && !w.globals.comboCharts) { this.addBarsEventListeners(seriesHoverParams); } else if (type === 'bubble' || type === 'scatter' || type === 'radar' || this.showOnIntersect && (type === 'area' || type === 'line')) { this.addPointsEventsListeners(seriesHoverParams); @@ -17383,7 +18479,7 @@ function () { } // combo charts may have bars, so add event listeners here too - if (this.hasBars() && !w.config.tooltip.shared) { + if (this.hasBars() && !this.tConfig.shared) { this.addBarsEventListeners(seriesHoverParams); } } @@ -17396,14 +18492,14 @@ function () { var tooltipRect = tooltipEl.getBoundingClientRect(); var ttWidth = tooltipRect.width + 10; var ttHeight = tooltipRect.height + 10; - var x = w.config.tooltip.fixed.offsetX; - var y = w.config.tooltip.fixed.offsetY; + var x = this.tConfig.fixed.offsetX; + var y = this.tConfig.fixed.offsetY; - if (w.config.tooltip.fixed.position.toLowerCase().indexOf('right') > -1) { + if (this.tConfig.fixed.position.toLowerCase().indexOf('right') > -1) { x = x + w.globals.svgWidth - ttWidth + 10; } - if (w.config.tooltip.fixed.position.toLowerCase().indexOf('bottom') > -1) { + if (this.tConfig.fixed.position.toLowerCase().indexOf('bottom') > -1) { y = y + w.globals.svgHeight - ttHeight - 10; } @@ -17427,7 +18523,7 @@ function () { key: "addBarsEventListeners", value: function addBarsEventListeners(seriesHoverParams) { var w = this.w; - var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area'); + var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); this.addPathsEventListeners(bars, seriesHoverParams); } }, { @@ -17448,7 +18544,7 @@ function () { ttItems: opts.ttItems }; _this.w.globals.tooltipOpts = extendedOpts; - var events = ['mousemove', 'touchmove', 'mouseout', 'touchend']; + var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; events.map(function (ev) { return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { capture: false, @@ -17533,7 +18629,7 @@ function () { ttCtx.e = e; // highlight the current hovered bars if (ttCtx.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { - if (w.config.tooltip.onDatasetHover.highlightDataSeries) { + if (this.tConfig.onDatasetHover.highlightDataSeries) { var series = new Series(chartCtx); series.toggleSeriesOnHover(e, e.target.parentNode); } @@ -17579,15 +18675,24 @@ function () { return; } + if (Array.isArray(this.tConfig.enabledOnSeries)) { + var index = parseInt(opt.paths.getAttribute('index')); + + if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { + self.handleMouseOut(opt); + return; + } + } + var tooltipEl = this.getElTooltip(); var xcrosshairs = this.getElXCrosshairs(); - var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !this.isBarHorizontal && this.hasBars() && w.config.tooltip.shared || w.globals.comboCharts && this.hasBars; + var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.hasBars; - if (w.config.chart.type === 'bar' && this.isBarHorizontal && this.hasBars()) { + if (w.globals.isBarHorizontal && this.hasBars()) { isStickyTooltip = false; } - if (e.type === 'mousemove' || e.type === 'touchmove') { + if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { if (xcrosshairs !== null) { xcrosshairs.classList.add('active'); } @@ -17622,21 +18727,21 @@ function () { } if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { - if (w.config.tooltip.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { - this.create(self, capturedSeries, j, opt.ttItems); + if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { + this.create(e, self, capturedSeries, j, opt.ttItems); } else { - this.create(self, capturedSeries, j, opt.ttItems, false); + this.create(e, self, capturedSeries, j, opt.ttItems, false); } } else { if (this.tooltipUtil.isXoverlap(j)) { - self.create(self, 0, j, opt.ttItems); + self.create(e, self, 0, j, opt.ttItems); } } } else { // couldn't capture any series. check if shared X is same, // if yes, draw a grouped tooltip if (this.tooltipUtil.isXoverlap(j)) { - self.create(self, 0, j, opt.ttItems); + self.create(e, self, 0, j, opt.ttItems); } } } else { @@ -17692,20 +18797,7 @@ function () { var w = this.w; var rel = opt.paths.getAttribute('rel'); var tooltipEl = this.getElTooltip(); - var trX = 0; - var trY = 0; - var elPie = null; - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - - if (w.config.chart.type === 'radialBar') { - elPie = w.globals.dom.baseEl.querySelector('.apexcharts-radialbar'); - } else { - elPie = w.globals.dom.baseEl.querySelector('.apexcharts-pie'); - trX = parseInt(elPie.getAttribute('data:innerTranslateX')); - trY = parseInt(elPie.getAttribute('data:innerTranslateY')); - } - - var seriesBound = elPie.getBoundingClientRect(); + var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); if (e.type === 'mousemove' || e.type === 'touchmove') { tooltipEl.classList.add('active'); @@ -17714,17 +18806,9 @@ function () { i: parseInt(rel) - 1, shared: false }); - var x = clientX - seriesBound.left - tooltipRect.ttWidth / 2.2 + trX; - var y = e.clientY - seriesBound.top - tooltipRect.ttHeight / 2 - 15 + trY; - - if (x < 0) { - x = 0; - } else if (x + tooltipRect.ttWidth > w.globals.gridWidth) { - x = clientX - seriesBound.left - tooltipRect.ttWidth + trX; - } - - if (y < 0) y = tooltipRect.ttHeight + 20; - tooltipEl.style.left = x + w.globals.translateX + 'px'; + var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; + var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; + tooltipEl.style.left = x + 'px'; tooltipEl.style.top = y + 'px'; } else if (e.type === 'mouseout' || e.type === 'touchend') { tooltipEl.classList.remove('active'); @@ -17794,7 +18878,7 @@ function () { }, { key: "getElBars", value: function getElBars() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series'); + return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); } }, { key: "hasBars", @@ -17803,28 +18887,52 @@ function () { return bars.length > 0; } }, { - key: "create", - value: function create(context, capturedSeries, j, ttItems) { - var shared = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; + key: "markerClick", + value: function markerClick(e, seriesIndex, dataPointIndex) { var w = this.w; - var self = context; - if (shared === null) shared = w.config.tooltip.shared; + + if (typeof w.config.chart.events.markerClick === 'function') { + w.config.chart.events.markerClick(e, this.ctx, { + seriesIndex: seriesIndex, + dataPointIndex: dataPointIndex, + w: w + }); + } + + this.ctx.fireEvent('markerClick', [e, this.ctx, { + seriesIndex: seriesIndex, + dataPointIndex: dataPointIndex, + w: w + }]); + } + }, { + key: "create", + value: function create(e, context, capturedSeries, j, ttItems) { + var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; + var w = this.w; + var ttCtx = context; + + if (e.type === 'mouseup') { + this.markerClick(e, capturedSeries, j); + } + + if (shared === null) shared = this.tConfig.shared; var hasMarkers = this.hasMarkers(); var bars = this.getElBars(); if (shared) { - self.tooltipLabels.drawSeriesTexts({ + ttCtx.tooltipLabels.drawSeriesTexts({ ttItems: ttItems, i: capturedSeries, j: j, - shared: this.showOnIntersect ? false : w.config.tooltip.shared + shared: this.showOnIntersect ? false : this.tConfig.shared }); if (hasMarkers) { if (w.globals.markers.largestSize > 0) { - self.marker.enlargePoints(j); + ttCtx.marker.enlargePoints(j); } else { - self.tooltipPosition.moveDynamicPointsOnHover(j); + ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); } } @@ -17845,7 +18953,7 @@ function () { } } } else { - self.tooltipLabels.drawSeriesTexts({ + ttCtx.tooltipLabels.drawSeriesTexts({ shared: false, ttItems: ttItems, i: capturedSeries, @@ -17853,11 +18961,11 @@ function () { }); if (this.hasBars()) { - self.tooltipPosition.moveStickyTooltipOverBars(j); + ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); } if (hasMarkers) { - self.tooltipPosition.moveMarkers(capturedSeries, j); + ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); } } } @@ -18691,6 +19799,7 @@ function (_Toolbar) { } me.drawSelectionRect(selectionRect); + me.selectionDragging('resizing'); return selectionRect; } }, { @@ -18707,7 +19816,7 @@ function (_Toolbar) { timerInterval = 30; } - if (typeof w.config.chart.events.selection === 'function') { + if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { // a small debouncer is required when resizing to avoid freezing the chart clearTimeout(this.w.globals.selectionResizeTimer); this.w.globals.selectionResizeTimer = window.setTimeout(function () { @@ -18801,20 +19910,10 @@ function (_Toolbar) { } } - if (zoomtype === 'x') { - me.ctx._updateOptions({ - xaxis: xaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } else if (zoomtype === 'y') { - me.ctx._updateOptions({ - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } else { - me.ctx._updateOptions({ - xaxis: xaxis, - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } + me.ctx._updateOptions({ + xaxis: xaxis, + yaxis: yaxis + }, false, me.w.config.chart.animations.dynamicAnimation.enabled); if (typeof w.config.chart.events.zoomed === 'function') { toolbar.zoomCallback(xaxis, yaxis); @@ -19000,7 +20099,8 @@ function () { define(function () { return factory(root, root.document); }); - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object') { + /* below check fixes #412 */ + } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { module.exports = root.document ? factory(root, root.document) : function (w) { return factory(w, w.document); }; @@ -26122,7 +27222,7 @@ function styleInject(css, ref) { } } -var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #222;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n.apexcharts-zoom-icon.selected svg, \n.apexcharts-selection-icon.selected svg, \n.apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.apexcharts-selection-icon:not(.selected):hover svg,\n.apexcharts-zoom-icon:not(.selected):hover svg, \n.apexcharts-zoom-in-icon:hover svg, \n.apexcharts-zoom-out-icon:hover svg, \n.apexcharts-reset-zoom-icon:hover svg, \n.apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.apexcharts-menu-item:hover {\n background: #eee;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; +var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; styleInject(css); /* @@ -26602,24 +27702,23 @@ function () { }, { key: "initModules", value: function initModules() { - this.animations = new Animations(this.ctx); - this.annotations = new Annotations(this.ctx); + this.animations = new Animations(this); this.core = new Core(this.el, this); this.grid = new Grid(this); this.coreUtils = new CoreUtils(this); this.config = new Config({}); - this.crosshairs = new Crosshairs(this.ctx); + this.crosshairs = new Crosshairs(this); this.options = new Options(); - this.responsive = new Responsive(this.ctx); - this.series = new Series(this.ctx); - this.theme = new Theme(this.ctx); - this.formatters = new Formatters(this.ctx); - this.titleSubtitle = new TitleSubtitle(this.ctx); - this.legend = new Legend(this.ctx); - this.toolbar = new Toolbar(this.ctx); - this.dimensions = new Dimensions(this.ctx); - this.zoomPanSelection = new ZoomPanSelection(this.ctx); - this.w.globals.tooltip = new Tooltip(this.ctx); + this.responsive = new Responsive(this); + this.series = new Series(this); + this.theme = new Theme(this); + this.formatters = new Formatters(this); + this.titleSubtitle = new TitleSubtitle(this); + this.legend = new Legend(this); + this.toolbar = new Toolbar(this); + this.dimensions = new Dimensions(this); + this.zoomPanSelection = new ZoomPanSelection(this); + this.w.globals.tooltip = new Tooltip(this); } }, { key: "addEventListener", @@ -26698,14 +27797,15 @@ function () { this.series.handleNoData(); } - this.setupEventHandlers(); + this.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time + this.core.parseData(ser); // this is a good time to set theme colors first - this.theme.init(); // labelFormatters should be called before dimensions as in dimensions we need text labels width - // as markers accepts array, we need to setup global markers for easier access + this.theme.init(); // as markers accepts array, we need to setup global markers for easier access var markers = new Markers(this); - markers.setGlobalMarkerSize(); + markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width + this.formatters.setLabelFormatters(); this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area @@ -26761,6 +27861,7 @@ function () { me.series.handleNoData(); } + me.annotations = new Annotations(me); me.core.drawAxis(w.config.chart.type, graphData.xyRatios); me.grid = new Grid(me); @@ -26861,9 +27962,9 @@ function () { if (options$$1.series[0].data) { options$$1.series = options$$1.series.map(function (s, i) { return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i].name, - type: s.type, - data: s.data + name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, + type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, + data: s.data ? s.data : w.config.series[i] && w.config.series[i].data }); }); } // user updated the series via updateOptions() function. @@ -26889,6 +27990,12 @@ function () { if (w.globals.collapsedSeriesIndices.length > 0) { this.clearPreviousPaths(); } + /* update theme mode#459 */ + + + if (options$$1.theme) { + options$$1 = this.theme.updateThemeOptions(options$$1); + } return this._updateOptions(options$$1, redraw, animate, overwriteInitialConfig); } @@ -26964,10 +28071,11 @@ function () { key: "appendSeries", value: function appendSeries(newSerie) { var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var newSeries = this.w.config.series.slice(); newSeries.push(newSerie); this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate); + return this._updateSeries(newSeries, animate, overwriteInitialSeries); } /** * Private method to update Series. @@ -26993,14 +28101,21 @@ function () { var existingSeries; // axis charts - if (newSeries[0].data) { + if (w.globals.axisCharts) { existingSeries = newSeries.map(function (s, i) { return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i].name, - type: s.type, - data: s.data + name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, + type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, + data: s.data ? s.data : w.config.series[i] && w.config.series[i].data }); }); + + if (existingSeries.length === 0) { + existingSeries = [{ + data: [] + }]; + } + w.config.series = existingSeries; } else { // non-axis chart (pie/radialbar) @@ -27271,6 +28386,12 @@ function () { passive: true }); }); + eventList.forEach(function (event) { + document.addEventListener(event, function (e) { + w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; + w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; + }); + }); this.core.setupBrushHandler(); } }, { @@ -27400,12 +28521,6 @@ function () { throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); } } - }, { - key: "svgUrl", - value: function svgUrl() { - var exp = new Exports(this.ctx); - return exp.svgUrl(); - } }, { key: "dataURI", value: function dataURI() { @@ -27495,6 +28610,21 @@ function () { return chart.appendData.apply(chart, opts); } + case 'appendSeries': + { + return chart.appendSeries.apply(chart, opts); + } + + case 'toggleSeries': + { + return chart.toggleSeries.apply(chart, opts); + } + + case 'dataURI': + { + return chart.dataURI.apply(chart, opts); + } + case 'addXaxisAnnotation': { return chart.addXaxisAnnotation.apply(chart, opts); @@ -27510,11 +28640,21 @@ function () { return chart.addPointAnnotation.apply(chart, opts); } + case 'addText': + { + return chart.addText.apply(chart, opts); + } + case 'clearAnnotations': { return chart.clearAnnotations.apply(chart, opts); } + case 'paper': + { + return chart.paper.apply(chart, opts); + } + case 'destroy': { return chart.destroy(); diff --git a/static/libs/apexcharts/apexcharts.esm.js b/static/libs/apexcharts/apexcharts.esm.js index 64990f0e8..4238534f3 100644 --- a/static/libs/apexcharts/apexcharts.esm.js +++ b/static/libs/apexcharts/apexcharts.esm.js @@ -1,5 +1,5 @@ /*! - * ApexCharts v3.6.2 + * ApexCharts v3.6.12 * (c) 2018-2019 Juned Chhipa * Released under the MIT License. */ @@ -190,6 +190,18 @@ function () { key: "isObject", value: function isObject(item) { return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; + } + }, { + key: "listToArray", + value: function listToArray(list) { + var i, + array = []; + + for (i = 0; i < list.length; i++) { + array[i] = list[i]; + } + + return array; } // to extend defaults with user options // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 @@ -325,6 +337,34 @@ function () { if (val === null) return val; return parseFloat(val); } + }, { + key: "noExponents", + value: function noExponents(val) { + var data = String(val).split(/[eE]/); + if (data.length == 1) return data[0]; + var z = '', + sign = val < 0 ? '-' : '', + str = data[0].replace('.', ''), + mag = Number(data[1]) + 1; + + if (mag < 0) { + z = sign + '0.'; + + while (mag++) { + z += '0'; + } + + return z + str.replace(/^\-/, ''); + } + + mag -= str.length; + + while (mag--) { + z += '0'; + } + + return str + z; + } }, { key: "getDimensions", value: function getDimensions(el) { @@ -541,56 +581,34 @@ function () { _createClass(Filters, [{ key: "getDefaultFilter", - value: function getDefaultFilter(el) { + value: function getDefaultFilter(el, i) { var w = this.w; el.unfilter(true); var filter = new window.SVG.Filter(); filter.size('120%', '180%', '-5%', '-40%'); if (w.config.states.normal.filter !== 'none') { - this.applyFilter(el, w.config.states.normal.filter.type, w.config.states.normal.filter.value); + this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); } else { if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow); + this.dropShadow(el, w.config.chart.dropShadow, i); } } } }, { key: "addNormalFilter", - value: function addNormalFilter(el) { + value: function addNormalFilter(el, i) { var w = this.w; if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow); + this.dropShadow(el, w.config.chart.dropShadow, i); } - } - }, { - key: "addDesaturateFilter", - value: function addDesaturateFilter(el) { - var _this = this; - - var w = this.w; - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this.addShadow(add, shadowAttr); - } else { - filter = add; - } - - filter.colorMatrix('matrix', [0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 1.0, 0]).colorMatrix('saturate', 0); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); } // appends dropShadow to the filter object which can be chained with other filter effects }, { key: "addLightenFilter", - value: function addLightenFilter(el, attrs) { - var _this2 = this; + value: function addLightenFilter(el, i, attrs) { + var _this = this; var w = this.w; var intensity = attrs.intensity; @@ -606,7 +624,7 @@ function () { var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { - filter = _this2.addShadow(add, shadowAttr); + filter = _this.addShadow(add, i, shadowAttr); } else { filter = add; } @@ -624,8 +642,8 @@ function () { }, { key: "addDarkenFilter", - value: function addDarkenFilter(el, attrs) { - var _this3 = this; + value: function addDarkenFilter(el, i, attrs) { + var _this2 = this; var w = this.w; var intensity = attrs.intensity; @@ -641,7 +659,7 @@ function () { var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { - filter = _this3.addShadow(add, shadowAttr); + filter = _this2.addShadow(add, i, shadowAttr); } else { filter = add; } @@ -657,19 +675,19 @@ function () { } }, { key: "applyFilter", - value: function applyFilter(el, filter) { - var intensity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5; + value: function applyFilter(el, i, filter) { + var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; switch (filter) { case 'none': { - this.addNormalFilter(el); + this.addNormalFilter(el, i); break; } case 'lighten': { - this.addLightenFilter(el, { + this.addLightenFilter(el, i, { intensity: intensity }); break; @@ -677,18 +695,12 @@ function () { case 'darken': { - this.addDarkenFilter(el, { + this.addDarkenFilter(el, i, { intensity: intensity }); break; } - case 'desaturate': - { - this.addDesaturateFilter(el); - break; - } - default: // do nothing break; @@ -697,13 +709,13 @@ function () { }, { key: "addShadow", - value: function addShadow(add, attrs) { + value: function addShadow(add, i, attrs) { var blur = attrs.blur, top = attrs.top, left = attrs.left, color = attrs.color, opacity = attrs.opacity; - var shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); + var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); return add.blend(add.source, shadowBlur); } // directly adds dropShadow to the element and returns the same element. // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow @@ -711,6 +723,7 @@ function () { }, { key: "dropShadow", value: function dropShadow(el, attrs) { + var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var top = attrs.top, left = attrs.left, blur = attrs.blur, @@ -718,6 +731,7 @@ function () { opacity = attrs.opacity, noUserSpaceOnUse = attrs.noUserSpaceOnUse; el.unfilter(true); + color = Array.isArray(color) ? color[i] : color; var filter = new window.SVG.Filter(); filter.size('120%', '180%', '-5%', '-40%'); el.filter(function (add) { @@ -750,7 +764,7 @@ function () { var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { - this.applyFilter(el, activeFilter.type, activeFilter.value); + this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); } } } @@ -1206,7 +1220,9 @@ function () { _ref2$shouldClipToGri = _ref2.shouldClipToGrid, shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, - bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat; + bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, + _ref2$drawShadow = _ref2.drawShadow, + drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; var w = this.w; var filters = new Filters(this.ctx); var anim = new Animations(this.ctx); @@ -1252,12 +1268,12 @@ function () { if (w.config.states.normal.filter.type !== 'none') { - filters.getDefaultFilter(el, w.config.states.normal.filter.type, w.config.states.normal.filter.value); + filters.getDefaultFilter(el, realIndex); } else { - if (w.config.chart.dropShadow.enabled) { + if (w.config.chart.dropShadow.enabled && drawShadow) { if (!w.config.chart.dropShadow.enabledSeries || w.config.chart.dropShadow.enabledSeries && w.config.chart.dropShadow.enabledSeries.indexOf(realIndex) !== -1) { var shadow = w.config.chart.dropShadow; - filters.dropShadow(el, shadow); + filters.dropShadow(el, shadow, realIndex); } } } @@ -1425,6 +1441,7 @@ function () { fontFamily = opts.fontFamily, foreColor = opts.foreColor, opacity = opts.opacity; + if (typeof text === 'undefined') text = ''; if (!textAnchor) { textAnchor = 'start'; @@ -1451,7 +1468,7 @@ function () { x: x, y: y, 'text-anchor': textAnchor, - 'dominant-baseline': 'central', + 'dominant-baseline': 'auto', 'font-size': fontSize, 'font-family': fontFamily, fill: foreColor, @@ -1554,7 +1571,7 @@ function () { if (w.config.states.hover.filter.type !== 'none') { if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { var hoverFilter = w.config.states.hover.filter; - filters.applyFilter(path, hoverFilter.type, hoverFilter.value); + filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); } } } @@ -1587,7 +1604,7 @@ function () { } if (w.config.states.hover.filter.type !== 'none') { - filters.getDefaultFilter(path); + filters.getDefaultFilter(path, i); } } }, { @@ -1613,11 +1630,11 @@ function () { var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; elPaths.forEach(function (elPath) { elPath.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(elPath); + filters.getDefaultFilter(elPath, i); }); elCircles.forEach(function (circle) { circle.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(circle); + filters.getDefaultFilter(circle, i); }); } @@ -1635,11 +1652,11 @@ function () { var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { - filters.applyFilter(path, activeFilter.type, activeFilter.value); + filters.applyFilter(path, i, activeFilter.type, activeFilter.value); } } else { if (w.config.states.active.filter.type !== 'none') { - filters.getDefaultFilter(path); + filters.getDefaultFilter(path, i); } } @@ -1827,13 +1844,14 @@ function () { max: undefined, min: undefined, floating: false, - decimalsInFloat: 2, + decimalsInFloat: undefined, labels: { show: true, minWidth: 0, maxWidth: 160, offsetX: 0, offsetY: 0, + align: undefined, rotate: 0, padding: 20, style: { @@ -2039,6 +2057,7 @@ function () { updated: undefined, click: undefined, legendClick: undefined, + markerClick: undefined, selection: undefined, dataPointSelection: undefined, dataPointMouseEnter: undefined, @@ -2050,6 +2069,7 @@ function () { foreColor: '#373d3f', fontFamily: 'Helvetica, Arial, sans-serif', height: 'auto', + parentHeightOffset: 15, id: undefined, group: undefined, offsetX: 0, @@ -2124,19 +2144,20 @@ function () { plotOptions: { bar: { horizontal: false, - endingShape: 'flat', - // TODO: deprecate in 4.0 columnWidth: '70%', // should be in percent 0 - 100 barHeight: '70%', // should be in percent 0 - 100 distributed: false, + endingShape: 'flat', colors: { ranges: [], backgroundBarColors: [], backgroundBarOpacity: 1 }, dataLabels: { + maxItems: 100, + hideOverflowingLabels: true, position: 'top' // top, center, bottom // TODO: provide stackedLabels for stacked charts which gives additions of values @@ -2155,6 +2176,7 @@ function () { radius: 2, enableShades: true, shadeIntensity: 0.5, + reverseNegativeShade: true, distributed: false, colorScale: { inverse: false, @@ -2230,7 +2252,7 @@ function () { total: { show: false, label: 'Total', - color: '#373d3f', + color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; @@ -2239,6 +2261,7 @@ function () { } } }, + rangeBar: {}, pie: { size: undefined, customScale: 1, @@ -2247,8 +2270,9 @@ function () { expandOnClick: true, dataLabels: { // These are the percentage values which are displayed on slice - offset: 0 // offset by which labels will move outside - + offset: 0, + // offset by which labels will move outside + minAngleToShowLabel: 10 }, donut: { size: '65%', @@ -2276,7 +2300,7 @@ function () { total: { show: false, label: 'Total', - color: '#373d3f', + color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; @@ -2369,7 +2393,7 @@ function () { yaxis: { lines: { show: true, - animate: true + animate: false } }, row: { @@ -2528,6 +2552,7 @@ function () { }, tooltip: { enabled: true, + enabledOnSeries: undefined, shared: true, followCursor: false, // when disabled, the tooltip will show on top of the series instead of mouse position @@ -2687,6 +2712,7 @@ function () { }, yaxis: this.yAxis, theme: { + mode: 'light', palette: 'palette1', // If defined, it will overwrite globals.colors variable monochrome: { @@ -2720,7 +2746,7 @@ function () { this.w = ctx.w; this.graphics = new Graphics(this.ctx); - if (this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal) { + if (this.w.globals.isBarHorizontal) { this.invertAxis = true; } @@ -2751,11 +2777,9 @@ function () { el: annoElArray[i], index: 0 }); - } // after placing the annotations on svg, set any vertically placed annotations + } // background sizes needs to be calculated after text is drawn, so calling them last - this.setOrientations(w.config.annotations.xaxis); // background sizes needs to be calculated after text is drawn, so calling them last - this.annotationsBackground(); } } @@ -2766,11 +2790,15 @@ function () { var min = this.invertAxis ? w.globals.minY : w.globals.minX; var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; var x1 = (anno.x - min) / (range / w.globals.gridWidth); + var text = anno.label.text; if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { var catIndex = w.globals.labels.indexOf(anno.x); var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - x1 = parseFloat(xLabel.getAttribute('x')); + + if (xLabel) { + x1 = parseFloat(xLabel.getAttribute('x')); + } } var strokeDashArray = anno.strokeDashArray; @@ -2794,22 +2822,23 @@ function () { x2 = temp; } - var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x2 - x1, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); + if (text) { + var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 + 0 + anno.offsetY, // y1 + x2 - x1, // x2 + w.globals.gridHeight + anno.offsetY, // y2 + 0, // radius + anno.fillColor, // color + anno.opacity, // opacity, + 1, // strokeWidth + anno.borderColor, // strokeColor + strokeDashArray // stokeDashArray + ); + parent.appendChild(rect.node); + } } var textY = anno.label.position === 'top' ? -3 : w.globals.gridHeight; - var text = anno.label.text ? anno.label.text : ''; var elText = this.graphics.drawText({ x: x1 + anno.label.offsetX, y: textY + anno.label.offsetY, @@ -2823,7 +2852,9 @@ function () { elText.attr({ rel: index }); - parent.appendChild(elText.node); + parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations + + this.setOrientations(anno, index); } }, { key: "drawXAxisAnnotations", @@ -2850,16 +2881,19 @@ function () { if (this.invertAxis) { var catIndex = w.globals.labels.indexOf(anno.y); var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - y1 = parseFloat(xLabel.getAttribute('y')); + + if (xLabel) { + y1 = parseFloat(xLabel.getAttribute('y')); + } } else { y1 = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y1 = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } - var text = anno.label.text ? anno.label.text : ''; + var text = anno.label.text; if (anno.y2 === null) { var line = this.graphics.drawLine(0 + anno.offsetX, // x1 @@ -2876,11 +2910,13 @@ function () { var _xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (_catIndex + 1) + ')'); - y2 = parseFloat(_xLabel.getAttribute('y')); + if (_xLabel) { + y2 = parseFloat(_xLabel.getAttribute('y')); + } } else { y2 = w.globals.gridHeight - (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y2 = (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } @@ -2891,18 +2927,20 @@ function () { y2 = temp; } - var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 - y2 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 - y2, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); + if (text) { + var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 + y2 + anno.offsetY, // y1 + w.globals.gridWidth + anno.offsetX, // x2 + y1 - y2, // y2 + 0, // radius + anno.fillColor, // color + anno.opacity, // opacity, + 1, // strokeWidth + anno.borderColor, // strokeColor + strokeDashArray // stokeDashArray + ); + parent.appendChild(rect.node); + } } var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; @@ -2940,6 +2978,7 @@ function () { value: function clearAnnotations(ctx) { var w = ctx.w; var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); + annos = Utils.listToArray(annos); annos.forEach(function (a) { while (a.firstChild) { a.removeChild(a.firstChild); @@ -2972,7 +3011,7 @@ function () { y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseInt(anno.label.style.fontSize) + anno.marker.size; pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } @@ -2981,7 +3020,7 @@ function () { y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } @@ -3042,39 +3081,36 @@ function () { } }, { key: "setOrientations", - value: function setOrientations(annos) { - var _this4 = this; - + value: function setOrientations(anno) { var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var w = this.w; - annos.map(function (anno, index) { - if (anno.label.orientation === 'vertical') { - var i = annoIndex !== null ? annoIndex : index; - var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - if (xAnno !== null) { - var xAnnoCoord = xAnno.getBoundingClientRect(); - xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); + if (anno.label.orientation === 'vertical') { + var i = annoIndex !== null ? annoIndex : 0; + var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - if (anno.label.position === 'top') { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); - } else { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); - } + if (xAnno !== null) { + var xAnnoCoord = xAnno.getBoundingClientRect(); + xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); - var annoRotatingCenter = _this4.graphics.rotateAroundCenter(xAnno); - - var x = annoRotatingCenter.x; - var y = annoRotatingCenter.y; - xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); + if (anno.label.position === 'top') { + xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); + } else { + xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); } + + var annoRotatingCenter = this.graphics.rotateAroundCenter(xAnno); + var x = annoRotatingCenter.x; + var y = annoRotatingCenter.y; + xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); } - }); + } } }, { key: "addBackgroundToAnno", value: function addBackgroundToAnno(annoEl, anno) { var w = this.w; + if (!anno.label.text) return null; var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); var coords = annoEl.getBoundingClientRect(); var pleft = anno.label.style.padding.left; @@ -3097,7 +3133,7 @@ function () { }, { key: "annotationsBackground", value: function annotationsBackground() { - var _this5 = this; + var _this4 = this; var w = this.w; @@ -3107,9 +3143,11 @@ function () { if (annoLabel) { var parent = annoLabel.parentNode; - var elRect = _this5.addBackgroundToAnno(annoLabel, anno); + var elRect = _this4.addBackgroundToAnno(annoLabel, anno); - parent.insertBefore(elRect.node, annoLabel); + if (elRect) { + parent.insertBefore(elRect.node, annoLabel); + } } }; @@ -3164,8 +3202,11 @@ function () { }); parentNode.appendChild(elText.node); var textRect = elText.bbox(); - var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); - elText.before(elRect); + + if (text) { + var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); + elText.before(elRect); + } if (pushToMemory) { w.globals.memory.methodsToExec.push({ @@ -3198,6 +3239,10 @@ function () { }, { key: "addPointAnnotationExternal", value: function addPointAnnotationExternal(params, pushToMemory, context) { + if (typeof this.invertAxis === 'undefined') { + this.invertAxis = context.w.globals.isBarHorizontal; + } + this.addAnnotationExternal({ params: params, pushToMemory: pushToMemory, @@ -3265,7 +3310,10 @@ function () { var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); var elRect = this.addBackgroundToAnno(axesAnnoLabel, anno); - parent.insertBefore(elRect.node, axesAnnoLabel); + + if (elRect) { + parent.insertBefore(elRect.node, axesAnnoLabel); + } if (pushToMemory) { w.globals.memory.methodsToExec.push({ @@ -3282,6 +3330,244 @@ function () { return Annotations; }(); +/** + * DateTime Class to manipulate datetime values. + * + * @module DateTime + **/ + +var DateTime = +/*#__PURE__*/ +function () { + function DateTime(ctx) { + _classCallCheck(this, DateTime); + + this.ctx = ctx; + this.w = ctx.w; + this.months31 = [1, 3, 5, 7, 8, 10, 12]; + this.months30 = [2, 4, 6, 9, 11]; + this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + } + + _createClass(DateTime, [{ + key: "isValidDate", + value: function isValidDate(date) { + return !isNaN(this.parseDate(date)); + } + }, { + key: "getUTCTimeStamp", + value: function getUTCTimeStamp(dateStr) { + if (!Date.parse(dateStr)) { + return dateStr; + } + + return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); + } + }, { + key: "parseDate", + value: function parseDate(dateStr) { + var parsed = Date.parse(dateStr); + + if (!isNaN(parsed)) { + return this.getUTCTimeStamp(dateStr); + } + + var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); + output = this.getUTCTimeStamp(output); + return output; + } // https://stackoverflow.com/a/11252167/6495043 + + }, { + key: "treatAsUtc", + value: function treatAsUtc(dateStr) { + var result = new Date(dateStr); + result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); + return result; + } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 + + }, { + key: "formatDate", + value: function formatDate(date, format) { + var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var locale = this.w.globals.locale; + var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); + var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); + var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); + var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); + + function ii(i, len) { + var s = i + ''; + len = len || 2; + + while (s.length < len) { + s = '0' + s; + } + + return s; + } + + if (convertToUTC) { + date = this.treatAsUtc(date); + } + + var y = utc ? date.getUTCFullYear() : date.getFullYear(); + format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); + format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); + format = format.replace(/(^|[^\\])y/g, '$1' + y); + var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; + format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); + format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); + format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); + format = format.replace(/(^|[^\\])M/g, '$1' + M); + var d = utc ? date.getUTCDate() : date.getDate(); + format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); + format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); + format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); + format = format.replace(/(^|[^\\])d/g, '$1' + d); + var H = utc ? date.getUTCHours() : date.getHours(); + format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); + format = format.replace(/(^|[^\\])H/g, '$1' + H); + var h = H > 12 ? H - 12 : H === 0 ? 12 : H; + format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); + format = format.replace(/(^|[^\\])h/g, '$1' + h); + var m = utc ? date.getUTCMinutes() : date.getMinutes(); + format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); + format = format.replace(/(^|[^\\])m/g, '$1' + m); + var s = utc ? date.getUTCSeconds() : date.getSeconds(); + format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); + format = format.replace(/(^|[^\\])s/g, '$1' + s); + var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); + format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); + f = Math.round(f / 10); + format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); + f = Math.round(f / 10); + format = format.replace(/(^|[^\\])f/g, '$1' + f); + var T = H < 12 ? 'AM' : 'PM'; + format = format.replace(/(^|[^\\])TT+/g, '$1' + T); + format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); + var t = T.toLowerCase(); + format = format.replace(/(^|[^\\])tt+/g, '$1' + t); + format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); + var tz = -date.getTimezoneOffset(); + var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; + + if (!utc) { + tz = Math.abs(tz); + var tzHrs = Math.floor(tz / 60); + var tzMin = tz % 60; + K += ii(tzHrs) + ':' + ii(tzMin); + } + + format = format.replace(/(^|[^\\])K/g, '$1' + K); + var day = (utc ? date.getUTCDay() : date.getDay()) + 1; + format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); + format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); + format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); + format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); + format = format.replace(/\\(.)/g, '$1'); + return format; + } + }, { + key: "getTimeUnitsfromTimestamp", + value: function getTimeUnitsfromTimestamp(minX, maxX) { + var w = this.w; + + if (w.config.xaxis.min !== undefined) { + minX = w.config.xaxis.min; + } + + if (w.config.xaxis.max !== undefined) { + maxX = w.config.xaxis.max; + } + + var minYear = new Date(minX).getFullYear(); + var maxYear = new Date(maxX).getFullYear(); + var minMonth = new Date(minX).getMonth(); + var maxMonth = new Date(maxX).getMonth(); + var minDate = new Date(minX).getDate(); + var maxDate = new Date(maxX).getDate(); + var minHour = new Date(minX).getHours(); + var maxHour = new Date(maxX).getHours(); + var minMinute = new Date(minX).getMinutes(); + var maxMinute = new Date(maxX).getMinutes(); + return { + minMinute: minMinute, + maxMinute: maxMinute, + minHour: minHour, + maxHour: maxHour, + minDate: minDate, + maxDate: maxDate, + minMonth: minMonth, + maxMonth: maxMonth, + minYear: minYear, + maxYear: maxYear + }; + } + }, { + key: "isLeapYear", + value: function isLeapYear(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; + } + }, { + key: "calculcateLastDaysOfMonth", + value: function calculcateLastDaysOfMonth(month, year, subtract) { + var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked + + return days - subtract; + } + }, { + key: "determineDaysOfYear", + value: function determineDaysOfYear(year) { + var days = 365; + + if (this.isLeapYear(year)) { + days = 366; + } + + return days; + } + }, { + key: "determineRemainingDaysOfYear", + value: function determineRemainingDaysOfYear(year, month, date) { + var dayOfYear = this.daysCntOfYear[month] + date; + if (month > 1 && this.isLeapYear()) dayOfYear++; + return dayOfYear; + } + }, { + key: "determineDaysOfMonths", + value: function determineDaysOfMonths(month, year) { + var days = 30; + month = Utils.monthMod(month); + + switch (true) { + case this.months30.indexOf(month) > -1: + if (month === 2) { + if (this.isLeapYear(year)) { + days = 29; + } else { + days = 28; + } + } + + break; + + case this.months31.indexOf(month) > -1: + days = 31; + break; + + default: + days = 31; + break; + } + + return days; + } + }]); + + return DateTime; +}(); + /** * ApexCharts Default Class for setting default options for all chart types. * @@ -3465,6 +3751,79 @@ function () { } }; } + }, { + key: "rangeBar", + value: function rangeBar() { + return { + stroke: { + width: 0 + }, + plotOptions: { + bar: { + dataLabels: { + position: 'center' + } + } + }, + dataLabels: { + enabled: false, + formatter: function formatter(val, _ref2) { + var ctx = _ref2.ctx, + seriesIndex = _ref2.seriesIndex, + dataPointIndex = _ref2.dataPointIndex, + w = _ref2.w; + var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; + var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; + return end - start; + }, + style: { + colors: ['#fff'] + } + }, + tooltip: { + shared: false, + followCursor: true, + custom: function custom(_ref3) { + var ctx = _ref3.ctx, + seriesIndex = _ref3.seriesIndex, + dataPointIndex = _ref3.dataPointIndex, + w = _ref3.w; + var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; + var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; + var startVal = ''; + var endVal = ''; + var color = w.globals.colors[seriesIndex]; + + if (w.config.tooltip.x.formatter === undefined) { + if (w.config.xaxis.type === 'datetime') { + var datetimeObj = new DateTime(ctx); + startVal = datetimeObj.formatDate(new Date(start), w.config.tooltip.x.format, true, true); + endVal = datetimeObj.formatDate(new Date(end), w.config.tooltip.x.format, true, true); + } else { + startVal = start; + endVal = end; + } + } else { + startVal = w.config.tooltip.x.formatter(start); + endVal = w.config.tooltip.x.formatter(end); + } + + var ylabel = w.globals.labels[dataPointIndex]; + return '
' + '
' + (w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '') + '
' + '
' + ylabel + ': ' + startVal + ' - ' + endVal + '
' + '
'; + } + }, + xaxis: { + tooltip: { + enabled: false + }, + crosshairs: { + stroke: { + width: 0 + } + } + } + }; + } }, { key: "area", value: function area() { @@ -3852,7 +4211,7 @@ function () { opts.xaxis.categories = []; opts.labels = []; - opts.chart.zoom.enabled = false; + opts.chart.zoom.enabled = opts.chart.zoom.enabled || false; return opts; } }]); @@ -4082,21 +4441,22 @@ function () { if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { // Negative numbers present in series gl.hasNegs = true; + } + + if (gl.isMultipleYAxis) { baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives - if (gl.isMultipleYAxis) { - for (var _i2 = 0; _i2 < yRatio.length; _i2++) { - baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); - } - } else { - baseLineY.push(-gl.minY / yRatio[0]); + for (var _i2 = 0; _i2 < yRatio.length; _i2++) { + baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); } - - baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart - - baseLineX = gl.minX / xRatio; } else { - baseLineY.push(0); + baseLineY.push(-gl.minY / yRatio[0]); + + if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { + baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart + + baseLineX = gl.minX / xRatio; + } } return { @@ -4266,6 +4626,10 @@ function () { chartDefaults = defaults.candlestick(); break; + case 'rangeBar': + chartDefaults = defaults.rangeBar(); + break; + case 'histogram': chartDefaults = defaults.bar(); break; @@ -4308,12 +4672,17 @@ function () { if (opts.chart.stacked && opts.chart.stackType === '100%') { defaults.stacked100(); - } + } // If user has specified a dark theme, make the tooltip dark too + + + this.checkForDarkTheme(window.Apex); // check global window Apex options + + this.checkForDarkTheme(opts); // check locally passed options opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; var combo = CoreUtils.checkComboSeries(opts.series); - if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.tickPlacement !== 'between') { + if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric' && opts.xaxis.tickPlacement !== 'between') { opts = Defaults.convertCatToNumeric(opts); } @@ -4396,6 +4765,27 @@ function () { opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); return opts; } + }, { + key: "checkForDarkTheme", + value: function checkForDarkTheme(opts) { + if (opts.theme && opts.theme.mode === 'dark') { + if (!opts.tooltip) { + opts.tooltip = {}; + } + + if (opts.tooltip.theme !== 'light') { + opts.tooltip.theme = 'dark'; + } + + if (!opts.chart.foreColor) { + opts.chart.foreColor = '#f6f7f8'; + } + + if (!opts.theme.palette) { + opts.theme.palette = 'palette4'; + } + } + } }, { key: "checkEmptySeries", value: function checkEmptySeries(ser) { @@ -4420,16 +4810,12 @@ function () { console.warn('Scroller has been deprecated since v2.0.0. Please remove the configuration for chart.scroller'); } - if (config.chart.type === 'bar' && config.plotOptions.bar.horizontal) { - // No time series for horizontal bars - if (config.xaxis.type === 'datetime') { - throw new Error('Timelines on bars are not supported yet. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } // No multiple yaxis for bars - - + if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { + // No multiple yaxis for bars if (config.yaxis.length > 1) { throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } + } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side + if (config.yaxis[0].reversed) { config.yaxis[0].opposite = true; @@ -4442,7 +4828,7 @@ function () { config.chart.zoom.enabled = false; // no zooming for horz bars } - if (config.chart.type === 'bar') { + if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { if (config.tooltip.shared) { if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); @@ -4451,10 +4837,11 @@ function () { if (config.plotOptions.bar.horizontal) { config.states.hover.type = 'none'; + config.tooltip.shared = false; } if (!config.tooltip.followCursor) { - console.warn('followCursor option in shared columns cannot be turned off.'); + console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); config.tooltip.followCursor = true; } } @@ -4512,6 +4899,8 @@ function () { scrolled: [] }, colors: [], + clientX: null, + clientY: null, fill: { colors: [] }, @@ -4543,6 +4932,10 @@ function () { lastYAxis: [], series: [], // the MAIN series array (y values) + seriesRangeStart: [], + // the clone of series becomes the start in range + seriesRangeEnd: [], + // the end values in range chart seriesPercent: [], // the percentage values of the given series seriesTotals: [], @@ -4556,6 +4949,8 @@ function () { // Don't mutate the labels, many things including tooltips depends on it! timelineLabels: [], // store the timeline Labels in another variable + invertedTimelineLabels: [], + // for rangebar timeline seriesNames: [], // same as labels, used in non axis charts noLabelsProvided: false, @@ -4568,9 +4963,11 @@ function () { ancillaryCollapsedSeries: [], // when user collapses an "alwaysVisible" series, it goes into this array ancillaryCollapsedSeriesIndices: [], - // this stores the index of the collapsedSeries whose y-axis is always visible + // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible risingSeries: [], // when user re-opens a collapsed series, it goes here + dataFormatXNumeric: false, + // boolean value to indicate user has passed numeric x values selectedDataPoints: [], ignoreYAxisIndexes: [], // when series are being collapsed in multiple y axes, ignore certain index @@ -4598,6 +4995,7 @@ function () { // Max Z value in charts with Z axis maxZ: -Number.MAX_VALUE, // Max Z value in charts with Z axis + minXDiff: Number.MAX_VALUE, mousedown: false, lastClientPosition: {}, // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning @@ -4634,6 +5032,8 @@ function () { methodsToExec: [] }, shouldAnimate: true, + skipLastTimelinelabel: false, + // when last label is cropped, skip drawing it delayedElements: [], // element which appear after animation has finished axisCharts: true, @@ -4855,6 +5255,15 @@ function () { this.seriesIndex = this.getSeriesIndex(opts); var fillColors = this.getFillColors(); var fillColor = fillColors[this.seriesIndex]; + + if (typeof fillColor === 'function') { + fillColor = fillColor({ + seriesIndex: this.seriesIndex, + value: opts.value, + w: w + }); + } + var fillType = this.getFillType(this.seriesIndex); var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; var defaultColor = fillColor; @@ -5069,6 +5478,7 @@ function () { var _this = this; var w = this.w; + var i = seriesIndex; var p = pointsPos; var elPointsWrap = null; var graphics = new Graphics(this.ctx); @@ -5112,6 +5522,17 @@ function () { opts.pSize = marker.size; } }); + + if (w.config.series[i].data[j]) { + if (w.config.series[i].data[j].fillColor) { + opts.pointFillColor = w.config.series[i].data[j].fillColor; + } + + if (w.config.series[i].data[j].strokeColor) { + opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; + } + } + point = graphics.drawMarker(p.x[q], p.y[q], opts); point.attr('rel', dataPointIndex); point.attr('j', dataPointIndex); @@ -5267,29 +5688,37 @@ function () { key: "drawPoint", value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { var w = this.w; + var i = realIndex; var anim = new Animations(this.ctx); var filters = new Filters(this.ctx); var fill = new Fill(this.ctx); + var markers = new Markers(this.ctx); var graphics = new Graphics(this.ctx); + var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); var pathFillCircle = fill.fillPath({ seriesNumber: realIndex, - patternUnits: 'objectBoundingBox' + patternUnits: 'objectBoundingBox', + value: w.globals.series[realIndex][j] }); var circle = graphics.drawCircle(radius); + + if (w.config.series[i].data[dataPointIndex]) { + if (w.config.series[i].data[dataPointIndex].fillColor) { + pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; + } + } + circle.attr({ cx: x, cy: y, - fill: pathFillCircle + fill: pathFillCircle, + stroke: markerConfig.pointStrokeColor, + strokeWidth: markerConfig.pWidth }); if (w.config.chart.dropShadow.enabled) { - filters.dropShadow(circle, { - top: w.config.chart.dropShadow.top, - left: w.config.chart.dropShadow.left, - blur: w.config.chart.dropShadow.blur, - color: w.config.chart.dropShadow.color, - opacity: w.config.chart.dropShadow.opacity - }); + var dropShadow = w.config.chart.dropShadow; + filters.dropShadow(circle, dropShadow, realIndex); } if (this.initialAnim && !w.globals.dataChanged) { @@ -5346,7 +5775,6 @@ function () { index: realIndex, 'default-marker-size': finishRadius }); - var markers = new Markers(this.ctx); filters.setSelectionFilter(circle, realIndex, dataPointIndex); markers.addEvents(circle); circle.node.classList.add('apexcharts-marker'); @@ -5430,6 +5858,7 @@ function () { }, { key: "drawDataLabel", value: function drawDataLabel(pos, i, j) { + var align = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'top'; // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions // all other charts like bars / heatmaps will define their own drawDataLabel routine var w = this.w; @@ -5453,6 +5882,10 @@ function () { x = pos.x[q] + dataLabelsConfig.offsetX; y = pos.y[q] + dataLabelsConfig.offsetY - w.globals.markers.size[i] - 5; + if (align === 'bottom') { + y = y + w.globals.markers.size[i] * 2 + parseInt(dataLabelsConfig.style.fontSize) * 1.4; + } + if (!isNaN(x)) { // a small hack as we have 2 points for the first val to connect it if (j === 1 && q === 0) dataPointIndex = 0; @@ -5467,8 +5900,9 @@ function () { var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); y = centerTextInBubbleCoords.y; } else { - if (typeof val !== 'undefined') { + if (typeof val !== 'undefined' && val !== null) { text = w.config.dataLabels.formatter(val, { + ctx: this.ctx, seriesIndex: i, dataPointIndex: dataPointIndex, w: w @@ -5574,8 +6008,6 @@ function () { * @module Bar **/ -var DATA_LABELS_WARNING_THRESHOLD = 50; - var Bar = /*#__PURE__*/ function () { @@ -5600,7 +6032,6 @@ function () { this.baseLineInvertedY = xyRatios.baseLineInvertedY; } - this.minXDiff = Number.MAX_VALUE; this.yaxisIndex = 0; this.seriesLen = 0; } @@ -5615,28 +6046,24 @@ function () { _createClass(Bar, [{ key: "draw", value: function draw(series, seriesIndex) { - var _this = this; - var w = this.w; var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); + this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.initVariables(series); var ret = graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); if (w.config.dataLabels.enabled) { - if (this.totalItems > DATA_LABELS_WARNING_THRESHOLD) { + if (this.totalItems > w.config.plotOptions.bar.dataLabels.maxItems) { console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); } } - var _loop = function _loop(i, bc) { + for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, pathFrom = void 0; var x = void 0, @@ -5656,29 +6083,27 @@ function () { var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + class: "apexcharts-series", rel: i + 1, + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), 'data:realIndex': realIndex }); - - _this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); + this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); if (series[i].length > 0) { - _this.visibleI = _this.visibleI + 1; + this.visibleI = this.visibleI + 1; } var strokeWidth = 0; var barHeight = 0; var barWidth = 0; - if (_this.yRatio.length > 1) { - _this.yaxisIndex = realIndex; + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; } - _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; - - var initPositions = _this.initialPositions(); - + this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; + var initPositions = this.initialPositions(); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; @@ -5688,7 +6113,7 @@ function () { xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; - if (!_this.horizontal) { + if (!this.horizontal) { xArrj.push(x + barWidth / 2); } // eldatalabels @@ -5697,25 +6122,25 @@ function () { class: 'apexcharts-datalabels' }); - var _loop2 = function _loop2(j, tj) { - if (typeof _this.series[i][j] === 'undefined' || series[i][j] === null) { - _this.isNullValue = true; + for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { + if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { + this.isNullValue = true; } else { - _this.isNullValue = false; + this.isNullValue = false; } if (w.config.stroke.show) { - if (_this.isNullValue) { + if (this.isNullValue) { strokeWidth = 0; } else { - strokeWidth = Array.isArray(_this.strokeWidth) ? _this.strokeWidth[realIndex] : _this.strokeWidth; + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; } } var paths = null; - if (_this.isHorizontal) { - paths = _this.drawBarPaths({ + if (this.isHorizontal) { + paths = this.drawBarPaths({ indexes: { i: i, j: j, @@ -5732,8 +6157,9 @@ function () { yDivision: yDivision, elSeries: elSeries }); + barWidth = this.series[i][j] / this.invertedYRatio; } else { - paths = _this.drawColumnPaths({ + paths = this.drawColumnPaths({ indexes: { i: i, j: j, @@ -5750,6 +6176,7 @@ function () { strokeWidth: strokeWidth, elSeries: elSeries }); + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; } pathTo = paths.pathTo; @@ -5762,23 +6189,8 @@ function () { } yArrj.push(y); - var seriesNumber = _this.barOptions.distributed ? j : i; - var fillColor = null; - - if (_this.barOptions.colors.ranges.length > 0) { - var colorRange = _this.barOptions.colors.ranges; - colorRange.map(function (range) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - var pathFill = fill.fillPath({ - seriesNumber: _this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor - }); - elSeries = _this.renderSeries({ + var pathFill = this.getPathFillColor(series, i, j, realIndex); + elSeries = this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, @@ -5793,27 +6205,47 @@ function () { barHeight: barHeight, barWidth: barWidth, elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: _this.visibleI, + visibleSeries: this.visibleI, type: 'bar' }); - }; - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - _loop2(j, tj); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrj; w.globals.seriesYvalues[realIndex] = yArrj; ret.add(elSeries); - }; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - _loop(i, bc); } return ret; } + }, { + key: "getPathFillColor", + value: function getPathFillColor(series, i, j, realIndex) { + var w = this.w; + var fill = new Fill(this.ctx); + var fillColor = null; + var seriesNumber = this.barOptions.distributed ? j : i; + + if (this.barOptions.colors.ranges.length > 0) { + var colorRange = this.barOptions.colors.ranges; + colorRange.map(function (range) { + if (series[i][j] >= range.from && series[i][j] <= range.to) { + fillColor = range.color; + } + }); + } + + if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { + fillColor = w.config.series[i].data[j].fillColor; + } + + var pathFill = fill.fillPath({ + seriesNumber: this.barOptions.distributed ? seriesNumber : realIndex, + color: fillColor, + value: series[i][j] + }); + return pathFill; + } }, { key: "renderSeries", value: function renderSeries(_ref) { @@ -5842,6 +6274,10 @@ function () { lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; } + if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { + lineFill = w.config.series[i].data[j].strokeColor; + } + if (this.isNullValue) { pathFill = 'none'; } @@ -5863,6 +6299,7 @@ function () { className: "apexcharts-".concat(type, "-area"), id: "apexcharts-".concat(type, "-area") }); + renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); var filters = new Filters(this.ctx); filters.setSelectionFilter(renderedPath, realIndex, j); elSeries.add(renderedPath); @@ -5889,8 +6326,6 @@ function () { }, { key: "initVariables", value: function initVariables(series) { - var _this2 = this; - var w = this.w; this.series = series; this.totalItems = 0; @@ -5905,16 +6340,7 @@ function () { } if (w.globals.isXNumeric) { - // get the least x diff if numeric x axis is present - w.globals.seriesX.forEach(function (sX, i) { - sX.forEach(function (s, j) { - if (j > 0) { - var xDiff = s - w.globals.seriesX[i][j - 1]; - _this2.minXDiff = Math.min(xDiff, _this2.minXDiff); - } - }); - }); // get max visible items - + // get max visible items for (var j = 0; j < series[sl].length; j++) { if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { this.visibleItems++; @@ -5956,22 +6382,7 @@ function () { if (w.globals.isXNumeric) { // max barwidth should be equal to minXDiff to avoid overlap - if (this.minXDiff === Number.MAX_VALUE) { - // possibly a single dataPoint (fixes react-apexcharts/issue#34) - var len = w.globals.labels.length; - - if (w.globals.timelineLabels.length > 0) { - len = w.globals.timelineLabels.length; - } - - if (len < 3) { - len = 3; - } - - this.minXDiff = (w.globals.maxX - w.globals.minX) / len; - } - - xDivision = this.minXDiff / this.xRatio; + xDivision = w.globals.minXDiff / this.xRatio; barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; } @@ -6028,8 +6439,16 @@ function () { x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } - pathTo = pathTo + graphics.line(x, barYPosition) + graphics.line(x, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); + var endingShapeOpts = { + barHeight: barHeight, + strokeWidth: strokeWidth, + barYPosition: barYPosition, + x: x, + zeroW: zeroW + }; + var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); + pathTo = pathTo + graphics.line(endingShape.newX, barYPosition) + endingShape.path + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); + pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + endingShape.ending_p_from + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); if (!w.globals.isXNumeric) { y = y + yDivision; @@ -6092,8 +6511,16 @@ function () { y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; } - pathTo = pathTo + graphics.line(barXPosition, y) + graphics.line(barXPosition + barWidth - strokeWidth, y) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition, zeroH); - pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition, zeroH); + var endingShapeOpts = { + barWidth: barWidth, + strokeWidth: strokeWidth, + barXPosition: barXPosition, + y: y, + zeroH: zeroH + }; + var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); + pathTo = pathTo + graphics.line(barXPosition, endingShape.newY) + endingShape.path + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); + pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + endingShape.ending_p_from + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); if (!w.globals.isXNumeric) { x = x + xDivision; @@ -6170,7 +6597,7 @@ function () { var bcx = x + parseFloat(barWidth * visibleSeries); var bcy = y + parseFloat(barHeight * visibleSeries); - if (w.globals.isXNumeric) { + if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { bcx = x + parseFloat(barWidth * (visibleSeries + 1)) - strokeWidth; bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; } @@ -6201,6 +6628,7 @@ function () { renderedPath: renderedPath, bcy: bcy, barHeight: barHeight, + barWidth: barWidth, textRects: textRects, strokeWidth: strokeWidth, dataLabelsX: dataLabelsX, @@ -6244,6 +6672,9 @@ function () { val: series[i][j], i: realIndex, j: j, + barWidth: barWidth, + barHeight: barHeight, + textRects: textRects, dataLabelsConfig: dataLabelsConfig }); return dataLabels; @@ -6254,10 +6685,10 @@ function () { var w = this.w; var i = opts.i, j = opts.j, - realIndex = opts.realIndex, y = opts.y, bcx = opts.bcx, barWidth = opts.barWidth, + barHeight = opts.barHeight, textRects = opts.textRects, dataLabelsY = opts.dataLabelsY, barDataLabelsConfig = opts.barDataLabelsConfig, @@ -6265,7 +6696,6 @@ function () { offX = opts.offX, offY = opts.offY; var dataLabelsX; - var barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; bcx = bcx - strokeWidth / 2; @@ -6277,7 +6707,7 @@ function () { var valIsNegative = this.series[i][j] <= 0; - if (w.config.yaxis[this.yaxisIndex].reversed) { + if (this.isReversed) { y = y - barHeight; } @@ -6310,6 +6740,14 @@ function () { break; } + if (!w.config.chart.stacked) { + if (dataLabelsY < 0) { + dataLabelsY = 0 + strokeWidth; + } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { + dataLabelsY = w.globals.gridHeight - strokeWidth; + } + } + return { bcx: bcx, bcy: y, @@ -6326,6 +6764,7 @@ function () { j = opts.j, bcy = opts.bcy, barHeight = opts.barHeight, + barWidth = opts.barWidth, textRects = opts.textRects, dataLabelsX = opts.dataLabelsX, strokeWidth = opts.strokeWidth, @@ -6334,10 +6773,9 @@ function () { offY = opts.offY; var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; var dataLabelsY = bcy - dataPointsDividedHeight + barHeight / 2 + textRects.height / 2 + offY - 3; - var barWidth = this.series[i][j] / this.invertedYRatio; var valIsNegative = this.series[i][j] <= 0; - if (w.config.yaxis[this.yaxisIndex].reversed) { + if (this.isReversed) { x = x + barWidth; } @@ -6370,10 +6808,12 @@ function () { break; } - if (dataLabelsX < 0) { - dataLabelsX = textRects.width + strokeWidth; - } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { - dataLabelsX = dataLabelsX - textRects.width - strokeWidth; + if (!w.config.chart.stacked) { + if (dataLabelsX < 0) { + dataLabelsX = dataLabelsX + textRects.width + strokeWidth; + } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { + dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; + } } return { @@ -6391,6 +6831,9 @@ function () { val = _ref5.val, i = _ref5.i, j = _ref5.j, + textRects = _ref5.textRects, + barHeight = _ref5.barHeight, + barWidth = _ref5.barWidth, dataLabelsConfig = _ref5.dataLabelsConfig; var w = this.w; var dataLabels = new DataLabels(this.ctx); @@ -6413,6 +6856,29 @@ function () { }); } + if (val === 0 && w.config.chart.stacked) { + // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element + text = ''; + } + + if (w.config.chart.stacked && this.barOptions.dataLabels.hideOverflowingLabels) { + // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect + // Note: This issue is only seen in stacked charts + if (this.isHorizontal) { + barWidth = this.series[i][j] / this.yRatio[this.yaxisIndex]; + + if (textRects.width / 1.6 > barWidth) { + text = ''; + } + } else { + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; + + if (textRects.height / 1.6 > barHeight) { + text = ''; + } + } + } + dataLabels.plotDataLabelsText({ x: x, y: y, @@ -6428,6 +6894,91 @@ function () { return elDataLabelsWrap; } + /** barEndingShape draws the various shapes on top of bars/columns + * @memberof Bar + * @param {object} w - chart context + * @param {object} opts - consists several properties like barHeight/barWidth + * @param {array} series - global primary series + * @param {int} i - current iterating series's index + * @param {int} j - series's j of i + * @return {object} path - ending shape whether round/arrow + * ending_p_from - similar to pathFrom + * newY - which is calculated from existing y and new shape's top + **/ + + }, { + key: "barEndingShape", + value: function barEndingShape(w, opts, series, i, j) { + var graphics = new Graphics(this.ctx); + + if (this.isHorizontal) { + var endingShape = null; + var endingShapeFrom = ''; + var x = opts.x; + + if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { + var inverse = series[i][j] < 0; + var eX = opts.barHeight / 2 - opts.strokeWidth; + if (inverse) eX = -opts.barHeight / 2 - opts.strokeWidth; + + if (!w.config.chart.stacked) { + if (this.barOptions.endingShape === 'rounded') { + x = opts.x - eX / 2; + } + } + + switch (this.barOptions.endingShape) { + case 'flat': + endingShape = graphics.line(x, opts.barYPosition + opts.barHeight - opts.strokeWidth); + break; + + case 'rounded': + endingShape = graphics.quadraticCurve(x + eX, opts.barYPosition + (opts.barHeight - opts.strokeWidth) / 2, x, opts.barYPosition + opts.barHeight - opts.strokeWidth); + break; + } + } + + return { + path: endingShape, + ending_p_from: endingShapeFrom, + newX: x + }; + } else { + var _endingShape = null; + var _endingShapeFrom = ''; + var y = opts.y; + + if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { + var _inverse = series[i][j] < 0; + + var eY = opts.barWidth / 2 - opts.strokeWidth; + if (_inverse) eY = -opts.barWidth / 2 - opts.strokeWidth; + + if (!w.config.chart.stacked) { + // the shape exceeds the chart height, hence reduce y + if (this.barOptions.endingShape === 'rounded') { + y = y + eY / 2; + } + } + + switch (this.barOptions.endingShape) { + case 'flat': + _endingShape = graphics.line(opts.barXPosition + opts.barWidth - opts.strokeWidth, y); + break; + + case 'rounded': + _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - opts.strokeWidth) / 2, y - eY, opts.barXPosition + opts.barWidth - opts.strokeWidth, y); + break; + } + } + + return { + path: _endingShape, + ending_p_from: _endingShapeFrom, + newY: y + }; + } + } }]); return Bar; @@ -6455,24 +7006,20 @@ function (_Bar) { _createClass(BarStacked, [{ key: "draw", value: function draw(series, seriesIndex) { - var _this = this; - var w = this.w; this.graphics = new Graphics(this.ctx); this.fill = new Fill(this.ctx); this.bar = new Bar(this.ctx, this.xyRatios); var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.series = series; this.initVariables(series); if (w.config.chart.stackType === '100%') { - this.series = w.globals.seriesPercent.slice(); - series = this.series; + series = w.globals.seriesPercent.slice(); } + this.series = series; this.totalItems = 0; this.prevY = []; // y position on chart @@ -6507,11 +7054,10 @@ function (_Bar) { var ret = this.graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); var x = 0; var y = 0; - var _loop = function _loop(i, bc) { + for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, pathFrom = void 0; var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) @@ -6526,29 +7072,26 @@ function (_Bar) { var yArrValues = []; var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - if (_this.yRatio.length > 1) { - _this.yaxisIndex = realIndex; + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; } - _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; // el to which series will be drawn + this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // el to which series will be drawn - var elSeries = _this.graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + var elSeries = this.graphics.group({ + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); // eldatalabels - - var elDataLabelsWrap = _this.graphics.group({ + var elDataLabelsWrap = this.graphics.group({ class: 'apexcharts-datalabels' }); - var strokeWidth = 0; var barHeight = 0; var barWidth = 0; - - var initPositions = _this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); - + var initPositions = this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; @@ -6557,28 +7100,28 @@ function (_Bar) { barWidth = initPositions.barWidth; xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; - _this.yArrj = []; - _this.yArrjF = []; - _this.yArrjVal = []; - _this.xArrj = []; - _this.xArrjF = []; - _this.xArrjVal = []; // if (!this.horizontal) { + this.yArrj = []; + this.yArrjF = []; + this.yArrjVal = []; + this.xArrj = []; + this.xArrjF = []; + this.xArrjVal = []; // if (!this.horizontal) { // this.xArrj.push(x + barWidth / 2) // } - var _loop2 = function _loop2(j) { + for (var j = 0; j < w.globals.dataPoints; j++) { if (w.config.stroke.show) { - if (_this.isNullValue) { + if (this.isNullValue) { strokeWidth = 0; } else { - strokeWidth = Array.isArray(_this.strokeWidth) ? _this.strokeWidth[realIndex] : _this.strokeWidth; + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; } } var paths = null; - if (_this.isHorizontal) { - paths = _this.drawBarPaths({ + if (this.isHorizontal) { + paths = this.drawBarPaths({ indexes: { i: i, j: j, @@ -6595,8 +7138,9 @@ function (_Bar) { yDivision: yDivision, elSeries: elSeries }); + barWidth = this.series[i][j] / this.invertedYRatio; } else { - paths = _this.drawColumnPaths({ + paths = this.drawColumnPaths({ indexes: { i: i, j: j, @@ -6613,6 +7157,7 @@ function (_Bar) { strokeWidth: strokeWidth, elSeries: elSeries }); + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; } pathTo = paths.pathTo; @@ -6621,24 +7166,8 @@ function (_Bar) { x = paths.x; xArrValues.push(x); yArrValues.push(y); - var seriesNumber = w.config.plotOptions.bar.distributed ? j : i; - var fillColor = null; - - if (_this.barOptions.colors.ranges.length > 0) { - var colorRange = _this.barOptions.colors.ranges; - colorRange.map(function (range, index) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - var pathFill = _this.fill.fillPath({ - seriesNumber: _this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor - }); - - elSeries = _this.renderSeries({ + var pathFill = this.bar.getPathFillColor(series, i, j, realIndex); + elSeries = this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, @@ -6656,33 +7185,19 @@ function (_Bar) { type: 'bar', visibleSeries: 0 }); - }; - - for (var j = 0; j < w.globals.dataPoints; j++) { - _loop2(j); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrValues; w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array - _this.prevY.push(_this.yArrj); - - _this.prevYF.push(_this.yArrjF); - - _this.prevYVal.push(_this.yArrjVal); - - _this.prevX.push(_this.xArrj); - - _this.prevXF.push(_this.xArrjF); - - _this.prevXVal.push(_this.xArrjVal); - + this.prevY.push(this.yArrj); + this.prevYF.push(this.yArrjF); + this.prevYVal.push(this.yArrjVal); + this.prevX.push(this.xArrj); + this.prevXF.push(this.xArrjF); + this.prevXVal.push(this.xArrjVal); ret.add(elSeries); - }; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - _loop(i, bc); } return ret; @@ -6707,8 +7222,7 @@ function (_Bar) { barWidth = xDivision; if (w.globals.isXNumeric) { - // max barwidth should be equal to minXDiff to avoid overlap - xDivision = this.minXDiff / this.xRatio; + xDivision = w.globals.minXDiff / this.xRatio; barWidth = xDivision * parseInt(this.barOptions.columnWidth) / 100; } else { barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth) / 100; @@ -6785,8 +7299,22 @@ function (_Bar) { x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } - this.xArrj.push(x); - this.xArrjF.push(Math.abs(barXPosition - x)); + var endingShapeOpts = { + barHeight: barHeight, + strokeWidth: strokeWidth, + invertedYRatio: this.invertedYRatio, + barYPosition: barYPosition, + x: x + }; + var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); + + if (this.series.length > 1 && i !== this.endingShapeOnSeriesNumber) { + // revert back to flat shape if not last series + endingShape.path = this.graphics.line(endingShape.newX, barYPosition + barHeight - strokeWidth); + } + + this.xArrj.push(endingShape.newX); + this.xArrjF.push(Math.abs(barXPosition - endingShape.newX)); this.xArrjVal.push(this.series[i][j]); pathTo = this.graphics.move(barXPosition, barYPosition); pathFrom = this.graphics.move(barXPosition, barYPosition); @@ -6795,7 +7323,7 @@ function (_Bar) { pathFrom = this.bar.getPathFrom(realIndex, j, false); } - pathTo = pathTo + this.graphics.line(x, barYPosition) + this.graphics.line(x, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); + pathTo = pathTo + this.graphics.line(endingShape.newX, barYPosition) + endingShape.path + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { @@ -6875,8 +7403,16 @@ function (_Bar) { } y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - this.yArrj.push(y); - this.yArrjF.push(Math.abs(barYPosition - y)); + var endingShapeOpts = { + barWidth: barWidth, + strokeWidth: strokeWidth, + yRatio: this.yRatio[this.yaxisIndex], + barXPosition: barXPosition, + y: y + }; + var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); + this.yArrj.push(endingShape.newY); + this.yArrjF.push(Math.abs(barYPosition - endingShape.newY)); this.yArrjVal.push(this.series[i][j]); pathTo = this.graphics.move(barXPosition, barYPosition); pathFrom = this.graphics.move(barXPosition, barYPosition); @@ -6885,8 +7421,8 @@ function (_Bar) { pathFrom = this.bar.getPathFrom(realIndex, j, false); } - pathTo = pathTo + this.graphics.line(barXPosition, y) + this.graphics.line(barXPosition + barWidth - strokeWidth, y) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition, barYPosition); + pathTo = pathTo + this.graphics.line(barXPosition, endingShape.newY) + endingShape.path + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); + pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { @@ -6907,6 +7443,38 @@ function (_Bar) { y: y }; } + /* + * When user clicks on legends, the collapsed series will be filled with [0,0,0,...,0] + * We need to make sure, that the last series is not [0,0,0,...,0] + * as we need to draw shapes on the last series (for stacked bars/columns only) + * Hence, we are collecting all inner arrays in series which has [0,0,0...,0] + **/ + + }, { + key: "checkZeroSeries", + value: function checkZeroSeries(_ref3) { + var series = _ref3.series; + var w = this.w; + + for (var zs = 0; zs < series.length; zs++) { + var total = 0; + + for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) { + total += series[zs][zsj]; + } + + if (total === 0) { + this.zeroSerieses.push(zs); + } + } // After getting all zeroserieses, we need to ensure whether endingshapeonSeries is not in that zeroseries array + + + for (var s = series.length - 1; s >= 0; s--) { + if (this.zeroSerieses.indexOf(s) > -1 && s === this.endingShapeOnSeriesNumber) { + this.endingShapeOnSeriesNumber -= 1; + } + } + } }]); return BarStacked; @@ -6916,8 +7484,6 @@ function (_Bar) { * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. * * @module CandleStick - * The whole calculation for stacked bar/column is different from normal bar/column, - * hence it makes sense to derive a new class for it extending most of the props of Parent Bar **/ var CandleStick = @@ -6939,14 +7505,13 @@ function (_Bar) { var fill = new Fill(this.ctx); this.candlestickOptions = this.w.config.plotOptions.candlestick; var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); + this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.initVariables(series); var ret = graphics.group({ class: 'apexcharts-candlestick-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, @@ -6964,7 +7529,8 @@ function (_Bar) { var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); @@ -7040,7 +7606,8 @@ function (_Bar) { yArrj.push(y); var pathFill = fill.fillPath({ seriesNumber: realIndex, - color: color + color: color, + value: series[i][j] }); var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; elSeries = this.renderSeries({ @@ -7109,12 +7676,6 @@ function (_Bar) { } var barXPosition = x + barWidth * this.visibleI; - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, zeroH); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { y1 = zeroH; @@ -7125,7 +7686,15 @@ function (_Bar) { l2 = zeroH - ohlc.l / yRatio; } + pathTo = graphics.move(barXPosition, zeroH); + pathFrom = graphics.move(barXPosition, y1); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j, true); + } + pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); + pathFrom = pathFrom + graphics.move(barXPosition, y1); if (!w.globals.isXNumeric) { x = x + xDivision; @@ -7256,244 +7825,6 @@ function () { return Crosshairs; }(); -/** - * DateTime Class to manipulate datetime values. - * - * @module DateTime - **/ - -var DateTime = -/*#__PURE__*/ -function () { - function DateTime(ctx) { - _classCallCheck(this, DateTime); - - this.ctx = ctx; - this.w = ctx.w; - this.months31 = [1, 3, 5, 7, 8, 10, 12]; - this.months30 = [2, 4, 6, 9, 11]; - this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - } - - _createClass(DateTime, [{ - key: "isValidDate", - value: function isValidDate(date) { - return !isNaN(this.parseDate(date)); - } - }, { - key: "getUTCTimeStamp", - value: function getUTCTimeStamp(dateStr) { - if (!Date.parse(dateStr)) { - return dateStr; - } - - return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); - } - }, { - key: "parseDate", - value: function parseDate(dateStr) { - var parsed = Date.parse(dateStr); - - if (!isNaN(parsed)) { - return this.getUTCTimeStamp(dateStr); - } - - var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); - output = this.getUTCTimeStamp(output); - return output; - } // https://stackoverflow.com/a/11252167/6495043 - - }, { - key: "treatAsUtc", - value: function treatAsUtc(dateStr) { - var result = new Date(dateStr); - result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); - return result; - } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 - - }, { - key: "formatDate", - value: function formatDate(date, format) { - var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var locale = this.w.globals.locale; - var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); - var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); - var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); - var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); - - function ii(i, len) { - var s = i + ''; - len = len || 2; - - while (s.length < len) { - s = '0' + s; - } - - return s; - } - - if (convertToUTC) { - date = this.treatAsUtc(date); - } - - var y = utc ? date.getUTCFullYear() : date.getFullYear(); - format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); - format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); - format = format.replace(/(^|[^\\])y/g, '$1' + y); - var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; - format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); - format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); - format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); - format = format.replace(/(^|[^\\])M/g, '$1' + M); - var d = utc ? date.getUTCDate() : date.getDate(); - format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); - format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); - format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); - format = format.replace(/(^|[^\\])d/g, '$1' + d); - var H = utc ? date.getUTCHours() : date.getHours(); - format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); - format = format.replace(/(^|[^\\])H/g, '$1' + H); - var h = H > 12 ? H - 12 : H === 0 ? 12 : H; - format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); - format = format.replace(/(^|[^\\])h/g, '$1' + h); - var m = utc ? date.getUTCMinutes() : date.getMinutes(); - format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); - format = format.replace(/(^|[^\\])m/g, '$1' + m); - var s = utc ? date.getUTCSeconds() : date.getSeconds(); - format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); - format = format.replace(/(^|[^\\])s/g, '$1' + s); - var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); - format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])f/g, '$1' + f); - var T = H < 12 ? 'AM' : 'PM'; - format = format.replace(/(^|[^\\])TT+/g, '$1' + T); - format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); - var t = T.toLowerCase(); - format = format.replace(/(^|[^\\])tt+/g, '$1' + t); - format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); - var tz = -date.getTimezoneOffset(); - var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; - - if (!utc) { - tz = Math.abs(tz); - var tzHrs = Math.floor(tz / 60); - var tzMin = tz % 60; - K += ii(tzHrs) + ':' + ii(tzMin); - } - - format = format.replace(/(^|[^\\])K/g, '$1' + K); - var day = (utc ? date.getUTCDay() : date.getDay()) + 1; - format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); - format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); - format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); - format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); - format = format.replace(/\\(.)/g, '$1'); - return format; - } - }, { - key: "getTimeUnitsfromTimestamp", - value: function getTimeUnitsfromTimestamp(minX, maxX) { - var w = this.w; - - if (w.config.xaxis.min !== undefined) { - minX = w.config.xaxis.min; - } - - if (w.config.xaxis.max !== undefined) { - maxX = w.config.xaxis.max; - } - - var minYear = new Date(minX).getFullYear(); - var maxYear = new Date(maxX).getFullYear(); - var minMonth = new Date(minX).getMonth(); - var maxMonth = new Date(maxX).getMonth(); - var minDate = new Date(minX).getDate(); - var maxDate = new Date(maxX).getDate(); - var minHour = new Date(minX).getHours(); - var maxHour = new Date(maxX).getHours(); - var minMinute = new Date(minX).getMinutes(); - var maxMinute = new Date(maxX).getMinutes(); - return { - minMinute: minMinute, - maxMinute: maxMinute, - minHour: minHour, - maxHour: maxHour, - minDate: minDate, - maxDate: maxDate, - minMonth: minMonth, - maxMonth: maxMonth, - minYear: minYear, - maxYear: maxYear - }; - } - }, { - key: "isLeapYear", - value: function isLeapYear(year) { - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "calculcateLastDaysOfMonth", - value: function calculcateLastDaysOfMonth(month, year, subtract) { - var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked - - return days - subtract; - } - }, { - key: "determineDaysOfYear", - value: function determineDaysOfYear(year) { - var days = 365; - - if (this.isLeapYear(year)) { - days = 366; - } - - return days; - } - }, { - key: "determineRemainingDaysOfYear", - value: function determineRemainingDaysOfYear(year, month, date) { - var dayOfYear = this.daysCntOfYear[month] + date; - if (month > 1 && this.isLeapYear()) dayOfYear++; - return dayOfYear; - } - }, { - key: "determineDaysOfMonths", - value: function determineDaysOfMonths(month, year) { - var days = 30; - month = Utils.monthMod(month); - - switch (true) { - case this.months30.indexOf(month) > -1: - if (month === 2) { - if (this.isLeapYear(year)) { - days = 29; - } else { - days = 28; - } - } - - break; - - case this.months31.indexOf(month) > -1: - days = 31; - break; - - default: - days = 31; - break; - } - - return days; - } - }]); - - return DateTime; -}(); - /** * ApexCharts HeatMap Class. * @module HeatMap @@ -7509,6 +7840,7 @@ function () { this.w = ctx.w; this.xRatio = xyRatios.xRatio; this.yRatio = xyRatios.yRatio; + this.negRange = false; this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; this.rectRadius = this.w.config.plotOptions.heatmap.radius; this.strokeWidth = this.w.config.stroke.width; @@ -7528,6 +7860,7 @@ function () { var yDivision = w.globals.gridHeight / w.globals.series.length; var y1 = 0; var rev = false; + this.checkColorRange(); var heatSeries = series.slice(); if (w.config.yaxis[0].reversed) { @@ -7538,7 +7871,8 @@ function () { for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series apexcharts-heatmap-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series apexcharts-heatmap-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); @@ -7546,7 +7880,7 @@ function () { if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; var filters = new Filters(this.ctx); - filters.dropShadow(elSeries, shadow); + filters.dropShadow(elSeries, shadow, i); } var x1 = 0; @@ -7555,13 +7889,21 @@ function () { var colorShadePercent = 1; var heatColorProps = this.determineHeatColor(i, j); - if (w.globals.hasNegs) { + if (w.globals.hasNegs || this.negRange) { var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; - if (heatColorProps.percent < 0) { - colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; + if (w.config.plotOptions.heatmap.reverseNegativeShade) { + if (heatColorProps.percent < 0) { + colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); + } else { + colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); + } } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; + if (heatColorProps.percent < 0) { + colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; + } else { + colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; + } } } else { colorShadePercent = 1 - heatColorProps.percent / 100; @@ -7652,6 +7994,22 @@ function () { w.config.yaxis[0].labels.offsetY = -(divisor / 2); return ret; } + }, { + key: "checkColorRange", + value: function checkColorRange() { + var _this = this; + + var w = this.w; + var heatmap = w.config.plotOptions.heatmap; + + if (heatmap.colorScale.ranges.length > 0) { + heatmap.colorScale.ranges.map(function (range, index) { + if (range.from < 0) { + _this.negRange = true; + } + }); + } + } }, { key: "determineHeatColor", value: function determineHeatColor(i, j) { @@ -7683,8 +8041,10 @@ function () { color = range.color; min = range.from; max = range.to; - total = Math.abs(max) + Math.abs(min); - percent = 100 * val / total; + + var _total = Math.abs(max) + Math.abs(min); + + percent = 100 * val / (_total === 0 ? _total - 0.000001 : _total); } }); } @@ -7741,7 +8101,7 @@ function () { }, { key: "animateHeatMap", value: function animateHeatMap(el, x, y, width, height, speed) { - var _this = this; + var _this2 = this; var animations = new Animations(this.ctx); animations.animateRect(el, { @@ -7755,7 +8115,7 @@ function () { width: width, height: height }, speed, function () { - _this.w.globals.animationEnded = true; + _this2.w.globals.animationEnded = true; }); } }, { @@ -7920,7 +8280,8 @@ function () { for (var i = 0; i < sectorAngleArr.length; i++) { // if(sectorAngleArr[i]>0) { var elPieArc = graphics.group({ - class: "apexcharts-series apexcharts-pie-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series apexcharts-pie-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), id: 'apexcharts-series-' + i, rel: i + 1 }); @@ -7932,7 +8293,8 @@ function () { var angle = endAngle - startAngle; var pathFill = fill.fillPath({ seriesNumber: i, - size: this.size + size: this.size, + value: series[i] }); // additionaly, pass size for gradient drawing in the fillPath function var path = this.getChangedPath(prevStartAngle, prevEndAngle); @@ -7945,14 +8307,14 @@ function () { classes: 'apexcharts-pie-area' }); elPath.attr({ - id: 'apexcharts-pie-slice-' + i, + id: "apexcharts-".concat(w.config.chart.type, "-slice-").concat(i), index: 0, j: i }); if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, shadow); + filters.dropShadow(elPath, shadow, i); } this.addListeners(elPath, this.donutDataLabels); @@ -8017,7 +8379,7 @@ function () { var yPos = labelPosition.y; var text = 100 * (endAngle - startAngle) / 360 + '%'; - if (angle !== 0) { + if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { var formatter = w.config.dataLabels.formatter; if (formatter !== undefined) { @@ -8189,14 +8551,15 @@ function () { var w = this.w; var me = this; var path; - var size = me.size + 3; - var elPath = w.globals.dom.Paper.select('#apexcharts-pie-slice-' + i).members[0]; + var size = me.size + 4; + var elPath = w.globals.dom.Paper.select("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(i)).members[0]; var pathFrom = elPath.attr('d'); if (elPath.attr('data:pieClicked') === 'true') { elPath.attr({ 'data:pieClicked': 'false' }); + this.revertDataLabelsInner(elPath.node, this.donutDataLabels); var origPath = elPath.attr('data:pathOrig'); elPath.attr({ d: origPath @@ -8411,7 +8774,9 @@ function () { } }, { key: "revertDataLabelsInner", - value: function revertDataLabelsInner(el, dataLabelsConfig) { + value: function revertDataLabelsInner(el, dataLabelsConfig, event) { + var _this = this; + var w = this.w; var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); @@ -8419,18 +8784,32 @@ function () { var pie = new Pie(this.ctx); pie.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); } else { - if (w.globals.selectedDataPoints.length) { - if (w.globals.selectedDataPoints[0].length > 0) { - var index = w.globals.selectedDataPoints[0]; + var slices = document.querySelectorAll(".apexcharts-pie-area"); + var sliceOut = false; + slices.forEach(function (s) { + if (s.getAttribute('data:pieClicked') === 'true') { + sliceOut = true; - var _el = w.globals.dom.baseEl.querySelector("#apexcharts-pie-slice-".concat(index)); - - this.printDataLabelsInner(_el, dataLabelsConfig); - } else { - dataLabelsGroup.style.opacity = 0; + _this.printDataLabelsInner(s, dataLabelsConfig); + } + }); + + if (!sliceOut) { + if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { + if (w.globals.selectedDataPoints[0].length > 0) { + var index = w.globals.selectedDataPoints[0]; + + var _el = w.globals.dom.baseEl.querySelector("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(index)); + + this.printDataLabelsInner(_el, dataLabelsConfig); + } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { + dataLabelsGroup.style.opacity = 0; + } + } else { + if (dataLabelsGroup && w.globals.series.length > 1) { + dataLabelsGroup.style.opacity = 0; + } } - } else if (w.globals.selectedDataPoints.length === 0 || dataLabelsGroup !== null && w.globals.series.length > 1) { - dataLabelsGroup.style.opacity = 0; } } } @@ -8507,7 +8886,8 @@ function () { series.forEach(function (s, i) { // el to which series will be drawn var elSeries = _this.graphics.group().attr({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); @@ -8559,7 +8939,8 @@ function () { pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, pathTo: paths.linePathsTo[p], strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width, - fill: 'none' + fill: 'none', + drawShadow: false })); elSeries.add(renderedLinePath); @@ -8571,15 +8952,16 @@ function () { pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, pathTo: paths.areaPathsTo[p], strokeWidth: 0, - fill: pathFill + fill: pathFill, + drawShadow: false })); if (w.config.chart.dropShadow.enabled) { var filters = new Filters(_this.ctx); var shadow = w.config.chart.dropShadow; - filters.dropShadow(renderedAreaPath, _objectSpread({}, shadow, { + filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { noUserSpaceOnUse: true - })); + }), i); } elSeries.add(renderedAreaPath); @@ -9068,7 +9450,8 @@ function (_Pie) { for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { var elRadialBarArc = graphics.group({ - class: "apexcharts-series apexcharts-radial-series ".concat(Utils.escapeString(w.globals.seriesNames[i])) + class: "apexcharts-series apexcharts-radial-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]) }); g.add(elRadialBarArc); elRadialBarArc.attr({ @@ -9079,7 +9462,8 @@ function (_Pie) { opts.size = opts.size - strokeWidth - this.margin; var pathFill = fill.fillPath({ seriesNumber: i, - size: opts.size + size: opts.size, + value: opts.series[i] }); var startAngle = this.startAngle; var prevStartAngle = void 0; @@ -9124,7 +9508,7 @@ function (_Pie) { if (w.config.chart.dropShadow.enabled) { var _shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, _shadow); + filters.dropShadow(elPath, _shadow, i); } this.addListeners(elPath, this.radialDataLabels); @@ -9133,7 +9517,7 @@ function (_Pie) { elRadialBarArc.add(elPath); elPath.attr({ - id: 'apexcharts-radialArc-' + i, + id: 'apexcharts-radialbar-slice-' + i, index: 0, j: i }); @@ -9236,6 +9620,318 @@ function (_Pie) { return Radial; }(Pie); +/** + * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. + * + * @module RangeBar + **/ + +var RangeBar = +/*#__PURE__*/ +function (_Bar) { + _inherits(RangeBar, _Bar); + + function RangeBar() { + _classCallCheck(this, RangeBar); + + return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); + } + + _createClass(RangeBar, [{ + key: "draw", + value: function draw(series, seriesIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var fill = new Fill(this.ctx); + this.rangeBarOptions = this.w.config.plotOptions.rangeBar; + this.series = series; + this.seriesRangeStart = w.globals.seriesRangeStart; + this.seriesRangeEnd = w.globals.seriesRangeEnd; + this.initVariables(series); + var ret = graphics.group({ + class: 'apexcharts-rangebar-series apexcharts-plot-series' + }); + + for (var i = 0, bc = 0; i < series.length; i++, bc++) { + var pathTo = void 0, + pathFrom = void 0; + var x = void 0, + y = void 0, + xDivision = void 0, + // xDivision is the GRIDWIDTH divided by number of datapoints (columns) + yDivision = void 0, + // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) + zeroH = void 0, + // zeroH is the baseline where 0 meets y axis + zeroW = void 0; // zeroW is the baseline where 0 meets x axis + + var yArrj = []; // hold y values of current iterating series + + var xArrj = []; // hold x values of current iterating series + + var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn + + var elSeries = graphics.group({ + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), + rel: i + 1, + 'data:realIndex': realIndex + }); + + if (series[i].length > 0) { + this.visibleI = this.visibleI + 1; + } + + var strokeWidth = 0; + var barHeight = 0; + var barWidth = 0; + + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; + } + + var initPositions = this.initialPositions(); + y = initPositions.y; + yDivision = initPositions.yDivision; + barHeight = initPositions.barHeight; + zeroW = initPositions.zeroW; + x = initPositions.x; + barWidth = initPositions.barWidth; + xDivision = initPositions.xDivision; + zeroH = initPositions.zeroH; + xArrj.push(x + barWidth / 2); // eldatalabels + + var elDataLabelsWrap = graphics.group({ + class: 'apexcharts-datalabels' + }); + + for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { + if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { + this.isNullValue = true; + } else { + this.isNullValue = false; + } + + if (w.config.stroke.show) { + if (this.isNullValue) { + strokeWidth = 0; + } else { + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; + } + } + + var paths = null; + + if (this.isHorizontal) { + paths = this.drawRangeBarPaths({ + indexes: { + i: i, + j: j, + realIndex: realIndex, + bc: bc + }, + barHeight: barHeight, + strokeWidth: strokeWidth, + pathTo: pathTo, + pathFrom: pathFrom, + zeroW: zeroW, + x: x, + y: y, + yDivision: yDivision, + elSeries: elSeries + }); + barWidth = paths.barWidth; + } else { + paths = this.drawRangeColumnPaths({ + indexes: { + i: i, + j: j, + realIndex: realIndex, + bc: bc + }, + x: x, + y: y, + xDivision: xDivision, + pathTo: pathTo, + pathFrom: pathFrom, + barWidth: barWidth, + zeroH: zeroH, + strokeWidth: strokeWidth, + elSeries: elSeries + }); + barHeight = paths.barHeight; + } + + pathTo = paths.pathTo; + pathFrom = paths.pathFrom; + y = paths.y; + x = paths.x; // push current X + + if (j > 0) { + xArrj.push(x + barWidth / 2); + } + + yArrj.push(y); + var pathFill = fill.fillPath({ + seriesNumber: realIndex + }); + var lineFill = w.globals.stroke.colors[realIndex]; + elSeries = this.renderSeries({ + realIndex: realIndex, + pathFill: pathFill, + lineFill: lineFill, + j: j, + i: i, + pathFrom: pathFrom, + pathTo: pathTo, + strokeWidth: strokeWidth, + elSeries: elSeries, + x: x, + y: y, + series: series, + barHeight: barHeight, + barWidth: barWidth, + elDataLabelsWrap: elDataLabelsWrap, + visibleSeries: this.visibleI, + type: 'rangebar' + }); + } // push all x val arrays into main xArr + + + w.globals.seriesXvalues[realIndex] = xArrj; + w.globals.seriesYvalues[realIndex] = yArrj; + ret.add(elSeries); + } + + return ret; + } + }, { + key: "drawRangeColumnPaths", + value: function drawRangeColumnPaths(_ref) { + var indexes = _ref.indexes, + x = _ref.x, + y = _ref.y, + strokeWidth = _ref.strokeWidth, + xDivision = _ref.xDivision, + pathTo = _ref.pathTo, + pathFrom = _ref.pathFrom, + barWidth = _ref.barWidth, + zeroH = _ref.zeroH; + var w = this.w; + var graphics = new Graphics(this.ctx); + var i = indexes.i; + var j = indexes.j; + var yRatio = this.yRatio[this.yaxisIndex]; + var realIndex = indexes.realIndex; + var range = this.getRangeValue(realIndex, j); + var y1 = Math.min(range.start, range.end); + var y2 = Math.max(range.start, range.end); + + if (w.globals.isXNumeric) { + x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; + } + + var barXPosition = x + barWidth * this.visibleI; + + if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { + y1 = zeroH; + } else { + y1 = zeroH - y1 / yRatio; + y2 = zeroH - y2 / yRatio; + } + + var barHeight = Math.abs(y2 - y1); + pathTo = graphics.move(barXPosition, zeroH); + pathFrom = graphics.move(barXPosition, y1); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j, true); + } + + pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); + pathFrom = pathFrom + graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1); + + if (!w.globals.isXNumeric) { + x = x + xDivision; + } + + return { + pathTo: pathTo, + pathFrom: pathFrom, + barHeight: barHeight, + x: x, + y: y2, + barXPosition: barXPosition + }; + } + }, { + key: "drawRangeBarPaths", + value: function drawRangeBarPaths(_ref2) { + var indexes = _ref2.indexes, + x = _ref2.x, + y = _ref2.y, + yDivision = _ref2.yDivision, + pathTo = _ref2.pathTo, + pathFrom = _ref2.pathFrom, + barHeight = _ref2.barHeight, + zeroW = _ref2.zeroW; + var w = this.w; + var graphics = new Graphics(this.ctx); + var i = indexes.i; + var j = indexes.j; + var realIndex = indexes.realIndex; + var x1 = zeroW; + var x2 = zeroW; + + if (w.globals.isXNumeric) { + y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; + } + + var barYPosition = y + barHeight * this.visibleI; + + if (typeof this.series[i][j] !== 'undefined' && this.series[i][j] !== null) { + x1 = zeroW + this.seriesRangeStart[i][j] / this.invertedYRatio; + x2 = zeroW + this.seriesRangeEnd[i][j] / this.invertedYRatio; + } + + pathTo = graphics.move(zeroW, barYPosition); + pathFrom = graphics.move(zeroW, barYPosition); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j); + } + + var barWidth = Math.abs(x2 - x1); + pathTo = graphics.move(x1, barYPosition) + graphics.line(x2, barYPosition) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); + pathFrom = pathFrom + graphics.line(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); + + if (!w.globals.isXNumeric) { + y = y + yDivision; + } + + return { + pathTo: pathTo, + pathFrom: pathFrom, + barWidth: barWidth, + x: x2, + y: y, + barYPosition: barYPosition + }; + } + }, { + key: "getRangeValue", + value: function getRangeValue(i, j) { + var w = this.w; + return { + start: w.globals.seriesRangeStart[i][j], + end: w.globals.seriesRangeEnd[i][j] + }; + } + }]); + + return RangeBar; +}(Bar); + /** * ApexCharts Line Class responsible for drawing Line / Area Charts. * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions @@ -9281,6 +9977,17 @@ function () { for (var i = 0; i < series.length; i++) { // width divided into equal parts + if (type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { + // a small adjustment to allow gradient line to draw correctly for all same values + + /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ + if (coreUtils.seriesHaveSameValues(i)) { + var gSeries = series[i].slice(); + gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; + series[i] = gSeries; + } + } + var xDivision = w.globals.gridWidth / w.globals.dataPoints; var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; @@ -9305,7 +10012,7 @@ function () { var x = w.globals.padHorizontal + categoryAxisCorrection; var y = 1; - if (w.globals.isXNumeric) { + if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio; } @@ -9318,7 +10025,8 @@ function () { var areaPaths = []; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])) + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) }); // points var elPointsMain = graphics.group({ @@ -9441,7 +10149,8 @@ function () { linePath: linePath, areaPath: areaPath, linePaths: linePaths, - areaPaths: areaPaths + areaPaths: areaPaths, + seriesIndex: seriesIndex }); areaPaths = calculatedPaths.areaPaths; linePaths = calculatedPaths.linePaths; @@ -9489,8 +10198,9 @@ function () { }); } + var dataLabelAlign = !series[i][j + 1] || series[i][j + 1] > series[i][j] ? 'top' : 'bottom'; var dataLabels = new DataLabels(this.ctx); - var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1); + var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null, dataLabelAlign); if (drawnLabels !== null) { elDataLabelsWrap.add(drawnLabels); @@ -9520,6 +10230,24 @@ function () { id: "apexcharts-".concat(type) }; + if (type === 'area') { + var pathFill = fill.fillPath({ + seriesNumber: realIndex + }); + + for (var p = 0; p < areaPaths.length; p++) { + var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { + pathFrom: pathFromArea, + pathTo: areaPaths[p], + stroke: 'none', + strokeWidth: 0, + strokeLineCap: null, + fill: pathFill + })); + elSeries.add(renderedPath); + } + } + if (w.config.stroke.show && !this.pointsChart) { var lineFill = null; @@ -9533,34 +10261,15 @@ function () { lineFill = w.globals.stroke.colors[realIndex]; } - for (var p = 0; p < linePaths.length; p++) { - var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { + for (var _p = 0; _p < linePaths.length; _p++) { + var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { pathFrom: pathFromLine, - pathTo: linePaths[p], + pathTo: linePaths[_p], stroke: lineFill, strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width, strokeLineCap: w.config.stroke.lineCap, fill: 'none' })); - elSeries.add(renderedPath); - } - } // we have drawn the lines, now if it is area chart, we need to fill paths - - - if (type === 'area') { - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - - for (var _p = 0; _p < areaPaths.length; _p++) { - var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromArea, - pathTo: areaPaths[_p], - stroke: 'none', - strokeWidth: 0, - strokeLineCap: null, - fill: pathFill - })); elSeries.add(_renderedPath); } @@ -9592,12 +10301,22 @@ function () { linePath = _ref.linePath, areaPath = _ref.areaPath, linePaths = _ref.linePaths, - areaPaths = _ref.areaPaths; + areaPaths = _ref.areaPaths, + seriesIndex = _ref.seriesIndex; var w = this.w; var graphics = new Graphics(this.ctx); - var curve = Array.isArray(w.config.stroke.curve) ? w.config.stroke.curve[i] : w.config.stroke.curve; // logic of smooth curve derived from chartist + var curve = w.config.stroke.curve; + + if (Array.isArray(w.config.stroke.curve)) { + if (Array.isArray(seriesIndex)) { + curve = w.config.stroke.curve[seriesIndex[i]]; + } else { + curve = w.config.stroke.curve[i]; + } + } // logic of smooth curve derived from chartist // CREDITS: https://gionkunz.github.io/chartist-js/ + if (curve === 'smooth') { var length = (x - pX) * 0.35; @@ -9725,12 +10444,10 @@ function () { pathFromLine = w.globals.previousPaths[pp].paths[0].d; } else if (gpp.type === 'area') { this.appendPathFrom = false; + pathFromArea = w.globals.previousPaths[pp].paths[0].d; if (w.config.stroke.show) { - pathFromLine = w.globals.previousPaths[pp].paths[0].d; - pathFromArea = w.globals.previousPaths[pp].paths[1].d; - } else { - pathFromArea = w.globals.previousPaths[pp].paths[0].d; + pathFromLine = w.globals.previousPaths[pp].paths[1].d; } } } @@ -9792,359 +10509,6 @@ function () { return Line; }(); -/** - * ApexCharts YAxis Class for drawing Y-Axis. - * - * @module YAxis - **/ - -var YAxis = -/*#__PURE__*/ -function () { - function YAxis(ctx) { - _classCallCheck(this, YAxis); - - this.ctx = ctx; - this.w = ctx.w; - this.xaxisFontSize = this.w.config.xaxis.labels.style.fontSize; - this.axisFontFamily = this.w.config.xaxis.labels.style.fontFamily; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); - this.xaxisForeColors = this.w.config.xaxis.labels.style.colors; - this.xAxisoffX = 0; - - if (this.w.config.xaxis.position === 'bottom') { - this.xAxisoffX = this.w.globals.gridHeight; - } - } - - _createClass(YAxis, [{ - key: "drawYaxis", - value: function drawYaxis(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; - var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis', - rel: realIndex, - transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' - }); - - if (!w.config.yaxis[realIndex].show) { - return elYaxis; - } - - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g' - }); - elYaxis.add(elYaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks - - var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; - - var l = w.globals.translateY; - var lbFormatter = w.globals.yLabelFormatters[realIndex]; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.yaxis[realIndex].labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var xPad = w.config.yaxis[realIndex].labels.padding; - - if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { - xPad = xPad * -1; - } - - var label = graphics.drawText({ - x: xPad, - y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, - text: val, - textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', - fontSize: yaxisFontSize, - fontFamily: yaxisFontFamily, - foreColor: w.config.yaxis[realIndex].labels.style.color, - cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass - }); - elYaxisTexts.add(label); - var labelRotatingCenter = graphics.rotateAroundCenter(label.node); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - l = l + labelsDivider; - } - } - - if (w.config.yaxis[realIndex].title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title' - }); - var x = 0; - - if (w.config.yaxis[realIndex].opposite) { - x = w.globals.translateYAxisX[realIndex]; - } - - var elYAxisTitleText = graphics.drawText({ - x: x, - y: w.globals.gridHeight / 2 + w.globals.translateY, - text: w.config.yaxis[realIndex].title.text, - textAnchor: 'end', - foreColor: w.config.yaxis[realIndex].title.style.color, - fontSize: w.config.yaxis[realIndex].title.style.fontSize, - fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elYaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var _x = 31 + axisBorder.offsetX; - - if (w.config.yaxis[realIndex].opposite) { - _x = -31 - axisBorder.offsetX; - } - - var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); - elYaxis.add(elVerticalLine); - this.drawAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); - } - - return elYaxis; - } // This actually becomes horizonal axis (for bar charts) - - }, { - key: "drawYaxisInversed", - value: function drawYaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis apexcharts-yaxis-inversed' - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks - - var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; - - var l = labelsDivider + w.config.xaxis.labels.offsetX; - var lbFormatter = w.globals.xLabelFormatter; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.xaxis.labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var elTick = graphics.drawText({ - x: w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX), - y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, - text: '', - textAnchor: 'middle', - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elTick); - elTick.tspan(val); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = val; - elTick.node.appendChild(elTooltipTitle); - l = l + labelsDivider; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' - }); - var elYAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2, - y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elXaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); - elXaxis.add(elVerticalLine); - } - - return elXaxis; - } - }, { - key: "drawAxisTicks", - value: function drawAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { - var w = this.w; - var graphics = new Graphics(this.ctx); // initial label position = 0; - - var t = w.globals.translateY; - - if (axisTicks.show) { - if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; - - for (var i = tickAmount; i >= 0; i--) { - var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; - - if (this.isBarHorizontal) { - tY = labelsDivider * i; - } - - var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); - elYaxis.add(elTick); - t = t + labelsDivider; - } - } - } - }, { - key: "yAxisTitleRotate", - value: function yAxisTitleRotate(realIndex, yAxisOpposite) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yAxisLabelsCoord = { - width: 0, - height: 0 - }; - var yAxisTitleCoord = { - width: 0, - height: 0 - }; - var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); - - if (elYAxisLabelsWrap !== null) { - yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); - } - - var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); - - if (yAxisTitle !== null) { - yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); - } - - if (yAxisTitle !== null) { - var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); - yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); - } - - if (yAxisTitle !== null) { - var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); - - if (!yAxisOpposite) { - yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } else { - yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } - } - } - }, { - key: "xPaddingForYAxisTitle", - value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { - var w = this.w; - var oppositeAxisCount = 0; - var x = 0; - var padd = 10; - - if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { - return { - xPos: x, - padd: 0 - }; - } - - if (yAxisOpposite) { - x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; - oppositeAxisCount += 1; - - if (oppositeAxisCount === 0) { - x = x - padd / 2; - } - } else { - x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; - - if (this.isBarHorizontal) { - padd = 25; - x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; - } - } - - return { - xPos: x, - padd: padd - }; - } // sets the x position of the y-axis by counting the labels width, title width and any offset - - }, { - key: "setYAxisXPosition", - value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { - var _this = this; - - var w = this.w; - var xLeft = 0; - var xRight = 0; - var leftOffsetX = 21; - var rightOffsetX = 1; - - if (w.config.yaxis.length > 1) { - this.multipleYs = true; - } - - w.config.yaxis.map(function (yaxe, index) { - var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; - var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; - - if (!yaxe.opposite) { - xLeft = w.globals.translateX - leftOffsetX; - - if (!shouldNotDrawAxis) { - leftOffsetX = leftOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; - } else { - if (_this.isBarHorizontal) { - xRight = w.globals.gridWidth + w.globals.translateX - 1; - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; - } else { - xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; - - if (!shouldNotDrawAxis) { - rightOffsetX = rightOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; - } - } - }); - } - }]); - - return YAxis; -}(); - /** * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. * @@ -10252,8 +10616,10 @@ function () { } else { w.globals.yLabelFormatters[i] = function (val) { if (Utils.isNumber(val)) { - if (w.globals.yValueDecimal !== 0 || w.globals.maxY - w.globals.minY < 1) { - return val.toFixed(yaxe.decimalsInFloat); + if (w.globals.yValueDecimal !== 0) { + return val.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); + } else if (w.globals.maxY - w.globals.minY < 5) { + return val.toFixed(1); } else { return val.toFixed(0); } @@ -10285,6 +10651,83 @@ function () { return Formatters; }(); +var AxesUtils = +/*#__PURE__*/ +function () { + function AxesUtils(ctx) { + _classCallCheck(this, AxesUtils); + + this.ctx = ctx; + this.w = ctx.w; + } // Based on the formatter function, get the label text and position + + + _createClass(AxesUtils, [{ + key: "getLabel", + value: function getLabel(labels, timelineLabels, x, i) { + var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; + var w = this.w; + var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; + var label; + var xlbFormatter = w.globals.xLabelFormatter; + var customFormatter = w.config.xaxis.labels.formatter; + var xFormat = new Formatters(this.ctx); + label = xFormat.xLabelFormat(xlbFormatter, rawLabel); + + if (customFormatter !== undefined) { + label = customFormatter(rawLabel, labels[i], i); + } + + if (timelineLabels.length > 0) { + x = timelineLabels[i].position; + label = timelineLabels[i].value; + } else { + if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { + label = ''; + } + } + + if (typeof label === 'undefined') label = ''; + label = label.toString(); + + if (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { + label = ''; + } + + return { + x: x, + text: label + }; + } + }, { + key: "drawYAxisTicks", + value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { + var w = this.w; + var graphics = new Graphics(this.ctx); // initial label position = 0; + + var t = w.globals.translateY; + + if (axisTicks.show) { + if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; + + for (var i = tickAmount; i >= 0; i--) { + var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; + + if (w.globals.isBarHorizontal) { + tY = labelsDivider * i; + } + + var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); + elYaxis.add(elTick); + t = t + labelsDivider; + } + } + } + }]); + + return AxesUtils; +}(); + /** * ApexCharts XAxis Class for drawing X-Axis. * @@ -10331,6 +10774,7 @@ function () { // as we are not providing multiple yaxis for bar charts this.yaxis = w.config.yaxis[0]; + this.axesUtils = new AxesUtils(ctx); } _createClass(XAxis, [{ @@ -10364,39 +10808,13 @@ function () { xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; } - var xlbFormatter = w.globals.xLabelFormatter; - var customFormatter = w.config.xaxis.labels.formatter; var labelsLen = labels.length; if (w.config.xaxis.labels.show) { for (var _i = 0; _i <= labelsLen - 1; _i++) { - var rawLabel = typeof labels[_i] === 'undefined' ? '' : labels[_i]; - var label = void 0; - var xFormat = new Formatters(this.ctx); - label = xFormat.xLabelFormat(xlbFormatter, rawLabel); - - if (customFormatter !== undefined) { - label = customFormatter(rawLabel, this.xaxisLabels[_i], _i); - } - var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; - - if (w.globals.timelineLabels.length > 0) { - x = w.globals.timelineLabels[_i].position; - label = w.globals.timelineLabels[_i].value; - } else { - if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { - label = ''; - } - } - - label = label.toString(); - - if (label.indexOf('NaN') === 0 || label === 'undefined' || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || this.drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { - label = ''; - } - - this.drawnLabels.push(label); + var label = this.axesUtils.getLabel(labels, w.globals.timelineLabels, x, _i, this.drawnLabels); + this.drawnLabels.push(label.text); var offsetYCorrection = 28; if (w.globals.rotateXLabels) { @@ -10404,7 +10822,7 @@ function () { } var elTick = graphics.drawText({ - x: x, + x: label.x, y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection, text: '', textAnchor: 'middle', @@ -10413,10 +10831,17 @@ function () { foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[_i] : this.xaxisForeColors, cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass }); + + if (_i === labelsLen - 1) { + if (w.globals.skipLastTimelinelabel) { + label.text = ''; + } + } + elXaxisTexts.add(elTick); - graphics.addTspan(elTick, label, this.xaxisFontFamily); + graphics.addTspan(elTick, label.text, this.xaxisFontFamily); var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label; + elTooltipTitle.textContent = label.text; elTick.node.appendChild(elTooltipTitle); xPos = xPos + colWidth; } @@ -10496,15 +10921,14 @@ function () { fontSize: ylabels.style.fontSize, fontFamily: ylabels.style.fontFamily, cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass - }); // let labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node) - // if (ylabels.rotate !== 0) { - // elLabel.node.setAttribute( - // 'transform', - // `rotate(${ylabels.rotate} ${labelRotatingCenter.x} ${labelRotatingCenter.y})` - // ) - // } - + }); elYaxisTexts.add(elLabel); + + if (w.config.yaxis[realIndex].labels.rotate !== 0) { + var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); + elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); + } + yPos = yPos + colHeight; } } @@ -10530,13 +10954,8 @@ function () { if (w.config.xaxis.axisBorder.show) { var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, this.yaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elYaxis.add(elHorzLine); // let x = w.globals.yAxisWidths[0] / 2 - // if (w.config.yaxis[0].opposite) { - // x = -w.globals.yAxisWidths[0] / 2 - // } - - var yaxis = new YAxis(this.ctx); - yaxis.drawAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); + elYaxis.add(elHorzLine); + this.axesUtils.drawYAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); } return elYaxis; @@ -10621,7 +11040,7 @@ function () { for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { var _tSpan = xAxisTexts[_xat].childNodes; - if (w.config.xaxis.labels.trim && w.config.chart.type !== 'bar' && w.config.plotOptions.bar.horizontal) { + if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { graphics.placeTextWithEllipsis(_tSpan[0], _tSpan[0].textContent, width); } } @@ -10656,6 +11075,394 @@ function () { return XAxis; }(); +/** + * ApexCharts YAxis Class for drawing Y-Axis. + * + * @module YAxis + **/ + +var YAxis = +/*#__PURE__*/ +function () { + function YAxis(ctx) { + _classCallCheck(this, YAxis); + + this.ctx = ctx; + this.w = ctx.w; + var w = this.w; + this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; + this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; + this.xaxisForeColors = w.config.xaxis.labels.style.colors; + this.xAxisoffX = 0; + + if (w.config.xaxis.position === 'bottom') { + this.xAxisoffX = w.globals.gridHeight; + } + + this.drawnLabels = []; + this.axesUtils = new AxesUtils(ctx); + } + + _createClass(YAxis, [{ + key: "drawYaxis", + value: function drawYaxis(realIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; + var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; + var elYaxis = graphics.group({ + class: 'apexcharts-yaxis', + rel: realIndex, + transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' + }); + + if (!w.config.yaxis[realIndex].show) { + return elYaxis; + } + + var elYaxisTexts = graphics.group({ + class: 'apexcharts-yaxis-texts-g' + }); + elYaxis.add(elYaxisTexts); + var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks + + var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; + + var l = w.globals.translateY; + var lbFormatter = w.globals.yLabelFormatters[realIndex]; + var labels = w.globals.yAxisScale[realIndex].result.slice(); + + if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { + labels.reverse(); + } + + if (w.config.yaxis[realIndex].labels.show) { + for (var i = tickAmount; i >= 0; i--) { + var val = labels[i]; + val = lbFormatter(val, i); + var xPad = w.config.yaxis[realIndex].labels.padding; + + if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { + xPad = xPad * -1; + } + + var label = graphics.drawText({ + x: xPad, + y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, + text: val, + textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', + fontSize: yaxisFontSize, + fontFamily: yaxisFontFamily, + foreColor: w.config.yaxis[realIndex].labels.style.color, + cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass + }); + elYaxisTexts.add(label); + var labelRotatingCenter = graphics.rotateAroundCenter(label.node); + + if (w.config.yaxis[realIndex].labels.rotate !== 0) { + label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); + } + + l = l + labelsDivider; + } + } + + if (w.config.yaxis[realIndex].title.text !== undefined) { + var elYaxisTitle = graphics.group({ + class: 'apexcharts-yaxis-title' + }); + var x = 0; + + if (w.config.yaxis[realIndex].opposite) { + x = w.globals.translateYAxisX[realIndex]; + } + + var elYAxisTitleText = graphics.drawText({ + x: x, + y: w.globals.gridHeight / 2 + w.globals.translateY, + text: w.config.yaxis[realIndex].title.text, + textAnchor: 'end', + foreColor: w.config.yaxis[realIndex].title.style.color, + fontSize: w.config.yaxis[realIndex].title.style.fontSize, + fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, + cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass + }); + elYaxisTitle.add(elYAxisTitleText); + elYaxis.add(elYaxisTitle); + } + + var axisBorder = w.config.yaxis[realIndex].axisBorder; + + if (axisBorder.show) { + var _x = 31 + axisBorder.offsetX; + + if (w.config.yaxis[realIndex].opposite) { + _x = -31 - axisBorder.offsetX; + } + + var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); + elYaxis.add(elVerticalLine); + this.axesUtils.drawYAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); + } + + return elYaxis; + } // This actually becomes horizonal axis (for bar charts) + + }, { + key: "drawYaxisInversed", + value: function drawYaxisInversed(realIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var elXaxis = graphics.group({ + class: 'apexcharts-xaxis apexcharts-yaxis-inversed' + }); + var elXaxisTexts = graphics.group({ + class: 'apexcharts-xaxis-texts-g', + transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") + }); + elXaxis.add(elXaxisTexts); + var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks + + var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; + + var l = labelsDivider + w.config.xaxis.labels.offsetX; + var lbFormatter = w.globals.xLabelFormatter; + var labels = w.globals.yAxisScale[realIndex].result.slice(); + var timelineLabels = w.globals.invertedTimelineLabels; + + if (timelineLabels.length > 0) { + this.xaxisLabels = timelineLabels.slice(); + labels = timelineLabels.slice(); + tickAmount = labels.length; + } + + if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { + labels.reverse(); + } + + var tl = timelineLabels.length; + + if (w.config.xaxis.labels.show) { + for (var i = tl ? 0 : tickAmount; tl ? i < tl - 1 : i >= 0; tl ? i++ : i--) { + var val = labels[i]; + val = lbFormatter(val, i); + var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); + + if (timelineLabels.length) { + var label = this.axesUtils.getLabel(labels, timelineLabels, x, i, this.drawnLabels); + x = label.x; + val = label.text; + this.drawnLabels.push(label.text); + } + + var elTick = graphics.drawText({ + x: x, + y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, + text: '', + textAnchor: 'middle', + foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, + fontSize: this.xaxisFontSize, + fontFamily: this.xaxisFontFamily, + cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass + }); + elXaxisTexts.add(elTick); + elTick.tspan(val); + var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); + elTooltipTitle.textContent = val; + elTick.node.appendChild(elTooltipTitle); + l = l + labelsDivider; + } + } + + if (w.config.xaxis.title.text !== undefined) { + var elYaxisTitle = graphics.group({ + class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' + }); + var elYAxisTitleText = graphics.drawText({ + x: w.globals.gridWidth / 2, + y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, + text: w.config.xaxis.title.text, + textAnchor: 'middle', + fontSize: w.config.xaxis.title.style.fontSize, + fontFamily: w.config.xaxis.title.style.fontFamily, + cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass + }); + elYaxisTitle.add(elYAxisTitleText); + elXaxis.add(elYaxisTitle); + } + + var axisBorder = w.config.yaxis[realIndex].axisBorder; + + if (axisBorder.show) { + var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); + elXaxis.add(elVerticalLine); + } + + return elXaxis; + } + }, { + key: "yAxisTitleRotate", + value: function yAxisTitleRotate(realIndex, yAxisOpposite) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var yAxisLabelsCoord = { + width: 0, + height: 0 + }; + var yAxisTitleCoord = { + width: 0, + height: 0 + }; + var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); + + if (elYAxisLabelsWrap !== null) { + yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); + } + + var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); + + if (yAxisTitle !== null) { + yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); + } + + if (yAxisTitle !== null) { + var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); + yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); + } + + if (yAxisTitle !== null) { + var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); + + if (!yAxisOpposite) { + yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); + } else { + yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); + } + } + } + }, { + key: "xPaddingForYAxisTitle", + value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { + var w = this.w; + var oppositeAxisCount = 0; + var x = 0; + var padd = 10; + + if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { + return { + xPos: x, + padd: 0 + }; + } + + if (yAxisOpposite) { + x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; + oppositeAxisCount += 1; + + if (oppositeAxisCount === 0) { + x = x - padd / 2; + } + } else { + x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; + + if (w.globals.isBarHorizontal) { + padd = 25; + x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; + } + } + + return { + xPos: x, + padd: padd + }; + } // sets the x position of the y-axis by counting the labels width, title width and any offset + + }, { + key: "setYAxisXPosition", + value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { + var w = this.w; + var xLeft = 0; + var xRight = 0; + var leftOffsetX = 21; + var rightOffsetX = 1; + + if (w.config.yaxis.length > 1) { + this.multipleYs = true; + } + + w.config.yaxis.map(function (yaxe, index) { + var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; + var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; + + if (!yaxe.opposite) { + xLeft = w.globals.translateX - leftOffsetX; + + if (!shouldNotDrawAxis) { + leftOffsetX = leftOffsetX + axisWidth + 20; + } + + w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; + } else { + if (w.globals.isBarHorizontal) { + xRight = w.globals.gridWidth + w.globals.translateX - 1; + w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; + } else { + xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; + + if (!shouldNotDrawAxis) { + rightOffsetX = rightOffsetX + axisWidth + 20; + } + + w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; + } + } + }); + } + }, { + key: "setYAxisTextAlignments", + value: function setYAxisTextAlignments() { + var w = this.w; + var yaxis = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis"); + yaxis = Utils.listToArray(yaxis); + yaxis.forEach(function (y, index) { + var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment + + if (yaxe.labels.align !== undefined) { + var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); + var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); + yAxisTexts = Utils.listToArray(yAxisTexts); + var rect = yAxisInner.getBoundingClientRect(); + + if (yaxe.labels.align === 'left') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'start'); + }); + + if (!yaxe.opposite) { + yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); + } + } else if (yaxe.labels.align === 'center') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'middle'); + }); + yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); + } else if (yaxe.labels.align === 'right') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'end'); + }); + + if (yaxe.opposite) { + yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); + } + } + } + }); + } + }]); + + return YAxis; +}(); + var Range = /*#__PURE__*/ function () { @@ -10664,16 +11471,17 @@ function () { this.ctx = ctx; this.w = ctx.w; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss // This routine creates the Y axis values for a graph. _createClass(Range, [{ key: "niceScale", - value: function niceScale(yMin, yMax) { - var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var ticks = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; + value: function niceScale(yMin, yMax, diff) { + var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; + var w = this.w; + var NO_MIN_MAX_PROVIDED = this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale; if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { // when all values are 0 @@ -10692,9 +11500,9 @@ function () { // If yMin and yMax are identical, then // adjust the yMin and yMax values to actually // make a graph. Also avoids division by zero errors. - yMin = yMin === 0 ? 0 : yMin - 0.1; // some small value + yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value - yMax = yMax === 0 ? 2 : yMax + 0.1; // some small value + yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value } // Calculate Min amd Max graphical labels and graph // increments. The number of ticks defaults to // 10 which is the SUGGESTED value. Any tick value @@ -10707,7 +11515,23 @@ function () { var result = []; // Determine Range - var range = yMax - yMin; + var range = Math.abs(yMax - yMin); + + if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { + /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ + yMax = yMax * 1.01; + } // for extremely small values - #fix #553 + + + if (range < 0.00001 && NO_MIN_MAX_PROVIDED && yMax < 10) { + yMax = yMax * 1.05; + } else if (diff > 0.1 && diff < 3 && NO_MIN_MAX_PROVIDED) { + /* fix https://github.com/apexcharts/apexcharts.js/issues/576 */ + + /* fix https://github.com/apexcharts/apexcharts.js/issues/588 */ + yMax = yMax + diff / 3; + } + var tiks = ticks + 1; // Adjust ticks if needed if (tiks < 2) { @@ -10737,10 +11561,9 @@ function () { if (val > ub) { break; } - } // TODO: need to remove this condition below which makes this function tightly coupled with w. + } - - if (this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale) { + if (NO_MIN_MAX_PROVIDED) { return { result: result, niceMin: result[0], @@ -10832,7 +11655,7 @@ function () { value: function setYScaleForIndex(index, minY, maxY) { var gl = this.w.globals; var cnf = this.w.config; - var y = this.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; + var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; if (typeof gl.yAxisScale[index] === 'undefined') { gl.yAxisScale[index] = []; @@ -10848,7 +11671,15 @@ function () { } else { // there is some data. Turn off the allSeriesCollapsed flag gl.allSeriesCollapsed = false; - gl.yAxisScale[index] = this.niceScale(minY, maxY, index, y.tickAmount ? y.tickAmount : 5); + + if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { + // fix https://github.com/apexcharts/apexcharts.js/issues/492 + gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); + } else { + var diff = Math.abs(maxY - minY); + gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 + y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5); + } } } } @@ -11057,7 +11888,6 @@ function () { this.ctx = ctx; this.w = ctx.w; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); this.scales = new Range(ctx); } @@ -11089,19 +11919,33 @@ function () { if (this.w.config.chart.type === 'candlestick') { seriesMin = gl.seriesCandleL; seriesMax = gl.seriesCandleH; + } else if (gl.isRangeData) { + seriesMin = gl.seriesRangeStart; + seriesMax = gl.seriesRangeEnd; } for (var i = startingIndex; i < len; i++) { gl.dataPoints = Math.max(gl.dataPoints, series[i].length); for (var j = 0; j < gl.series[i].length; j++) { - if (series[i][j] !== null && Utils.isNumber(series[i][j])) { + var val = series[i][j]; + + if (val !== null && Utils.isNumber(val)) { maxY = Math.max(maxY, seriesMax[i][j]); lowestY = Math.min(lowestY, seriesMin[i][j]); highestY = Math.max(highestY, seriesMin[i][j]); - if (Utils.isFloat(series[i][j])) { - gl.yValueDecimal = Math.max(gl.yValueDecimal, series[i][j].toString().split('.')[1].length); + if (this.w.config.chart.type === 'candlestick') { + maxY = Math.max(maxY, gl.seriesCandleO[i][j]); + maxY = Math.max(maxY, gl.seriesCandleH[i][j]); + maxY = Math.max(maxY, gl.seriesCandleL[i][j]); + maxY = Math.max(maxY, gl.seriesCandleC[i][j]); + highestY = maxY; + } + + if (Utils.isFloat(val)) { + val = Utils.noExponents(val); + gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); } if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { @@ -11182,17 +12026,20 @@ function () { if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') { - if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE) { - var diff = gl.maxY - lowestYInAllSeries; + if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility + ) { + var diff = gl.maxY - lowestYInAllSeries; - if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { - // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. - diff = 0; + if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { + // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. + diff = 0; + } + + gl.minY = lowestYInAllSeries - diff * 5 / 100; + /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ + + gl.maxY = gl.maxY + diff * 5 / 100; } - - gl.minY = lowestYInAllSeries - diff * 5 / 100; - gl.maxY = gl.maxY + diff * 5 / 100 + 0.05; - } } cnf.yaxis.map(function (yaxe, index) { @@ -11220,7 +12067,7 @@ function () { } }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there - if (this.isBarHorizontal) { + if (gl.isBarHorizontal) { if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { gl.minY = cnf.xaxis.min; } @@ -11245,13 +12092,20 @@ function () { gl.minYArr[0] = gl.yAxisScale[0].niceMin; gl.maxYArr[0] = gl.yAxisScale[0].niceMax; } + + return { + minY: gl.minY, + maxY: gl.maxY, + minYArr: gl.minYArr, + maxYArr: gl.maxYArr + }; } }, { key: "setXRange", value: function setXRange() { var gl = this.w.globals; var cnf = this.w.config; - var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided; // minX maxX starts here + var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; // minX maxX starts here if (gl.isXNumeric) { for (var i = 0; i < gl.series.length; i++) { @@ -11278,8 +12132,8 @@ function () { } // for numeric xaxis, we need to adjust some padding left and right for bar charts - if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && cnf.xaxis.type !== 'category') { - if (cnf.xaxis.type !== 'category') { + if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && gl.isXNumeric) { + if (cnf.xaxis.type !== 'category' || gl.isXNumeric) { var minX = gl.minX - gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; gl.minX = minX; gl.initialminX = minX; @@ -11289,7 +12143,7 @@ function () { } } - if (gl.isXNumeric || gl.noLabelsProvided) { + if ((gl.isXNumeric || gl.noLabelsProvided) && (!cnf.xaxis.convertedCatToNumeric || gl.dataFormatXNumeric)) { var ticks; if (cnf.xaxis.tickAmount === undefined) { @@ -11329,7 +12183,8 @@ function () { gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); if (gl.noLabelsProvided && gl.labels.length > 0) { - gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); + gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated + gl.seriesX = gl.labels.slice(); } } // we will still store these labels as the count for this will be different (to draw grid and labels placement) @@ -11354,6 +12209,49 @@ function () { gl.maxX = gl.maxX + 2; } } + + if (gl.isXNumeric) { + // get the least x diff if numeric x axis is present + gl.seriesX.forEach(function (sX, i) { + sX.forEach(function (s, j) { + if (j > 0) { + var xDiff = s - gl.seriesX[i][j - 1]; + gl.minXDiff = Math.min(xDiff, gl.minXDiff); + } + }); + }); + this.calcMinXDiffForTinySeries(); + } + + return { + minX: gl.minX, + maxX: gl.maxX + }; + } + }, { + key: "calcMinXDiffForTinySeries", + value: function calcMinXDiffForTinySeries() { + var w = this.w; + var len = w.globals.labels.length; + + if (w.globals.labels.length === 1) { + w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len / 3; + } else { + if (w.globals.minXDiff === Number.MAX_VALUE) { + // possibly a single dataPoint (fixes react-apexcharts/issue#34) + if (w.globals.timelineLabels.length > 0) { + len = w.globals.timelineLabels.length; + } + + if (len < 3) { + len = 3; + } + + w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len; + } + } + + return w.globals.minXDiff; } }, { key: "setZRange", @@ -11402,18 +12300,23 @@ function () { }, { key: "getSeriesByName", value: function getSeriesByName(seriesName) { - return this.w.globals.dom.baseEl.querySelector(".apexcharts-series.".concat(Utils.escapeString(seriesName))); + return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); } }, { key: "addCollapsedClassToSeries", value: function addCollapsedClassToSeries(elSeries, index) { var w = this.w; - for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { - if (w.globals.collapsedSeries[cs].index === index) { - elSeries.node.classList.add('apexcharts-series-collapsed'); + function iterateOnAllCollapsedSeries(series) { + for (var cs = 0; cs < series.length; cs++) { + if (series[cs].index === index) { + elSeries.node.classList.add('apexcharts-series-collapsed'); + } } } + + iterateOnAllCollapsedSeries(w.globals.collapsedSeries); + iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); } }, { key: "toggleSeriesOnHover", @@ -11788,7 +12691,6 @@ function () { this.isSparkline = this.w.config.chart.sparkline.enabled; this.xPadRight = 0; this.xPadLeft = 0; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); } /** * @memberof Dimensions @@ -11837,20 +12739,25 @@ function () { this.xAxisHeight = 0; } - if (!this.isBarHorizontal) { + if (!w.globals.isBarHorizontal) { this.yAxisWidth = this.getTotalYAxisWidth(); } else { this.yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; } - if (!w.globals.isMultipleYAxis) { - if (this.yAxisWidth < w.config.yaxis[0].labels.minWidth) { - this.yAxisWidth = w.config.yaxis[0].labels.minWidth; - } + var minYAxisWidth = 0; + var maxYAxisWidth = 0; + w.config.yaxis.forEach(function (y) { + minYAxisWidth += y.labels.minWidth; + maxYAxisWidth += y.labels.maxWidth; + }); - if (this.yAxisWidth > w.config.yaxis[0].labels.maxWidth) { - this.yAxisWidth = w.config.yaxis[0].labels.maxWidth; - } + if (this.yAxisWidth < minYAxisWidth) { + this.yAxisWidth = minYAxisWidth; + } + + if (this.yAxisWidth > maxYAxisWidth) { + this.yAxisWidth = maxYAxisWidth; } } }, { @@ -11879,7 +12786,7 @@ function () { gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; - if (this.isBarHorizontal) { + if (w.globals.isBarHorizontal) { gl.rotateXLabels = false; gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize) / 1.5); } @@ -12032,10 +12939,23 @@ function () { var w = this.w; - if (w.config.xaxis.type === 'category' && this.isBarHorizontal || w.config.xaxis.type === 'numeric') { + if (w.config.xaxis.type === 'category' && w.globals.isBarHorizontal || w.config.xaxis.type === 'numeric' || w.config.xaxis.type === 'datetime') { var rightPad = function rightPad(labels) { - if (w.config.grid.padding.right < labels.width) { - _this.xPadRight = labels.width / 2 + 1; + if (_this.timescaleLabels) { + // for timeline labels, we take the last label and check if it exceeds gridWidth + var lastTimescaleLabel = _this.timescaleLabels[_this.timescaleLabels.length - 1]; + var labelPosition = lastTimescaleLabel.position + labels.width; + + if (labelPosition > w.globals.gridWidth) { + w.globals.skipLastTimelinelabel = true; + } else { + // we have to make it false again in case of zooming/panning + w.globals.skipLastTimelinelabel = false; + } + } else if (w.config.xaxis.type !== 'datetime') { + if (w.config.grid.padding.right < labels.width) { + _this.xPadRight = labels.width / 2 + 1; + } } }; @@ -12045,16 +12965,16 @@ function () { } }; - var lineArea = w.config.chart.type === 'line' || w.config.chart.type === 'area'; + var isXNumeric = w.globals.isXNumeric; w.config.yaxis.forEach(function (yaxe, i) { - var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || lineArea || yaxe.opposite && _this.isBarHorizontal; + var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric || yaxe.opposite && w.globals.isBarHorizontal; if (shouldPad) { - if (lineArea && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || _this.isBarHorizontal && yaxe.opposite) { + if (isXNumeric && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || w.globals.isBarHorizontal && yaxe.opposite) { leftPad(xaxisLabelCoords); } - if (!_this.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || lineArea && !w.globals.isMultipleYAxis) { + if (!w.globals.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric && !w.globals.isMultipleYAxis) { rightPad(xaxisLabelCoords); } } @@ -12066,18 +12986,18 @@ function () { value: function titleSubtitleOffset() { var w = this.w; var gl = w.globals; - var gridShrinkOffset = this.isSparkline ? 0 : 10; + var gridShrinkOffset = this.isSparkline || !w.globals.axisCharts ? 0 : 10; if (w.config.title.text !== undefined) { gridShrinkOffset += w.config.title.margin; } else { - gridShrinkOffset += this.isSparkline ? 0 : 5; + gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; } if (w.config.subtitle.text !== undefined) { gridShrinkOffset += w.config.subtitle.margin; } else { - gridShrinkOffset += this.isSparkline ? 0 : 5; + gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; } if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && w.config.series.length > 1) { @@ -12134,8 +13054,13 @@ function () { value: function getxAxisTimeScaleLabelsCoords() { var w = this.w; var rect; - var timescaleLabels = w.globals.timelineLabels.slice(); - var labels = timescaleLabels.map(function (label) { + this.timescaleLabels = w.globals.timelineLabels.slice(); + + if (w.globals.isBarHorizontal && w.config.xaxis.type === 'datetime') { + this.timescaleLabels = w.globals.invertedTimelineLabels.slice(); + } + + var labels = this.timescaleLabels.map(function (label) { return label.value; }); // get the longest string from the labels array and also apply label formatter to it @@ -12178,19 +13103,20 @@ function () { height: coords.height }; } else { - var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter to it + var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter + + var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxies - fix #522 var val = xaxisLabels.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); // the labels gets changed for bar charts - if (this.isBarHorizontal) { + if (w.globals.isBarHorizontal) { val = w.globals.yAxisScale[0].result.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); } - var xlbFormatter = w.globals.xLabelFormatter; var xFormat = new Formatters(this.ctx); val = xFormat.xLabelFormat(xlbFormatter, val); var graphics = new Graphics(this.ctx); @@ -12201,7 +13127,7 @@ function () { }; if (rect.width * xaxisLabels.length > w.globals.svgWidth - lgWidthForSideLegends - this.yAxisWidth && w.config.xaxis.labels.rotate !== 0) { - if (!this.isBarHorizontal) { + if (!w.globals.isBarHorizontal) { w.globals.rotateXLabels = true; xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); rect.height = xLabelrect.height / 1.66; @@ -12249,7 +13175,7 @@ function () { val = w.globals.yAxisScale[index].niceMax; } - if (_this2.isBarHorizontal) { + if (w.globals.isBarHorizontal) { labelPad = 0; var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it @@ -12640,15 +13566,21 @@ function () { } }, { key: "recalcDimensionsBasedOnFormat", - value: function recalcDimensionsBasedOnFormat(filteredTimeScale) { + value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { var w = this.w; var reformattedTimescaleArray = this.formatDates(filteredTimeScale); var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); - w.globals.timelineLabels = removedOverlappingTS.slice(); // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords + + if (!inverted) { + w.globals.timelineLabels = removedOverlappingTS.slice(); + } else { + w.globals.invertedTimelineLabels = removedOverlappingTS.slice(); + } // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX // Dependency on Dimensions(), need to refactor correctly // TODO - find an alternate way to avoid calling this Heavy method twice + var dimensions = new Dimensions(this.ctx); dimensions.plotCoords(); } @@ -13172,10 +14104,13 @@ function () { var cnf = this.w.config; // const graphics = new Graphics(this.ctx) var ct = cnf.chart.type; - var axisChartsArrTypes = ['line', 'area', 'bar', 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; - var xyChartsArrTypes = ['line', 'area', 'bar', 'candlestick', 'scatter', 'bubble']; + var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', + 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; + var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', + 'candlestick', 'scatter', 'bubble']; gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; + gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; gl.chartClass = '.apexcharts' + gl.cuid; gl.dom.baseEl = this.el; gl.dom.elWrap = document.createElement('div'); @@ -13233,7 +14168,7 @@ function () { // if user has specified a particular type for particular series if (typeof ser[st].type !== 'undefined') { if (ser[st].type === 'column' || ser[st].type === 'bar') { - w.config.plotOptions.bar.horizontal = false; // bar not supported in mixed charts + w.config.plotOptions.bar.horizontal = false; // horizontal bars not supported in mixed charts, hence forcefully set to false columnSeries.series.push(series); columnSeries.i.push(st); @@ -13264,6 +14199,7 @@ function () { var candlestick = new CandleStick(this.ctx, xyRatios); var pie = new Pie(this.ctx); var radialBar = new Radial(this.ctx); + var rangeBar = new RangeBar(this.ctx, xyRatios); var radar = new Radar(this.ctx); var elGraph = []; @@ -13329,6 +14265,10 @@ function () { elGraph = candleStick.draw(gl.series); break; + case 'rangeBar': + elGraph = rangeBar.draw(gl.series); + break; + case 'heatmap': var heatmap = new HeatMap(this.ctx, xyRatios); elGraph = heatmap.draw(gl.series); @@ -13398,7 +14338,7 @@ function () { height: gl.svgHeight }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; - var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? 14 : 5; + var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; gl.dom.elWrap.style.width = gl.svgWidth + 'px'; gl.dom.elWrap.style.height = gl.svgHeight + 'px'; @@ -13435,6 +14375,8 @@ function () { gl.seriesCandleH = []; gl.seriesCandleL = []; gl.seriesCandleC = []; + gl.seriesRangeStart = []; + gl.seriesRangeEnd = []; gl.seriesPercent = []; gl.seriesX = []; gl.seriesZ = []; @@ -13477,6 +14419,7 @@ function () { gl.minDate = Number.MAX_VALUE; gl.minZ = Number.MAX_VALUE; gl.maxZ = -Number.MAX_VALUE; + gl.minXDiff = Number.MAX_VALUE; gl.yAxisScale = []; gl.xAxisScale = null; gl.xAxisTicksPositions = []; @@ -13552,6 +14495,8 @@ function () { } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); } + + gl.dataFormatXNumeric = true; } if (cnf.xaxis.type === 'datetime') { @@ -13587,8 +14532,8 @@ function () { for (var j = 0; j < ser[i].data.length; j++) { if (typeof ser[i].data[j].y !== 'undefined') { - if (Array.isArray(ser[i].data[j].y) && ser[i].data[j].y.length === 4) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[3])); + if (Array.isArray(ser[i].data[j].y)) { + this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); } @@ -13603,7 +14548,7 @@ function () { if (isXString || isXDate) { // user supplied '01/01/2017' or a date string (a JS date object is not supported) if (isXString) { - if (cnf.xaxis.type === 'datetime') { + if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); } else { // a category and not a numeric x value @@ -13614,11 +14559,15 @@ function () { if (cnf.xaxis.type === 'datetime') { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); } else { + gl.dataFormatXNumeric = true; + gl.isXNumeric = true; this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); } } } else { // a numeric value in x property + gl.isXNumeric = true; + gl.dataFormatXNumeric = true; this.twoDSeriesX.push(ser[activeI].data[_j2].x); } } @@ -13631,6 +14580,22 @@ function () { gl.isDataXYZ = true; } } + }, { + key: "handleRangeData", + value: function handleRangeData(ser, i) { + var gl = this.w.globals; + var range = {}; + + if (this.isFormat2DArray()) { + range = this.handleRangeDataFormat('array', ser, i); + } else if (this.isFormatXY()) { + range = this.handleRangeDataFormat('xy', ser, i); + } + + gl.seriesRangeStart.push(range.start); + gl.seriesRangeEnd.push(range.end); + return range; + } }, { key: "handleCandleStickData", value: function handleCandleStickData(ser, i) { @@ -13649,6 +14614,40 @@ function () { gl.seriesCandleC.push(ohlc.c); return ohlc; } + }, { + key: "handleRangeDataFormat", + value: function handleRangeDataFormat(format, ser, i) { + var rangeStart = []; + var rangeEnd = []; + var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; + var serObj = new Series(this.ctx); + var activeIndex = serObj.getActiveConfigSeriesIndex(); + + if (format === 'array') { + if (ser[activeIndex].data[0][1].length !== 2) { + throw new Error(err); + } + + for (var j = 0; j < ser[i].data.length; j++) { + rangeStart.push(ser[i].data[j][1][0]); + rangeEnd.push(ser[i].data[j][1][1]); + } + } else if (format === 'xy') { + if (ser[activeIndex].data[0].y.length !== 2) { + throw new Error(err); + } + + for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { + rangeStart.push(ser[i].data[_j3].y[0]); + rangeEnd.push(ser[i].data[_j3].y[1]); + } + } + + return { + start: rangeStart, + end: rangeEnd + }; + } }, { key: "handleCandleStickDataFormat", value: function handleCandleStickDataFormat(format, ser, i) { @@ -13674,11 +14673,11 @@ function () { throw new Error(err); } - for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { - serO.push(ser[i].data[_j3].y[0]); - serH.push(ser[i].data[_j3].y[1]); - serL.push(ser[i].data[_j3].y[2]); - serC.push(ser[i].data[_j3].y[3]); + for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { + serO.push(ser[i].data[_j4].y[0]); + serH.push(ser[i].data[_j4].y[1]); + serL.push(ser[i].data[_j4].y[2]); + serC.push(ser[i].data[_j4].y[3]); } } @@ -13707,6 +14706,11 @@ function () { return; } + if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { + gl.isRangeData = true; + this.handleRangeData(ser, i); + } + if (this.isMultiFormat()) { if (this.isFormat2DArray()) { this.handleFormat2DArray(ser, i); @@ -13789,33 +14793,47 @@ function () { return this.w; } + /** User possibly set string categories in xaxis.categories or labels prop + * Or didn't set xaxis labels at all - in which case we manually do it. + * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], + * this shouldn't be called + * @param {array} ser - the series which user passed to the config + */ + }, { key: "handleExternalLabelsData", value: function handleExternalLabelsData(ser) { var cnf = this.w.config; - var gl = this.w.globals; // user provided labels in category axis + var gl = this.w.globals; if (cnf.xaxis.categories.length > 0) { + // user provided labels in xaxis.category prop gl.labels = cnf.xaxis.categories; } else if (cnf.labels.length > 0) { + // user provided labels in labels props gl.labels = cnf.labels.slice(); } else if (this.fallbackToCategory) { + // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array gl.labels = gl.labels[0]; } else { - // user didn't provided labels, fallback to 1-2-3-4-5 + // user didn't provided any labels, fallback to 1-2-3-4-5 var labelArr = []; if (gl.axisCharts) { + // for axis charts, we get the longest series and create labels from it for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { labelArr.push(i + 1); - } + } // create gl.seriesX as it will be used in calculations of x positions + for (var _i = 0; _i < ser.length; _i++) { gl.seriesX.push(labelArr); - } + } // turn on the isXNumeric flag to allow minX and maxX to function properly + gl.isXNumeric = true; } // no series to pull labels from, put a 0-10 series + // possibly, user collapsed all series. Hence we can't work with above calc if (labelArr.length === 0) { @@ -13824,14 +14842,12 @@ function () { for (var _i2 = 0; _i2 < ser.length; _i2++) { gl.seriesX.push(labelArr); } - } + } // Finally, pass the labelArr in gl.labels which will be printed on x-axis + + + gl.labels = labelArr; // Turn on this global flag to indicate no labels were provided by user - gl.labels = labelArr; gl.noLabelsProvided = true; - - if (cnf.xaxis.type === 'category') { - gl.isXNumeric = false; - } } } // Segregate user provided data into appropriate vars @@ -13841,14 +14857,17 @@ function () { var w = this.w; var cnf = w.config; var gl = w.globals; - this.excludeCollapsedSeriesInYAxis(); + this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis + this.fallbackToCategory = false; this.resetGlobals(); this.isMultipleY(); if (gl.axisCharts) { + // axisCharts includes line / area / column / scatter this.parseDataAxisCharts(ser); } else { + // non-axis charts are pie / donut this.parseDataNonAxisCharts(ser); } @@ -13865,9 +14884,10 @@ function () { this.coreUtils.getStackedSeriesTotals(); } - this.coreUtils.getPercentSeries(); // user didn't provide a [[x,y],[x,y]] series, but a named series + this.coreUtils.getPercentSeries(); - if (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0) { + if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { + // x-axis labels couldn't be detected; hence try searching every option in config this.handleExternalLabelsData(ser); } } @@ -13891,10 +14911,17 @@ function () { xyRatios = this.coreUtils.getCalculatedRatios(); - if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined && isFinite(w.globals.minX) && isFinite(w.globals.maxX)) { + if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { var ts = new TimeScale(this.ctx); - var formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale); + var formattedTimeScale; + + if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { + formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); + ts.recalcDimensionsBasedOnFormat(formattedTimeScale, false); + } else if (w.globals.isBarHorizontal) { + formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); + ts.recalcDimensionsBasedOnFormat(formattedTimeScale, true); + } } } @@ -13911,7 +14938,7 @@ function () { if (gl.axisCharts && type !== 'radar') { var elXaxis, elYaxis; - if (type === 'bar' && cnf.plotOptions.bar.horizontal) { + if (gl.isBarHorizontal) { elYaxis = yAxis.drawYaxisInversed(0); elXaxis = xAxis.drawXaxisInversed(0); gl.dom.elGraphical.add(elXaxis); @@ -14416,6 +15443,7 @@ function () { value: function drawGrid() { var w = this.w; var xAxis = new XAxis(this.ctx); + var yaxis = new YAxis(this.ctx); var gl = this.w.globals; var elgrid = null; @@ -14433,6 +15461,8 @@ function () { if (elgrid !== null) { xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); } + + yaxis.setYAxisTextAlignments(); } } // This mask will clip off overflowing graphics from the drawable area @@ -14459,7 +15489,7 @@ function () { gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff'); var coreUtils = new CoreUtils(this); coreUtils.getLargestMarkerSize(); - var markerSize = w.globals.markers.largestSize + w.config.markers.hover.sizeOffset + 1; + var markerSize = w.globals.markers.largestSize + 1; gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff'); gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); @@ -14477,6 +15507,14 @@ function () { var elg = graphics.group({ class: 'apexcharts-grid' }); + var elgridLinesH = graphics.group({ + class: 'apexcharts-gridlines-horizontal' + }); + var elgridLinesV = graphics.group({ + class: 'apexcharts-gridlines-vertical' + }); + elg.add(elgridLinesH); + elg.add(elgridLinesV); var tickAmount = 8; for (var i = 0; i < w.globals.series.length; i++) { @@ -14488,9 +15526,8 @@ function () { } var xCount; - var inversedGrid = !!(w.config.plotOptions.bar.horizontal && w.config.chart.type === 'bar'); - if (!inversedGrid) { + if (!w.globals.isBarHorizontal) { xCount = this.xaxisLabels.length; // draw vertical lines if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { @@ -14507,7 +15544,7 @@ function () { if (w.config.grid.xaxis.lines.show && x1 > 0 && x1 < w.globals.gridWidth) { var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); line.node.classList.add('apexcharts-gridline'); - elg.add(line); + elgridLinesV.add(line); if (this.animX) { this.animateLine(line, { @@ -14521,7 +15558,15 @@ function () { } var xAxis = new XAxis(this.ctx); - xAxis.drawXaxisTicks(x1, elg); + + if (_i === xCount - 1) { + if (!w.globals.skipLastTimelinelabel) { + // skip drawing last label here + xAxis.drawXaxisTicks(x1, elg); + } + } else { + xAxis.drawXaxisTicks(x1, elg); + } } } else { var xCountForCategoryCharts = xCount; @@ -14543,7 +15588,7 @@ function () { _line.node.classList.add('apexcharts-gridline'); - elg.add(_line); + elgridLinesV.add(_line); if (this.animX) { this.animateLine(_line, { @@ -14573,7 +15618,7 @@ function () { for (var _i3 = 0; _i3 < tickAmount + 1; _i3++) { var _line2 = graphics.drawLine(_x, _y, _x2, _y2, w.config.grid.borderColor, strokeDashArray); - elg.add(_line2); + elgridLinesH.add(_line2); _line2.node.classList.add('apexcharts-gridline'); @@ -14613,7 +15658,7 @@ function () { _line3.node.classList.add('apexcharts-gridline'); - elg.add(_line3); + elgridLinesV.add(_line3); if (this.animX) { this.animateLine(_line3, { @@ -14643,7 +15688,7 @@ function () { for (var _i5 = 0; _i5 < w.globals.dataPoints + 1; _i5++) { var _line4 = graphics.drawLine(_x5, _y5, _x6, _y6, w.config.grid.borderColor, strokeDashArray); - elg.add(_line4); + elgridLinesH.add(_line4); _line4.node.classList.add('apexcharts-gridline'); @@ -15104,11 +16149,13 @@ function () { if (w.globals.axisCharts) { seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"); + seriesEls = Utils.listToArray(seriesEls); seriesEls.forEach(function (v) { realIndexes.push(parseInt(v.getAttribute('data:realIndex'))); }); } else { seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"); + seriesEls = Utils.listToArray(seriesEls); seriesEls.forEach(function (v) { realIndexes.push(parseInt(v.getAttribute('rel')) - 1); }); @@ -15227,6 +16274,16 @@ function () { // for non-axis charts i.e pie / donuts var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); + var type = w.config.chart.type; + + if (type === 'pie' || type === 'donut') { + var dataLabels = w.config.plotOptions.pie.donut.labels; + var graphics = new Graphics(this.ctx); + var pie = new Pie(this.ctx); + graphics.pathMouseDown(_seriesEl.members[0], null); + pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); + } + _seriesEl.fire('click'); } } @@ -15307,8 +16364,7 @@ function () { } else { for (var i = 0; i < res.length; i++) { if (width < res[i].breakpoint) { - newOptions = Utils.extend(config, newOptions); - newOptions = CoreUtils.extendArrayProps(newOptions, res[i].options); + newOptions = CoreUtils.extendArrayProps(config, res[i].options); newOptions = Utils.extend(w.config, newOptions); _this.overrideResponsiveOptions(newOptions); @@ -15364,6 +16420,7 @@ function () { value: function setDefaultColors() { var w = this.w; var utils = new Utils(); + w.globals.dom.elWrap.classList.add(w.config.theme.mode); if (w.config.colors === undefined) { w.globals.colors = this.predefined(); @@ -15430,7 +16487,7 @@ function () { this.pushExtraColors(w.globals.dataLabels.style.colors, 50); if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { - w.globals.radarPolygons.fill.colors = ['#fff']; + w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff']; } else { w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors; } @@ -15472,6 +16529,19 @@ function () { } } } + }, { + key: "updateThemeOptions", + value: function updateThemeOptions(options) { + options.chart = options.chart || {}; + options.tooltip = options.tooltip || {}; + var mode = options.theme.mode || 'light'; + var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; + var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; + options.tooltip.theme = mode; + options.chart.foreColor = foreColor; + options.theme.palette = palette; + return options; + } }, { key: "predefined", value: function predefined() { @@ -15491,7 +16561,7 @@ function () { break; case 'palette4': - this.colors = ['#546E7A', '#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a']; + this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; break; case 'palette5': @@ -15900,7 +16970,7 @@ function () { val = f.yLbFormatter(w.globals.series[tIndex][j], { series: w.globals.series, - seriesIndex: i, + seriesIndex: tIndex, dataPointIndex: j, w: w }); // discard 0 values in BARS @@ -16164,6 +17234,7 @@ function () { var tooltipEl = this.ttCtx.getElTooltip(); // override everything with a custom html tooltip and replace it tooltipEl.innerHTML = w.config.tooltip.custom({ + ctx: this.ctx, series: w.globals.series, seriesIndex: i, dataPointIndex: j, @@ -16367,7 +17438,7 @@ function () { if (w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top - tooltipRect.ttHeight / 2; + y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; } var newPositions = this.positionChecks(tooltipRect, x, y); @@ -16437,9 +17508,13 @@ function () { cx = pointsArr[capturedSeries][j][0]; cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); - point.setAttribute('r', hoverSize); - point.setAttribute('cx', cx); - point.setAttribute('cy', cy); // point.style.opacity = w.config.markers.hover.opacity + + if (point) { + point.setAttribute('r', hoverSize); + point.setAttribute('cx', cx); + point.setAttribute('cy', cy); + } // point.style.opacity = w.config.markers.hover.opacity + this.moveXCrosshairs(cx); @@ -16511,7 +17586,7 @@ function () { value: function moveStickyTooltipOverBars(j) { var w = this.w; var ttCtx = this.ttCtx; - var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); + var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; var bcy = 0; var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; @@ -16594,6 +17669,8 @@ function () { }, { key: "enlargeCurrentPoint", value: function enlargeCurrentPoint(rel, point) { + var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var w = this.w; if (w.config.chart.type !== 'bubble') { @@ -16602,6 +17679,12 @@ function () { var cx = point.getAttribute('cx'); var cy = point.getAttribute('cy'); + + if (x !== null && y !== null) { + cx = x; + cy = y; + } + this.tooltipPosition.moveXCrosshairs(cx); if (!this.fixedTooltip) { @@ -16790,21 +17873,27 @@ function () { ttItems: opt.ttItems, i: i, j: j, - shared: ttCtx.intersect ? false : w.config.tooltip.shared + shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared }); - ttCtx.marker.enlargeCurrentPoint(j, opt.paths); + + if (e.type === 'mouseup') { + ttCtx.markerClick(e, i, j); + } + x = cx; - y = cy - ttCtx.tooltipRect.ttHeight * 1.4; + y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; if (ttCtx.w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top; + y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; } if (val < 0) { y = cy; } + + ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); } return { @@ -16834,7 +17923,7 @@ function () { var barHeight = barXY.barHeight; var j = barXY.j; - if (ttCtx.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { + if (w.globals.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { x = barXY.x; y = barXY.y; strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; // bW = barXY.barWidth @@ -16878,16 +17967,16 @@ function () { } // move tooltip here - if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || ttCtx.isBarHorizontal && ttCtx.hasBars())) { + if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.hasBars())) { if (isReversed) { x = w.globals.gridWidth - x; } tooltipEl.style.left = x + w.globals.translateX + 'px'; var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex')); - var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; + var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; - if (isReversed && !(ttCtx.isBarHorizontal && ttCtx.hasBars())) { + if (isReversed && !(w.globals.isBarHorizontal && ttCtx.hasBars())) { y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; } @@ -16914,7 +18003,7 @@ function () { var barHeight = 0; var cl = e.target.classList; - if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area')) { + if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { var bar = e.target; var barRect = bar.getBoundingClientRect(); var seriesBound = opt.elGrid.getBoundingClientRect(); @@ -16946,7 +18035,7 @@ function () { }); if (w.config.tooltip.followCursor) { - if (w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { x = clientX - seriesBound.left + 15; y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; } else { @@ -16959,7 +18048,7 @@ function () { y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; } } else { - if (w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { x = cx; if (x < ttCtx.xyRatios.baseLineInvertedY) { @@ -17029,7 +18118,7 @@ function () { if (xaxisTooltip === null) { ttCtx.xaxisTooltip = document.createElement('div'); - ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass); + ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.xaxisTooltip); ttCtx.xaxisTooltipText = document.createElement('div'); ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); @@ -17061,7 +18150,7 @@ function () { if (yaxisTooltip === null) { ttCtx.yaxisTooltip = document.createElement('div'); - ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass); + ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.yaxisTooltip); if (i === 0) ttCtx.yaxisTooltipText = []; ttCtx.yaxisTooltipText.push(document.createElement('div')); @@ -17113,7 +18202,7 @@ function () { } } - if (w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { ttCtx.xcrosshairsWidth = 0; } @@ -17168,19 +18257,19 @@ function () { this.ctx = ctx; this.w = ctx.w; var w = this.w; + this.tConfig = w.config.tooltip; this.tooltipUtil = new Utils$1(this); this.tooltipLabels = new Labels(this); this.tooltipPosition = new Position(this); this.marker = new Marker(this); this.intersect = new Intersect(this); this.axesTooltip = new AxesTooltip(this); - this.showOnIntersect = w.config.tooltip.intersect; - this.showTooltipTitle = w.config.tooltip.x.show; - this.fixedTooltip = w.config.tooltip.fixed.enabled; + this.showOnIntersect = this.tConfig.intersect; + this.showTooltipTitle = this.tConfig.x.show; + this.fixedTooltip = this.tConfig.fixed.enabled; this.xaxisTooltip = null; this.yaxisTTEls = null; - this.isBarHorizontal = w.config.plotOptions.bar.horizontal; - this.isBarShared = !w.config.plotOptions.bar.horizontal && w.config.tooltip.shared; + this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; } _createClass(Tooltip, [{ @@ -17214,7 +18303,7 @@ function () { var tooltipEl = document.createElement('div'); tooltipEl.classList.add('apexcharts-tooltip'); - tooltipEl.classList.add(w.config.tooltip.theme); + tooltipEl.classList.add(this.tConfig.theme); w.globals.dom.elWrap.appendChild(tooltipEl); if (w.globals.axisCharts) { @@ -17227,7 +18316,7 @@ function () { } // we forcefully set intersect true for these conditions - if (w.globals.comboCharts && !w.config.tooltip.shared || w.config.tooltip.intersect && !w.config.tooltip.shared || w.config.chart.type === 'bar' && !w.config.tooltip.shared) { + if (w.globals.comboCharts && !this.tConfig.shared || this.tConfig.intersect && !this.tConfig.shared || (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { this.showOnIntersect = true; } @@ -17244,14 +18333,14 @@ function () { if (this.showTooltipTitle) { this.tooltipTitle = document.createElement('div'); this.tooltipTitle.classList.add('apexcharts-tooltip-title'); - this.tooltipTitle.style.fontFamily = w.config.tooltip.style.fontFamily || w.config.chart.fontFamily; - this.tooltipTitle.style.fontSize = w.config.tooltip.style.fontSize; + this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; + this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; tooltipEl.appendChild(this.tooltipTitle); } var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared - if ((w.globals.xyCharts || w.globals.comboCharts) && w.config.tooltip.shared) { + if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { if (!this.showOnIntersect) { ttItemsCnt = w.globals.series.length; } else { @@ -17272,14 +18361,21 @@ function () { for (var i = 0; i < ttItemsCnt; i++) { var gTxt = document.createElement('div'); gTxt.classList.add('apexcharts-tooltip-series-group'); + + if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { + if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { + gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); + } + } + var point = document.createElement('span'); point.classList.add('apexcharts-tooltip-marker'); point.style.backgroundColor = w.globals.colors[i]; gTxt.appendChild(point); var gYZ = document.createElement('div'); gYZ.classList.add('apexcharts-tooltip-text'); - gYZ.style.fontFamily = w.config.tooltip.style.fontFamily || w.config.chart.fontFamily; - gYZ.style.fontSize = w.config.tooltip.style.fontSize; // y values group + gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; + gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group var gYValText = document.createElement('div'); gYValText.classList.add('apexcharts-tooltip-y-group'); @@ -17313,7 +18409,7 @@ function () { var w = this.w; var type = w.config.chart.type; var tooltipEl = this.getElTooltip(); - var barOrCandlestick = !!(type === 'bar' || type === 'candlestick'); + var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); var hoverArea = w.globals.dom.Paper.node; var elGrid = this.getElGrid(); @@ -17336,8 +18432,8 @@ function () { if (w.globals.axisCharts) { if (type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble') { points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); - } else if (barOrCandlestick) { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area', '.apexcharts-series .apexcharts-candlestick-area'); + } else if (commonBar) { + points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); } else if (type === 'heatmap') { points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); } else if (type === 'radar') { @@ -17352,11 +18448,11 @@ function () { } } - var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || barOrCandlestick && this.hasBars() && w.config.tooltip.shared; + var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.hasBars() && this.tConfig.shared; if (validSharedChartTypes) { this.addPathsEventListeners([hoverArea], seriesHoverParams); - } else if (barOrCandlestick && !w.globals.comboCharts) { + } else if (commonBar && !w.globals.comboCharts) { this.addBarsEventListeners(seriesHoverParams); } else if (type === 'bubble' || type === 'scatter' || type === 'radar' || this.showOnIntersect && (type === 'area' || type === 'line')) { this.addPointsEventsListeners(seriesHoverParams); @@ -17381,7 +18477,7 @@ function () { } // combo charts may have bars, so add event listeners here too - if (this.hasBars() && !w.config.tooltip.shared) { + if (this.hasBars() && !this.tConfig.shared) { this.addBarsEventListeners(seriesHoverParams); } } @@ -17394,14 +18490,14 @@ function () { var tooltipRect = tooltipEl.getBoundingClientRect(); var ttWidth = tooltipRect.width + 10; var ttHeight = tooltipRect.height + 10; - var x = w.config.tooltip.fixed.offsetX; - var y = w.config.tooltip.fixed.offsetY; + var x = this.tConfig.fixed.offsetX; + var y = this.tConfig.fixed.offsetY; - if (w.config.tooltip.fixed.position.toLowerCase().indexOf('right') > -1) { + if (this.tConfig.fixed.position.toLowerCase().indexOf('right') > -1) { x = x + w.globals.svgWidth - ttWidth + 10; } - if (w.config.tooltip.fixed.position.toLowerCase().indexOf('bottom') > -1) { + if (this.tConfig.fixed.position.toLowerCase().indexOf('bottom') > -1) { y = y + w.globals.svgHeight - ttHeight - 10; } @@ -17425,7 +18521,7 @@ function () { key: "addBarsEventListeners", value: function addBarsEventListeners(seriesHoverParams) { var w = this.w; - var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area'); + var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); this.addPathsEventListeners(bars, seriesHoverParams); } }, { @@ -17446,7 +18542,7 @@ function () { ttItems: opts.ttItems }; _this.w.globals.tooltipOpts = extendedOpts; - var events = ['mousemove', 'touchmove', 'mouseout', 'touchend']; + var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; events.map(function (ev) { return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { capture: false, @@ -17531,7 +18627,7 @@ function () { ttCtx.e = e; // highlight the current hovered bars if (ttCtx.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { - if (w.config.tooltip.onDatasetHover.highlightDataSeries) { + if (this.tConfig.onDatasetHover.highlightDataSeries) { var series = new Series(chartCtx); series.toggleSeriesOnHover(e, e.target.parentNode); } @@ -17577,15 +18673,24 @@ function () { return; } + if (Array.isArray(this.tConfig.enabledOnSeries)) { + var index = parseInt(opt.paths.getAttribute('index')); + + if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { + self.handleMouseOut(opt); + return; + } + } + var tooltipEl = this.getElTooltip(); var xcrosshairs = this.getElXCrosshairs(); - var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !this.isBarHorizontal && this.hasBars() && w.config.tooltip.shared || w.globals.comboCharts && this.hasBars; + var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.hasBars; - if (w.config.chart.type === 'bar' && this.isBarHorizontal && this.hasBars()) { + if (w.globals.isBarHorizontal && this.hasBars()) { isStickyTooltip = false; } - if (e.type === 'mousemove' || e.type === 'touchmove') { + if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { if (xcrosshairs !== null) { xcrosshairs.classList.add('active'); } @@ -17620,21 +18725,21 @@ function () { } if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { - if (w.config.tooltip.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { - this.create(self, capturedSeries, j, opt.ttItems); + if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { + this.create(e, self, capturedSeries, j, opt.ttItems); } else { - this.create(self, capturedSeries, j, opt.ttItems, false); + this.create(e, self, capturedSeries, j, opt.ttItems, false); } } else { if (this.tooltipUtil.isXoverlap(j)) { - self.create(self, 0, j, opt.ttItems); + self.create(e, self, 0, j, opt.ttItems); } } } else { // couldn't capture any series. check if shared X is same, // if yes, draw a grouped tooltip if (this.tooltipUtil.isXoverlap(j)) { - self.create(self, 0, j, opt.ttItems); + self.create(e, self, 0, j, opt.ttItems); } } } else { @@ -17690,20 +18795,7 @@ function () { var w = this.w; var rel = opt.paths.getAttribute('rel'); var tooltipEl = this.getElTooltip(); - var trX = 0; - var trY = 0; - var elPie = null; - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - - if (w.config.chart.type === 'radialBar') { - elPie = w.globals.dom.baseEl.querySelector('.apexcharts-radialbar'); - } else { - elPie = w.globals.dom.baseEl.querySelector('.apexcharts-pie'); - trX = parseInt(elPie.getAttribute('data:innerTranslateX')); - trY = parseInt(elPie.getAttribute('data:innerTranslateY')); - } - - var seriesBound = elPie.getBoundingClientRect(); + var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); if (e.type === 'mousemove' || e.type === 'touchmove') { tooltipEl.classList.add('active'); @@ -17712,17 +18804,9 @@ function () { i: parseInt(rel) - 1, shared: false }); - var x = clientX - seriesBound.left - tooltipRect.ttWidth / 2.2 + trX; - var y = e.clientY - seriesBound.top - tooltipRect.ttHeight / 2 - 15 + trY; - - if (x < 0) { - x = 0; - } else if (x + tooltipRect.ttWidth > w.globals.gridWidth) { - x = clientX - seriesBound.left - tooltipRect.ttWidth + trX; - } - - if (y < 0) y = tooltipRect.ttHeight + 20; - tooltipEl.style.left = x + w.globals.translateX + 'px'; + var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; + var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; + tooltipEl.style.left = x + 'px'; tooltipEl.style.top = y + 'px'; } else if (e.type === 'mouseout' || e.type === 'touchend') { tooltipEl.classList.remove('active'); @@ -17792,7 +18876,7 @@ function () { }, { key: "getElBars", value: function getElBars() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series'); + return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); } }, { key: "hasBars", @@ -17801,28 +18885,52 @@ function () { return bars.length > 0; } }, { - key: "create", - value: function create(context, capturedSeries, j, ttItems) { - var shared = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; + key: "markerClick", + value: function markerClick(e, seriesIndex, dataPointIndex) { var w = this.w; - var self = context; - if (shared === null) shared = w.config.tooltip.shared; + + if (typeof w.config.chart.events.markerClick === 'function') { + w.config.chart.events.markerClick(e, this.ctx, { + seriesIndex: seriesIndex, + dataPointIndex: dataPointIndex, + w: w + }); + } + + this.ctx.fireEvent('markerClick', [e, this.ctx, { + seriesIndex: seriesIndex, + dataPointIndex: dataPointIndex, + w: w + }]); + } + }, { + key: "create", + value: function create(e, context, capturedSeries, j, ttItems) { + var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; + var w = this.w; + var ttCtx = context; + + if (e.type === 'mouseup') { + this.markerClick(e, capturedSeries, j); + } + + if (shared === null) shared = this.tConfig.shared; var hasMarkers = this.hasMarkers(); var bars = this.getElBars(); if (shared) { - self.tooltipLabels.drawSeriesTexts({ + ttCtx.tooltipLabels.drawSeriesTexts({ ttItems: ttItems, i: capturedSeries, j: j, - shared: this.showOnIntersect ? false : w.config.tooltip.shared + shared: this.showOnIntersect ? false : this.tConfig.shared }); if (hasMarkers) { if (w.globals.markers.largestSize > 0) { - self.marker.enlargePoints(j); + ttCtx.marker.enlargePoints(j); } else { - self.tooltipPosition.moveDynamicPointsOnHover(j); + ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); } } @@ -17843,7 +18951,7 @@ function () { } } } else { - self.tooltipLabels.drawSeriesTexts({ + ttCtx.tooltipLabels.drawSeriesTexts({ shared: false, ttItems: ttItems, i: capturedSeries, @@ -17851,11 +18959,11 @@ function () { }); if (this.hasBars()) { - self.tooltipPosition.moveStickyTooltipOverBars(j); + ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); } if (hasMarkers) { - self.tooltipPosition.moveMarkers(capturedSeries, j); + ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); } } } @@ -18689,6 +19797,7 @@ function (_Toolbar) { } me.drawSelectionRect(selectionRect); + me.selectionDragging('resizing'); return selectionRect; } }, { @@ -18705,7 +19814,7 @@ function (_Toolbar) { timerInterval = 30; } - if (typeof w.config.chart.events.selection === 'function') { + if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { // a small debouncer is required when resizing to avoid freezing the chart clearTimeout(this.w.globals.selectionResizeTimer); this.w.globals.selectionResizeTimer = window.setTimeout(function () { @@ -18799,20 +19908,10 @@ function (_Toolbar) { } } - if (zoomtype === 'x') { - me.ctx._updateOptions({ - xaxis: xaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } else if (zoomtype === 'y') { - me.ctx._updateOptions({ - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } else { - me.ctx._updateOptions({ - xaxis: xaxis, - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } + me.ctx._updateOptions({ + xaxis: xaxis, + yaxis: yaxis + }, false, me.w.config.chart.animations.dynamicAnimation.enabled); if (typeof w.config.chart.events.zoomed === 'function') { toolbar.zoomCallback(xaxis, yaxis); @@ -18998,7 +20097,8 @@ function () { define(function () { return factory(root, root.document); }); - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object') { + /* below check fixes #412 */ + } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { module.exports = root.document ? factory(root, root.document) : function (w) { return factory(w, w.document); }; @@ -26120,7 +27220,7 @@ function styleInject(css, ref) { } } -var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #222;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n.apexcharts-zoom-icon.selected svg, \n.apexcharts-selection-icon.selected svg, \n.apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.apexcharts-selection-icon:not(.selected):hover svg,\n.apexcharts-zoom-icon:not(.selected):hover svg, \n.apexcharts-zoom-in-icon:hover svg, \n.apexcharts-zoom-out-icon:hover svg, \n.apexcharts-reset-zoom-icon:hover svg, \n.apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.apexcharts-menu-item:hover {\n background: #eee;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; +var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; styleInject(css); /* @@ -26600,24 +27700,23 @@ function () { }, { key: "initModules", value: function initModules() { - this.animations = new Animations(this.ctx); - this.annotations = new Annotations(this.ctx); + this.animations = new Animations(this); this.core = new Core(this.el, this); this.grid = new Grid(this); this.coreUtils = new CoreUtils(this); this.config = new Config({}); - this.crosshairs = new Crosshairs(this.ctx); + this.crosshairs = new Crosshairs(this); this.options = new Options(); - this.responsive = new Responsive(this.ctx); - this.series = new Series(this.ctx); - this.theme = new Theme(this.ctx); - this.formatters = new Formatters(this.ctx); - this.titleSubtitle = new TitleSubtitle(this.ctx); - this.legend = new Legend(this.ctx); - this.toolbar = new Toolbar(this.ctx); - this.dimensions = new Dimensions(this.ctx); - this.zoomPanSelection = new ZoomPanSelection(this.ctx); - this.w.globals.tooltip = new Tooltip(this.ctx); + this.responsive = new Responsive(this); + this.series = new Series(this); + this.theme = new Theme(this); + this.formatters = new Formatters(this); + this.titleSubtitle = new TitleSubtitle(this); + this.legend = new Legend(this); + this.toolbar = new Toolbar(this); + this.dimensions = new Dimensions(this); + this.zoomPanSelection = new ZoomPanSelection(this); + this.w.globals.tooltip = new Tooltip(this); } }, { key: "addEventListener", @@ -26696,14 +27795,15 @@ function () { this.series.handleNoData(); } - this.setupEventHandlers(); + this.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time + this.core.parseData(ser); // this is a good time to set theme colors first - this.theme.init(); // labelFormatters should be called before dimensions as in dimensions we need text labels width - // as markers accepts array, we need to setup global markers for easier access + this.theme.init(); // as markers accepts array, we need to setup global markers for easier access var markers = new Markers(this); - markers.setGlobalMarkerSize(); + markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width + this.formatters.setLabelFormatters(); this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area @@ -26759,6 +27859,7 @@ function () { me.series.handleNoData(); } + me.annotations = new Annotations(me); me.core.drawAxis(w.config.chart.type, graphData.xyRatios); me.grid = new Grid(me); @@ -26859,9 +27960,9 @@ function () { if (options$$1.series[0].data) { options$$1.series = options$$1.series.map(function (s, i) { return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i].name, - type: s.type, - data: s.data + name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, + type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, + data: s.data ? s.data : w.config.series[i] && w.config.series[i].data }); }); } // user updated the series via updateOptions() function. @@ -26887,6 +27988,12 @@ function () { if (w.globals.collapsedSeriesIndices.length > 0) { this.clearPreviousPaths(); } + /* update theme mode#459 */ + + + if (options$$1.theme) { + options$$1 = this.theme.updateThemeOptions(options$$1); + } return this._updateOptions(options$$1, redraw, animate, overwriteInitialConfig); } @@ -26962,10 +28069,11 @@ function () { key: "appendSeries", value: function appendSeries(newSerie) { var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var newSeries = this.w.config.series.slice(); newSeries.push(newSerie); this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate); + return this._updateSeries(newSeries, animate, overwriteInitialSeries); } /** * Private method to update Series. @@ -26991,14 +28099,21 @@ function () { var existingSeries; // axis charts - if (newSeries[0].data) { + if (w.globals.axisCharts) { existingSeries = newSeries.map(function (s, i) { return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i].name, - type: s.type, - data: s.data + name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, + type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, + data: s.data ? s.data : w.config.series[i] && w.config.series[i].data }); }); + + if (existingSeries.length === 0) { + existingSeries = [{ + data: [] + }]; + } + w.config.series = existingSeries; } else { // non-axis chart (pie/radialbar) @@ -27269,6 +28384,12 @@ function () { passive: true }); }); + eventList.forEach(function (event) { + document.addEventListener(event, function (e) { + w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; + w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; + }); + }); this.core.setupBrushHandler(); } }, { @@ -27398,12 +28519,6 @@ function () { throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); } } - }, { - key: "svgUrl", - value: function svgUrl() { - var exp = new Exports(this.ctx); - return exp.svgUrl(); - } }, { key: "dataURI", value: function dataURI() { @@ -27493,6 +28608,21 @@ function () { return chart.appendData.apply(chart, opts); } + case 'appendSeries': + { + return chart.appendSeries.apply(chart, opts); + } + + case 'toggleSeries': + { + return chart.toggleSeries.apply(chart, opts); + } + + case 'dataURI': + { + return chart.dataURI.apply(chart, opts); + } + case 'addXaxisAnnotation': { return chart.addXaxisAnnotation.apply(chart, opts); @@ -27508,11 +28638,21 @@ function () { return chart.addPointAnnotation.apply(chart, opts); } + case 'addText': + { + return chart.addText.apply(chart, opts); + } + case 'clearAnnotations': { return chart.clearAnnotations.apply(chart, opts); } + case 'paper': + { + return chart.paper.apply(chart, opts); + } + case 'destroy': { return chart.destroy(); diff --git a/static/libs/apexcharts/apexcharts.js b/static/libs/apexcharts/apexcharts.js index 0661f2fe2..fb27a20c6 100644 --- a/static/libs/apexcharts/apexcharts.js +++ b/static/libs/apexcharts/apexcharts.js @@ -1,5 +1,5 @@ /*! - * ApexCharts v3.6.2 + * ApexCharts v3.6.12 * (c) 2018-2019 Juned Chhipa * Released under the MIT License. */ @@ -196,6 +196,18 @@ key: "isObject", value: function isObject(item) { return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; + } + }, { + key: "listToArray", + value: function listToArray(list) { + var i, + array = []; + + for (i = 0; i < list.length; i++) { + array[i] = list[i]; + } + + return array; } // to extend defaults with user options // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 @@ -331,6 +343,34 @@ if (val === null) return val; return parseFloat(val); } + }, { + key: "noExponents", + value: function noExponents(val) { + var data = String(val).split(/[eE]/); + if (data.length == 1) return data[0]; + var z = '', + sign = val < 0 ? '-' : '', + str = data[0].replace('.', ''), + mag = Number(data[1]) + 1; + + if (mag < 0) { + z = sign + '0.'; + + while (mag++) { + z += '0'; + } + + return z + str.replace(/^\-/, ''); + } + + mag -= str.length; + + while (mag--) { + z += '0'; + } + + return str + z; + } }, { key: "getDimensions", value: function getDimensions(el) { @@ -547,56 +587,34 @@ _createClass(Filters, [{ key: "getDefaultFilter", - value: function getDefaultFilter(el) { + value: function getDefaultFilter(el, i) { var w = this.w; el.unfilter(true); var filter = new window.SVG.Filter(); filter.size('120%', '180%', '-5%', '-40%'); if (w.config.states.normal.filter !== 'none') { - this.applyFilter(el, w.config.states.normal.filter.type, w.config.states.normal.filter.value); + this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); } else { if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow); + this.dropShadow(el, w.config.chart.dropShadow, i); } } } }, { key: "addNormalFilter", - value: function addNormalFilter(el) { + value: function addNormalFilter(el, i) { var w = this.w; if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow); + this.dropShadow(el, w.config.chart.dropShadow, i); } - } - }, { - key: "addDesaturateFilter", - value: function addDesaturateFilter(el) { - var _this = this; - - var w = this.w; - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this.addShadow(add, shadowAttr); - } else { - filter = add; - } - - filter.colorMatrix('matrix', [0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 1.0, 0]).colorMatrix('saturate', 0); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); } // appends dropShadow to the filter object which can be chained with other filter effects }, { key: "addLightenFilter", - value: function addLightenFilter(el, attrs) { - var _this2 = this; + value: function addLightenFilter(el, i, attrs) { + var _this = this; var w = this.w; var intensity = attrs.intensity; @@ -612,7 +630,7 @@ var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { - filter = _this2.addShadow(add, shadowAttr); + filter = _this.addShadow(add, i, shadowAttr); } else { filter = add; } @@ -630,8 +648,8 @@ }, { key: "addDarkenFilter", - value: function addDarkenFilter(el, attrs) { - var _this3 = this; + value: function addDarkenFilter(el, i, attrs) { + var _this2 = this; var w = this.w; var intensity = attrs.intensity; @@ -647,7 +665,7 @@ var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { - filter = _this3.addShadow(add, shadowAttr); + filter = _this2.addShadow(add, i, shadowAttr); } else { filter = add; } @@ -663,19 +681,19 @@ } }, { key: "applyFilter", - value: function applyFilter(el, filter) { - var intensity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5; + value: function applyFilter(el, i, filter) { + var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; switch (filter) { case 'none': { - this.addNormalFilter(el); + this.addNormalFilter(el, i); break; } case 'lighten': { - this.addLightenFilter(el, { + this.addLightenFilter(el, i, { intensity: intensity }); break; @@ -683,18 +701,12 @@ case 'darken': { - this.addDarkenFilter(el, { + this.addDarkenFilter(el, i, { intensity: intensity }); break; } - case 'desaturate': - { - this.addDesaturateFilter(el); - break; - } - default: // do nothing break; @@ -703,13 +715,13 @@ }, { key: "addShadow", - value: function addShadow(add, attrs) { + value: function addShadow(add, i, attrs) { var blur = attrs.blur, top = attrs.top, left = attrs.left, color = attrs.color, opacity = attrs.opacity; - var shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); + var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); return add.blend(add.source, shadowBlur); } // directly adds dropShadow to the element and returns the same element. // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow @@ -717,6 +729,7 @@ }, { key: "dropShadow", value: function dropShadow(el, attrs) { + var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var top = attrs.top, left = attrs.left, blur = attrs.blur, @@ -724,6 +737,7 @@ opacity = attrs.opacity, noUserSpaceOnUse = attrs.noUserSpaceOnUse; el.unfilter(true); + color = Array.isArray(color) ? color[i] : color; var filter = new window.SVG.Filter(); filter.size('120%', '180%', '-5%', '-40%'); el.filter(function (add) { @@ -756,7 +770,7 @@ var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { - this.applyFilter(el, activeFilter.type, activeFilter.value); + this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); } } } @@ -1212,7 +1226,9 @@ _ref2$shouldClipToGri = _ref2.shouldClipToGrid, shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, - bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat; + bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, + _ref2$drawShadow = _ref2.drawShadow, + drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; var w = this.w; var filters = new Filters(this.ctx); var anim = new Animations(this.ctx); @@ -1258,12 +1274,12 @@ if (w.config.states.normal.filter.type !== 'none') { - filters.getDefaultFilter(el, w.config.states.normal.filter.type, w.config.states.normal.filter.value); + filters.getDefaultFilter(el, realIndex); } else { - if (w.config.chart.dropShadow.enabled) { + if (w.config.chart.dropShadow.enabled && drawShadow) { if (!w.config.chart.dropShadow.enabledSeries || w.config.chart.dropShadow.enabledSeries && w.config.chart.dropShadow.enabledSeries.indexOf(realIndex) !== -1) { var shadow = w.config.chart.dropShadow; - filters.dropShadow(el, shadow); + filters.dropShadow(el, shadow, realIndex); } } } @@ -1431,6 +1447,7 @@ fontFamily = opts.fontFamily, foreColor = opts.foreColor, opacity = opts.opacity; + if (typeof text === 'undefined') text = ''; if (!textAnchor) { textAnchor = 'start'; @@ -1457,7 +1474,7 @@ x: x, y: y, 'text-anchor': textAnchor, - 'dominant-baseline': 'central', + 'dominant-baseline': 'auto', 'font-size': fontSize, 'font-family': fontFamily, fill: foreColor, @@ -1560,7 +1577,7 @@ if (w.config.states.hover.filter.type !== 'none') { if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { var hoverFilter = w.config.states.hover.filter; - filters.applyFilter(path, hoverFilter.type, hoverFilter.value); + filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); } } } @@ -1593,7 +1610,7 @@ } if (w.config.states.hover.filter.type !== 'none') { - filters.getDefaultFilter(path); + filters.getDefaultFilter(path, i); } } }, { @@ -1619,11 +1636,11 @@ var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; elPaths.forEach(function (elPath) { elPath.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(elPath); + filters.getDefaultFilter(elPath, i); }); elCircles.forEach(function (circle) { circle.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(circle); + filters.getDefaultFilter(circle, i); }); } @@ -1641,11 +1658,11 @@ var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { - filters.applyFilter(path, activeFilter.type, activeFilter.value); + filters.applyFilter(path, i, activeFilter.type, activeFilter.value); } } else { if (w.config.states.active.filter.type !== 'none') { - filters.getDefaultFilter(path); + filters.getDefaultFilter(path, i); } } @@ -1833,13 +1850,14 @@ max: undefined, min: undefined, floating: false, - decimalsInFloat: 2, + decimalsInFloat: undefined, labels: { show: true, minWidth: 0, maxWidth: 160, offsetX: 0, offsetY: 0, + align: undefined, rotate: 0, padding: 20, style: { @@ -2045,6 +2063,7 @@ updated: undefined, click: undefined, legendClick: undefined, + markerClick: undefined, selection: undefined, dataPointSelection: undefined, dataPointMouseEnter: undefined, @@ -2056,6 +2075,7 @@ foreColor: '#373d3f', fontFamily: 'Helvetica, Arial, sans-serif', height: 'auto', + parentHeightOffset: 15, id: undefined, group: undefined, offsetX: 0, @@ -2130,19 +2150,20 @@ plotOptions: { bar: { horizontal: false, - endingShape: 'flat', - // TODO: deprecate in 4.0 columnWidth: '70%', // should be in percent 0 - 100 barHeight: '70%', // should be in percent 0 - 100 distributed: false, + endingShape: 'flat', colors: { ranges: [], backgroundBarColors: [], backgroundBarOpacity: 1 }, dataLabels: { + maxItems: 100, + hideOverflowingLabels: true, position: 'top' // top, center, bottom // TODO: provide stackedLabels for stacked charts which gives additions of values @@ -2161,6 +2182,7 @@ radius: 2, enableShades: true, shadeIntensity: 0.5, + reverseNegativeShade: true, distributed: false, colorScale: { inverse: false, @@ -2236,7 +2258,7 @@ total: { show: false, label: 'Total', - color: '#373d3f', + color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; @@ -2245,6 +2267,7 @@ } } }, + rangeBar: {}, pie: { size: undefined, customScale: 1, @@ -2253,8 +2276,9 @@ expandOnClick: true, dataLabels: { // These are the percentage values which are displayed on slice - offset: 0 // offset by which labels will move outside - + offset: 0, + // offset by which labels will move outside + minAngleToShowLabel: 10 }, donut: { size: '65%', @@ -2282,7 +2306,7 @@ total: { show: false, label: 'Total', - color: '#373d3f', + color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; @@ -2375,7 +2399,7 @@ yaxis: { lines: { show: true, - animate: true + animate: false } }, row: { @@ -2534,6 +2558,7 @@ }, tooltip: { enabled: true, + enabledOnSeries: undefined, shared: true, followCursor: false, // when disabled, the tooltip will show on top of the series instead of mouse position @@ -2693,6 +2718,7 @@ }, yaxis: this.yAxis, theme: { + mode: 'light', palette: 'palette1', // If defined, it will overwrite globals.colors variable monochrome: { @@ -2726,7 +2752,7 @@ this.w = ctx.w; this.graphics = new Graphics(this.ctx); - if (this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal) { + if (this.w.globals.isBarHorizontal) { this.invertAxis = true; } @@ -2757,11 +2783,9 @@ el: annoElArray[i], index: 0 }); - } // after placing the annotations on svg, set any vertically placed annotations + } // background sizes needs to be calculated after text is drawn, so calling them last - this.setOrientations(w.config.annotations.xaxis); // background sizes needs to be calculated after text is drawn, so calling them last - this.annotationsBackground(); } } @@ -2772,11 +2796,15 @@ var min = this.invertAxis ? w.globals.minY : w.globals.minX; var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; var x1 = (anno.x - min) / (range / w.globals.gridWidth); + var text = anno.label.text; if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { var catIndex = w.globals.labels.indexOf(anno.x); var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - x1 = parseFloat(xLabel.getAttribute('x')); + + if (xLabel) { + x1 = parseFloat(xLabel.getAttribute('x')); + } } var strokeDashArray = anno.strokeDashArray; @@ -2800,22 +2828,23 @@ x2 = temp; } - var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x2 - x1, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); + if (text) { + var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 + 0 + anno.offsetY, // y1 + x2 - x1, // x2 + w.globals.gridHeight + anno.offsetY, // y2 + 0, // radius + anno.fillColor, // color + anno.opacity, // opacity, + 1, // strokeWidth + anno.borderColor, // strokeColor + strokeDashArray // stokeDashArray + ); + parent.appendChild(rect.node); + } } var textY = anno.label.position === 'top' ? -3 : w.globals.gridHeight; - var text = anno.label.text ? anno.label.text : ''; var elText = this.graphics.drawText({ x: x1 + anno.label.offsetX, y: textY + anno.label.offsetY, @@ -2829,7 +2858,9 @@ elText.attr({ rel: index }); - parent.appendChild(elText.node); + parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations + + this.setOrientations(anno, index); } }, { key: "drawXAxisAnnotations", @@ -2856,16 +2887,19 @@ if (this.invertAxis) { var catIndex = w.globals.labels.indexOf(anno.y); var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - y1 = parseFloat(xLabel.getAttribute('y')); + + if (xLabel) { + y1 = parseFloat(xLabel.getAttribute('y')); + } } else { y1 = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y1 = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } - var text = anno.label.text ? anno.label.text : ''; + var text = anno.label.text; if (anno.y2 === null) { var line = this.graphics.drawLine(0 + anno.offsetX, // x1 @@ -2882,11 +2916,13 @@ var _xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (_catIndex + 1) + ')'); - y2 = parseFloat(_xLabel.getAttribute('y')); + if (_xLabel) { + y2 = parseFloat(_xLabel.getAttribute('y')); + } } else { y2 = w.globals.gridHeight - (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y2 = (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } @@ -2897,18 +2933,20 @@ y2 = temp; } - var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 - y2 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 - y2, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); + if (text) { + var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 + y2 + anno.offsetY, // y1 + w.globals.gridWidth + anno.offsetX, // x2 + y1 - y2, // y2 + 0, // radius + anno.fillColor, // color + anno.opacity, // opacity, + 1, // strokeWidth + anno.borderColor, // strokeColor + strokeDashArray // stokeDashArray + ); + parent.appendChild(rect.node); + } } var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; @@ -2946,6 +2984,7 @@ value: function clearAnnotations(ctx) { var w = ctx.w; var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); + annos = Utils.listToArray(annos); annos.forEach(function (a) { while (a.firstChild) { a.removeChild(a.firstChild); @@ -2978,7 +3017,7 @@ y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseInt(anno.label.style.fontSize) + anno.marker.size; pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } @@ -2987,7 +3026,7 @@ y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - if (w.config.yaxis[anno.yAxisIndex].reversed) { + if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } @@ -3048,39 +3087,36 @@ } }, { key: "setOrientations", - value: function setOrientations(annos) { - var _this4 = this; - + value: function setOrientations(anno) { var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var w = this.w; - annos.map(function (anno, index) { - if (anno.label.orientation === 'vertical') { - var i = annoIndex !== null ? annoIndex : index; - var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - if (xAnno !== null) { - var xAnnoCoord = xAnno.getBoundingClientRect(); - xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); + if (anno.label.orientation === 'vertical') { + var i = annoIndex !== null ? annoIndex : 0; + var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - if (anno.label.position === 'top') { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); - } else { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); - } + if (xAnno !== null) { + var xAnnoCoord = xAnno.getBoundingClientRect(); + xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); - var annoRotatingCenter = _this4.graphics.rotateAroundCenter(xAnno); - - var x = annoRotatingCenter.x; - var y = annoRotatingCenter.y; - xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); + if (anno.label.position === 'top') { + xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); + } else { + xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); } + + var annoRotatingCenter = this.graphics.rotateAroundCenter(xAnno); + var x = annoRotatingCenter.x; + var y = annoRotatingCenter.y; + xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); } - }); + } } }, { key: "addBackgroundToAnno", value: function addBackgroundToAnno(annoEl, anno) { var w = this.w; + if (!anno.label.text) return null; var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); var coords = annoEl.getBoundingClientRect(); var pleft = anno.label.style.padding.left; @@ -3103,7 +3139,7 @@ }, { key: "annotationsBackground", value: function annotationsBackground() { - var _this5 = this; + var _this4 = this; var w = this.w; @@ -3113,9 +3149,11 @@ if (annoLabel) { var parent = annoLabel.parentNode; - var elRect = _this5.addBackgroundToAnno(annoLabel, anno); + var elRect = _this4.addBackgroundToAnno(annoLabel, anno); - parent.insertBefore(elRect.node, annoLabel); + if (elRect) { + parent.insertBefore(elRect.node, annoLabel); + } } }; @@ -3170,8 +3208,11 @@ }); parentNode.appendChild(elText.node); var textRect = elText.bbox(); - var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); - elText.before(elRect); + + if (text) { + var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); + elText.before(elRect); + } if (pushToMemory) { w.globals.memory.methodsToExec.push({ @@ -3204,6 +3245,10 @@ }, { key: "addPointAnnotationExternal", value: function addPointAnnotationExternal(params, pushToMemory, context) { + if (typeof this.invertAxis === 'undefined') { + this.invertAxis = context.w.globals.isBarHorizontal; + } + this.addAnnotationExternal({ params: params, pushToMemory: pushToMemory, @@ -3271,7 +3316,10 @@ var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); var elRect = this.addBackgroundToAnno(axesAnnoLabel, anno); - parent.insertBefore(elRect.node, axesAnnoLabel); + + if (elRect) { + parent.insertBefore(elRect.node, axesAnnoLabel); + } if (pushToMemory) { w.globals.memory.methodsToExec.push({ @@ -3288,6 +3336,244 @@ return Annotations; }(); + /** + * DateTime Class to manipulate datetime values. + * + * @module DateTime + **/ + + var DateTime = + /*#__PURE__*/ + function () { + function DateTime(ctx) { + _classCallCheck(this, DateTime); + + this.ctx = ctx; + this.w = ctx.w; + this.months31 = [1, 3, 5, 7, 8, 10, 12]; + this.months30 = [2, 4, 6, 9, 11]; + this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + } + + _createClass(DateTime, [{ + key: "isValidDate", + value: function isValidDate(date) { + return !isNaN(this.parseDate(date)); + } + }, { + key: "getUTCTimeStamp", + value: function getUTCTimeStamp(dateStr) { + if (!Date.parse(dateStr)) { + return dateStr; + } + + return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); + } + }, { + key: "parseDate", + value: function parseDate(dateStr) { + var parsed = Date.parse(dateStr); + + if (!isNaN(parsed)) { + return this.getUTCTimeStamp(dateStr); + } + + var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); + output = this.getUTCTimeStamp(output); + return output; + } // https://stackoverflow.com/a/11252167/6495043 + + }, { + key: "treatAsUtc", + value: function treatAsUtc(dateStr) { + var result = new Date(dateStr); + result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); + return result; + } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 + + }, { + key: "formatDate", + value: function formatDate(date, format) { + var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var locale = this.w.globals.locale; + var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); + var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); + var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); + var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); + + function ii(i, len) { + var s = i + ''; + len = len || 2; + + while (s.length < len) { + s = '0' + s; + } + + return s; + } + + if (convertToUTC) { + date = this.treatAsUtc(date); + } + + var y = utc ? date.getUTCFullYear() : date.getFullYear(); + format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); + format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); + format = format.replace(/(^|[^\\])y/g, '$1' + y); + var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; + format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); + format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); + format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); + format = format.replace(/(^|[^\\])M/g, '$1' + M); + var d = utc ? date.getUTCDate() : date.getDate(); + format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); + format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); + format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); + format = format.replace(/(^|[^\\])d/g, '$1' + d); + var H = utc ? date.getUTCHours() : date.getHours(); + format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); + format = format.replace(/(^|[^\\])H/g, '$1' + H); + var h = H > 12 ? H - 12 : H === 0 ? 12 : H; + format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); + format = format.replace(/(^|[^\\])h/g, '$1' + h); + var m = utc ? date.getUTCMinutes() : date.getMinutes(); + format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); + format = format.replace(/(^|[^\\])m/g, '$1' + m); + var s = utc ? date.getUTCSeconds() : date.getSeconds(); + format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); + format = format.replace(/(^|[^\\])s/g, '$1' + s); + var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); + format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); + f = Math.round(f / 10); + format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); + f = Math.round(f / 10); + format = format.replace(/(^|[^\\])f/g, '$1' + f); + var T = H < 12 ? 'AM' : 'PM'; + format = format.replace(/(^|[^\\])TT+/g, '$1' + T); + format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); + var t = T.toLowerCase(); + format = format.replace(/(^|[^\\])tt+/g, '$1' + t); + format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); + var tz = -date.getTimezoneOffset(); + var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; + + if (!utc) { + tz = Math.abs(tz); + var tzHrs = Math.floor(tz / 60); + var tzMin = tz % 60; + K += ii(tzHrs) + ':' + ii(tzMin); + } + + format = format.replace(/(^|[^\\])K/g, '$1' + K); + var day = (utc ? date.getUTCDay() : date.getDay()) + 1; + format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); + format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); + format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); + format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); + format = format.replace(/\\(.)/g, '$1'); + return format; + } + }, { + key: "getTimeUnitsfromTimestamp", + value: function getTimeUnitsfromTimestamp(minX, maxX) { + var w = this.w; + + if (w.config.xaxis.min !== undefined) { + minX = w.config.xaxis.min; + } + + if (w.config.xaxis.max !== undefined) { + maxX = w.config.xaxis.max; + } + + var minYear = new Date(minX).getFullYear(); + var maxYear = new Date(maxX).getFullYear(); + var minMonth = new Date(minX).getMonth(); + var maxMonth = new Date(maxX).getMonth(); + var minDate = new Date(minX).getDate(); + var maxDate = new Date(maxX).getDate(); + var minHour = new Date(minX).getHours(); + var maxHour = new Date(maxX).getHours(); + var minMinute = new Date(minX).getMinutes(); + var maxMinute = new Date(maxX).getMinutes(); + return { + minMinute: minMinute, + maxMinute: maxMinute, + minHour: minHour, + maxHour: maxHour, + minDate: minDate, + maxDate: maxDate, + minMonth: minMonth, + maxMonth: maxMonth, + minYear: minYear, + maxYear: maxYear + }; + } + }, { + key: "isLeapYear", + value: function isLeapYear(year) { + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; + } + }, { + key: "calculcateLastDaysOfMonth", + value: function calculcateLastDaysOfMonth(month, year, subtract) { + var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked + + return days - subtract; + } + }, { + key: "determineDaysOfYear", + value: function determineDaysOfYear(year) { + var days = 365; + + if (this.isLeapYear(year)) { + days = 366; + } + + return days; + } + }, { + key: "determineRemainingDaysOfYear", + value: function determineRemainingDaysOfYear(year, month, date) { + var dayOfYear = this.daysCntOfYear[month] + date; + if (month > 1 && this.isLeapYear()) dayOfYear++; + return dayOfYear; + } + }, { + key: "determineDaysOfMonths", + value: function determineDaysOfMonths(month, year) { + var days = 30; + month = Utils.monthMod(month); + + switch (true) { + case this.months30.indexOf(month) > -1: + if (month === 2) { + if (this.isLeapYear(year)) { + days = 29; + } else { + days = 28; + } + } + + break; + + case this.months31.indexOf(month) > -1: + days = 31; + break; + + default: + days = 31; + break; + } + + return days; + } + }]); + + return DateTime; + }(); + /** * ApexCharts Default Class for setting default options for all chart types. * @@ -3471,6 +3757,79 @@ } }; } + }, { + key: "rangeBar", + value: function rangeBar() { + return { + stroke: { + width: 0 + }, + plotOptions: { + bar: { + dataLabels: { + position: 'center' + } + } + }, + dataLabels: { + enabled: false, + formatter: function formatter(val, _ref2) { + var ctx = _ref2.ctx, + seriesIndex = _ref2.seriesIndex, + dataPointIndex = _ref2.dataPointIndex, + w = _ref2.w; + var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; + var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; + return end - start; + }, + style: { + colors: ['#fff'] + } + }, + tooltip: { + shared: false, + followCursor: true, + custom: function custom(_ref3) { + var ctx = _ref3.ctx, + seriesIndex = _ref3.seriesIndex, + dataPointIndex = _ref3.dataPointIndex, + w = _ref3.w; + var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; + var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; + var startVal = ''; + var endVal = ''; + var color = w.globals.colors[seriesIndex]; + + if (w.config.tooltip.x.formatter === undefined) { + if (w.config.xaxis.type === 'datetime') { + var datetimeObj = new DateTime(ctx); + startVal = datetimeObj.formatDate(new Date(start), w.config.tooltip.x.format, true, true); + endVal = datetimeObj.formatDate(new Date(end), w.config.tooltip.x.format, true, true); + } else { + startVal = start; + endVal = end; + } + } else { + startVal = w.config.tooltip.x.formatter(start); + endVal = w.config.tooltip.x.formatter(end); + } + + var ylabel = w.globals.labels[dataPointIndex]; + return '
' + '
' + (w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '') + '
' + '
' + ylabel + ': ' + startVal + ' - ' + endVal + '
' + '
'; + } + }, + xaxis: { + tooltip: { + enabled: false + }, + crosshairs: { + stroke: { + width: 0 + } + } + } + }; + } }, { key: "area", value: function area() { @@ -3858,7 +4217,7 @@ opts.xaxis.categories = []; opts.labels = []; - opts.chart.zoom.enabled = false; + opts.chart.zoom.enabled = opts.chart.zoom.enabled || false; return opts; } }]); @@ -4088,21 +4447,22 @@ if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { // Negative numbers present in series gl.hasNegs = true; + } + + if (gl.isMultipleYAxis) { baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives - if (gl.isMultipleYAxis) { - for (var _i2 = 0; _i2 < yRatio.length; _i2++) { - baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); - } - } else { - baseLineY.push(-gl.minY / yRatio[0]); + for (var _i2 = 0; _i2 < yRatio.length; _i2++) { + baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); } - - baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart - - baseLineX = gl.minX / xRatio; } else { - baseLineY.push(0); + baseLineY.push(-gl.minY / yRatio[0]); + + if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { + baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart + + baseLineX = gl.minX / xRatio; + } } return { @@ -4272,6 +4632,10 @@ chartDefaults = defaults.candlestick(); break; + case 'rangeBar': + chartDefaults = defaults.rangeBar(); + break; + case 'histogram': chartDefaults = defaults.bar(); break; @@ -4314,12 +4678,17 @@ if (opts.chart.stacked && opts.chart.stackType === '100%') { defaults.stacked100(); - } + } // If user has specified a dark theme, make the tooltip dark too + + + this.checkForDarkTheme(window.Apex); // check global window Apex options + + this.checkForDarkTheme(opts); // check locally passed options opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; var combo = CoreUtils.checkComboSeries(opts.series); - if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.tickPlacement !== 'between') { + if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric' && opts.xaxis.tickPlacement !== 'between') { opts = Defaults.convertCatToNumeric(opts); } @@ -4402,6 +4771,27 @@ opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); return opts; } + }, { + key: "checkForDarkTheme", + value: function checkForDarkTheme(opts) { + if (opts.theme && opts.theme.mode === 'dark') { + if (!opts.tooltip) { + opts.tooltip = {}; + } + + if (opts.tooltip.theme !== 'light') { + opts.tooltip.theme = 'dark'; + } + + if (!opts.chart.foreColor) { + opts.chart.foreColor = '#f6f7f8'; + } + + if (!opts.theme.palette) { + opts.theme.palette = 'palette4'; + } + } + } }, { key: "checkEmptySeries", value: function checkEmptySeries(ser) { @@ -4426,16 +4816,12 @@ console.warn('Scroller has been deprecated since v2.0.0. Please remove the configuration for chart.scroller'); } - if (config.chart.type === 'bar' && config.plotOptions.bar.horizontal) { - // No time series for horizontal bars - if (config.xaxis.type === 'datetime') { - throw new Error('Timelines on bars are not supported yet. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } // No multiple yaxis for bars - - + if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { + // No multiple yaxis for bars if (config.yaxis.length > 1) { throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } + } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side + if (config.yaxis[0].reversed) { config.yaxis[0].opposite = true; @@ -4448,7 +4834,7 @@ config.chart.zoom.enabled = false; // no zooming for horz bars } - if (config.chart.type === 'bar') { + if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { if (config.tooltip.shared) { if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); @@ -4457,10 +4843,11 @@ if (config.plotOptions.bar.horizontal) { config.states.hover.type = 'none'; + config.tooltip.shared = false; } if (!config.tooltip.followCursor) { - console.warn('followCursor option in shared columns cannot be turned off.'); + console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); config.tooltip.followCursor = true; } } @@ -4518,6 +4905,8 @@ scrolled: [] }, colors: [], + clientX: null, + clientY: null, fill: { colors: [] }, @@ -4549,6 +4938,10 @@ lastYAxis: [], series: [], // the MAIN series array (y values) + seriesRangeStart: [], + // the clone of series becomes the start in range + seriesRangeEnd: [], + // the end values in range chart seriesPercent: [], // the percentage values of the given series seriesTotals: [], @@ -4562,6 +4955,8 @@ // Don't mutate the labels, many things including tooltips depends on it! timelineLabels: [], // store the timeline Labels in another variable + invertedTimelineLabels: [], + // for rangebar timeline seriesNames: [], // same as labels, used in non axis charts noLabelsProvided: false, @@ -4574,9 +4969,11 @@ ancillaryCollapsedSeries: [], // when user collapses an "alwaysVisible" series, it goes into this array ancillaryCollapsedSeriesIndices: [], - // this stores the index of the collapsedSeries whose y-axis is always visible + // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible risingSeries: [], // when user re-opens a collapsed series, it goes here + dataFormatXNumeric: false, + // boolean value to indicate user has passed numeric x values selectedDataPoints: [], ignoreYAxisIndexes: [], // when series are being collapsed in multiple y axes, ignore certain index @@ -4604,6 +5001,7 @@ // Max Z value in charts with Z axis maxZ: -Number.MAX_VALUE, // Max Z value in charts with Z axis + minXDiff: Number.MAX_VALUE, mousedown: false, lastClientPosition: {}, // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning @@ -4640,6 +5038,8 @@ methodsToExec: [] }, shouldAnimate: true, + skipLastTimelinelabel: false, + // when last label is cropped, skip drawing it delayedElements: [], // element which appear after animation has finished axisCharts: true, @@ -4861,6 +5261,15 @@ this.seriesIndex = this.getSeriesIndex(opts); var fillColors = this.getFillColors(); var fillColor = fillColors[this.seriesIndex]; + + if (typeof fillColor === 'function') { + fillColor = fillColor({ + seriesIndex: this.seriesIndex, + value: opts.value, + w: w + }); + } + var fillType = this.getFillType(this.seriesIndex); var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; var defaultColor = fillColor; @@ -5075,6 +5484,7 @@ var _this = this; var w = this.w; + var i = seriesIndex; var p = pointsPos; var elPointsWrap = null; var graphics = new Graphics(this.ctx); @@ -5118,6 +5528,17 @@ opts.pSize = marker.size; } }); + + if (w.config.series[i].data[j]) { + if (w.config.series[i].data[j].fillColor) { + opts.pointFillColor = w.config.series[i].data[j].fillColor; + } + + if (w.config.series[i].data[j].strokeColor) { + opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; + } + } + point = graphics.drawMarker(p.x[q], p.y[q], opts); point.attr('rel', dataPointIndex); point.attr('j', dataPointIndex); @@ -5273,29 +5694,37 @@ key: "drawPoint", value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { var w = this.w; + var i = realIndex; var anim = new Animations(this.ctx); var filters = new Filters(this.ctx); var fill = new Fill(this.ctx); + var markers = new Markers(this.ctx); var graphics = new Graphics(this.ctx); + var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); var pathFillCircle = fill.fillPath({ seriesNumber: realIndex, - patternUnits: 'objectBoundingBox' + patternUnits: 'objectBoundingBox', + value: w.globals.series[realIndex][j] }); var circle = graphics.drawCircle(radius); + + if (w.config.series[i].data[dataPointIndex]) { + if (w.config.series[i].data[dataPointIndex].fillColor) { + pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; + } + } + circle.attr({ cx: x, cy: y, - fill: pathFillCircle + fill: pathFillCircle, + stroke: markerConfig.pointStrokeColor, + strokeWidth: markerConfig.pWidth }); if (w.config.chart.dropShadow.enabled) { - filters.dropShadow(circle, { - top: w.config.chart.dropShadow.top, - left: w.config.chart.dropShadow.left, - blur: w.config.chart.dropShadow.blur, - color: w.config.chart.dropShadow.color, - opacity: w.config.chart.dropShadow.opacity - }); + var dropShadow = w.config.chart.dropShadow; + filters.dropShadow(circle, dropShadow, realIndex); } if (this.initialAnim && !w.globals.dataChanged) { @@ -5352,7 +5781,6 @@ index: realIndex, 'default-marker-size': finishRadius }); - var markers = new Markers(this.ctx); filters.setSelectionFilter(circle, realIndex, dataPointIndex); markers.addEvents(circle); circle.node.classList.add('apexcharts-marker'); @@ -5436,6 +5864,7 @@ }, { key: "drawDataLabel", value: function drawDataLabel(pos, i, j) { + var align = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'top'; // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions // all other charts like bars / heatmaps will define their own drawDataLabel routine var w = this.w; @@ -5459,6 +5888,10 @@ x = pos.x[q] + dataLabelsConfig.offsetX; y = pos.y[q] + dataLabelsConfig.offsetY - w.globals.markers.size[i] - 5; + if (align === 'bottom') { + y = y + w.globals.markers.size[i] * 2 + parseInt(dataLabelsConfig.style.fontSize) * 1.4; + } + if (!isNaN(x)) { // a small hack as we have 2 points for the first val to connect it if (j === 1 && q === 0) dataPointIndex = 0; @@ -5473,8 +5906,9 @@ var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); y = centerTextInBubbleCoords.y; } else { - if (typeof val !== 'undefined') { + if (typeof val !== 'undefined' && val !== null) { text = w.config.dataLabels.formatter(val, { + ctx: this.ctx, seriesIndex: i, dataPointIndex: dataPointIndex, w: w @@ -5580,8 +6014,6 @@ * @module Bar **/ - var DATA_LABELS_WARNING_THRESHOLD = 50; - var Bar = /*#__PURE__*/ function () { @@ -5606,7 +6038,6 @@ this.baseLineInvertedY = xyRatios.baseLineInvertedY; } - this.minXDiff = Number.MAX_VALUE; this.yaxisIndex = 0; this.seriesLen = 0; } @@ -5621,28 +6052,24 @@ _createClass(Bar, [{ key: "draw", value: function draw(series, seriesIndex) { - var _this = this; - var w = this.w; var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); + this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.initVariables(series); var ret = graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); if (w.config.dataLabels.enabled) { - if (this.totalItems > DATA_LABELS_WARNING_THRESHOLD) { + if (this.totalItems > w.config.plotOptions.bar.dataLabels.maxItems) { console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); } } - var _loop = function _loop(i, bc) { + for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, pathFrom = void 0; var x = void 0, @@ -5662,29 +6089,27 @@ var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + class: "apexcharts-series", rel: i + 1, + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), 'data:realIndex': realIndex }); - - _this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); + this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); if (series[i].length > 0) { - _this.visibleI = _this.visibleI + 1; + this.visibleI = this.visibleI + 1; } var strokeWidth = 0; var barHeight = 0; var barWidth = 0; - if (_this.yRatio.length > 1) { - _this.yaxisIndex = realIndex; + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; } - _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; - - var initPositions = _this.initialPositions(); - + this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; + var initPositions = this.initialPositions(); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; @@ -5694,7 +6119,7 @@ xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; - if (!_this.horizontal) { + if (!this.horizontal) { xArrj.push(x + barWidth / 2); } // eldatalabels @@ -5703,25 +6128,25 @@ class: 'apexcharts-datalabels' }); - var _loop2 = function _loop2(j, tj) { - if (typeof _this.series[i][j] === 'undefined' || series[i][j] === null) { - _this.isNullValue = true; + for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { + if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { + this.isNullValue = true; } else { - _this.isNullValue = false; + this.isNullValue = false; } if (w.config.stroke.show) { - if (_this.isNullValue) { + if (this.isNullValue) { strokeWidth = 0; } else { - strokeWidth = Array.isArray(_this.strokeWidth) ? _this.strokeWidth[realIndex] : _this.strokeWidth; + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; } } var paths = null; - if (_this.isHorizontal) { - paths = _this.drawBarPaths({ + if (this.isHorizontal) { + paths = this.drawBarPaths({ indexes: { i: i, j: j, @@ -5738,8 +6163,9 @@ yDivision: yDivision, elSeries: elSeries }); + barWidth = this.series[i][j] / this.invertedYRatio; } else { - paths = _this.drawColumnPaths({ + paths = this.drawColumnPaths({ indexes: { i: i, j: j, @@ -5756,6 +6182,7 @@ strokeWidth: strokeWidth, elSeries: elSeries }); + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; } pathTo = paths.pathTo; @@ -5768,23 +6195,8 @@ } yArrj.push(y); - var seriesNumber = _this.barOptions.distributed ? j : i; - var fillColor = null; - - if (_this.barOptions.colors.ranges.length > 0) { - var colorRange = _this.barOptions.colors.ranges; - colorRange.map(function (range) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - var pathFill = fill.fillPath({ - seriesNumber: _this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor - }); - elSeries = _this.renderSeries({ + var pathFill = this.getPathFillColor(series, i, j, realIndex); + elSeries = this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, @@ -5799,27 +6211,47 @@ barHeight: barHeight, barWidth: barWidth, elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: _this.visibleI, + visibleSeries: this.visibleI, type: 'bar' }); - }; - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - _loop2(j, tj); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrj; w.globals.seriesYvalues[realIndex] = yArrj; ret.add(elSeries); - }; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - _loop(i, bc); } return ret; } + }, { + key: "getPathFillColor", + value: function getPathFillColor(series, i, j, realIndex) { + var w = this.w; + var fill = new Fill(this.ctx); + var fillColor = null; + var seriesNumber = this.barOptions.distributed ? j : i; + + if (this.barOptions.colors.ranges.length > 0) { + var colorRange = this.barOptions.colors.ranges; + colorRange.map(function (range) { + if (series[i][j] >= range.from && series[i][j] <= range.to) { + fillColor = range.color; + } + }); + } + + if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { + fillColor = w.config.series[i].data[j].fillColor; + } + + var pathFill = fill.fillPath({ + seriesNumber: this.barOptions.distributed ? seriesNumber : realIndex, + color: fillColor, + value: series[i][j] + }); + return pathFill; + } }, { key: "renderSeries", value: function renderSeries(_ref) { @@ -5848,6 +6280,10 @@ lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; } + if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { + lineFill = w.config.series[i].data[j].strokeColor; + } + if (this.isNullValue) { pathFill = 'none'; } @@ -5869,6 +6305,7 @@ className: "apexcharts-".concat(type, "-area"), id: "apexcharts-".concat(type, "-area") }); + renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); var filters = new Filters(this.ctx); filters.setSelectionFilter(renderedPath, realIndex, j); elSeries.add(renderedPath); @@ -5895,8 +6332,6 @@ }, { key: "initVariables", value: function initVariables(series) { - var _this2 = this; - var w = this.w; this.series = series; this.totalItems = 0; @@ -5911,16 +6346,7 @@ } if (w.globals.isXNumeric) { - // get the least x diff if numeric x axis is present - w.globals.seriesX.forEach(function (sX, i) { - sX.forEach(function (s, j) { - if (j > 0) { - var xDiff = s - w.globals.seriesX[i][j - 1]; - _this2.minXDiff = Math.min(xDiff, _this2.minXDiff); - } - }); - }); // get max visible items - + // get max visible items for (var j = 0; j < series[sl].length; j++) { if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { this.visibleItems++; @@ -5962,22 +6388,7 @@ if (w.globals.isXNumeric) { // max barwidth should be equal to minXDiff to avoid overlap - if (this.minXDiff === Number.MAX_VALUE) { - // possibly a single dataPoint (fixes react-apexcharts/issue#34) - var len = w.globals.labels.length; - - if (w.globals.timelineLabels.length > 0) { - len = w.globals.timelineLabels.length; - } - - if (len < 3) { - len = 3; - } - - this.minXDiff = (w.globals.maxX - w.globals.minX) / len; - } - - xDivision = this.minXDiff / this.xRatio; + xDivision = w.globals.minXDiff / this.xRatio; barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; } @@ -6034,8 +6445,16 @@ x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } - pathTo = pathTo + graphics.line(x, barYPosition) + graphics.line(x, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); + var endingShapeOpts = { + barHeight: barHeight, + strokeWidth: strokeWidth, + barYPosition: barYPosition, + x: x, + zeroW: zeroW + }; + var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); + pathTo = pathTo + graphics.line(endingShape.newX, barYPosition) + endingShape.path + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); + pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + endingShape.ending_p_from + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); if (!w.globals.isXNumeric) { y = y + yDivision; @@ -6098,8 +6517,16 @@ y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; } - pathTo = pathTo + graphics.line(barXPosition, y) + graphics.line(barXPosition + barWidth - strokeWidth, y) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition, zeroH); - pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition, zeroH); + var endingShapeOpts = { + barWidth: barWidth, + strokeWidth: strokeWidth, + barXPosition: barXPosition, + y: y, + zeroH: zeroH + }; + var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); + pathTo = pathTo + graphics.line(barXPosition, endingShape.newY) + endingShape.path + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); + pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + endingShape.ending_p_from + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); if (!w.globals.isXNumeric) { x = x + xDivision; @@ -6176,7 +6603,7 @@ var bcx = x + parseFloat(barWidth * visibleSeries); var bcy = y + parseFloat(barHeight * visibleSeries); - if (w.globals.isXNumeric) { + if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { bcx = x + parseFloat(barWidth * (visibleSeries + 1)) - strokeWidth; bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; } @@ -6207,6 +6634,7 @@ renderedPath: renderedPath, bcy: bcy, barHeight: barHeight, + barWidth: barWidth, textRects: textRects, strokeWidth: strokeWidth, dataLabelsX: dataLabelsX, @@ -6250,6 +6678,9 @@ val: series[i][j], i: realIndex, j: j, + barWidth: barWidth, + barHeight: barHeight, + textRects: textRects, dataLabelsConfig: dataLabelsConfig }); return dataLabels; @@ -6260,10 +6691,10 @@ var w = this.w; var i = opts.i, j = opts.j, - realIndex = opts.realIndex, y = opts.y, bcx = opts.bcx, barWidth = opts.barWidth, + barHeight = opts.barHeight, textRects = opts.textRects, dataLabelsY = opts.dataLabelsY, barDataLabelsConfig = opts.barDataLabelsConfig, @@ -6271,7 +6702,6 @@ offX = opts.offX, offY = opts.offY; var dataLabelsX; - var barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; bcx = bcx - strokeWidth / 2; @@ -6283,7 +6713,7 @@ var valIsNegative = this.series[i][j] <= 0; - if (w.config.yaxis[this.yaxisIndex].reversed) { + if (this.isReversed) { y = y - barHeight; } @@ -6316,6 +6746,14 @@ break; } + if (!w.config.chart.stacked) { + if (dataLabelsY < 0) { + dataLabelsY = 0 + strokeWidth; + } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { + dataLabelsY = w.globals.gridHeight - strokeWidth; + } + } + return { bcx: bcx, bcy: y, @@ -6332,6 +6770,7 @@ j = opts.j, bcy = opts.bcy, barHeight = opts.barHeight, + barWidth = opts.barWidth, textRects = opts.textRects, dataLabelsX = opts.dataLabelsX, strokeWidth = opts.strokeWidth, @@ -6340,10 +6779,9 @@ offY = opts.offY; var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; var dataLabelsY = bcy - dataPointsDividedHeight + barHeight / 2 + textRects.height / 2 + offY - 3; - var barWidth = this.series[i][j] / this.invertedYRatio; var valIsNegative = this.series[i][j] <= 0; - if (w.config.yaxis[this.yaxisIndex].reversed) { + if (this.isReversed) { x = x + barWidth; } @@ -6376,10 +6814,12 @@ break; } - if (dataLabelsX < 0) { - dataLabelsX = textRects.width + strokeWidth; - } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { - dataLabelsX = dataLabelsX - textRects.width - strokeWidth; + if (!w.config.chart.stacked) { + if (dataLabelsX < 0) { + dataLabelsX = dataLabelsX + textRects.width + strokeWidth; + } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { + dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; + } } return { @@ -6397,6 +6837,9 @@ val = _ref5.val, i = _ref5.i, j = _ref5.j, + textRects = _ref5.textRects, + barHeight = _ref5.barHeight, + barWidth = _ref5.barWidth, dataLabelsConfig = _ref5.dataLabelsConfig; var w = this.w; var dataLabels = new DataLabels(this.ctx); @@ -6419,6 +6862,29 @@ }); } + if (val === 0 && w.config.chart.stacked) { + // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element + text = ''; + } + + if (w.config.chart.stacked && this.barOptions.dataLabels.hideOverflowingLabels) { + // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect + // Note: This issue is only seen in stacked charts + if (this.isHorizontal) { + barWidth = this.series[i][j] / this.yRatio[this.yaxisIndex]; + + if (textRects.width / 1.6 > barWidth) { + text = ''; + } + } else { + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; + + if (textRects.height / 1.6 > barHeight) { + text = ''; + } + } + } + dataLabels.plotDataLabelsText({ x: x, y: y, @@ -6434,6 +6900,91 @@ return elDataLabelsWrap; } + /** barEndingShape draws the various shapes on top of bars/columns + * @memberof Bar + * @param {object} w - chart context + * @param {object} opts - consists several properties like barHeight/barWidth + * @param {array} series - global primary series + * @param {int} i - current iterating series's index + * @param {int} j - series's j of i + * @return {object} path - ending shape whether round/arrow + * ending_p_from - similar to pathFrom + * newY - which is calculated from existing y and new shape's top + **/ + + }, { + key: "barEndingShape", + value: function barEndingShape(w, opts, series, i, j) { + var graphics = new Graphics(this.ctx); + + if (this.isHorizontal) { + var endingShape = null; + var endingShapeFrom = ''; + var x = opts.x; + + if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { + var inverse = series[i][j] < 0; + var eX = opts.barHeight / 2 - opts.strokeWidth; + if (inverse) eX = -opts.barHeight / 2 - opts.strokeWidth; + + if (!w.config.chart.stacked) { + if (this.barOptions.endingShape === 'rounded') { + x = opts.x - eX / 2; + } + } + + switch (this.barOptions.endingShape) { + case 'flat': + endingShape = graphics.line(x, opts.barYPosition + opts.barHeight - opts.strokeWidth); + break; + + case 'rounded': + endingShape = graphics.quadraticCurve(x + eX, opts.barYPosition + (opts.barHeight - opts.strokeWidth) / 2, x, opts.barYPosition + opts.barHeight - opts.strokeWidth); + break; + } + } + + return { + path: endingShape, + ending_p_from: endingShapeFrom, + newX: x + }; + } else { + var _endingShape = null; + var _endingShapeFrom = ''; + var y = opts.y; + + if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { + var _inverse = series[i][j] < 0; + + var eY = opts.barWidth / 2 - opts.strokeWidth; + if (_inverse) eY = -opts.barWidth / 2 - opts.strokeWidth; + + if (!w.config.chart.stacked) { + // the shape exceeds the chart height, hence reduce y + if (this.barOptions.endingShape === 'rounded') { + y = y + eY / 2; + } + } + + switch (this.barOptions.endingShape) { + case 'flat': + _endingShape = graphics.line(opts.barXPosition + opts.barWidth - opts.strokeWidth, y); + break; + + case 'rounded': + _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - opts.strokeWidth) / 2, y - eY, opts.barXPosition + opts.barWidth - opts.strokeWidth, y); + break; + } + } + + return { + path: _endingShape, + ending_p_from: _endingShapeFrom, + newY: y + }; + } + } }]); return Bar; @@ -6461,24 +7012,20 @@ _createClass(BarStacked, [{ key: "draw", value: function draw(series, seriesIndex) { - var _this = this; - var w = this.w; this.graphics = new Graphics(this.ctx); this.fill = new Fill(this.ctx); this.bar = new Bar(this.ctx, this.xyRatios); var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.series = series; this.initVariables(series); if (w.config.chart.stackType === '100%') { - this.series = w.globals.seriesPercent.slice(); - series = this.series; + series = w.globals.seriesPercent.slice(); } + this.series = series; this.totalItems = 0; this.prevY = []; // y position on chart @@ -6513,11 +7060,10 @@ var ret = this.graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); var x = 0; var y = 0; - var _loop = function _loop(i, bc) { + for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, pathFrom = void 0; var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) @@ -6532,29 +7078,26 @@ var yArrValues = []; var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - if (_this.yRatio.length > 1) { - _this.yaxisIndex = realIndex; + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; } - _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; // el to which series will be drawn + this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // el to which series will be drawn - var elSeries = _this.graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + var elSeries = this.graphics.group({ + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); // eldatalabels - - var elDataLabelsWrap = _this.graphics.group({ + var elDataLabelsWrap = this.graphics.group({ class: 'apexcharts-datalabels' }); - var strokeWidth = 0; var barHeight = 0; var barWidth = 0; - - var initPositions = _this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); - + var initPositions = this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; @@ -6563,28 +7106,28 @@ barWidth = initPositions.barWidth; xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; - _this.yArrj = []; - _this.yArrjF = []; - _this.yArrjVal = []; - _this.xArrj = []; - _this.xArrjF = []; - _this.xArrjVal = []; // if (!this.horizontal) { + this.yArrj = []; + this.yArrjF = []; + this.yArrjVal = []; + this.xArrj = []; + this.xArrjF = []; + this.xArrjVal = []; // if (!this.horizontal) { // this.xArrj.push(x + barWidth / 2) // } - var _loop2 = function _loop2(j) { + for (var j = 0; j < w.globals.dataPoints; j++) { if (w.config.stroke.show) { - if (_this.isNullValue) { + if (this.isNullValue) { strokeWidth = 0; } else { - strokeWidth = Array.isArray(_this.strokeWidth) ? _this.strokeWidth[realIndex] : _this.strokeWidth; + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; } } var paths = null; - if (_this.isHorizontal) { - paths = _this.drawBarPaths({ + if (this.isHorizontal) { + paths = this.drawBarPaths({ indexes: { i: i, j: j, @@ -6601,8 +7144,9 @@ yDivision: yDivision, elSeries: elSeries }); + barWidth = this.series[i][j] / this.invertedYRatio; } else { - paths = _this.drawColumnPaths({ + paths = this.drawColumnPaths({ indexes: { i: i, j: j, @@ -6619,6 +7163,7 @@ strokeWidth: strokeWidth, elSeries: elSeries }); + barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; } pathTo = paths.pathTo; @@ -6627,24 +7172,8 @@ x = paths.x; xArrValues.push(x); yArrValues.push(y); - var seriesNumber = w.config.plotOptions.bar.distributed ? j : i; - var fillColor = null; - - if (_this.barOptions.colors.ranges.length > 0) { - var colorRange = _this.barOptions.colors.ranges; - colorRange.map(function (range, index) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - var pathFill = _this.fill.fillPath({ - seriesNumber: _this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor - }); - - elSeries = _this.renderSeries({ + var pathFill = this.bar.getPathFillColor(series, i, j, realIndex); + elSeries = this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, @@ -6662,33 +7191,19 @@ type: 'bar', visibleSeries: 0 }); - }; - - for (var j = 0; j < w.globals.dataPoints; j++) { - _loop2(j); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrValues; w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array - _this.prevY.push(_this.yArrj); - - _this.prevYF.push(_this.yArrjF); - - _this.prevYVal.push(_this.yArrjVal); - - _this.prevX.push(_this.xArrj); - - _this.prevXF.push(_this.xArrjF); - - _this.prevXVal.push(_this.xArrjVal); - + this.prevY.push(this.yArrj); + this.prevYF.push(this.yArrjF); + this.prevYVal.push(this.yArrjVal); + this.prevX.push(this.xArrj); + this.prevXF.push(this.xArrjF); + this.prevXVal.push(this.xArrjVal); ret.add(elSeries); - }; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - _loop(i, bc); } return ret; @@ -6713,8 +7228,7 @@ barWidth = xDivision; if (w.globals.isXNumeric) { - // max barwidth should be equal to minXDiff to avoid overlap - xDivision = this.minXDiff / this.xRatio; + xDivision = w.globals.minXDiff / this.xRatio; barWidth = xDivision * parseInt(this.barOptions.columnWidth) / 100; } else { barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth) / 100; @@ -6791,8 +7305,22 @@ x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } - this.xArrj.push(x); - this.xArrjF.push(Math.abs(barXPosition - x)); + var endingShapeOpts = { + barHeight: barHeight, + strokeWidth: strokeWidth, + invertedYRatio: this.invertedYRatio, + barYPosition: barYPosition, + x: x + }; + var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); + + if (this.series.length > 1 && i !== this.endingShapeOnSeriesNumber) { + // revert back to flat shape if not last series + endingShape.path = this.graphics.line(endingShape.newX, barYPosition + barHeight - strokeWidth); + } + + this.xArrj.push(endingShape.newX); + this.xArrjF.push(Math.abs(barXPosition - endingShape.newX)); this.xArrjVal.push(this.series[i][j]); pathTo = this.graphics.move(barXPosition, barYPosition); pathFrom = this.graphics.move(barXPosition, barYPosition); @@ -6801,7 +7329,7 @@ pathFrom = this.bar.getPathFrom(realIndex, j, false); } - pathTo = pathTo + this.graphics.line(x, barYPosition) + this.graphics.line(x, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); + pathTo = pathTo + this.graphics.line(endingShape.newX, barYPosition) + endingShape.path + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { @@ -6881,8 +7409,16 @@ } y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - this.yArrj.push(y); - this.yArrjF.push(Math.abs(barYPosition - y)); + var endingShapeOpts = { + barWidth: barWidth, + strokeWidth: strokeWidth, + yRatio: this.yRatio[this.yaxisIndex], + barXPosition: barXPosition, + y: y + }; + var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); + this.yArrj.push(endingShape.newY); + this.yArrjF.push(Math.abs(barYPosition - endingShape.newY)); this.yArrjVal.push(this.series[i][j]); pathTo = this.graphics.move(barXPosition, barYPosition); pathFrom = this.graphics.move(barXPosition, barYPosition); @@ -6891,8 +7427,8 @@ pathFrom = this.bar.getPathFrom(realIndex, j, false); } - pathTo = pathTo + this.graphics.line(barXPosition, y) + this.graphics.line(barXPosition + barWidth - strokeWidth, y) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition, barYPosition); + pathTo = pathTo + this.graphics.line(barXPosition, endingShape.newY) + endingShape.path + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); + pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { @@ -6913,6 +7449,38 @@ y: y }; } + /* + * When user clicks on legends, the collapsed series will be filled with [0,0,0,...,0] + * We need to make sure, that the last series is not [0,0,0,...,0] + * as we need to draw shapes on the last series (for stacked bars/columns only) + * Hence, we are collecting all inner arrays in series which has [0,0,0...,0] + **/ + + }, { + key: "checkZeroSeries", + value: function checkZeroSeries(_ref3) { + var series = _ref3.series; + var w = this.w; + + for (var zs = 0; zs < series.length; zs++) { + var total = 0; + + for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) { + total += series[zs][zsj]; + } + + if (total === 0) { + this.zeroSerieses.push(zs); + } + } // After getting all zeroserieses, we need to ensure whether endingshapeonSeries is not in that zeroseries array + + + for (var s = series.length - 1; s >= 0; s--) { + if (this.zeroSerieses.indexOf(s) > -1 && s === this.endingShapeOnSeriesNumber) { + this.endingShapeOnSeriesNumber -= 1; + } + } + } }]); return BarStacked; @@ -6922,8 +7490,6 @@ * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. * * @module CandleStick - * The whole calculation for stacked bar/column is different from normal bar/column, - * hence it makes sense to derive a new class for it extending most of the props of Parent Bar **/ var CandleStick = @@ -6945,14 +7511,13 @@ var fill = new Fill(this.ctx); this.candlestickOptions = this.w.config.plotOptions.candlestick; var coreUtils = new CoreUtils(this.ctx, w); - this.series = coreUtils.getLogSeries(series); - series = this.series; + series = coreUtils.getLogSeries(series); + this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.initVariables(series); var ret = graphics.group({ class: 'apexcharts-candlestick-series apexcharts-plot-series' }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); for (var i = 0, bc = 0; i < series.length; i++, bc++) { var pathTo = void 0, @@ -6970,7 +7535,8 @@ var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])), + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); @@ -7046,7 +7612,8 @@ yArrj.push(y); var pathFill = fill.fillPath({ seriesNumber: realIndex, - color: color + color: color, + value: series[i][j] }); var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; elSeries = this.renderSeries({ @@ -7115,12 +7682,6 @@ } var barXPosition = x + barWidth * this.visibleI; - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, zeroH); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { y1 = zeroH; @@ -7131,7 +7692,15 @@ l2 = zeroH - ohlc.l / yRatio; } + pathTo = graphics.move(barXPosition, zeroH); + pathFrom = graphics.move(barXPosition, y1); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j, true); + } + pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); + pathFrom = pathFrom + graphics.move(barXPosition, y1); if (!w.globals.isXNumeric) { x = x + xDivision; @@ -7262,244 +7831,6 @@ return Crosshairs; }(); - /** - * DateTime Class to manipulate datetime values. - * - * @module DateTime - **/ - - var DateTime = - /*#__PURE__*/ - function () { - function DateTime(ctx) { - _classCallCheck(this, DateTime); - - this.ctx = ctx; - this.w = ctx.w; - this.months31 = [1, 3, 5, 7, 8, 10, 12]; - this.months30 = [2, 4, 6, 9, 11]; - this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - } - - _createClass(DateTime, [{ - key: "isValidDate", - value: function isValidDate(date) { - return !isNaN(this.parseDate(date)); - } - }, { - key: "getUTCTimeStamp", - value: function getUTCTimeStamp(dateStr) { - if (!Date.parse(dateStr)) { - return dateStr; - } - - return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); - } - }, { - key: "parseDate", - value: function parseDate(dateStr) { - var parsed = Date.parse(dateStr); - - if (!isNaN(parsed)) { - return this.getUTCTimeStamp(dateStr); - } - - var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); - output = this.getUTCTimeStamp(output); - return output; - } // https://stackoverflow.com/a/11252167/6495043 - - }, { - key: "treatAsUtc", - value: function treatAsUtc(dateStr) { - var result = new Date(dateStr); - result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); - return result; - } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 - - }, { - key: "formatDate", - value: function formatDate(date, format) { - var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var locale = this.w.globals.locale; - var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); - var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); - var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); - var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); - - function ii(i, len) { - var s = i + ''; - len = len || 2; - - while (s.length < len) { - s = '0' + s; - } - - return s; - } - - if (convertToUTC) { - date = this.treatAsUtc(date); - } - - var y = utc ? date.getUTCFullYear() : date.getFullYear(); - format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); - format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); - format = format.replace(/(^|[^\\])y/g, '$1' + y); - var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; - format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); - format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); - format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); - format = format.replace(/(^|[^\\])M/g, '$1' + M); - var d = utc ? date.getUTCDate() : date.getDate(); - format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); - format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); - format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); - format = format.replace(/(^|[^\\])d/g, '$1' + d); - var H = utc ? date.getUTCHours() : date.getHours(); - format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); - format = format.replace(/(^|[^\\])H/g, '$1' + H); - var h = H > 12 ? H - 12 : H === 0 ? 12 : H; - format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); - format = format.replace(/(^|[^\\])h/g, '$1' + h); - var m = utc ? date.getUTCMinutes() : date.getMinutes(); - format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); - format = format.replace(/(^|[^\\])m/g, '$1' + m); - var s = utc ? date.getUTCSeconds() : date.getSeconds(); - format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); - format = format.replace(/(^|[^\\])s/g, '$1' + s); - var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); - format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])f/g, '$1' + f); - var T = H < 12 ? 'AM' : 'PM'; - format = format.replace(/(^|[^\\])TT+/g, '$1' + T); - format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); - var t = T.toLowerCase(); - format = format.replace(/(^|[^\\])tt+/g, '$1' + t); - format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); - var tz = -date.getTimezoneOffset(); - var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; - - if (!utc) { - tz = Math.abs(tz); - var tzHrs = Math.floor(tz / 60); - var tzMin = tz % 60; - K += ii(tzHrs) + ':' + ii(tzMin); - } - - format = format.replace(/(^|[^\\])K/g, '$1' + K); - var day = (utc ? date.getUTCDay() : date.getDay()) + 1; - format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); - format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); - format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); - format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); - format = format.replace(/\\(.)/g, '$1'); - return format; - } - }, { - key: "getTimeUnitsfromTimestamp", - value: function getTimeUnitsfromTimestamp(minX, maxX) { - var w = this.w; - - if (w.config.xaxis.min !== undefined) { - minX = w.config.xaxis.min; - } - - if (w.config.xaxis.max !== undefined) { - maxX = w.config.xaxis.max; - } - - var minYear = new Date(minX).getFullYear(); - var maxYear = new Date(maxX).getFullYear(); - var minMonth = new Date(minX).getMonth(); - var maxMonth = new Date(maxX).getMonth(); - var minDate = new Date(minX).getDate(); - var maxDate = new Date(maxX).getDate(); - var minHour = new Date(minX).getHours(); - var maxHour = new Date(maxX).getHours(); - var minMinute = new Date(minX).getMinutes(); - var maxMinute = new Date(maxX).getMinutes(); - return { - minMinute: minMinute, - maxMinute: maxMinute, - minHour: minHour, - maxHour: maxHour, - minDate: minDate, - maxDate: maxDate, - minMonth: minMonth, - maxMonth: maxMonth, - minYear: minYear, - maxYear: maxYear - }; - } - }, { - key: "isLeapYear", - value: function isLeapYear(year) { - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "calculcateLastDaysOfMonth", - value: function calculcateLastDaysOfMonth(month, year, subtract) { - var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked - - return days - subtract; - } - }, { - key: "determineDaysOfYear", - value: function determineDaysOfYear(year) { - var days = 365; - - if (this.isLeapYear(year)) { - days = 366; - } - - return days; - } - }, { - key: "determineRemainingDaysOfYear", - value: function determineRemainingDaysOfYear(year, month, date) { - var dayOfYear = this.daysCntOfYear[month] + date; - if (month > 1 && this.isLeapYear()) dayOfYear++; - return dayOfYear; - } - }, { - key: "determineDaysOfMonths", - value: function determineDaysOfMonths(month, year) { - var days = 30; - month = Utils.monthMod(month); - - switch (true) { - case this.months30.indexOf(month) > -1: - if (month === 2) { - if (this.isLeapYear(year)) { - days = 29; - } else { - days = 28; - } - } - - break; - - case this.months31.indexOf(month) > -1: - days = 31; - break; - - default: - days = 31; - break; - } - - return days; - } - }]); - - return DateTime; - }(); - /** * ApexCharts HeatMap Class. * @module HeatMap @@ -7515,6 +7846,7 @@ this.w = ctx.w; this.xRatio = xyRatios.xRatio; this.yRatio = xyRatios.yRatio; + this.negRange = false; this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; this.rectRadius = this.w.config.plotOptions.heatmap.radius; this.strokeWidth = this.w.config.stroke.width; @@ -7534,6 +7866,7 @@ var yDivision = w.globals.gridHeight / w.globals.series.length; var y1 = 0; var rev = false; + this.checkColorRange(); var heatSeries = series.slice(); if (w.config.yaxis[0].reversed) { @@ -7544,7 +7877,8 @@ for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series apexcharts-heatmap-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series apexcharts-heatmap-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); @@ -7552,7 +7886,7 @@ if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; var filters = new Filters(this.ctx); - filters.dropShadow(elSeries, shadow); + filters.dropShadow(elSeries, shadow, i); } var x1 = 0; @@ -7561,13 +7895,21 @@ var colorShadePercent = 1; var heatColorProps = this.determineHeatColor(i, j); - if (w.globals.hasNegs) { + if (w.globals.hasNegs || this.negRange) { var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; - if (heatColorProps.percent < 0) { - colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; + if (w.config.plotOptions.heatmap.reverseNegativeShade) { + if (heatColorProps.percent < 0) { + colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); + } else { + colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); + } } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; + if (heatColorProps.percent < 0) { + colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; + } else { + colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; + } } } else { colorShadePercent = 1 - heatColorProps.percent / 100; @@ -7658,6 +8000,22 @@ w.config.yaxis[0].labels.offsetY = -(divisor / 2); return ret; } + }, { + key: "checkColorRange", + value: function checkColorRange() { + var _this = this; + + var w = this.w; + var heatmap = w.config.plotOptions.heatmap; + + if (heatmap.colorScale.ranges.length > 0) { + heatmap.colorScale.ranges.map(function (range, index) { + if (range.from < 0) { + _this.negRange = true; + } + }); + } + } }, { key: "determineHeatColor", value: function determineHeatColor(i, j) { @@ -7689,8 +8047,10 @@ color = range.color; min = range.from; max = range.to; - total = Math.abs(max) + Math.abs(min); - percent = 100 * val / total; + + var _total = Math.abs(max) + Math.abs(min); + + percent = 100 * val / (_total === 0 ? _total - 0.000001 : _total); } }); } @@ -7747,7 +8107,7 @@ }, { key: "animateHeatMap", value: function animateHeatMap(el, x, y, width, height, speed) { - var _this = this; + var _this2 = this; var animations = new Animations(this.ctx); animations.animateRect(el, { @@ -7761,7 +8121,7 @@ width: width, height: height }, speed, function () { - _this.w.globals.animationEnded = true; + _this2.w.globals.animationEnded = true; }); } }, { @@ -7926,7 +8286,8 @@ for (var i = 0; i < sectorAngleArr.length; i++) { // if(sectorAngleArr[i]>0) { var elPieArc = graphics.group({ - class: "apexcharts-series apexcharts-pie-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series apexcharts-pie-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), id: 'apexcharts-series-' + i, rel: i + 1 }); @@ -7938,7 +8299,8 @@ var angle = endAngle - startAngle; var pathFill = fill.fillPath({ seriesNumber: i, - size: this.size + size: this.size, + value: series[i] }); // additionaly, pass size for gradient drawing in the fillPath function var path = this.getChangedPath(prevStartAngle, prevEndAngle); @@ -7951,14 +8313,14 @@ classes: 'apexcharts-pie-area' }); elPath.attr({ - id: 'apexcharts-pie-slice-' + i, + id: "apexcharts-".concat(w.config.chart.type, "-slice-").concat(i), index: 0, j: i }); if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, shadow); + filters.dropShadow(elPath, shadow, i); } this.addListeners(elPath, this.donutDataLabels); @@ -8023,7 +8385,7 @@ var yPos = labelPosition.y; var text = 100 * (endAngle - startAngle) / 360 + '%'; - if (angle !== 0) { + if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { var formatter = w.config.dataLabels.formatter; if (formatter !== undefined) { @@ -8195,14 +8557,15 @@ var w = this.w; var me = this; var path; - var size = me.size + 3; - var elPath = w.globals.dom.Paper.select('#apexcharts-pie-slice-' + i).members[0]; + var size = me.size + 4; + var elPath = w.globals.dom.Paper.select("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(i)).members[0]; var pathFrom = elPath.attr('d'); if (elPath.attr('data:pieClicked') === 'true') { elPath.attr({ 'data:pieClicked': 'false' }); + this.revertDataLabelsInner(elPath.node, this.donutDataLabels); var origPath = elPath.attr('data:pathOrig'); elPath.attr({ d: origPath @@ -8417,7 +8780,9 @@ } }, { key: "revertDataLabelsInner", - value: function revertDataLabelsInner(el, dataLabelsConfig) { + value: function revertDataLabelsInner(el, dataLabelsConfig, event) { + var _this = this; + var w = this.w; var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); @@ -8425,18 +8790,32 @@ var pie = new Pie(this.ctx); pie.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); } else { - if (w.globals.selectedDataPoints.length) { - if (w.globals.selectedDataPoints[0].length > 0) { - var index = w.globals.selectedDataPoints[0]; + var slices = document.querySelectorAll(".apexcharts-pie-area"); + var sliceOut = false; + slices.forEach(function (s) { + if (s.getAttribute('data:pieClicked') === 'true') { + sliceOut = true; - var _el = w.globals.dom.baseEl.querySelector("#apexcharts-pie-slice-".concat(index)); - - this.printDataLabelsInner(_el, dataLabelsConfig); - } else { - dataLabelsGroup.style.opacity = 0; + _this.printDataLabelsInner(s, dataLabelsConfig); + } + }); + + if (!sliceOut) { + if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { + if (w.globals.selectedDataPoints[0].length > 0) { + var index = w.globals.selectedDataPoints[0]; + + var _el = w.globals.dom.baseEl.querySelector("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(index)); + + this.printDataLabelsInner(_el, dataLabelsConfig); + } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { + dataLabelsGroup.style.opacity = 0; + } + } else { + if (dataLabelsGroup && w.globals.series.length > 1) { + dataLabelsGroup.style.opacity = 0; + } } - } else if (w.globals.selectedDataPoints.length === 0 || dataLabelsGroup !== null && w.globals.series.length > 1) { - dataLabelsGroup.style.opacity = 0; } } } @@ -8513,7 +8892,8 @@ series.forEach(function (s, i) { // el to which series will be drawn var elSeries = _this.graphics.group().attr({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[i])), + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); @@ -8565,7 +8945,8 @@ pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, pathTo: paths.linePathsTo[p], strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width, - fill: 'none' + fill: 'none', + drawShadow: false })); elSeries.add(renderedLinePath); @@ -8577,15 +8958,16 @@ pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, pathTo: paths.areaPathsTo[p], strokeWidth: 0, - fill: pathFill + fill: pathFill, + drawShadow: false })); if (w.config.chart.dropShadow.enabled) { var filters = new Filters(_this.ctx); var shadow = w.config.chart.dropShadow; - filters.dropShadow(renderedAreaPath, _objectSpread({}, shadow, { + filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { noUserSpaceOnUse: true - })); + }), i); } elSeries.add(renderedAreaPath); @@ -9074,7 +9456,8 @@ for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { var elRadialBarArc = graphics.group({ - class: "apexcharts-series apexcharts-radial-series ".concat(Utils.escapeString(w.globals.seriesNames[i])) + class: "apexcharts-series apexcharts-radial-series", + seriesName: Utils.escapeString(w.globals.seriesNames[i]) }); g.add(elRadialBarArc); elRadialBarArc.attr({ @@ -9085,7 +9468,8 @@ opts.size = opts.size - strokeWidth - this.margin; var pathFill = fill.fillPath({ seriesNumber: i, - size: opts.size + size: opts.size, + value: opts.series[i] }); var startAngle = this.startAngle; var prevStartAngle = void 0; @@ -9130,7 +9514,7 @@ if (w.config.chart.dropShadow.enabled) { var _shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, _shadow); + filters.dropShadow(elPath, _shadow, i); } this.addListeners(elPath, this.radialDataLabels); @@ -9139,7 +9523,7 @@ elRadialBarArc.add(elPath); elPath.attr({ - id: 'apexcharts-radialArc-' + i, + id: 'apexcharts-radialbar-slice-' + i, index: 0, j: i }); @@ -9242,6 +9626,318 @@ return Radial; }(Pie); + /** + * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. + * + * @module RangeBar + **/ + + var RangeBar = + /*#__PURE__*/ + function (_Bar) { + _inherits(RangeBar, _Bar); + + function RangeBar() { + _classCallCheck(this, RangeBar); + + return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); + } + + _createClass(RangeBar, [{ + key: "draw", + value: function draw(series, seriesIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var fill = new Fill(this.ctx); + this.rangeBarOptions = this.w.config.plotOptions.rangeBar; + this.series = series; + this.seriesRangeStart = w.globals.seriesRangeStart; + this.seriesRangeEnd = w.globals.seriesRangeEnd; + this.initVariables(series); + var ret = graphics.group({ + class: 'apexcharts-rangebar-series apexcharts-plot-series' + }); + + for (var i = 0, bc = 0; i < series.length; i++, bc++) { + var pathTo = void 0, + pathFrom = void 0; + var x = void 0, + y = void 0, + xDivision = void 0, + // xDivision is the GRIDWIDTH divided by number of datapoints (columns) + yDivision = void 0, + // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) + zeroH = void 0, + // zeroH is the baseline where 0 meets y axis + zeroW = void 0; // zeroW is the baseline where 0 meets x axis + + var yArrj = []; // hold y values of current iterating series + + var xArrj = []; // hold x values of current iterating series + + var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn + + var elSeries = graphics.group({ + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), + rel: i + 1, + 'data:realIndex': realIndex + }); + + if (series[i].length > 0) { + this.visibleI = this.visibleI + 1; + } + + var strokeWidth = 0; + var barHeight = 0; + var barWidth = 0; + + if (this.yRatio.length > 1) { + this.yaxisIndex = realIndex; + } + + var initPositions = this.initialPositions(); + y = initPositions.y; + yDivision = initPositions.yDivision; + barHeight = initPositions.barHeight; + zeroW = initPositions.zeroW; + x = initPositions.x; + barWidth = initPositions.barWidth; + xDivision = initPositions.xDivision; + zeroH = initPositions.zeroH; + xArrj.push(x + barWidth / 2); // eldatalabels + + var elDataLabelsWrap = graphics.group({ + class: 'apexcharts-datalabels' + }); + + for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { + if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { + this.isNullValue = true; + } else { + this.isNullValue = false; + } + + if (w.config.stroke.show) { + if (this.isNullValue) { + strokeWidth = 0; + } else { + strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; + } + } + + var paths = null; + + if (this.isHorizontal) { + paths = this.drawRangeBarPaths({ + indexes: { + i: i, + j: j, + realIndex: realIndex, + bc: bc + }, + barHeight: barHeight, + strokeWidth: strokeWidth, + pathTo: pathTo, + pathFrom: pathFrom, + zeroW: zeroW, + x: x, + y: y, + yDivision: yDivision, + elSeries: elSeries + }); + barWidth = paths.barWidth; + } else { + paths = this.drawRangeColumnPaths({ + indexes: { + i: i, + j: j, + realIndex: realIndex, + bc: bc + }, + x: x, + y: y, + xDivision: xDivision, + pathTo: pathTo, + pathFrom: pathFrom, + barWidth: barWidth, + zeroH: zeroH, + strokeWidth: strokeWidth, + elSeries: elSeries + }); + barHeight = paths.barHeight; + } + + pathTo = paths.pathTo; + pathFrom = paths.pathFrom; + y = paths.y; + x = paths.x; // push current X + + if (j > 0) { + xArrj.push(x + barWidth / 2); + } + + yArrj.push(y); + var pathFill = fill.fillPath({ + seriesNumber: realIndex + }); + var lineFill = w.globals.stroke.colors[realIndex]; + elSeries = this.renderSeries({ + realIndex: realIndex, + pathFill: pathFill, + lineFill: lineFill, + j: j, + i: i, + pathFrom: pathFrom, + pathTo: pathTo, + strokeWidth: strokeWidth, + elSeries: elSeries, + x: x, + y: y, + series: series, + barHeight: barHeight, + barWidth: barWidth, + elDataLabelsWrap: elDataLabelsWrap, + visibleSeries: this.visibleI, + type: 'rangebar' + }); + } // push all x val arrays into main xArr + + + w.globals.seriesXvalues[realIndex] = xArrj; + w.globals.seriesYvalues[realIndex] = yArrj; + ret.add(elSeries); + } + + return ret; + } + }, { + key: "drawRangeColumnPaths", + value: function drawRangeColumnPaths(_ref) { + var indexes = _ref.indexes, + x = _ref.x, + y = _ref.y, + strokeWidth = _ref.strokeWidth, + xDivision = _ref.xDivision, + pathTo = _ref.pathTo, + pathFrom = _ref.pathFrom, + barWidth = _ref.barWidth, + zeroH = _ref.zeroH; + var w = this.w; + var graphics = new Graphics(this.ctx); + var i = indexes.i; + var j = indexes.j; + var yRatio = this.yRatio[this.yaxisIndex]; + var realIndex = indexes.realIndex; + var range = this.getRangeValue(realIndex, j); + var y1 = Math.min(range.start, range.end); + var y2 = Math.max(range.start, range.end); + + if (w.globals.isXNumeric) { + x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; + } + + var barXPosition = x + barWidth * this.visibleI; + + if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { + y1 = zeroH; + } else { + y1 = zeroH - y1 / yRatio; + y2 = zeroH - y2 / yRatio; + } + + var barHeight = Math.abs(y2 - y1); + pathTo = graphics.move(barXPosition, zeroH); + pathFrom = graphics.move(barXPosition, y1); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j, true); + } + + pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); + pathFrom = pathFrom + graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1); + + if (!w.globals.isXNumeric) { + x = x + xDivision; + } + + return { + pathTo: pathTo, + pathFrom: pathFrom, + barHeight: barHeight, + x: x, + y: y2, + barXPosition: barXPosition + }; + } + }, { + key: "drawRangeBarPaths", + value: function drawRangeBarPaths(_ref2) { + var indexes = _ref2.indexes, + x = _ref2.x, + y = _ref2.y, + yDivision = _ref2.yDivision, + pathTo = _ref2.pathTo, + pathFrom = _ref2.pathFrom, + barHeight = _ref2.barHeight, + zeroW = _ref2.zeroW; + var w = this.w; + var graphics = new Graphics(this.ctx); + var i = indexes.i; + var j = indexes.j; + var realIndex = indexes.realIndex; + var x1 = zeroW; + var x2 = zeroW; + + if (w.globals.isXNumeric) { + y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; + } + + var barYPosition = y + barHeight * this.visibleI; + + if (typeof this.series[i][j] !== 'undefined' && this.series[i][j] !== null) { + x1 = zeroW + this.seriesRangeStart[i][j] / this.invertedYRatio; + x2 = zeroW + this.seriesRangeEnd[i][j] / this.invertedYRatio; + } + + pathTo = graphics.move(zeroW, barYPosition); + pathFrom = graphics.move(zeroW, barYPosition); + + if (w.globals.previousPaths.length > 0) { + pathFrom = this.getPathFrom(realIndex, j); + } + + var barWidth = Math.abs(x2 - x1); + pathTo = graphics.move(x1, barYPosition) + graphics.line(x2, barYPosition) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); + pathFrom = pathFrom + graphics.line(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); + + if (!w.globals.isXNumeric) { + y = y + yDivision; + } + + return { + pathTo: pathTo, + pathFrom: pathFrom, + barWidth: barWidth, + x: x2, + y: y, + barYPosition: barYPosition + }; + } + }, { + key: "getRangeValue", + value: function getRangeValue(i, j) { + var w = this.w; + return { + start: w.globals.seriesRangeStart[i][j], + end: w.globals.seriesRangeEnd[i][j] + }; + } + }]); + + return RangeBar; + }(Bar); + /** * ApexCharts Line Class responsible for drawing Line / Area Charts. * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions @@ -9287,6 +9983,17 @@ for (var i = 0; i < series.length; i++) { // width divided into equal parts + if (type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { + // a small adjustment to allow gradient line to draw correctly for all same values + + /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ + if (coreUtils.seriesHaveSameValues(i)) { + var gSeries = series[i].slice(); + gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; + series[i] = gSeries; + } + } + var xDivision = w.globals.gridWidth / w.globals.dataPoints; var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; @@ -9311,7 +10018,7 @@ var x = w.globals.padHorizontal + categoryAxisCorrection; var y = 1; - if (w.globals.isXNumeric) { + if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio; } @@ -9324,7 +10031,8 @@ var areaPaths = []; // el to which series will be drawn var elSeries = graphics.group({ - class: "apexcharts-series ".concat(Utils.escapeString(w.globals.seriesNames[realIndex])) + class: "apexcharts-series", + seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) }); // points var elPointsMain = graphics.group({ @@ -9447,7 +10155,8 @@ linePath: linePath, areaPath: areaPath, linePaths: linePaths, - areaPaths: areaPaths + areaPaths: areaPaths, + seriesIndex: seriesIndex }); areaPaths = calculatedPaths.areaPaths; linePaths = calculatedPaths.linePaths; @@ -9495,8 +10204,9 @@ }); } + var dataLabelAlign = !series[i][j + 1] || series[i][j + 1] > series[i][j] ? 'top' : 'bottom'; var dataLabels = new DataLabels(this.ctx); - var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1); + var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null, dataLabelAlign); if (drawnLabels !== null) { elDataLabelsWrap.add(drawnLabels); @@ -9526,6 +10236,24 @@ id: "apexcharts-".concat(type) }; + if (type === 'area') { + var pathFill = fill.fillPath({ + seriesNumber: realIndex + }); + + for (var p = 0; p < areaPaths.length; p++) { + var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { + pathFrom: pathFromArea, + pathTo: areaPaths[p], + stroke: 'none', + strokeWidth: 0, + strokeLineCap: null, + fill: pathFill + })); + elSeries.add(renderedPath); + } + } + if (w.config.stroke.show && !this.pointsChart) { var lineFill = null; @@ -9539,34 +10267,15 @@ lineFill = w.globals.stroke.colors[realIndex]; } - for (var p = 0; p < linePaths.length; p++) { - var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { + for (var _p = 0; _p < linePaths.length; _p++) { + var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { pathFrom: pathFromLine, - pathTo: linePaths[p], + pathTo: linePaths[_p], stroke: lineFill, strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width, strokeLineCap: w.config.stroke.lineCap, fill: 'none' })); - elSeries.add(renderedPath); - } - } // we have drawn the lines, now if it is area chart, we need to fill paths - - - if (type === 'area') { - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - - for (var _p = 0; _p < areaPaths.length; _p++) { - var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromArea, - pathTo: areaPaths[_p], - stroke: 'none', - strokeWidth: 0, - strokeLineCap: null, - fill: pathFill - })); elSeries.add(_renderedPath); } @@ -9598,12 +10307,22 @@ linePath = _ref.linePath, areaPath = _ref.areaPath, linePaths = _ref.linePaths, - areaPaths = _ref.areaPaths; + areaPaths = _ref.areaPaths, + seriesIndex = _ref.seriesIndex; var w = this.w; var graphics = new Graphics(this.ctx); - var curve = Array.isArray(w.config.stroke.curve) ? w.config.stroke.curve[i] : w.config.stroke.curve; // logic of smooth curve derived from chartist + var curve = w.config.stroke.curve; + + if (Array.isArray(w.config.stroke.curve)) { + if (Array.isArray(seriesIndex)) { + curve = w.config.stroke.curve[seriesIndex[i]]; + } else { + curve = w.config.stroke.curve[i]; + } + } // logic of smooth curve derived from chartist // CREDITS: https://gionkunz.github.io/chartist-js/ + if (curve === 'smooth') { var length = (x - pX) * 0.35; @@ -9731,12 +10450,10 @@ pathFromLine = w.globals.previousPaths[pp].paths[0].d; } else if (gpp.type === 'area') { this.appendPathFrom = false; + pathFromArea = w.globals.previousPaths[pp].paths[0].d; if (w.config.stroke.show) { - pathFromLine = w.globals.previousPaths[pp].paths[0].d; - pathFromArea = w.globals.previousPaths[pp].paths[1].d; - } else { - pathFromArea = w.globals.previousPaths[pp].paths[0].d; + pathFromLine = w.globals.previousPaths[pp].paths[1].d; } } } @@ -9798,359 +10515,6 @@ return Line; }(); - /** - * ApexCharts YAxis Class for drawing Y-Axis. - * - * @module YAxis - **/ - - var YAxis = - /*#__PURE__*/ - function () { - function YAxis(ctx) { - _classCallCheck(this, YAxis); - - this.ctx = ctx; - this.w = ctx.w; - this.xaxisFontSize = this.w.config.xaxis.labels.style.fontSize; - this.axisFontFamily = this.w.config.xaxis.labels.style.fontFamily; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); - this.xaxisForeColors = this.w.config.xaxis.labels.style.colors; - this.xAxisoffX = 0; - - if (this.w.config.xaxis.position === 'bottom') { - this.xAxisoffX = this.w.globals.gridHeight; - } - } - - _createClass(YAxis, [{ - key: "drawYaxis", - value: function drawYaxis(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; - var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis', - rel: realIndex, - transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' - }); - - if (!w.config.yaxis[realIndex].show) { - return elYaxis; - } - - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g' - }); - elYaxis.add(elYaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks - - var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; - - var l = w.globals.translateY; - var lbFormatter = w.globals.yLabelFormatters[realIndex]; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.yaxis[realIndex].labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var xPad = w.config.yaxis[realIndex].labels.padding; - - if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { - xPad = xPad * -1; - } - - var label = graphics.drawText({ - x: xPad, - y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, - text: val, - textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', - fontSize: yaxisFontSize, - fontFamily: yaxisFontFamily, - foreColor: w.config.yaxis[realIndex].labels.style.color, - cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass - }); - elYaxisTexts.add(label); - var labelRotatingCenter = graphics.rotateAroundCenter(label.node); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - l = l + labelsDivider; - } - } - - if (w.config.yaxis[realIndex].title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title' - }); - var x = 0; - - if (w.config.yaxis[realIndex].opposite) { - x = w.globals.translateYAxisX[realIndex]; - } - - var elYAxisTitleText = graphics.drawText({ - x: x, - y: w.globals.gridHeight / 2 + w.globals.translateY, - text: w.config.yaxis[realIndex].title.text, - textAnchor: 'end', - foreColor: w.config.yaxis[realIndex].title.style.color, - fontSize: w.config.yaxis[realIndex].title.style.fontSize, - fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elYaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var _x = 31 + axisBorder.offsetX; - - if (w.config.yaxis[realIndex].opposite) { - _x = -31 - axisBorder.offsetX; - } - - var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); - elYaxis.add(elVerticalLine); - this.drawAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); - } - - return elYaxis; - } // This actually becomes horizonal axis (for bar charts) - - }, { - key: "drawYaxisInversed", - value: function drawYaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis apexcharts-yaxis-inversed' - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks - - var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; - - var l = labelsDivider + w.config.xaxis.labels.offsetX; - var lbFormatter = w.globals.xLabelFormatter; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.xaxis.labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var elTick = graphics.drawText({ - x: w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX), - y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, - text: '', - textAnchor: 'middle', - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elTick); - elTick.tspan(val); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = val; - elTick.node.appendChild(elTooltipTitle); - l = l + labelsDivider; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' - }); - var elYAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2, - y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elXaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); - elXaxis.add(elVerticalLine); - } - - return elXaxis; - } - }, { - key: "drawAxisTicks", - value: function drawAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { - var w = this.w; - var graphics = new Graphics(this.ctx); // initial label position = 0; - - var t = w.globals.translateY; - - if (axisTicks.show) { - if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; - - for (var i = tickAmount; i >= 0; i--) { - var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; - - if (this.isBarHorizontal) { - tY = labelsDivider * i; - } - - var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); - elYaxis.add(elTick); - t = t + labelsDivider; - } - } - } - }, { - key: "yAxisTitleRotate", - value: function yAxisTitleRotate(realIndex, yAxisOpposite) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yAxisLabelsCoord = { - width: 0, - height: 0 - }; - var yAxisTitleCoord = { - width: 0, - height: 0 - }; - var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); - - if (elYAxisLabelsWrap !== null) { - yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); - } - - var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); - - if (yAxisTitle !== null) { - yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); - } - - if (yAxisTitle !== null) { - var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); - yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); - } - - if (yAxisTitle !== null) { - var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); - - if (!yAxisOpposite) { - yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } else { - yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } - } - } - }, { - key: "xPaddingForYAxisTitle", - value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { - var w = this.w; - var oppositeAxisCount = 0; - var x = 0; - var padd = 10; - - if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { - return { - xPos: x, - padd: 0 - }; - } - - if (yAxisOpposite) { - x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; - oppositeAxisCount += 1; - - if (oppositeAxisCount === 0) { - x = x - padd / 2; - } - } else { - x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; - - if (this.isBarHorizontal) { - padd = 25; - x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; - } - } - - return { - xPos: x, - padd: padd - }; - } // sets the x position of the y-axis by counting the labels width, title width and any offset - - }, { - key: "setYAxisXPosition", - value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { - var _this = this; - - var w = this.w; - var xLeft = 0; - var xRight = 0; - var leftOffsetX = 21; - var rightOffsetX = 1; - - if (w.config.yaxis.length > 1) { - this.multipleYs = true; - } - - w.config.yaxis.map(function (yaxe, index) { - var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; - var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; - - if (!yaxe.opposite) { - xLeft = w.globals.translateX - leftOffsetX; - - if (!shouldNotDrawAxis) { - leftOffsetX = leftOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; - } else { - if (_this.isBarHorizontal) { - xRight = w.globals.gridWidth + w.globals.translateX - 1; - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; - } else { - xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; - - if (!shouldNotDrawAxis) { - rightOffsetX = rightOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; - } - } - }); - } - }]); - - return YAxis; - }(); - /** * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. * @@ -10258,8 +10622,10 @@ } else { w.globals.yLabelFormatters[i] = function (val) { if (Utils.isNumber(val)) { - if (w.globals.yValueDecimal !== 0 || w.globals.maxY - w.globals.minY < 1) { - return val.toFixed(yaxe.decimalsInFloat); + if (w.globals.yValueDecimal !== 0) { + return val.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); + } else if (w.globals.maxY - w.globals.minY < 5) { + return val.toFixed(1); } else { return val.toFixed(0); } @@ -10291,6 +10657,83 @@ return Formatters; }(); + var AxesUtils = + /*#__PURE__*/ + function () { + function AxesUtils(ctx) { + _classCallCheck(this, AxesUtils); + + this.ctx = ctx; + this.w = ctx.w; + } // Based on the formatter function, get the label text and position + + + _createClass(AxesUtils, [{ + key: "getLabel", + value: function getLabel(labels, timelineLabels, x, i) { + var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; + var w = this.w; + var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; + var label; + var xlbFormatter = w.globals.xLabelFormatter; + var customFormatter = w.config.xaxis.labels.formatter; + var xFormat = new Formatters(this.ctx); + label = xFormat.xLabelFormat(xlbFormatter, rawLabel); + + if (customFormatter !== undefined) { + label = customFormatter(rawLabel, labels[i], i); + } + + if (timelineLabels.length > 0) { + x = timelineLabels[i].position; + label = timelineLabels[i].value; + } else { + if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { + label = ''; + } + } + + if (typeof label === 'undefined') label = ''; + label = label.toString(); + + if (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { + label = ''; + } + + return { + x: x, + text: label + }; + } + }, { + key: "drawYAxisTicks", + value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { + var w = this.w; + var graphics = new Graphics(this.ctx); // initial label position = 0; + + var t = w.globals.translateY; + + if (axisTicks.show) { + if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; + + for (var i = tickAmount; i >= 0; i--) { + var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; + + if (w.globals.isBarHorizontal) { + tY = labelsDivider * i; + } + + var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); + elYaxis.add(elTick); + t = t + labelsDivider; + } + } + } + }]); + + return AxesUtils; + }(); + /** * ApexCharts XAxis Class for drawing X-Axis. * @@ -10337,6 +10780,7 @@ // as we are not providing multiple yaxis for bar charts this.yaxis = w.config.yaxis[0]; + this.axesUtils = new AxesUtils(ctx); } _createClass(XAxis, [{ @@ -10370,39 +10814,13 @@ xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; } - var xlbFormatter = w.globals.xLabelFormatter; - var customFormatter = w.config.xaxis.labels.formatter; var labelsLen = labels.length; if (w.config.xaxis.labels.show) { for (var _i = 0; _i <= labelsLen - 1; _i++) { - var rawLabel = typeof labels[_i] === 'undefined' ? '' : labels[_i]; - var label = void 0; - var xFormat = new Formatters(this.ctx); - label = xFormat.xLabelFormat(xlbFormatter, rawLabel); - - if (customFormatter !== undefined) { - label = customFormatter(rawLabel, this.xaxisLabels[_i], _i); - } - var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; - - if (w.globals.timelineLabels.length > 0) { - x = w.globals.timelineLabels[_i].position; - label = w.globals.timelineLabels[_i].value; - } else { - if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { - label = ''; - } - } - - label = label.toString(); - - if (label.indexOf('NaN') === 0 || label === 'undefined' || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || this.drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { - label = ''; - } - - this.drawnLabels.push(label); + var label = this.axesUtils.getLabel(labels, w.globals.timelineLabels, x, _i, this.drawnLabels); + this.drawnLabels.push(label.text); var offsetYCorrection = 28; if (w.globals.rotateXLabels) { @@ -10410,7 +10828,7 @@ } var elTick = graphics.drawText({ - x: x, + x: label.x, y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection, text: '', textAnchor: 'middle', @@ -10419,10 +10837,17 @@ foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[_i] : this.xaxisForeColors, cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass }); + + if (_i === labelsLen - 1) { + if (w.globals.skipLastTimelinelabel) { + label.text = ''; + } + } + elXaxisTexts.add(elTick); - graphics.addTspan(elTick, label, this.xaxisFontFamily); + graphics.addTspan(elTick, label.text, this.xaxisFontFamily); var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label; + elTooltipTitle.textContent = label.text; elTick.node.appendChild(elTooltipTitle); xPos = xPos + colWidth; } @@ -10502,15 +10927,14 @@ fontSize: ylabels.style.fontSize, fontFamily: ylabels.style.fontFamily, cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass - }); // let labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node) - // if (ylabels.rotate !== 0) { - // elLabel.node.setAttribute( - // 'transform', - // `rotate(${ylabels.rotate} ${labelRotatingCenter.x} ${labelRotatingCenter.y})` - // ) - // } - + }); elYaxisTexts.add(elLabel); + + if (w.config.yaxis[realIndex].labels.rotate !== 0) { + var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); + elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); + } + yPos = yPos + colHeight; } } @@ -10536,13 +10960,8 @@ if (w.config.xaxis.axisBorder.show) { var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, this.yaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elYaxis.add(elHorzLine); // let x = w.globals.yAxisWidths[0] / 2 - // if (w.config.yaxis[0].opposite) { - // x = -w.globals.yAxisWidths[0] / 2 - // } - - var yaxis = new YAxis(this.ctx); - yaxis.drawAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); + elYaxis.add(elHorzLine); + this.axesUtils.drawYAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); } return elYaxis; @@ -10627,7 +11046,7 @@ for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { var _tSpan = xAxisTexts[_xat].childNodes; - if (w.config.xaxis.labels.trim && w.config.chart.type !== 'bar' && w.config.plotOptions.bar.horizontal) { + if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { graphics.placeTextWithEllipsis(_tSpan[0], _tSpan[0].textContent, width); } } @@ -10662,6 +11081,394 @@ return XAxis; }(); + /** + * ApexCharts YAxis Class for drawing Y-Axis. + * + * @module YAxis + **/ + + var YAxis = + /*#__PURE__*/ + function () { + function YAxis(ctx) { + _classCallCheck(this, YAxis); + + this.ctx = ctx; + this.w = ctx.w; + var w = this.w; + this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; + this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; + this.xaxisForeColors = w.config.xaxis.labels.style.colors; + this.xAxisoffX = 0; + + if (w.config.xaxis.position === 'bottom') { + this.xAxisoffX = w.globals.gridHeight; + } + + this.drawnLabels = []; + this.axesUtils = new AxesUtils(ctx); + } + + _createClass(YAxis, [{ + key: "drawYaxis", + value: function drawYaxis(realIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; + var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; + var elYaxis = graphics.group({ + class: 'apexcharts-yaxis', + rel: realIndex, + transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' + }); + + if (!w.config.yaxis[realIndex].show) { + return elYaxis; + } + + var elYaxisTexts = graphics.group({ + class: 'apexcharts-yaxis-texts-g' + }); + elYaxis.add(elYaxisTexts); + var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks + + var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; + + var l = w.globals.translateY; + var lbFormatter = w.globals.yLabelFormatters[realIndex]; + var labels = w.globals.yAxisScale[realIndex].result.slice(); + + if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { + labels.reverse(); + } + + if (w.config.yaxis[realIndex].labels.show) { + for (var i = tickAmount; i >= 0; i--) { + var val = labels[i]; + val = lbFormatter(val, i); + var xPad = w.config.yaxis[realIndex].labels.padding; + + if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { + xPad = xPad * -1; + } + + var label = graphics.drawText({ + x: xPad, + y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, + text: val, + textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', + fontSize: yaxisFontSize, + fontFamily: yaxisFontFamily, + foreColor: w.config.yaxis[realIndex].labels.style.color, + cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass + }); + elYaxisTexts.add(label); + var labelRotatingCenter = graphics.rotateAroundCenter(label.node); + + if (w.config.yaxis[realIndex].labels.rotate !== 0) { + label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); + } + + l = l + labelsDivider; + } + } + + if (w.config.yaxis[realIndex].title.text !== undefined) { + var elYaxisTitle = graphics.group({ + class: 'apexcharts-yaxis-title' + }); + var x = 0; + + if (w.config.yaxis[realIndex].opposite) { + x = w.globals.translateYAxisX[realIndex]; + } + + var elYAxisTitleText = graphics.drawText({ + x: x, + y: w.globals.gridHeight / 2 + w.globals.translateY, + text: w.config.yaxis[realIndex].title.text, + textAnchor: 'end', + foreColor: w.config.yaxis[realIndex].title.style.color, + fontSize: w.config.yaxis[realIndex].title.style.fontSize, + fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, + cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass + }); + elYaxisTitle.add(elYAxisTitleText); + elYaxis.add(elYaxisTitle); + } + + var axisBorder = w.config.yaxis[realIndex].axisBorder; + + if (axisBorder.show) { + var _x = 31 + axisBorder.offsetX; + + if (w.config.yaxis[realIndex].opposite) { + _x = -31 - axisBorder.offsetX; + } + + var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); + elYaxis.add(elVerticalLine); + this.axesUtils.drawYAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); + } + + return elYaxis; + } // This actually becomes horizonal axis (for bar charts) + + }, { + key: "drawYaxisInversed", + value: function drawYaxisInversed(realIndex) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var elXaxis = graphics.group({ + class: 'apexcharts-xaxis apexcharts-yaxis-inversed' + }); + var elXaxisTexts = graphics.group({ + class: 'apexcharts-xaxis-texts-g', + transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") + }); + elXaxis.add(elXaxisTexts); + var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks + + var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; + + var l = labelsDivider + w.config.xaxis.labels.offsetX; + var lbFormatter = w.globals.xLabelFormatter; + var labels = w.globals.yAxisScale[realIndex].result.slice(); + var timelineLabels = w.globals.invertedTimelineLabels; + + if (timelineLabels.length > 0) { + this.xaxisLabels = timelineLabels.slice(); + labels = timelineLabels.slice(); + tickAmount = labels.length; + } + + if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { + labels.reverse(); + } + + var tl = timelineLabels.length; + + if (w.config.xaxis.labels.show) { + for (var i = tl ? 0 : tickAmount; tl ? i < tl - 1 : i >= 0; tl ? i++ : i--) { + var val = labels[i]; + val = lbFormatter(val, i); + var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); + + if (timelineLabels.length) { + var label = this.axesUtils.getLabel(labels, timelineLabels, x, i, this.drawnLabels); + x = label.x; + val = label.text; + this.drawnLabels.push(label.text); + } + + var elTick = graphics.drawText({ + x: x, + y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, + text: '', + textAnchor: 'middle', + foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, + fontSize: this.xaxisFontSize, + fontFamily: this.xaxisFontFamily, + cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass + }); + elXaxisTexts.add(elTick); + elTick.tspan(val); + var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); + elTooltipTitle.textContent = val; + elTick.node.appendChild(elTooltipTitle); + l = l + labelsDivider; + } + } + + if (w.config.xaxis.title.text !== undefined) { + var elYaxisTitle = graphics.group({ + class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' + }); + var elYAxisTitleText = graphics.drawText({ + x: w.globals.gridWidth / 2, + y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, + text: w.config.xaxis.title.text, + textAnchor: 'middle', + fontSize: w.config.xaxis.title.style.fontSize, + fontFamily: w.config.xaxis.title.style.fontFamily, + cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass + }); + elYaxisTitle.add(elYAxisTitleText); + elXaxis.add(elYaxisTitle); + } + + var axisBorder = w.config.yaxis[realIndex].axisBorder; + + if (axisBorder.show) { + var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); + elXaxis.add(elVerticalLine); + } + + return elXaxis; + } + }, { + key: "yAxisTitleRotate", + value: function yAxisTitleRotate(realIndex, yAxisOpposite) { + var w = this.w; + var graphics = new Graphics(this.ctx); + var yAxisLabelsCoord = { + width: 0, + height: 0 + }; + var yAxisTitleCoord = { + width: 0, + height: 0 + }; + var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); + + if (elYAxisLabelsWrap !== null) { + yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); + } + + var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); + + if (yAxisTitle !== null) { + yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); + } + + if (yAxisTitle !== null) { + var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); + yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); + } + + if (yAxisTitle !== null) { + var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); + + if (!yAxisOpposite) { + yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); + } else { + yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); + } + } + } + }, { + key: "xPaddingForYAxisTitle", + value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { + var w = this.w; + var oppositeAxisCount = 0; + var x = 0; + var padd = 10; + + if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { + return { + xPos: x, + padd: 0 + }; + } + + if (yAxisOpposite) { + x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; + oppositeAxisCount += 1; + + if (oppositeAxisCount === 0) { + x = x - padd / 2; + } + } else { + x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; + + if (w.globals.isBarHorizontal) { + padd = 25; + x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; + } + } + + return { + xPos: x, + padd: padd + }; + } // sets the x position of the y-axis by counting the labels width, title width and any offset + + }, { + key: "setYAxisXPosition", + value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { + var w = this.w; + var xLeft = 0; + var xRight = 0; + var leftOffsetX = 21; + var rightOffsetX = 1; + + if (w.config.yaxis.length > 1) { + this.multipleYs = true; + } + + w.config.yaxis.map(function (yaxe, index) { + var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; + var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; + + if (!yaxe.opposite) { + xLeft = w.globals.translateX - leftOffsetX; + + if (!shouldNotDrawAxis) { + leftOffsetX = leftOffsetX + axisWidth + 20; + } + + w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; + } else { + if (w.globals.isBarHorizontal) { + xRight = w.globals.gridWidth + w.globals.translateX - 1; + w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; + } else { + xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; + + if (!shouldNotDrawAxis) { + rightOffsetX = rightOffsetX + axisWidth + 20; + } + + w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; + } + } + }); + } + }, { + key: "setYAxisTextAlignments", + value: function setYAxisTextAlignments() { + var w = this.w; + var yaxis = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis"); + yaxis = Utils.listToArray(yaxis); + yaxis.forEach(function (y, index) { + var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment + + if (yaxe.labels.align !== undefined) { + var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); + var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); + yAxisTexts = Utils.listToArray(yAxisTexts); + var rect = yAxisInner.getBoundingClientRect(); + + if (yaxe.labels.align === 'left') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'start'); + }); + + if (!yaxe.opposite) { + yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); + } + } else if (yaxe.labels.align === 'center') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'middle'); + }); + yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); + } else if (yaxe.labels.align === 'right') { + yAxisTexts.forEach(function (label, lI) { + label.setAttribute('text-anchor', 'end'); + }); + + if (yaxe.opposite) { + yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); + } + } + } + }); + } + }]); + + return YAxis; + }(); + var Range = /*#__PURE__*/ function () { @@ -10670,16 +11477,17 @@ this.ctx = ctx; this.w = ctx.w; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss // This routine creates the Y axis values for a graph. _createClass(Range, [{ key: "niceScale", - value: function niceScale(yMin, yMax) { - var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var ticks = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; + value: function niceScale(yMin, yMax, diff) { + var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; + var w = this.w; + var NO_MIN_MAX_PROVIDED = this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale; if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { // when all values are 0 @@ -10698,9 +11506,9 @@ // If yMin and yMax are identical, then // adjust the yMin and yMax values to actually // make a graph. Also avoids division by zero errors. - yMin = yMin === 0 ? 0 : yMin - 0.1; // some small value + yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value - yMax = yMax === 0 ? 2 : yMax + 0.1; // some small value + yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value } // Calculate Min amd Max graphical labels and graph // increments. The number of ticks defaults to // 10 which is the SUGGESTED value. Any tick value @@ -10713,7 +11521,23 @@ var result = []; // Determine Range - var range = yMax - yMin; + var range = Math.abs(yMax - yMin); + + if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { + /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ + yMax = yMax * 1.01; + } // for extremely small values - #fix #553 + + + if (range < 0.00001 && NO_MIN_MAX_PROVIDED && yMax < 10) { + yMax = yMax * 1.05; + } else if (diff > 0.1 && diff < 3 && NO_MIN_MAX_PROVIDED) { + /* fix https://github.com/apexcharts/apexcharts.js/issues/576 */ + + /* fix https://github.com/apexcharts/apexcharts.js/issues/588 */ + yMax = yMax + diff / 3; + } + var tiks = ticks + 1; // Adjust ticks if needed if (tiks < 2) { @@ -10743,10 +11567,9 @@ if (val > ub) { break; } - } // TODO: need to remove this condition below which makes this function tightly coupled with w. + } - - if (this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale) { + if (NO_MIN_MAX_PROVIDED) { return { result: result, niceMin: result[0], @@ -10838,7 +11661,7 @@ value: function setYScaleForIndex(index, minY, maxY) { var gl = this.w.globals; var cnf = this.w.config; - var y = this.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; + var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; if (typeof gl.yAxisScale[index] === 'undefined') { gl.yAxisScale[index] = []; @@ -10854,7 +11677,15 @@ } else { // there is some data. Turn off the allSeriesCollapsed flag gl.allSeriesCollapsed = false; - gl.yAxisScale[index] = this.niceScale(minY, maxY, index, y.tickAmount ? y.tickAmount : 5); + + if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { + // fix https://github.com/apexcharts/apexcharts.js/issues/492 + gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); + } else { + var diff = Math.abs(maxY - minY); + gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 + y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5); + } } } } @@ -11063,7 +11894,6 @@ this.ctx = ctx; this.w = ctx.w; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); this.scales = new Range(ctx); } @@ -11095,19 +11925,33 @@ if (this.w.config.chart.type === 'candlestick') { seriesMin = gl.seriesCandleL; seriesMax = gl.seriesCandleH; + } else if (gl.isRangeData) { + seriesMin = gl.seriesRangeStart; + seriesMax = gl.seriesRangeEnd; } for (var i = startingIndex; i < len; i++) { gl.dataPoints = Math.max(gl.dataPoints, series[i].length); for (var j = 0; j < gl.series[i].length; j++) { - if (series[i][j] !== null && Utils.isNumber(series[i][j])) { + var val = series[i][j]; + + if (val !== null && Utils.isNumber(val)) { maxY = Math.max(maxY, seriesMax[i][j]); lowestY = Math.min(lowestY, seriesMin[i][j]); highestY = Math.max(highestY, seriesMin[i][j]); - if (Utils.isFloat(series[i][j])) { - gl.yValueDecimal = Math.max(gl.yValueDecimal, series[i][j].toString().split('.')[1].length); + if (this.w.config.chart.type === 'candlestick') { + maxY = Math.max(maxY, gl.seriesCandleO[i][j]); + maxY = Math.max(maxY, gl.seriesCandleH[i][j]); + maxY = Math.max(maxY, gl.seriesCandleL[i][j]); + maxY = Math.max(maxY, gl.seriesCandleC[i][j]); + highestY = maxY; + } + + if (Utils.isFloat(val)) { + val = Utils.noExponents(val); + gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); } if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { @@ -11188,17 +12032,20 @@ if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') { - if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE) { - var diff = gl.maxY - lowestYInAllSeries; + if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility + ) { + var diff = gl.maxY - lowestYInAllSeries; - if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { - // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. - diff = 0; + if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { + // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. + diff = 0; + } + + gl.minY = lowestYInAllSeries - diff * 5 / 100; + /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ + + gl.maxY = gl.maxY + diff * 5 / 100; } - - gl.minY = lowestYInAllSeries - diff * 5 / 100; - gl.maxY = gl.maxY + diff * 5 / 100 + 0.05; - } } cnf.yaxis.map(function (yaxe, index) { @@ -11226,7 +12073,7 @@ } }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there - if (this.isBarHorizontal) { + if (gl.isBarHorizontal) { if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { gl.minY = cnf.xaxis.min; } @@ -11251,13 +12098,20 @@ gl.minYArr[0] = gl.yAxisScale[0].niceMin; gl.maxYArr[0] = gl.yAxisScale[0].niceMax; } + + return { + minY: gl.minY, + maxY: gl.maxY, + minYArr: gl.minYArr, + maxYArr: gl.maxYArr + }; } }, { key: "setXRange", value: function setXRange() { var gl = this.w.globals; var cnf = this.w.config; - var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided; // minX maxX starts here + var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; // minX maxX starts here if (gl.isXNumeric) { for (var i = 0; i < gl.series.length; i++) { @@ -11284,8 +12138,8 @@ } // for numeric xaxis, we need to adjust some padding left and right for bar charts - if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && cnf.xaxis.type !== 'category') { - if (cnf.xaxis.type !== 'category') { + if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && gl.isXNumeric) { + if (cnf.xaxis.type !== 'category' || gl.isXNumeric) { var minX = gl.minX - gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; gl.minX = minX; gl.initialminX = minX; @@ -11295,7 +12149,7 @@ } } - if (gl.isXNumeric || gl.noLabelsProvided) { + if ((gl.isXNumeric || gl.noLabelsProvided) && (!cnf.xaxis.convertedCatToNumeric || gl.dataFormatXNumeric)) { var ticks; if (cnf.xaxis.tickAmount === undefined) { @@ -11335,7 +12189,8 @@ gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); if (gl.noLabelsProvided && gl.labels.length > 0) { - gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); + gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated + gl.seriesX = gl.labels.slice(); } } // we will still store these labels as the count for this will be different (to draw grid and labels placement) @@ -11360,6 +12215,49 @@ gl.maxX = gl.maxX + 2; } } + + if (gl.isXNumeric) { + // get the least x diff if numeric x axis is present + gl.seriesX.forEach(function (sX, i) { + sX.forEach(function (s, j) { + if (j > 0) { + var xDiff = s - gl.seriesX[i][j - 1]; + gl.minXDiff = Math.min(xDiff, gl.minXDiff); + } + }); + }); + this.calcMinXDiffForTinySeries(); + } + + return { + minX: gl.minX, + maxX: gl.maxX + }; + } + }, { + key: "calcMinXDiffForTinySeries", + value: function calcMinXDiffForTinySeries() { + var w = this.w; + var len = w.globals.labels.length; + + if (w.globals.labels.length === 1) { + w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len / 3; + } else { + if (w.globals.minXDiff === Number.MAX_VALUE) { + // possibly a single dataPoint (fixes react-apexcharts/issue#34) + if (w.globals.timelineLabels.length > 0) { + len = w.globals.timelineLabels.length; + } + + if (len < 3) { + len = 3; + } + + w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len; + } + } + + return w.globals.minXDiff; } }, { key: "setZRange", @@ -11408,18 +12306,23 @@ }, { key: "getSeriesByName", value: function getSeriesByName(seriesName) { - return this.w.globals.dom.baseEl.querySelector(".apexcharts-series.".concat(Utils.escapeString(seriesName))); + return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); } }, { key: "addCollapsedClassToSeries", value: function addCollapsedClassToSeries(elSeries, index) { var w = this.w; - for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { - if (w.globals.collapsedSeries[cs].index === index) { - elSeries.node.classList.add('apexcharts-series-collapsed'); + function iterateOnAllCollapsedSeries(series) { + for (var cs = 0; cs < series.length; cs++) { + if (series[cs].index === index) { + elSeries.node.classList.add('apexcharts-series-collapsed'); + } } } + + iterateOnAllCollapsedSeries(w.globals.collapsedSeries); + iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); } }, { key: "toggleSeriesOnHover", @@ -11794,7 +12697,6 @@ this.isSparkline = this.w.config.chart.sparkline.enabled; this.xPadRight = 0; this.xPadLeft = 0; - this.isBarHorizontal = !!(this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.horizontal); } /** * @memberof Dimensions @@ -11843,20 +12745,25 @@ this.xAxisHeight = 0; } - if (!this.isBarHorizontal) { + if (!w.globals.isBarHorizontal) { this.yAxisWidth = this.getTotalYAxisWidth(); } else { this.yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; } - if (!w.globals.isMultipleYAxis) { - if (this.yAxisWidth < w.config.yaxis[0].labels.minWidth) { - this.yAxisWidth = w.config.yaxis[0].labels.minWidth; - } + var minYAxisWidth = 0; + var maxYAxisWidth = 0; + w.config.yaxis.forEach(function (y) { + minYAxisWidth += y.labels.minWidth; + maxYAxisWidth += y.labels.maxWidth; + }); - if (this.yAxisWidth > w.config.yaxis[0].labels.maxWidth) { - this.yAxisWidth = w.config.yaxis[0].labels.maxWidth; - } + if (this.yAxisWidth < minYAxisWidth) { + this.yAxisWidth = minYAxisWidth; + } + + if (this.yAxisWidth > maxYAxisWidth) { + this.yAxisWidth = maxYAxisWidth; } } }, { @@ -11885,7 +12792,7 @@ gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; - if (this.isBarHorizontal) { + if (w.globals.isBarHorizontal) { gl.rotateXLabels = false; gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize) / 1.5); } @@ -12038,10 +12945,23 @@ var w = this.w; - if (w.config.xaxis.type === 'category' && this.isBarHorizontal || w.config.xaxis.type === 'numeric') { + if (w.config.xaxis.type === 'category' && w.globals.isBarHorizontal || w.config.xaxis.type === 'numeric' || w.config.xaxis.type === 'datetime') { var rightPad = function rightPad(labels) { - if (w.config.grid.padding.right < labels.width) { - _this.xPadRight = labels.width / 2 + 1; + if (_this.timescaleLabels) { + // for timeline labels, we take the last label and check if it exceeds gridWidth + var lastTimescaleLabel = _this.timescaleLabels[_this.timescaleLabels.length - 1]; + var labelPosition = lastTimescaleLabel.position + labels.width; + + if (labelPosition > w.globals.gridWidth) { + w.globals.skipLastTimelinelabel = true; + } else { + // we have to make it false again in case of zooming/panning + w.globals.skipLastTimelinelabel = false; + } + } else if (w.config.xaxis.type !== 'datetime') { + if (w.config.grid.padding.right < labels.width) { + _this.xPadRight = labels.width / 2 + 1; + } } }; @@ -12051,16 +12971,16 @@ } }; - var lineArea = w.config.chart.type === 'line' || w.config.chart.type === 'area'; + var isXNumeric = w.globals.isXNumeric; w.config.yaxis.forEach(function (yaxe, i) { - var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || lineArea || yaxe.opposite && _this.isBarHorizontal; + var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric || yaxe.opposite && w.globals.isBarHorizontal; if (shouldPad) { - if (lineArea && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || _this.isBarHorizontal && yaxe.opposite) { + if (isXNumeric && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || w.globals.isBarHorizontal && yaxe.opposite) { leftPad(xaxisLabelCoords); } - if (!_this.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || lineArea && !w.globals.isMultipleYAxis) { + if (!w.globals.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric && !w.globals.isMultipleYAxis) { rightPad(xaxisLabelCoords); } } @@ -12072,18 +12992,18 @@ value: function titleSubtitleOffset() { var w = this.w; var gl = w.globals; - var gridShrinkOffset = this.isSparkline ? 0 : 10; + var gridShrinkOffset = this.isSparkline || !w.globals.axisCharts ? 0 : 10; if (w.config.title.text !== undefined) { gridShrinkOffset += w.config.title.margin; } else { - gridShrinkOffset += this.isSparkline ? 0 : 5; + gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; } if (w.config.subtitle.text !== undefined) { gridShrinkOffset += w.config.subtitle.margin; } else { - gridShrinkOffset += this.isSparkline ? 0 : 5; + gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; } if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && w.config.series.length > 1) { @@ -12140,8 +13060,13 @@ value: function getxAxisTimeScaleLabelsCoords() { var w = this.w; var rect; - var timescaleLabels = w.globals.timelineLabels.slice(); - var labels = timescaleLabels.map(function (label) { + this.timescaleLabels = w.globals.timelineLabels.slice(); + + if (w.globals.isBarHorizontal && w.config.xaxis.type === 'datetime') { + this.timescaleLabels = w.globals.invertedTimelineLabels.slice(); + } + + var labels = this.timescaleLabels.map(function (label) { return label.value; }); // get the longest string from the labels array and also apply label formatter to it @@ -12184,19 +13109,20 @@ height: coords.height }; } else { - var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter to it + var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter + + var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxies - fix #522 var val = xaxisLabels.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); // the labels gets changed for bar charts - if (this.isBarHorizontal) { + if (w.globals.isBarHorizontal) { val = w.globals.yAxisScale[0].result.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); } - var xlbFormatter = w.globals.xLabelFormatter; var xFormat = new Formatters(this.ctx); val = xFormat.xLabelFormat(xlbFormatter, val); var graphics = new Graphics(this.ctx); @@ -12207,7 +13133,7 @@ }; if (rect.width * xaxisLabels.length > w.globals.svgWidth - lgWidthForSideLegends - this.yAxisWidth && w.config.xaxis.labels.rotate !== 0) { - if (!this.isBarHorizontal) { + if (!w.globals.isBarHorizontal) { w.globals.rotateXLabels = true; xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); rect.height = xLabelrect.height / 1.66; @@ -12255,7 +13181,7 @@ val = w.globals.yAxisScale[index].niceMax; } - if (_this2.isBarHorizontal) { + if (w.globals.isBarHorizontal) { labelPad = 0; var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it @@ -12646,15 +13572,21 @@ } }, { key: "recalcDimensionsBasedOnFormat", - value: function recalcDimensionsBasedOnFormat(filteredTimeScale) { + value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { var w = this.w; var reformattedTimescaleArray = this.formatDates(filteredTimeScale); var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); - w.globals.timelineLabels = removedOverlappingTS.slice(); // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords + + if (!inverted) { + w.globals.timelineLabels = removedOverlappingTS.slice(); + } else { + w.globals.invertedTimelineLabels = removedOverlappingTS.slice(); + } // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX // Dependency on Dimensions(), need to refactor correctly // TODO - find an alternate way to avoid calling this Heavy method twice + var dimensions = new Dimensions(this.ctx); dimensions.plotCoords(); } @@ -13178,10 +14110,13 @@ var cnf = this.w.config; // const graphics = new Graphics(this.ctx) var ct = cnf.chart.type; - var axisChartsArrTypes = ['line', 'area', 'bar', 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; - var xyChartsArrTypes = ['line', 'area', 'bar', 'candlestick', 'scatter', 'bubble']; + var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', + 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; + var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', + 'candlestick', 'scatter', 'bubble']; gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; + gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; gl.chartClass = '.apexcharts' + gl.cuid; gl.dom.baseEl = this.el; gl.dom.elWrap = document.createElement('div'); @@ -13239,7 +14174,7 @@ // if user has specified a particular type for particular series if (typeof ser[st].type !== 'undefined') { if (ser[st].type === 'column' || ser[st].type === 'bar') { - w.config.plotOptions.bar.horizontal = false; // bar not supported in mixed charts + w.config.plotOptions.bar.horizontal = false; // horizontal bars not supported in mixed charts, hence forcefully set to false columnSeries.series.push(series); columnSeries.i.push(st); @@ -13270,6 +14205,7 @@ var candlestick = new CandleStick(this.ctx, xyRatios); var pie = new Pie(this.ctx); var radialBar = new Radial(this.ctx); + var rangeBar = new RangeBar(this.ctx, xyRatios); var radar = new Radar(this.ctx); var elGraph = []; @@ -13335,6 +14271,10 @@ elGraph = candleStick.draw(gl.series); break; + case 'rangeBar': + elGraph = rangeBar.draw(gl.series); + break; + case 'heatmap': var heatmap = new HeatMap(this.ctx, xyRatios); elGraph = heatmap.draw(gl.series); @@ -13404,7 +14344,7 @@ height: gl.svgHeight }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; - var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? 14 : 5; + var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; gl.dom.elWrap.style.width = gl.svgWidth + 'px'; gl.dom.elWrap.style.height = gl.svgHeight + 'px'; @@ -13441,6 +14381,8 @@ gl.seriesCandleH = []; gl.seriesCandleL = []; gl.seriesCandleC = []; + gl.seriesRangeStart = []; + gl.seriesRangeEnd = []; gl.seriesPercent = []; gl.seriesX = []; gl.seriesZ = []; @@ -13483,6 +14425,7 @@ gl.minDate = Number.MAX_VALUE; gl.minZ = Number.MAX_VALUE; gl.maxZ = -Number.MAX_VALUE; + gl.minXDiff = Number.MAX_VALUE; gl.yAxisScale = []; gl.xAxisScale = null; gl.xAxisTicksPositions = []; @@ -13558,6 +14501,8 @@ } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); } + + gl.dataFormatXNumeric = true; } if (cnf.xaxis.type === 'datetime') { @@ -13593,8 +14538,8 @@ for (var j = 0; j < ser[i].data.length; j++) { if (typeof ser[i].data[j].y !== 'undefined') { - if (Array.isArray(ser[i].data[j].y) && ser[i].data[j].y.length === 4) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[3])); + if (Array.isArray(ser[i].data[j].y)) { + this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); } @@ -13609,7 +14554,7 @@ if (isXString || isXDate) { // user supplied '01/01/2017' or a date string (a JS date object is not supported) if (isXString) { - if (cnf.xaxis.type === 'datetime') { + if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); } else { // a category and not a numeric x value @@ -13620,11 +14565,15 @@ if (cnf.xaxis.type === 'datetime') { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); } else { + gl.dataFormatXNumeric = true; + gl.isXNumeric = true; this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); } } } else { // a numeric value in x property + gl.isXNumeric = true; + gl.dataFormatXNumeric = true; this.twoDSeriesX.push(ser[activeI].data[_j2].x); } } @@ -13637,6 +14586,22 @@ gl.isDataXYZ = true; } } + }, { + key: "handleRangeData", + value: function handleRangeData(ser, i) { + var gl = this.w.globals; + var range = {}; + + if (this.isFormat2DArray()) { + range = this.handleRangeDataFormat('array', ser, i); + } else if (this.isFormatXY()) { + range = this.handleRangeDataFormat('xy', ser, i); + } + + gl.seriesRangeStart.push(range.start); + gl.seriesRangeEnd.push(range.end); + return range; + } }, { key: "handleCandleStickData", value: function handleCandleStickData(ser, i) { @@ -13655,6 +14620,40 @@ gl.seriesCandleC.push(ohlc.c); return ohlc; } + }, { + key: "handleRangeDataFormat", + value: function handleRangeDataFormat(format, ser, i) { + var rangeStart = []; + var rangeEnd = []; + var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; + var serObj = new Series(this.ctx); + var activeIndex = serObj.getActiveConfigSeriesIndex(); + + if (format === 'array') { + if (ser[activeIndex].data[0][1].length !== 2) { + throw new Error(err); + } + + for (var j = 0; j < ser[i].data.length; j++) { + rangeStart.push(ser[i].data[j][1][0]); + rangeEnd.push(ser[i].data[j][1][1]); + } + } else if (format === 'xy') { + if (ser[activeIndex].data[0].y.length !== 2) { + throw new Error(err); + } + + for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { + rangeStart.push(ser[i].data[_j3].y[0]); + rangeEnd.push(ser[i].data[_j3].y[1]); + } + } + + return { + start: rangeStart, + end: rangeEnd + }; + } }, { key: "handleCandleStickDataFormat", value: function handleCandleStickDataFormat(format, ser, i) { @@ -13680,11 +14679,11 @@ throw new Error(err); } - for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { - serO.push(ser[i].data[_j3].y[0]); - serH.push(ser[i].data[_j3].y[1]); - serL.push(ser[i].data[_j3].y[2]); - serC.push(ser[i].data[_j3].y[3]); + for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { + serO.push(ser[i].data[_j4].y[0]); + serH.push(ser[i].data[_j4].y[1]); + serL.push(ser[i].data[_j4].y[2]); + serC.push(ser[i].data[_j4].y[3]); } } @@ -13713,6 +14712,11 @@ return; } + if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { + gl.isRangeData = true; + this.handleRangeData(ser, i); + } + if (this.isMultiFormat()) { if (this.isFormat2DArray()) { this.handleFormat2DArray(ser, i); @@ -13795,33 +14799,47 @@ return this.w; } + /** User possibly set string categories in xaxis.categories or labels prop + * Or didn't set xaxis labels at all - in which case we manually do it. + * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], + * this shouldn't be called + * @param {array} ser - the series which user passed to the config + */ + }, { key: "handleExternalLabelsData", value: function handleExternalLabelsData(ser) { var cnf = this.w.config; - var gl = this.w.globals; // user provided labels in category axis + var gl = this.w.globals; if (cnf.xaxis.categories.length > 0) { + // user provided labels in xaxis.category prop gl.labels = cnf.xaxis.categories; } else if (cnf.labels.length > 0) { + // user provided labels in labels props gl.labels = cnf.labels.slice(); } else if (this.fallbackToCategory) { + // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array gl.labels = gl.labels[0]; } else { - // user didn't provided labels, fallback to 1-2-3-4-5 + // user didn't provided any labels, fallback to 1-2-3-4-5 var labelArr = []; if (gl.axisCharts) { + // for axis charts, we get the longest series and create labels from it for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { labelArr.push(i + 1); - } + } // create gl.seriesX as it will be used in calculations of x positions + for (var _i = 0; _i < ser.length; _i++) { gl.seriesX.push(labelArr); - } + } // turn on the isXNumeric flag to allow minX and maxX to function properly + gl.isXNumeric = true; } // no series to pull labels from, put a 0-10 series + // possibly, user collapsed all series. Hence we can't work with above calc if (labelArr.length === 0) { @@ -13830,14 +14848,12 @@ for (var _i2 = 0; _i2 < ser.length; _i2++) { gl.seriesX.push(labelArr); } - } + } // Finally, pass the labelArr in gl.labels which will be printed on x-axis + + + gl.labels = labelArr; // Turn on this global flag to indicate no labels were provided by user - gl.labels = labelArr; gl.noLabelsProvided = true; - - if (cnf.xaxis.type === 'category') { - gl.isXNumeric = false; - } } } // Segregate user provided data into appropriate vars @@ -13847,14 +14863,17 @@ var w = this.w; var cnf = w.config; var gl = w.globals; - this.excludeCollapsedSeriesInYAxis(); + this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis + this.fallbackToCategory = false; this.resetGlobals(); this.isMultipleY(); if (gl.axisCharts) { + // axisCharts includes line / area / column / scatter this.parseDataAxisCharts(ser); } else { + // non-axis charts are pie / donut this.parseDataNonAxisCharts(ser); } @@ -13871,9 +14890,10 @@ this.coreUtils.getStackedSeriesTotals(); } - this.coreUtils.getPercentSeries(); // user didn't provide a [[x,y],[x,y]] series, but a named series + this.coreUtils.getPercentSeries(); - if (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0) { + if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { + // x-axis labels couldn't be detected; hence try searching every option in config this.handleExternalLabelsData(ser); } } @@ -13897,10 +14917,17 @@ xyRatios = this.coreUtils.getCalculatedRatios(); - if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined && isFinite(w.globals.minX) && isFinite(w.globals.maxX)) { + if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { var ts = new TimeScale(this.ctx); - var formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale); + var formattedTimeScale; + + if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { + formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); + ts.recalcDimensionsBasedOnFormat(formattedTimeScale, false); + } else if (w.globals.isBarHorizontal) { + formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); + ts.recalcDimensionsBasedOnFormat(formattedTimeScale, true); + } } } @@ -13917,7 +14944,7 @@ if (gl.axisCharts && type !== 'radar') { var elXaxis, elYaxis; - if (type === 'bar' && cnf.plotOptions.bar.horizontal) { + if (gl.isBarHorizontal) { elYaxis = yAxis.drawYaxisInversed(0); elXaxis = xAxis.drawXaxisInversed(0); gl.dom.elGraphical.add(elXaxis); @@ -14422,6 +15449,7 @@ value: function drawGrid() { var w = this.w; var xAxis = new XAxis(this.ctx); + var yaxis = new YAxis(this.ctx); var gl = this.w.globals; var elgrid = null; @@ -14439,6 +15467,8 @@ if (elgrid !== null) { xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); } + + yaxis.setYAxisTextAlignments(); } } // This mask will clip off overflowing graphics from the drawable area @@ -14465,7 +15495,7 @@ gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff'); var coreUtils = new CoreUtils(this); coreUtils.getLargestMarkerSize(); - var markerSize = w.globals.markers.largestSize + w.config.markers.hover.sizeOffset + 1; + var markerSize = w.globals.markers.largestSize + 1; gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff'); gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); @@ -14483,6 +15513,14 @@ var elg = graphics.group({ class: 'apexcharts-grid' }); + var elgridLinesH = graphics.group({ + class: 'apexcharts-gridlines-horizontal' + }); + var elgridLinesV = graphics.group({ + class: 'apexcharts-gridlines-vertical' + }); + elg.add(elgridLinesH); + elg.add(elgridLinesV); var tickAmount = 8; for (var i = 0; i < w.globals.series.length; i++) { @@ -14494,9 +15532,8 @@ } var xCount; - var inversedGrid = !!(w.config.plotOptions.bar.horizontal && w.config.chart.type === 'bar'); - if (!inversedGrid) { + if (!w.globals.isBarHorizontal) { xCount = this.xaxisLabels.length; // draw vertical lines if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { @@ -14513,7 +15550,7 @@ if (w.config.grid.xaxis.lines.show && x1 > 0 && x1 < w.globals.gridWidth) { var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); line.node.classList.add('apexcharts-gridline'); - elg.add(line); + elgridLinesV.add(line); if (this.animX) { this.animateLine(line, { @@ -14527,7 +15564,15 @@ } var xAxis = new XAxis(this.ctx); - xAxis.drawXaxisTicks(x1, elg); + + if (_i === xCount - 1) { + if (!w.globals.skipLastTimelinelabel) { + // skip drawing last label here + xAxis.drawXaxisTicks(x1, elg); + } + } else { + xAxis.drawXaxisTicks(x1, elg); + } } } else { var xCountForCategoryCharts = xCount; @@ -14549,7 +15594,7 @@ _line.node.classList.add('apexcharts-gridline'); - elg.add(_line); + elgridLinesV.add(_line); if (this.animX) { this.animateLine(_line, { @@ -14579,7 +15624,7 @@ for (var _i3 = 0; _i3 < tickAmount + 1; _i3++) { var _line2 = graphics.drawLine(_x, _y, _x2, _y2, w.config.grid.borderColor, strokeDashArray); - elg.add(_line2); + elgridLinesH.add(_line2); _line2.node.classList.add('apexcharts-gridline'); @@ -14619,7 +15664,7 @@ _line3.node.classList.add('apexcharts-gridline'); - elg.add(_line3); + elgridLinesV.add(_line3); if (this.animX) { this.animateLine(_line3, { @@ -14649,7 +15694,7 @@ for (var _i5 = 0; _i5 < w.globals.dataPoints + 1; _i5++) { var _line4 = graphics.drawLine(_x5, _y5, _x6, _y6, w.config.grid.borderColor, strokeDashArray); - elg.add(_line4); + elgridLinesH.add(_line4); _line4.node.classList.add('apexcharts-gridline'); @@ -15110,11 +16155,13 @@ if (w.globals.axisCharts) { seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"); + seriesEls = Utils.listToArray(seriesEls); seriesEls.forEach(function (v) { realIndexes.push(parseInt(v.getAttribute('data:realIndex'))); }); } else { seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"); + seriesEls = Utils.listToArray(seriesEls); seriesEls.forEach(function (v) { realIndexes.push(parseInt(v.getAttribute('rel')) - 1); }); @@ -15233,6 +16280,16 @@ // for non-axis charts i.e pie / donuts var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); + var type = w.config.chart.type; + + if (type === 'pie' || type === 'donut') { + var dataLabels = w.config.plotOptions.pie.donut.labels; + var graphics = new Graphics(this.ctx); + var pie = new Pie(this.ctx); + graphics.pathMouseDown(_seriesEl.members[0], null); + pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); + } + _seriesEl.fire('click'); } } @@ -15313,8 +16370,7 @@ } else { for (var i = 0; i < res.length; i++) { if (width < res[i].breakpoint) { - newOptions = Utils.extend(config, newOptions); - newOptions = CoreUtils.extendArrayProps(newOptions, res[i].options); + newOptions = CoreUtils.extendArrayProps(config, res[i].options); newOptions = Utils.extend(w.config, newOptions); _this.overrideResponsiveOptions(newOptions); @@ -15370,6 +16426,7 @@ value: function setDefaultColors() { var w = this.w; var utils = new Utils(); + w.globals.dom.elWrap.classList.add(w.config.theme.mode); if (w.config.colors === undefined) { w.globals.colors = this.predefined(); @@ -15436,7 +16493,7 @@ this.pushExtraColors(w.globals.dataLabels.style.colors, 50); if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { - w.globals.radarPolygons.fill.colors = ['#fff']; + w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff']; } else { w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors; } @@ -15478,6 +16535,19 @@ } } } + }, { + key: "updateThemeOptions", + value: function updateThemeOptions(options) { + options.chart = options.chart || {}; + options.tooltip = options.tooltip || {}; + var mode = options.theme.mode || 'light'; + var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; + var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; + options.tooltip.theme = mode; + options.chart.foreColor = foreColor; + options.theme.palette = palette; + return options; + } }, { key: "predefined", value: function predefined() { @@ -15497,7 +16567,7 @@ break; case 'palette4': - this.colors = ['#546E7A', '#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a']; + this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; break; case 'palette5': @@ -15906,7 +16976,7 @@ val = f.yLbFormatter(w.globals.series[tIndex][j], { series: w.globals.series, - seriesIndex: i, + seriesIndex: tIndex, dataPointIndex: j, w: w }); // discard 0 values in BARS @@ -16170,6 +17240,7 @@ var tooltipEl = this.ttCtx.getElTooltip(); // override everything with a custom html tooltip and replace it tooltipEl.innerHTML = w.config.tooltip.custom({ + ctx: this.ctx, series: w.globals.series, seriesIndex: i, dataPointIndex: j, @@ -16373,7 +17444,7 @@ if (w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top - tooltipRect.ttHeight / 2; + y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; } var newPositions = this.positionChecks(tooltipRect, x, y); @@ -16443,9 +17514,13 @@ cx = pointsArr[capturedSeries][j][0]; cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); - point.setAttribute('r', hoverSize); - point.setAttribute('cx', cx); - point.setAttribute('cy', cy); // point.style.opacity = w.config.markers.hover.opacity + + if (point) { + point.setAttribute('r', hoverSize); + point.setAttribute('cx', cx); + point.setAttribute('cy', cy); + } // point.style.opacity = w.config.markers.hover.opacity + this.moveXCrosshairs(cx); @@ -16517,7 +17592,7 @@ value: function moveStickyTooltipOverBars(j) { var w = this.w; var ttCtx = this.ttCtx; - var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); + var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; var bcy = 0; var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; @@ -16600,6 +17675,8 @@ }, { key: "enlargeCurrentPoint", value: function enlargeCurrentPoint(rel, point) { + var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var w = this.w; if (w.config.chart.type !== 'bubble') { @@ -16608,6 +17685,12 @@ var cx = point.getAttribute('cx'); var cy = point.getAttribute('cy'); + + if (x !== null && y !== null) { + cx = x; + cy = y; + } + this.tooltipPosition.moveXCrosshairs(cx); if (!this.fixedTooltip) { @@ -16796,21 +17879,27 @@ ttItems: opt.ttItems, i: i, j: j, - shared: ttCtx.intersect ? false : w.config.tooltip.shared + shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared }); - ttCtx.marker.enlargeCurrentPoint(j, opt.paths); + + if (e.type === 'mouseup') { + ttCtx.markerClick(e, i, j); + } + x = cx; - y = cy - ttCtx.tooltipRect.ttHeight * 1.4; + y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; if (ttCtx.w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top; + y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; } if (val < 0) { y = cy; } + + ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); } return { @@ -16840,7 +17929,7 @@ var barHeight = barXY.barHeight; var j = barXY.j; - if (ttCtx.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { + if (w.globals.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { x = barXY.x; y = barXY.y; strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; // bW = barXY.barWidth @@ -16884,16 +17973,16 @@ } // move tooltip here - if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || ttCtx.isBarHorizontal && ttCtx.hasBars())) { + if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.hasBars())) { if (isReversed) { x = w.globals.gridWidth - x; } tooltipEl.style.left = x + w.globals.translateX + 'px'; var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex')); - var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; + var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; - if (isReversed && !(ttCtx.isBarHorizontal && ttCtx.hasBars())) { + if (isReversed && !(w.globals.isBarHorizontal && ttCtx.hasBars())) { y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; } @@ -16920,7 +18009,7 @@ var barHeight = 0; var cl = e.target.classList; - if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area')) { + if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { var bar = e.target; var barRect = bar.getBoundingClientRect(); var seriesBound = opt.elGrid.getBoundingClientRect(); @@ -16952,7 +18041,7 @@ }); if (w.config.tooltip.followCursor) { - if (w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { x = clientX - seriesBound.left + 15; y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; } else { @@ -16965,7 +18054,7 @@ y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; } } else { - if (w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { x = cx; if (x < ttCtx.xyRatios.baseLineInvertedY) { @@ -17035,7 +18124,7 @@ if (xaxisTooltip === null) { ttCtx.xaxisTooltip = document.createElement('div'); - ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass); + ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.xaxisTooltip); ttCtx.xaxisTooltipText = document.createElement('div'); ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); @@ -17067,7 +18156,7 @@ if (yaxisTooltip === null) { ttCtx.yaxisTooltip = document.createElement('div'); - ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass); + ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.yaxisTooltip); if (i === 0) ttCtx.yaxisTooltipText = []; ttCtx.yaxisTooltipText.push(document.createElement('div')); @@ -17119,7 +18208,7 @@ } } - if (w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal) { + if (w.globals.isBarHorizontal) { ttCtx.xcrosshairsWidth = 0; } @@ -17174,19 +18263,19 @@ this.ctx = ctx; this.w = ctx.w; var w = this.w; + this.tConfig = w.config.tooltip; this.tooltipUtil = new Utils$1(this); this.tooltipLabels = new Labels(this); this.tooltipPosition = new Position(this); this.marker = new Marker(this); this.intersect = new Intersect(this); this.axesTooltip = new AxesTooltip(this); - this.showOnIntersect = w.config.tooltip.intersect; - this.showTooltipTitle = w.config.tooltip.x.show; - this.fixedTooltip = w.config.tooltip.fixed.enabled; + this.showOnIntersect = this.tConfig.intersect; + this.showTooltipTitle = this.tConfig.x.show; + this.fixedTooltip = this.tConfig.fixed.enabled; this.xaxisTooltip = null; this.yaxisTTEls = null; - this.isBarHorizontal = w.config.plotOptions.bar.horizontal; - this.isBarShared = !w.config.plotOptions.bar.horizontal && w.config.tooltip.shared; + this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; } _createClass(Tooltip, [{ @@ -17220,7 +18309,7 @@ var tooltipEl = document.createElement('div'); tooltipEl.classList.add('apexcharts-tooltip'); - tooltipEl.classList.add(w.config.tooltip.theme); + tooltipEl.classList.add(this.tConfig.theme); w.globals.dom.elWrap.appendChild(tooltipEl); if (w.globals.axisCharts) { @@ -17233,7 +18322,7 @@ } // we forcefully set intersect true for these conditions - if (w.globals.comboCharts && !w.config.tooltip.shared || w.config.tooltip.intersect && !w.config.tooltip.shared || w.config.chart.type === 'bar' && !w.config.tooltip.shared) { + if (w.globals.comboCharts && !this.tConfig.shared || this.tConfig.intersect && !this.tConfig.shared || (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { this.showOnIntersect = true; } @@ -17250,14 +18339,14 @@ if (this.showTooltipTitle) { this.tooltipTitle = document.createElement('div'); this.tooltipTitle.classList.add('apexcharts-tooltip-title'); - this.tooltipTitle.style.fontFamily = w.config.tooltip.style.fontFamily || w.config.chart.fontFamily; - this.tooltipTitle.style.fontSize = w.config.tooltip.style.fontSize; + this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; + this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; tooltipEl.appendChild(this.tooltipTitle); } var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared - if ((w.globals.xyCharts || w.globals.comboCharts) && w.config.tooltip.shared) { + if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { if (!this.showOnIntersect) { ttItemsCnt = w.globals.series.length; } else { @@ -17278,14 +18367,21 @@ for (var i = 0; i < ttItemsCnt; i++) { var gTxt = document.createElement('div'); gTxt.classList.add('apexcharts-tooltip-series-group'); + + if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { + if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { + gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); + } + } + var point = document.createElement('span'); point.classList.add('apexcharts-tooltip-marker'); point.style.backgroundColor = w.globals.colors[i]; gTxt.appendChild(point); var gYZ = document.createElement('div'); gYZ.classList.add('apexcharts-tooltip-text'); - gYZ.style.fontFamily = w.config.tooltip.style.fontFamily || w.config.chart.fontFamily; - gYZ.style.fontSize = w.config.tooltip.style.fontSize; // y values group + gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; + gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group var gYValText = document.createElement('div'); gYValText.classList.add('apexcharts-tooltip-y-group'); @@ -17319,7 +18415,7 @@ var w = this.w; var type = w.config.chart.type; var tooltipEl = this.getElTooltip(); - var barOrCandlestick = !!(type === 'bar' || type === 'candlestick'); + var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); var hoverArea = w.globals.dom.Paper.node; var elGrid = this.getElGrid(); @@ -17342,8 +18438,8 @@ if (w.globals.axisCharts) { if (type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble') { points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); - } else if (barOrCandlestick) { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area', '.apexcharts-series .apexcharts-candlestick-area'); + } else if (commonBar) { + points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); } else if (type === 'heatmap') { points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); } else if (type === 'radar') { @@ -17358,11 +18454,11 @@ } } - var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || barOrCandlestick && this.hasBars() && w.config.tooltip.shared; + var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.hasBars() && this.tConfig.shared; if (validSharedChartTypes) { this.addPathsEventListeners([hoverArea], seriesHoverParams); - } else if (barOrCandlestick && !w.globals.comboCharts) { + } else if (commonBar && !w.globals.comboCharts) { this.addBarsEventListeners(seriesHoverParams); } else if (type === 'bubble' || type === 'scatter' || type === 'radar' || this.showOnIntersect && (type === 'area' || type === 'line')) { this.addPointsEventsListeners(seriesHoverParams); @@ -17387,7 +18483,7 @@ } // combo charts may have bars, so add event listeners here too - if (this.hasBars() && !w.config.tooltip.shared) { + if (this.hasBars() && !this.tConfig.shared) { this.addBarsEventListeners(seriesHoverParams); } } @@ -17400,14 +18496,14 @@ var tooltipRect = tooltipEl.getBoundingClientRect(); var ttWidth = tooltipRect.width + 10; var ttHeight = tooltipRect.height + 10; - var x = w.config.tooltip.fixed.offsetX; - var y = w.config.tooltip.fixed.offsetY; + var x = this.tConfig.fixed.offsetX; + var y = this.tConfig.fixed.offsetY; - if (w.config.tooltip.fixed.position.toLowerCase().indexOf('right') > -1) { + if (this.tConfig.fixed.position.toLowerCase().indexOf('right') > -1) { x = x + w.globals.svgWidth - ttWidth + 10; } - if (w.config.tooltip.fixed.position.toLowerCase().indexOf('bottom') > -1) { + if (this.tConfig.fixed.position.toLowerCase().indexOf('bottom') > -1) { y = y + w.globals.svgHeight - ttHeight - 10; } @@ -17431,7 +18527,7 @@ key: "addBarsEventListeners", value: function addBarsEventListeners(seriesHoverParams) { var w = this.w; - var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area'); + var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); this.addPathsEventListeners(bars, seriesHoverParams); } }, { @@ -17452,7 +18548,7 @@ ttItems: opts.ttItems }; _this.w.globals.tooltipOpts = extendedOpts; - var events = ['mousemove', 'touchmove', 'mouseout', 'touchend']; + var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; events.map(function (ev) { return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { capture: false, @@ -17537,7 +18633,7 @@ ttCtx.e = e; // highlight the current hovered bars if (ttCtx.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { - if (w.config.tooltip.onDatasetHover.highlightDataSeries) { + if (this.tConfig.onDatasetHover.highlightDataSeries) { var series = new Series(chartCtx); series.toggleSeriesOnHover(e, e.target.parentNode); } @@ -17583,15 +18679,24 @@ return; } + if (Array.isArray(this.tConfig.enabledOnSeries)) { + var index = parseInt(opt.paths.getAttribute('index')); + + if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { + self.handleMouseOut(opt); + return; + } + } + var tooltipEl = this.getElTooltip(); var xcrosshairs = this.getElXCrosshairs(); - var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !this.isBarHorizontal && this.hasBars() && w.config.tooltip.shared || w.globals.comboCharts && this.hasBars; + var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.hasBars; - if (w.config.chart.type === 'bar' && this.isBarHorizontal && this.hasBars()) { + if (w.globals.isBarHorizontal && this.hasBars()) { isStickyTooltip = false; } - if (e.type === 'mousemove' || e.type === 'touchmove') { + if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { if (xcrosshairs !== null) { xcrosshairs.classList.add('active'); } @@ -17626,21 +18731,21 @@ } if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { - if (w.config.tooltip.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { - this.create(self, capturedSeries, j, opt.ttItems); + if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { + this.create(e, self, capturedSeries, j, opt.ttItems); } else { - this.create(self, capturedSeries, j, opt.ttItems, false); + this.create(e, self, capturedSeries, j, opt.ttItems, false); } } else { if (this.tooltipUtil.isXoverlap(j)) { - self.create(self, 0, j, opt.ttItems); + self.create(e, self, 0, j, opt.ttItems); } } } else { // couldn't capture any series. check if shared X is same, // if yes, draw a grouped tooltip if (this.tooltipUtil.isXoverlap(j)) { - self.create(self, 0, j, opt.ttItems); + self.create(e, self, 0, j, opt.ttItems); } } } else { @@ -17696,20 +18801,7 @@ var w = this.w; var rel = opt.paths.getAttribute('rel'); var tooltipEl = this.getElTooltip(); - var trX = 0; - var trY = 0; - var elPie = null; - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - - if (w.config.chart.type === 'radialBar') { - elPie = w.globals.dom.baseEl.querySelector('.apexcharts-radialbar'); - } else { - elPie = w.globals.dom.baseEl.querySelector('.apexcharts-pie'); - trX = parseInt(elPie.getAttribute('data:innerTranslateX')); - trY = parseInt(elPie.getAttribute('data:innerTranslateY')); - } - - var seriesBound = elPie.getBoundingClientRect(); + var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); if (e.type === 'mousemove' || e.type === 'touchmove') { tooltipEl.classList.add('active'); @@ -17718,17 +18810,9 @@ i: parseInt(rel) - 1, shared: false }); - var x = clientX - seriesBound.left - tooltipRect.ttWidth / 2.2 + trX; - var y = e.clientY - seriesBound.top - tooltipRect.ttHeight / 2 - 15 + trY; - - if (x < 0) { - x = 0; - } else if (x + tooltipRect.ttWidth > w.globals.gridWidth) { - x = clientX - seriesBound.left - tooltipRect.ttWidth + trX; - } - - if (y < 0) y = tooltipRect.ttHeight + 20; - tooltipEl.style.left = x + w.globals.translateX + 'px'; + var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; + var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; + tooltipEl.style.left = x + 'px'; tooltipEl.style.top = y + 'px'; } else if (e.type === 'mouseout' || e.type === 'touchend') { tooltipEl.classList.remove('active'); @@ -17798,7 +18882,7 @@ }, { key: "getElBars", value: function getElBars() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series'); + return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); } }, { key: "hasBars", @@ -17807,28 +18891,52 @@ return bars.length > 0; } }, { - key: "create", - value: function create(context, capturedSeries, j, ttItems) { - var shared = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; + key: "markerClick", + value: function markerClick(e, seriesIndex, dataPointIndex) { var w = this.w; - var self = context; - if (shared === null) shared = w.config.tooltip.shared; + + if (typeof w.config.chart.events.markerClick === 'function') { + w.config.chart.events.markerClick(e, this.ctx, { + seriesIndex: seriesIndex, + dataPointIndex: dataPointIndex, + w: w + }); + } + + this.ctx.fireEvent('markerClick', [e, this.ctx, { + seriesIndex: seriesIndex, + dataPointIndex: dataPointIndex, + w: w + }]); + } + }, { + key: "create", + value: function create(e, context, capturedSeries, j, ttItems) { + var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; + var w = this.w; + var ttCtx = context; + + if (e.type === 'mouseup') { + this.markerClick(e, capturedSeries, j); + } + + if (shared === null) shared = this.tConfig.shared; var hasMarkers = this.hasMarkers(); var bars = this.getElBars(); if (shared) { - self.tooltipLabels.drawSeriesTexts({ + ttCtx.tooltipLabels.drawSeriesTexts({ ttItems: ttItems, i: capturedSeries, j: j, - shared: this.showOnIntersect ? false : w.config.tooltip.shared + shared: this.showOnIntersect ? false : this.tConfig.shared }); if (hasMarkers) { if (w.globals.markers.largestSize > 0) { - self.marker.enlargePoints(j); + ttCtx.marker.enlargePoints(j); } else { - self.tooltipPosition.moveDynamicPointsOnHover(j); + ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); } } @@ -17849,7 +18957,7 @@ } } } else { - self.tooltipLabels.drawSeriesTexts({ + ttCtx.tooltipLabels.drawSeriesTexts({ shared: false, ttItems: ttItems, i: capturedSeries, @@ -17857,11 +18965,11 @@ }); if (this.hasBars()) { - self.tooltipPosition.moveStickyTooltipOverBars(j); + ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); } if (hasMarkers) { - self.tooltipPosition.moveMarkers(capturedSeries, j); + ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); } } } @@ -18695,6 +19803,7 @@ } me.drawSelectionRect(selectionRect); + me.selectionDragging('resizing'); return selectionRect; } }, { @@ -18711,7 +19820,7 @@ timerInterval = 30; } - if (typeof w.config.chart.events.selection === 'function') { + if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { // a small debouncer is required when resizing to avoid freezing the chart clearTimeout(this.w.globals.selectionResizeTimer); this.w.globals.selectionResizeTimer = window.setTimeout(function () { @@ -18805,20 +19914,10 @@ } } - if (zoomtype === 'x') { - me.ctx._updateOptions({ - xaxis: xaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } else if (zoomtype === 'y') { - me.ctx._updateOptions({ - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } else { - me.ctx._updateOptions({ - xaxis: xaxis, - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - } + me.ctx._updateOptions({ + xaxis: xaxis, + yaxis: yaxis + }, false, me.w.config.chart.animations.dynamicAnimation.enabled); if (typeof w.config.chart.events.zoomed === 'function') { toolbar.zoomCallback(xaxis, yaxis); @@ -19004,7 +20103,8 @@ define(function () { return factory(root, root.document); }); - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object') { + /* below check fixes #412 */ + } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { module.exports = root.document ? factory(root, root.document) : function (w) { return factory(w, w.document); }; @@ -26126,7 +27226,7 @@ } } - var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #222;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n.apexcharts-zoom-icon.selected svg, \n.apexcharts-selection-icon.selected svg, \n.apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.apexcharts-selection-icon:not(.selected):hover svg,\n.apexcharts-zoom-icon:not(.selected):hover svg, \n.apexcharts-zoom-in-icon:hover svg, \n.apexcharts-zoom-out-icon:hover svg, \n.apexcharts-reset-zoom-icon:hover svg, \n.apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.apexcharts-menu-item:hover {\n background: #eee;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; + var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; styleInject(css); /* @@ -26606,24 +27706,23 @@ }, { key: "initModules", value: function initModules() { - this.animations = new Animations(this.ctx); - this.annotations = new Annotations(this.ctx); + this.animations = new Animations(this); this.core = new Core(this.el, this); this.grid = new Grid(this); this.coreUtils = new CoreUtils(this); this.config = new Config({}); - this.crosshairs = new Crosshairs(this.ctx); + this.crosshairs = new Crosshairs(this); this.options = new Options(); - this.responsive = new Responsive(this.ctx); - this.series = new Series(this.ctx); - this.theme = new Theme(this.ctx); - this.formatters = new Formatters(this.ctx); - this.titleSubtitle = new TitleSubtitle(this.ctx); - this.legend = new Legend(this.ctx); - this.toolbar = new Toolbar(this.ctx); - this.dimensions = new Dimensions(this.ctx); - this.zoomPanSelection = new ZoomPanSelection(this.ctx); - this.w.globals.tooltip = new Tooltip(this.ctx); + this.responsive = new Responsive(this); + this.series = new Series(this); + this.theme = new Theme(this); + this.formatters = new Formatters(this); + this.titleSubtitle = new TitleSubtitle(this); + this.legend = new Legend(this); + this.toolbar = new Toolbar(this); + this.dimensions = new Dimensions(this); + this.zoomPanSelection = new ZoomPanSelection(this); + this.w.globals.tooltip = new Tooltip(this); } }, { key: "addEventListener", @@ -26702,14 +27801,15 @@ this.series.handleNoData(); } - this.setupEventHandlers(); + this.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time + this.core.parseData(ser); // this is a good time to set theme colors first - this.theme.init(); // labelFormatters should be called before dimensions as in dimensions we need text labels width - // as markers accepts array, we need to setup global markers for easier access + this.theme.init(); // as markers accepts array, we need to setup global markers for easier access var markers = new Markers(this); - markers.setGlobalMarkerSize(); + markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width + this.formatters.setLabelFormatters(); this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area @@ -26765,6 +27865,7 @@ me.series.handleNoData(); } + me.annotations = new Annotations(me); me.core.drawAxis(w.config.chart.type, graphData.xyRatios); me.grid = new Grid(me); @@ -26865,9 +27966,9 @@ if (options$$1.series[0].data) { options$$1.series = options$$1.series.map(function (s, i) { return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i].name, - type: s.type, - data: s.data + name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, + type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, + data: s.data ? s.data : w.config.series[i] && w.config.series[i].data }); }); } // user updated the series via updateOptions() function. @@ -26893,6 +27994,12 @@ if (w.globals.collapsedSeriesIndices.length > 0) { this.clearPreviousPaths(); } + /* update theme mode#459 */ + + + if (options$$1.theme) { + options$$1 = this.theme.updateThemeOptions(options$$1); + } return this._updateOptions(options$$1, redraw, animate, overwriteInitialConfig); } @@ -26968,10 +28075,11 @@ key: "appendSeries", value: function appendSeries(newSerie) { var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var newSeries = this.w.config.series.slice(); newSeries.push(newSerie); this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate); + return this._updateSeries(newSeries, animate, overwriteInitialSeries); } /** * Private method to update Series. @@ -26997,14 +28105,21 @@ var existingSeries; // axis charts - if (newSeries[0].data) { + if (w.globals.axisCharts) { existingSeries = newSeries.map(function (s, i) { return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i].name, - type: s.type, - data: s.data + name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, + type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, + data: s.data ? s.data : w.config.series[i] && w.config.series[i].data }); }); + + if (existingSeries.length === 0) { + existingSeries = [{ + data: [] + }]; + } + w.config.series = existingSeries; } else { // non-axis chart (pie/radialbar) @@ -27275,6 +28390,12 @@ passive: true }); }); + eventList.forEach(function (event) { + document.addEventListener(event, function (e) { + w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; + w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; + }); + }); this.core.setupBrushHandler(); } }, { @@ -27404,12 +28525,6 @@ throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); } } - }, { - key: "svgUrl", - value: function svgUrl() { - var exp = new Exports(this.ctx); - return exp.svgUrl(); - } }, { key: "dataURI", value: function dataURI() { @@ -27499,6 +28614,21 @@ return chart.appendData.apply(chart, opts); } + case 'appendSeries': + { + return chart.appendSeries.apply(chart, opts); + } + + case 'toggleSeries': + { + return chart.toggleSeries.apply(chart, opts); + } + + case 'dataURI': + { + return chart.dataURI.apply(chart, opts); + } + case 'addXaxisAnnotation': { return chart.addXaxisAnnotation.apply(chart, opts); @@ -27514,11 +28644,21 @@ return chart.addPointAnnotation.apply(chart, opts); } + case 'addText': + { + return chart.addText.apply(chart, opts); + } + case 'clearAnnotations': { return chart.clearAnnotations.apply(chart, opts); } + case 'paper': + { + return chart.paper.apply(chart, opts); + } + case 'destroy': { return chart.destroy(); diff --git a/static/libs/apexcharts/apexcharts.min.js b/static/libs/apexcharts/apexcharts.min.js index 1c05584b7..7b07a5a6f 100644 --- a/static/libs/apexcharts/apexcharts.min.js +++ b/static/libs/apexcharts/apexcharts.min.js @@ -1,6 +1,6 @@ /*! - * ApexCharts v3.6.2 + * ApexCharts v3.6.12 * (c) 2018-2019 Juned Chhipa * Released under the MIT License. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).ApexCharts=e()}(this,function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var i=0;i>16,r=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((s-n)*a)+n)+256*(Math.round((s-r)*a)+r)+(Math.round((s-o)*a)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(t,e){return e.length>7?this.shadeRGBColor(t,e):this.shadeHexColor(t,e)}}],[{key:"bind",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:"isObject",value:function(e){return e&&"object"===t(e)&&!Array.isArray(e)&&null!=e}},{key:"extend",value:function(t,e){var i=this;"function"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),i=1;i1?(e.shift(),this.addProps(s,e,i)):t[e[0]]=i,t}},{key:"clone",value:function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var i=[],s=0;s0&&void 0!==arguments[0]?arguments[0]:"#999999",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;"#"!==t.substring(0,1)&&(t="#999999");var i=t.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:"x",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,e)}},{key:"negToZero",value:function(t){return t<0?0:t}},{key:"moveIndexInArray",value:function(t,e,i){if(i>=t.length)for(var s=i-t.length+1;s--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:"extractNumber",value:function(t){return parseFloat(t.replace(/[^\d\.]*/g,""))}},{key:"randomString",value:function(t){for(var e="",i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",s=0;s-1}},{key:"isIE11",value:function(){if(-1!==window.navigator.userAgent.indexOf("MSIE")||window.navigator.appVersion.indexOf("Trident/")>-1)return!0}},{key:"isIE",value:function(){var t=window.navigator.userAgent,e=t.indexOf("MSIE ");if(e>0)return parseInt(t.substring(e+5,t.indexOf(".",e)),10);if(t.indexOf("Trident/")>0){var i=t.indexOf("rv:");return parseInt(t.substring(i+3,t.indexOf(".",i)),10)}var s=t.indexOf("Edge/");return s>0&&parseInt(t.substring(s+5,t.indexOf(".",s)),10)}}]),i}(),u=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getDefaultFilter",value:function(t){var e=this.w;t.unfilter(!0),(new window.SVG.Filter).size("120%","180%","-5%","-40%"),"none"!==e.config.states.normal.filter?this.applyFilter(t,e.config.states.normal.filter.type,e.config.states.normal.filter.value):e.config.chart.dropShadow.enabled&&this.dropShadow(t,e.config.chart.dropShadow)}},{key:"addNormalFilter",value:function(t){var e=this.w;e.config.chart.dropShadow.enabled&&this.dropShadow(t,e.config.chart.dropShadow)}},{key:"addDesaturateFilter",value:function(t){var e=this,i=this.w;t.unfilter(!0);var s=new window.SVG.Filter;s.size("120%","180%","-5%","-40%"),t.filter(function(t){var a=i.config.chart.dropShadow;(s=a.enabled?e.addShadow(t,a):t).colorMatrix("matrix",[0,0,0,0,.5,0,0,0,0,.5,0,0,0,0,.5,0,0,0,1,0]).colorMatrix("saturate",0)}),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse")}},{key:"addLightenFilter",value:function(t,e){var i=this,s=this.w,a=e.intensity;if(!d.isFirefox()){t.unfilter(!0);var n=new window.SVG.Filter;n.size("120%","180%","-5%","-40%"),t.filter(function(t){var e=s.config.chart.dropShadow;(n=e.enabled?i.addShadow(t,e):t).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:a}})}),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse")}}},{key:"addDarkenFilter",value:function(t,e){var i=this,s=this.w,a=e.intensity;if(!d.isFirefox()){t.unfilter(!0);var n=new window.SVG.Filter;n.size("120%","180%","-5%","-40%"),t.filter(function(t){var e=s.config.chart.dropShadow;(n=e.enabled?i.addShadow(t,e):t).componentTransfer({rgb:{type:"linear",slope:a}})}),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse")}}},{key:"applyFilter",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.5;switch(e){case"none":this.addNormalFilter(t);break;case"lighten":this.addLightenFilter(t,{intensity:i});break;case"darken":this.addDarkenFilter(t,{intensity:i});break;case"desaturate":this.addDesaturateFilter(t)}}},{key:"addShadow",value:function(t,e){var i=e.blur,s=e.top,a=e.left,n=e.color,r=e.opacity,o=t.flood(n,r).composite(t.sourceAlpha,"in").offset(a,s).gaussianBlur(i).merge(t.source);return t.blend(t.source,o)}},{key:"dropShadow",value:function(t,e){var i=e.top,s=e.left,a=e.blur,n=e.color,r=e.opacity,o=e.noUserSpaceOnUse;return t.unfilter(!0),(new window.SVG.Filter).size("120%","180%","-5%","-40%"),t.filter(function(t){var e=null;e=d.isSafari()||d.isFirefox()||d.isIE()?t.flood(n,r).composite(t.sourceAlpha,"in").offset(s,i).gaussianBlur(a):t.flood(n,r).composite(t.sourceAlpha,"in").offset(s,i).gaussianBlur(a).merge(t.source),t.blend(t.source,e)}),o||t.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),t}},{key:"setSelectionFilter",value:function(t,e,i){var s=this.w;if(void 0!==s.globals.selectedDataPoints[e]&&s.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute("selected",!0);var a=s.config.states.active.filter;"none"!==a&&this.applyFilter(t,a.type,a.value)}}}]),t}(),g=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.setEasingFunctions()}return s(t,[{key:"setEasingFunctions",value:function(){var t;switch(this.w.config.chart.animations.easing){case"linear":t="-";break;case"easein":t="<";break;case"easeout":t=">";break;case"easeinout":t="<>";break;case"swing":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case"bounce":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1};break;default:t="<>"}this.w.globals.easing=t}},{key:"animateLine",value:function(t,e,i,s){t.attr(e).animate(s).attr(i)}},{key:"animateCircleRadius",value:function(t,e,i,s,a){e||(e=0),t.attr({r:e}).animate(s,a).attr({r:i})}},{key:"animateCircle",value:function(t,e,i,s,a){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(s,a).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:"animateRect",value:function(t,e,i,s,a){t.attr(e).animate(s).attr(i).afterAll(function(){a()})}},{key:"animatePathsGradually",value:function(t){var e=t.el,i=t.j,s=t.pathFrom,a=t.pathTo,n=t.speed,r=t.delay,o=t.strokeWidth,l=this.w,h=0;l.config.chart.animations.animateGradually.enabled&&(h=l.config.chart.animations.animateGradually.delay),l.config.chart.animations.dynamicAnimation.enabled&&l.globals.dataChanged&&(h=0),this.morphSVG(e,i,s,a,n,o,r*h)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach(function(t){t.el.classList.remove("hidden")})}},{key:"morphSVG",value:function(t,e,i,s,a,n,r){var o=this,l=this.w;i||(i=t.attr("pathFrom")),s||(s=t.attr("pathTo")),(!i||i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(l.globals.gridHeight),a=1),(s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s="M 0 ".concat(l.globals.gridHeight),a=1),l.globals.shouldAnimate||(a=1),t.plot(i).animate(1,l.globals.easing,r).plot(i).animate(a,l.globals.easing,r).plot(s).afterAll(function(){d.isNumber(e)?e===l.globals.series[l.globals.maxValsInArrayIndex].length-2&&l.globals.shouldAnimate&&(l.globals.animationEnded=!0):l.globals.shouldAnimate&&(l.globals.animationEnded=!0,"function"==typeof l.config.chart.events.animationEnd&&l.config.chart.events.animationEnd(o.ctx,l)),o.showDelayedElements()})}}]),t}(),f=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"drawLine",value:function(t,e,i,s){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"#a8a8a8",n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;return this.w.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:s,stroke:a,"stroke-dasharray":n,"stroke-width":r})}},{key:"drawRect",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"#fefefe",r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w.globals.dom.Paper.rect();return c.attr({x:t,y:e,width:i>0?i:0,height:s>0?s:0,rx:a,ry:a,fill:n,opacity:r,"stroke-width":null!==o?o:0,stroke:null!==l?l:"none","stroke-dasharray":h}),c}},{key:"drawPolygon",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#e1e1e1",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none";return this.w.globals.dom.Paper.polygon(t).attr({fill:i,stroke:e})}},{key:"drawCircle",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w.globals.dom.Paper.circle(2*t);return null!==e&&i.attr(e),i}},{key:"drawPath",value:function(t){var e=t.d,i=void 0===e?"":e,s=t.stroke,a=void 0===s?"#a8a8a8":s,n=t.strokeWidth,r=void 0===n?1:n,o=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,u=t.classes,g=t.strokeLinecap,f=void 0===g?null:g,p=t.strokeDashArray,x=void 0===p?0:p,m=this.w;return null===f&&(f=m.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(m.globals.gridHeight)),m.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":h,stroke:a,"stroke-opacity":d,"stroke-linecap":f,"stroke-width":r,"stroke-dasharray":x,class:u})}},{key:"group",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w.globals.dom.Paper.group();return null!==t&&e.attr(t),e}},{key:"move",value:function(t,e){var i=["M",t,e].join(" ");return i}},{key:"line",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=null;return null===i?s=["L",t,e].join(" "):"H"===i?s=["H",t].join(" "):"V"===i&&(s=["V",e].join(" ")),s}},{key:"curve",value:function(t,e,i,s,a,n){var r=["C",t,e,i,s,a,n].join(" ");return r}},{key:"quadraticCurve",value:function(t,e,i,s){return["Q",t,e,i,s].join(" ")}},{key:"arc",value:function(t,e,i,s,a,n,r){var o="A";arguments.length>7&&void 0!==arguments[7]&&arguments[7]&&(o="a");var l=[o,t,e,i,s,a,n,r].join(" ");return l}},{key:"renderPaths",value:function(t){var e,i=t.i,s=t.j,a=t.realIndex,r=t.pathFrom,o=t.pathTo,l=t.stroke,h=t.strokeWidth,c=t.strokeLinecap,d=t.fill,f=t.animationDelay,p=t.initialSpeed,x=t.dataChangeSpeed,m=t.className,v=t.id,b=t.shouldClipToGrid,y=void 0===b||b,w=t.bindEventsOnPaths,k=void 0===w||w,A=this.w,S=new u(this.ctx),C=new g(this.ctx),L=this.w.config.chart.animations.enabled,z=L&&this.w.config.chart.animations.dynamicAnimation.enabled,M=!!(L&&!A.globals.resized||z&&A.globals.dataChanged&&A.globals.shouldAnimate);M?e=r:(e=o,this.w.globals.animationEnded=!0);var P=A.config.stroke.dashArray,E=0;E=Array.isArray(P)?P[a]:A.config.stroke.dashArray;var T=this.drawPath({d:e,stroke:l,strokeWidth:h,fill:d,fillOpacity:1,classes:m,strokeLinecap:c,strokeDashArray:E});if(T.attr("id","".concat(v,"-").concat(i)),T.attr("index",a),y&&T.attr({"clip-path":"url(#gridRectMask".concat(A.globals.cuid,")")}),"none"!==A.config.states.normal.filter.type)S.getDefaultFilter(T,A.config.states.normal.filter.type,A.config.states.normal.filter.value);else if(A.config.chart.dropShadow.enabled&&(!A.config.chart.dropShadow.enabledSeries||A.config.chart.dropShadow.enabledSeries&&-1!==A.config.chart.dropShadow.enabledSeries.indexOf(a))){var X=A.config.chart.dropShadow;S.dropShadow(T,X)}k&&(T.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,T)),T.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,T)),T.node.addEventListener("mousedown",this.pathMouseDown.bind(this,T))),T.attr({pathTo:o,pathFrom:r});var I={el:T,j:s,pathFrom:r,pathTo:o,strokeWidth:h};return!L||A.globals.resized||A.globals.dataChanged?!A.globals.resized&&A.globals.dataChanged||C.showDelayedElements():C.animatePathsGradually(n({},I,{speed:p,delay:f})),A.globals.dataChanged&&z&&M&&C.animatePathsGradually(n({},I,{speed:x})),T}},{key:"drawPattern",value:function(t,e,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#a8a8a8",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return this.w.globals.dom.Paper.pattern(e,i,function(n){"horizontalLines"===t?n.line(0,0,i,0).stroke({color:s,width:a+1}):"verticalLines"===t?n.line(0,0,0,e).stroke({color:s,width:a+1}):"slantedLines"===t?n.line(0,0,e,i).stroke({color:s,width:a}):"squares"===t?n.rect(e,i).fill("none").stroke({color:s,width:a}):"circles"===t&&n.circle(e).fill("none").stroke({color:s,width:a})})}},{key:"drawGradient",value:function(t,e,i,s,a){var n,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e=d.hexToRgba(e,s),i=d.hexToRgba(i,a);var u=0,g=1,f=1,p=null;null!==o&&(u=void 0!==o[0]?o[0]/100:0,g=void 0!==o[1]?o[1]/100:1,f=void 0!==o[2]?o[2]/100:1,p=void 0!==o[3]?o[3]/100:null);var x=!("donut"!==c.config.chart.type&&"pie"!==c.config.chart.type&&"bubble"!==c.config.chart.type);if(n=null===l||0===l.length?c.globals.dom.Paper.gradient(x?"radial":"linear",function(t){t.at(u,e,s),t.at(g,i,a),t.at(f,i,a),null!==p&&t.at(p,e,s)}):c.globals.dom.Paper.gradient(x?"radial":"linear",function(t){(Array.isArray(l[h])?l[h]:l).forEach(function(e){t.at(e.offset/100,e.color,e.opacity)})}),x){var m=c.globals.gridWidth/2,v=c.globals.gridHeight/2;"bubble"!==c.config.chart.type?n.attr({gradientUnits:"userSpaceOnUse",cx:m,cy:v,r:r}):n.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else"vertical"===t?n.from(0,0).to(0,1):"diagonal"===t?n.from(0,0).to(1,1):"horizontal"===t?n.from(0,1).to(1,1):"diagonal2"===t&&n.from(0,1).to(2,2);return n}},{key:"drawText",value:function(t){var e,i=this.w,s=t.x,a=t.y,n=t.text,r=t.textAnchor,o=t.fontSize,l=t.fontFamily,h=t.foreColor,c=t.opacity;return r||(r="start"),h||(h=i.config.chart.foreColor),l=l||i.config.chart.fontFamily,(e=Array.isArray(n)?i.globals.dom.Paper.text(function(t){for(var e=0;e-1){var o=i.globals.selectedDataPoints[a].indexOf(n);i.globals.selectedDataPoints[a].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(".apexcharts-series path").members,h=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members;l.forEach(function(t){t.node.setAttribute("selected","false"),s.getDefaultFilter(t)}),h.forEach(function(t){t.node.setAttribute("selected","false"),s.getDefaultFilter(t)})}t.node.setAttribute("selected","true"),r="true",void 0===i.globals.selectedDataPoints[a]&&(i.globals.selectedDataPoints[a]=[]),i.globals.selectedDataPoints[a].push(n)}if("true"===r){var c=i.config.states.active.filter;"none"!==c&&s.applyFilter(t,c.type,c.value)}else"none"!==i.config.states.active.filter.type&&s.getDefaultFilter(t);"function"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:a,dataPointIndex:n,w:i}),this.ctx.fireEvent("dataPointSelection",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:a,dataPointIndex:n,w:i}])}},{key:"rotateAroundCenter",value:function(t){var e=t.getBBox();return{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:"getTextRects",value:function(t,e,i,s){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],n=this.w,r=this.drawText({x:-200,y:-200,text:t,textAnchor:"start",fontSize:e,fontFamily:i,foreColor:"#fff",opacity:0});s&&r.attr("transform",s),n.globals.dom.Paper.add(r);var o=r.bbox();return a||(o=r.node.getBoundingClientRect()),r.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(t,e,i){if(t.textContent=e,e.length>0&&t.getSubStringLength(0,e.length)>=i){for(var s=e.length-3;s>0;s-=3)if(t.getSubStringLength(0,s)<=i)return void(t.textContent=e.substring(0,s)+"...");t.textContent="..."}}}],[{key:"setAttrs",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}();var p={name:"en",options:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},x=function(){function t(){e(this,t),this.yAxis={show:!0,showAlways:!1,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:2,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#78909C",offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#78909C",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.xAxisAnnotation={x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.yAxisAnnotation={y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",opacity:.3,offsetX:0,offsetY:0,yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:0,bottom:2}}}},this.pointAnnotation={x:0,y:null,yAxisIndex:0,seriesIndex:0,marker:{size:0,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,radius:2,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"middle",offsetX:0,offsetY:-15,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:0,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0}}}return s(t,[{key:"init",value:function(){return{annotations:{position:"front",yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"transparent",locales:[p],defaultLocale:"en",dropShadow:{enabled:!1,enabledSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,legendClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,zoomed:void 0,scrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!1,target:void 0},stacked:!1,stackType:"normal",toolbar:{show:!0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{bar:{horizontal:!1,endingShape:"flat",columnWidth:"70%",barHeight:"70%",distributed:!1,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1},dataLabels:{position:"top"}},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,distributed:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{size:void 0,inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,color:void 0,offsetY:0},value:{show:!0,fontSize:"14px",fontFamily:void 0,color:void 0,offsetY:16,formatter:function(t){return t+"%"}},total:{show:!1,label:"Total",color:"#373d3f",formatter:function(t){return t.globals.seriesTotals.reduce(function(t,e){return t+e},0)/t.globals.series.length+"%"}}}},pie:{size:void 0,customScale:1,offsetX:0,offsetY:0,expandOnClick:!0,dataLabels:{offset:0},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,color:void 0,offsetY:-10},value:{show:!0,fontSize:"20px",fontFamily:void 0,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,label:"Total",color:"#373d3f",formatter:function(t){return t.globals.seriesTotals.reduce(function(t,e){return t+e},0)}}}}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return t},textAnchor:"middle",offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,colors:void 0},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"sqaures",width:6,height:6,strokeWidth:2}},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1,animate:!1}},yaxis:{lines:{show:!0,animate:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",fontSize:"12px",fontFamily:void 0,width:void 0,height:void 0,formatter:void 0,offsetX:-20,offsetY:0,labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,strokeColor:"#fff",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:0,vertical:5},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,fillOpacity:1,shape:"circle",radius:2,offsetX:0,offsetY:0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.15}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.65}}},title:{text:void 0,align:"left",margin:10,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:10,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0},tooltip:{enabled:!0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],offsetX:0,offsetY:0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!0,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss"}},axisBorder:{show:!0,color:"#78909C",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#78909C",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),t}(),m=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.graphics=new f(this.ctx),"bar"===this.w.config.chart.type&&this.w.config.plotOptions.bar.horizontal&&(this.invertAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return s(t,[{key:"drawAnnotations",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.drawYAxisAnnotations(),i=this.drawXAxisAnnotations(),s=this.drawPointAnnotations(),a=t.config.chart.animations.enabled,n=[e,i,s],r=[i.node,e.node,s.node],o=0;o<3;o++)t.globals.dom.elGraphical.add(n[o]),!a||t.globals.resized||t.globals.dataChanged||r[o].classList.add("hidden"),t.globals.delayedElements.push({el:r[o],index:0});this.setOrientations(t.config.annotations.xaxis),this.annotationsBackground()}}},{key:"addXaxisAnnotation",value:function(t,e,i){var s=this.w,a=this.invertAxis?s.globals.minY:s.globals.minX,n=this.invertAxis?s.globals.yRange[0]:s.globals.xRange,r=(t.x-a)/(n/s.globals.gridWidth);if("category"===s.config.xaxis.type||s.config.xaxis.convertedCatToNumeric){var o=s.globals.labels.indexOf(t.x),l=s.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(o+1)+")");r=parseFloat(l.getAttribute("x"))}var h=t.strokeDashArray;if(!(r<0||r>s.globals.gridWidth)){if(null===t.x2){var c=this.graphics.drawLine(r+t.offsetX,0+t.offsetY,r+t.offsetX,s.globals.gridHeight+t.offsetY,t.borderColor,h);e.appendChild(c.node)}else{var d=(t.x2-a)/(n/s.globals.gridWidth);if(ds){var g=s;s=a,a=g}var f=this.graphics.drawRect(0+t.offsetX,a+t.offsetY,n.globals.gridWidth+t.offsetX,s-a,0,t.fillColor,t.opacity,1,t.borderColor,r);e.appendChild(f.node)}var p="right"===t.label.position?n.globals.gridWidth:0,x=this.graphics.drawText({x:p+t.label.offsetX,y:(a||s)+t.label.offsetY-3,text:h,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,foreColor:t.label.style.color,cssClass:"apexcharts-yaxis-annotation-label "+t.label.style.cssClass});x.attr({rel:i}),e.appendChild(x.node)}},{key:"drawYAxisAnnotations",value:function(){var t=this,e=this.w,i=this.graphics.group({class:"apexcharts-yaxis-annotations"});return e.config.annotations.yaxis.map(function(e,s){t.addYaxisAnnotation(e,i.node,s)}),i}},{key:"clearAnnotations",value:function(t){t.w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations").forEach(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)})}},{key:"addPointAnnotation",value:function(t,e,i){var s=this.w,a=0,n=0,r=0;if(this.invertAxis&&console.warn("Point annotation is not supported in horizontal bar charts."),"string"==typeof t.x){var o=s.globals.labels.indexOf(t.x),l=s.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(o+1)+")");a=parseFloat(l.getAttribute("x"));var h=t.y;null===t.y&&(h=s.globals.series[t.seriesIndex][o]),n=s.globals.gridHeight-(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=s.globals.gridHeight-(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight),s.config.yaxis[t.yAxisIndex].reversed&&(n=(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)+parseInt(t.label.style.fontSize)+t.marker.size,r=(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight))}else a=(t.x-s.globals.minX)/(s.globals.xRange/s.globals.gridWidth),n=s.globals.gridHeight-(parseFloat(t.y)-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=s.globals.gridHeight-(t.y-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight),s.config.yaxis[t.yAxisIndex].reversed&&(n=(parseFloat(t.y)-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=(t.y-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight));if(!(a<0||a>s.globals.gridWidth)){var c={pSize:t.marker.size,pWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,radius:t.marker.radius,class:"apexcharts-point-annotation-marker "+t.marker.cssClass},d=this.graphics.drawMarker(a+t.marker.offsetX,r+t.marker.offsetY,c);e.appendChild(d.node);var u=t.label.text?t.label.text:"",g=this.graphics.drawText({x:a+t.label.offsetX,y:n+t.label.offsetY,text:u,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,foreColor:t.label.style.color,cssClass:"apexcharts-point-annotation-label "+t.label.style.cssClass});if(g.attr({rel:i}),e.appendChild(g.node),t.customSVG.SVG){var f=this.graphics.group({class:"apexcharts-point-annotations-custom-svg "+t.customSVG.cssClass});f.attr({transform:"translate(".concat(a+t.customSVG.offsetX,", ").concat(n+t.customSVG.offsetY,")")}),f.node.innerHTML=t.customSVG.SVG,e.appendChild(f.node)}}}},{key:"drawPointAnnotations",value:function(){var t=this,e=this.w,i=this.graphics.group({class:"apexcharts-point-annotations"});return e.config.annotations.points.map(function(e,s){t.addPointAnnotation(e,i.node,s)}),i}},{key:"setOrientations",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,s=this.w;t.map(function(t,a){if("vertical"===t.label.orientation){var n=null!==i?i:a,r=s.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(n,"']"));if(null!==r){var o=r.getBoundingClientRect();r.setAttribute("x",parseFloat(r.getAttribute("x"))-o.height+4),"top"===t.label.position?r.setAttribute("y",parseFloat(r.getAttribute("y"))+o.width):r.setAttribute("y",parseFloat(r.getAttribute("y"))-o.width);var l=e.graphics.rotateAroundCenter(r),h=l.x,c=l.y;r.setAttribute("transform","rotate(-90 ".concat(h," ").concat(c,")"))}}})}},{key:"addBackgroundToAnno",value:function(t,e){var i=this.w.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),s=t.getBoundingClientRect(),a=e.label.style.padding.left,n=e.label.style.padding.right,r=e.label.style.padding.top,o=e.label.style.padding.bottom;"vertical"===e.label.orientation&&(r=e.label.style.padding.left,o=e.label.style.padding.right,a=e.label.style.padding.top,n=e.label.style.padding.bottom);var l=s.left-i.left-a,h=s.top-i.top-r;return this.graphics.drawRect(l,h,s.width+a+n,s.height+r+o,0,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0)}},{key:"annotationsBackground",value:function(){var t=this,e=this.w,i=function(i,s,a){var n=e.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations .apexcharts-").concat(a,"-annotation-label[rel='").concat(s,"']"));if(n){var r=n.parentNode,o=t.addBackgroundToAnno(n,i);r.insertBefore(o.node,n)}};e.config.annotations.xaxis.map(function(t,e){i(t,e,"xaxis")}),e.config.annotations.yaxis.map(function(t,e){i(t,e,"yaxis")}),e.config.annotations.points.map(function(t,e){i(t,e,"point")})}},{key:"addText",value:function(t,e,i){var s=t.x,a=t.y,n=t.text,r=t.textAnchor,o=t.appendTo,l=void 0===o?".apexcharts-inner":o,h=t.foreColor,c=t.fontSize,d=t.fontFamily,u=t.cssClass,g=t.backgroundColor,f=t.borderWidth,p=t.strokeDashArray,x=t.radius,m=t.borderColor,v=t.paddingLeft,b=void 0===v?4:v,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=i,z=L.w,M=z.globals.dom.baseEl.querySelector(l),P=this.graphics.drawText({x:s,y:a,text:n,textAnchor:r||"start",fontSize:c||"12px",fontFamily:d||z.config.chart.fontFamily,foreColor:h||z.config.chart.foreColor,cssClass:u});M.appendChild(P.node);var E=P.bbox(),T=this.graphics.drawRect(E.x-b,E.y-C,E.width+b+w,E.height+A+C,x,g,1,f,m,p);return P.before(T),e&&z.globals.memory.methodsToExec.push({context:L,method:L.addText,params:{x:s,y:a,text:n,textAnchor:r,appendTo:l,foreColor:h,fontSize:c,cssClass:u,backgroundColor:g,borderWidth:f,strokeDashArray:p,radius:x,borderColor:m,paddingLeft:b,paddingRight:w,paddingBottom:A,paddingTop:C}}),i}},{key:"addPointAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addXaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addAnnotationExternal",value:function(t){var e=t.params,i=t.pushToMemory,s=t.context,a=t.type,n=t.contextMethod,r=s,o=r.w,l=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations")),h=l.childNodes.length+1,c=new x,u=Object.assign({},"xaxis"===a?c.xAxisAnnotation:"yaxis"===a?c.yAxisAnnotation:c.pointAnnotation),g=d.extend(u,e);switch(a){case"xaxis":this.addXaxisAnnotation(g,l,h);break;case"yaxis":this.addYaxisAnnotation(g,l,h);break;case"point":this.addPointAnnotation(g,l,h)}var f=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations .apexcharts-").concat(a,"-annotation-label[rel='").concat(h,"']")),p=this.addBackgroundToAnno(f,g);return l.insertBefore(p.node,f),i&&o.globals.memory.methodsToExec.push({context:r,method:n,params:e}),s}}]),t}(),v=function(){function t(i){e(this,t),this.opts=i}return s(t,[{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(t){this.opts.yaxis[0].labels.show=!1,this.opts.yaxis[0].floating=!0;return d.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]}},stroke:{width:0},fill:{opacity:.85},legend:{markers:{shape:"square",radius:2,size:8}},tooltip:{shared:!1},xaxis:{tooltip:{enabled:!1},crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"candlestick",value:function(){return{stroke:{width:1,colors:["#333"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var e=t.seriesIndex,i=t.dataPointIndex,s=t.w;return'
Open: '+s.globals.seriesCandleO[e][i]+'
High: '+s.globals.seriesCandleH[e][i]+'
Low: '+s.globals.seriesCandleL[e][i]+'
Close: '+s.globals.seriesCandleC[e][i]+"
"}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"area",value:function(){return{stroke:{width:4},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"brush",value:function(t){return d.extend(t,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(){var t=this;this.opts.dataLabels=this.opts.dataLabels||{},this.opts.dataLabels.formatter=this.opts.dataLabels.formatter||void 0;var e=this.opts.dataLabels.formatter;this.opts.yaxis.forEach(function(e,i){t.opts.yaxis[i].min=0,t.opts.yaxis[i].max=100}),"bar"===this.opts.chart.type&&(this.opts.dataLabels.formatter=e||function(t){return"number"==typeof t&&t?t.toFixed(0)+"%":t})}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:2,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1,zoom:{enabled:!1}},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"dark",shadeIntensity:.35,inverseColors:!1,stops:[0,100,100]}},padding:{right:0,left:0},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"vertical",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},padding:{right:0,left:0},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.style.fontSize="13px",this.opts.yaxis[0].labels.offsetY=6,{dataLabels:{enabled:!0,style:{colors:["#a8a8a8"],fontSize:"11px"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},padding:{right:0,left:0},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}}],[{key:"convertCatToNumeric",value:function(t){t.xaxis.type="numeric",t.xaxis.convertedCatToNumeric=!0,t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return t},t.chart=t.chart||{},t.chart.zoom=t.chart.zoom||window.Apex.chart&&window.Apex.chart.zoom||{};var e=t.xaxis.labels.formatter,i=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(t.xaxis.labels.formatter=function(t){return e(i[t-1])}),t.xaxis.categories=[],t.labels=[],t.chart.zoom.enabled=!1,t}}]),t}(),b=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getStackedSeriesTotals",value:function(){for(var t=this.w,e=[],i=0;i0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce(function(t,e){return t+e},0):this.w.globals.series[t].reduce(function(t,e){return t+e},0)}},{key:"isSeriesNull",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter(function(t){return null!==t}):this.w.globals.series[t].filter(function(t){return null!==t})).length}},{key:"seriesHaveSameValues",value:function(t){return this.w.globals.series[t].every(function(t,e,i){return t===i[0]})}},{key:"getLargestSeries",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map(function(t){return t.length}).indexOf(Math.max.apply(Math,t.globals.series.map(function(t){return t.length})))}},{key:"getLargestMarkerSize",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach(function(t){e=Math.max(e,t)}),t.globals.markers.largestSize=e,e}},{key:"getSeriesTotals",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map(function(t,e){var i=0;if(Array.isArray(t))for(var s=0;st&&i.globals.seriesX[a][r]1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return"bar"===e.chart.type&&e.tooltip.shared&&("barWidth"===e.xaxis.crosshairs.width&&e.series.length>1&&(console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'),e.xaxis.crosshairs.width="tickWidth"),e.plotOptions.bar.horizontal&&(e.states.hover.type="none"),e.tooltip.followCursor||(console.warn("followCursor option in shared columns cannot be turned off."),e.tooltip.followCursor=!0)),"candlestick"===e.chart.type&&e.yaxis[0].reversed&&(console.warn("Reversed y-axis in candlestick chart is not supported."),e.yaxis[0].reversed=!1),e.chart.group&&0===e.yaxis[0].labels.minWidth&&console.warn("It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour."),Array.isArray(e.stroke.width)&&"line"!==e.chart.type&&"area"!==e.chart.type&&(console.warn("stroke.width option accepts array only for line and area charts. Reverted back to Number"),e.stroke.width=e.stroke.width[0]),e}}]),i}(),w=function(){function t(){e(this,t)}return s(t,[{key:"globalVars",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,initialConfig:null,lastXAxis:[],lastYAxis:[],series:[],seriesPercent:[],seriesTotals:[],stackedSeriesTotals:[],seriesX:[],seriesZ:[],labels:[],timelineLabels:[],seriesNames:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],selectedDataPoints:[],ignoreYAxisIndexes:[],padHorizontal:0,maxValsInArrayIndex:0,zoomEnabled:"zoom"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:"pan"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:"selection"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,minY:Number.MIN_VALUE,maxY:-Number.MAX_VALUE,minYArr:[],maxYArr:[],maxX:-Number.MAX_VALUE,initialmaxX:-Number.MAX_VALUE,minX:Number.MIN_VALUE,initialminX:Number.MIN_VALUE,minZ:Number.MIN_VALUE,maxZ:-Number.MAX_VALUE,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yRange:[],zRange:0,xRange:0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,delayedElements:[],axisCharts:!0,isXNumeric:!1,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,comboChartsHasBars:!1,dataChanged:!1,previousPaths:[],seriesXvalues:[],seriesYvalues:[],seriesCandleO:[],seriesCandleH:[],seriesCandleL:[],seriesCandleC:[],allSeriesHasEqualX:!0,dataPoints:0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,yAxisScale:[],xAxisScale:null,xAxisTicksPositions:[],timescaleTicks:[],rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yLabelsCoords:[],yTitleCoords:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null,tooltipOpts:null}}},{key:"init",value:function(t){var e=this.globalVars(t);return e.initialConfig=d.extend({},t),e.initialSeries=JSON.parse(JSON.stringify(e.initialConfig.series)),e.lastXAxis=JSON.parse(JSON.stringify(e.initialConfig.xaxis)),e.lastYAxis=JSON.parse(JSON.stringify(e.initialConfig.yaxis)),e}}]),t}(),k=function(){function t(i){e(this,t),this.opts=i}return s(t,[{key:"init",value:function(){var t=new y(this.opts).init();return{config:t,globals:(new w).init(t)}}}]),t}(),A=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.opts=null,this.seriesIndex=0}return s(t,[{key:"clippedImgArea",value:function(t){var e=this.w,i=e.config,s=parseInt(e.globals.gridWidth),a=parseInt(e.globals.gridHeight),n=s>a?s:a,r=t.image,o=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(o=i.fill.image.width+1,l=i.fill.image.height):(o=n+1,l=n):(o=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,"pattern");f.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:"userSpaceOnUse",width:o+"px",height:l+"px"});var c=document.createElementNS(e.globals.SVGNS,"image");h.appendChild(c),c.setAttributeNS("http://www.w3.org/1999/xlink","href",r),f.setAttrs(c,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:l+"px"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:"getSeriesIndex",value:function(t){var e=this.w;return"bar"===e.config.chart.type&&e.config.plotOptions.bar.distributed||"heatmap"===e.config.chart.type?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(t){var e=this.w;this.opts=t;var i,s,a,n=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var r=this.getFillColors(),o=r[this.seriesIndex],l=this.getFillType(this.seriesIndex),h=Array.isArray(n.fill.opacity)?n.fill.opacity[this.seriesIndex]:n.fill.opacity,c=o;return t.color&&(o=t.color),-1===o.indexOf("rgb")?c=d.hexToRgba(o,h):o.indexOf("rgba")>-1&&(h="0."+d.getOpacityFromRGBA(r[this.seriesIndex])),"pattern"===l&&(s=this.handlePatternFill(s,o,h,c)),"gradient"===l&&(a=this.handleGradientFill(a,o,h,this.seriesIndex)),n.fill.image.src.length>0&&"image"===l?t.seriesNumber0){if(t.globals.markers.size.length0&&(o=l.group({class:"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),r.x instanceof Array)for(var h=function(t){var h=i;1===i&&0===t&&(h=0),1===i&&1===t&&(h=1);var c="apexcharts-marker";if("line"!==n.config.chart.type&&"area"!==n.config.chart.type||n.globals.comboCharts||n.config.tooltip.intersect||(c+=" no-pointer-events"),Array.isArray(n.config.markers.size)?n.globals.markers.size[e]>0:n.config.markers.size>0){d.isNumber(r.y[t])?c+=" w".concat((Math.random()+1).toString(36).substring(4)):c="apexcharts-nullpoint";var g=a.getMarkerConfig(c,e);n.config.markers.discrete.map(function(t){t.seriesIndex===e&&t.dataPointIndex===h&&(g.pointStrokeColor=t.strokeColor,g.pointFillColor=t.fillColor,g.pSize=t.size)}),(s=l.drawMarker(r.x[t],r.y[t],g)).attr("rel",h),s.attr("j",h),s.attr("index",e),s.node.setAttribute("default-marker-size",g.pSize),new u(a.ctx).setSelectionFilter(s,e,h),a.addEvents(s),o&&o.add(s)}else void 0===n.globals.pointsArray[e]&&(n.globals.pointsArray[e]=[]),n.globals.pointsArray[e].push([r.x[t],r.y[t]])},c=0;cp.x+p.width+2||e>p.y+p.height+2||t+c-1)){var p={x:s,y:a,drawnextLabel:!0};if(g&&(p=this.dataLabelsCorrection(s,a,o,n,r,d,parseInt(c.style.fontSize))),e.globals.zoomed||(s=p.x,a=p.y),p.drawnextLabel){var x=i.drawText({width:100,height:parseInt(c.style.fontSize),x:s,y:a,foreColor:e.globals.dataLabels.style.colors[n],textAnchor:l||c.textAnchor,text:o,fontSize:c.style.fontSize,fontFamily:c.style.fontFamily});if(x.attr({class:"apexcharts-datalabel",cx:s,cy:a}),c.dropShadow.enabled){var m=c.dropShadow;new u(this.ctx).dropShadow(x,m)}h.add(x),void 0===e.globals.lastDrawnDataLabelsIndexes[n]&&(e.globals.lastDrawnDataLabelsIndexes[n]=[]),e.globals.lastDrawnDataLabelsIndexes[n].push(r)}}}}]),t}(),z=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w;var a=this.w;this.barOptions=a.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=a.config.stroke.width,this.isNullValue=!1,this.xyRatios=s,null!==this.xyRatios&&(this.xRatio=s.xRatio,this.yRatio=s.yRatio,this.invertedXRatio=s.invertedXRatio,this.invertedYRatio=s.invertedYRatio,this.baseLineY=s.baseLineY,this.baseLineInvertedY=s.baseLineInvertedY),this.minXDiff=Number.MAX_VALUE,this.yaxisIndex=0,this.seriesLen=0}return s(t,[{key:"draw",value:function(t,e){var i=this,s=this.w,a=new f(this.ctx),n=new A(this.ctx),r=new b(this.ctx,s);this.series=r.getLogSeries(t),t=this.series,this.yRatio=r.getLogYRatios(this.yRatio),this.initVariables(t);var o=a.group({class:"apexcharts-bar-series apexcharts-plot-series"});o.attr("clip-path","url(#gridRectMask".concat(s.globals.cuid,")")),s.config.dataLabels.enabled&&this.totalItems>50&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.");for(var l=function(r,l){var h,c,u,g,f=void 0,p=void 0,x=void 0,m=void 0,v=[],b=[],y=s.globals.comboCharts?e[r]:r,w=a.group({class:"apexcharts-series ".concat(d.escapeString(s.globals.seriesNames[y])),rel:r+1,"data:realIndex":y});i.ctx.series.addCollapsedClassToSeries(w,y),t[r].length>0&&(i.visibleI=i.visibleI+1);var k,A,S=0;i.yRatio.length>1&&(i.yaxisIndex=y),i.isReversed=s.config.yaxis[i.yaxisIndex]&&s.config.yaxis[i.yaxisIndex].reversed;var C=i.initialPositions();m=C.y,k=C.barHeight,c=C.yDivision,g=C.zeroW,x=C.x,A=C.barWidth,h=C.xDivision,u=C.zeroH,i.horizontal||b.push(x+A/2);for(var L=a.group({class:"apexcharts-datalabels"}),z=function(e,a){void 0===i.series[r][e]||null===t[r][e]?i.isNullValue=!0:i.isNullValue=!1,s.config.stroke.show&&(S=i.isNullValue?0:Array.isArray(i.strokeWidth)?i.strokeWidth[y]:i.strokeWidth);var o=null;o=i.isHorizontal?i.drawBarPaths({indexes:{i:r,j:e,realIndex:y,bc:l},barHeight:k,strokeWidth:S,pathTo:f,pathFrom:p,zeroW:g,x:x,y:m,yDivision:c,elSeries:w}):i.drawColumnPaths({indexes:{i:r,j:e,realIndex:y,bc:l},x:x,y:m,xDivision:h,pathTo:f,pathFrom:p,barWidth:A,zeroH:u,strokeWidth:S,elSeries:w}),f=o.pathTo,p=o.pathFrom,m=o.y,x=o.x,e>0&&b.push(x+A/2),v.push(m);var d=i.barOptions.distributed?e:r,C=null;i.barOptions.colors.ranges.length>0&&i.barOptions.colors.ranges.map(function(i){t[r][e]>=i.from&&t[r][e]<=i.to&&(C=i.color)});var z=n.fillPath({seriesNumber:i.barOptions.distributed?d:y,color:C});w=i.renderSeries({realIndex:y,pathFill:z,j:e,i:r,pathFrom:p,pathTo:f,strokeWidth:S,elSeries:w,x:x,y:m,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:L,visibleSeries:i.visibleI,type:"bar"})},M=0,P=s.globals.dataPoints;M0&&(this.seriesLen=this.seriesLen+1,this.totalItems+=t[s].length),i.globals.isXNumeric){i.globals.seriesX.forEach(function(t,s){t.forEach(function(t,a){if(a>0){var n=t-i.globals.seriesX[s][a-1];e.minXDiff=Math.min(n,e.minXDiff)}})});for(var a=0;ai.globals.minX&&i.globals.seriesX[s][a]0&&(h=l.globals.timelineLabels.length),h<3&&(h=3),this.minXDiff=(l.globals.maxX-l.globals.minX)/h}n=(s=this.minXDiff/this.xRatio)/this.seriesLen*parseInt(this.barOptions.columnWidth)/100}r=l.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?l.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),t=l.globals.padHorizontal+(s-n*this.seriesLen)/2}return{x:t,y:e,yDivision:i,xDivision:s,barHeight:a,barWidth:n,zeroH:r,zeroW:o}}},{key:"drawBarPaths",value:function(t){var e=t.indexes,i=t.barHeight,s=t.strokeWidth,a=t.pathTo,n=t.pathFrom,r=t.zeroW,o=t.x,l=t.y,h=t.yDivision,c=t.elSeries,d=this.w,u=new f(this.ctx),g=e.i,p=e.j,x=e.realIndex,m=e.bc;d.globals.isXNumeric&&(l=(d.globals.seriesX[g][p]-d.globals.minX)/this.invertedXRatio-i);var v=l+i*this.visibleI;if(a=u.move(r,v),n=u.move(r,v),d.globals.previousPaths.length>0&&(n=this.getPathFrom(x,p)),o=void 0===this.series[g][p]||null===this.series[g][p]?r:r+this.series[g][p]/this.invertedYRatio-2*(this.isReversed?this.series[g][p]/this.invertedYRatio:0),a=a+u.line(o,v)+u.line(o,v+i-s)+u.line(r,v+i-s)+u.line(r,v),n=n+u.line(r,v)+u.line(r,v+i-s)+u.line(r,v+i-s)+u.line(r,v),d.globals.isXNumeric||(l+=h),this.barOptions.colors.backgroundBarColors.length>0&&0===g){m>=this.barOptions.colors.backgroundBarColors.length&&(m=0);var b=this.barOptions.colors.backgroundBarColors[m],y=u.drawRect(0,v-i*this.visibleI,d.globals.gridWidth,i*this.seriesLen,0,b,this.barOptions.colors.backgroundBarOpacity);c.add(y),y.node.classList.add("apexcharts-backgroundBar")}return{pathTo:a,pathFrom:n,x:o,y:l,barYPosition:v}}},{key:"drawColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=t.y,a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=t.strokeWidth,c=t.elSeries,d=this.w,u=new f(this.ctx),g=e.i,p=e.j,x=e.realIndex,m=e.bc;d.globals.isXNumeric&&(i=(d.globals.seriesX[g][p]-d.globals.minX)/this.xRatio-o/2);var v=i+o*this.visibleI;if(n=u.move(v,l),r=u.move(v,l),d.globals.previousPaths.length>0&&(r=this.getPathFrom(x,p)),s=void 0===this.series[g][p]||null===this.series[g][p]?l:l-this.series[g][p]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[g][p]/this.yRatio[this.yaxisIndex]:0),n=n+u.line(v,s)+u.line(v+o-h,s)+u.line(v+o-h,l)+u.line(v,l),r=r+u.line(v,l)+u.line(v+o-h,l)+u.line(v+o-h,l)+u.line(v,l),d.globals.isXNumeric||(i+=a),this.barOptions.colors.backgroundBarColors.length>0&&0===g){m>=this.barOptions.colors.backgroundBarColors.length&&(m=0);var b=this.barOptions.colors.backgroundBarColors[m],y=u.drawRect(v-o*this.visibleI,0,o*this.seriesLen,d.globals.gridHeight,0,b,this.barOptions.colors.backgroundBarOpacity);c.add(y),y.node.classList.add("apexcharts-backgroundBar")}return{pathTo:n,pathFrom:r,x:i,y:s,barXPosition:v}}},{key:"getPathFrom",value:function(t,e){for(var i,s=this.w,a=0;a0&&parseInt(n.realIndex)===parseInt(t)&&void 0!==s.globals.previousPaths[a].paths[e]&&(i=s.globals.previousPaths[a].paths[e].d)}return i}},{key:"calculateDataLabelsPos",value:function(t){var e=t.x,i=t.y,s=t.i,a=t.j,n=t.realIndex,r=t.series,o=t.barHeight,l=t.barWidth,h=t.visibleSeries,c=t.renderedPath,d=this.w,u=new f(this.ctx),g=Array.isArray(this.strokeWidth)?this.strokeWidth[n]:this.strokeWidth,p=e+parseFloat(l*h),x=i+parseFloat(o*h);d.globals.isXNumeric&&(p=e+parseFloat(l*(h+1))-g,x=i+parseFloat(o*(h+1))-g);var m=e,v=i,b={},y=d.config.dataLabels,w=this.barOptions.dataLabels,k=y.offsetX,A=y.offsetY,S={width:0,height:0};return d.config.dataLabels.enabled&&(S=u.getTextRects(d.globals.yLabelFormatters[0](d.globals.maxY),parseInt(y.style.fontSize))),b=this.isHorizontal?this.calculateBarsDataLabelsPosition({x:e,y:i,i:s,j:a,renderedPath:c,bcy:x,barHeight:o,textRects:S,strokeWidth:g,dataLabelsX:m,dataLabelsY:v,barDataLabelsConfig:w,offX:k,offY:A}):this.calculateColumnsDataLabelsPosition({x:e,y:i,i:s,j:a,renderedPath:c,realIndex:n,bcx:p,bcy:x,barHeight:o,barWidth:l,textRects:S,strokeWidth:g,dataLabelsY:v,barDataLabelsConfig:w,offX:k,offY:A}),c.attr({cy:b.bcy,cx:b.bcx,j:a,val:r[s][a],barHeight:o,barWidth:l}),this.drawCalculatedDataLabels({x:b.dataLabelsX,y:b.dataLabelsY,val:r[s][a],i:n,j:a,dataLabelsConfig:y})}},{key:"calculateColumnsDataLabelsPosition",value:function(t){var e,i=this.w,s=t.i,a=t.j,n=(t.realIndex,t.y),r=t.bcx,o=t.barWidth,l=t.textRects,h=t.dataLabelsY,c=t.barDataLabelsConfig,d=t.strokeWidth,u=t.offX,g=t.offY,f=this.series[s][a]/this.yRatio[this.yaxisIndex],p=i.globals.gridWidth/i.globals.dataPoints;r-=d/2,e=i.globals.isXNumeric?r-o/2+u:r-p+o/2+u;var x=this.series[s][a]<=0;switch(i.config.yaxis[this.yaxisIndex].reversed&&(n-=f),c.position){case"center":h=x?n+f/2+l.height/2+g:n+f/2+l.height/2-g;break;case"bottom":h=x?n+f+l.height+d+g:n+f-l.height/2+d-g;break;case"top":h=x?n-l.height/2-g:n+l.height+g}return{bcx:r,bcy:n,dataLabelsX:e,dataLabelsY:h}}},{key:"calculateBarsDataLabelsPosition",value:function(t){var e=this.w,i=t.x,s=t.i,a=t.j,n=t.bcy,r=t.barHeight,o=t.textRects,l=t.dataLabelsX,h=t.strokeWidth,c=t.barDataLabelsConfig,d=t.offX,u=t.offY,g=n-e.globals.gridHeight/e.globals.dataPoints+r/2+o.height/2+u-3,f=this.series[s][a]/this.invertedYRatio,p=this.series[s][a]<=0;switch(e.config.yaxis[this.yaxisIndex].reversed&&(i+=f),c.position){case"center":l=p?i-f/2-d:i-f/2+d;break;case"bottom":l=p?i-f-h-Math.round(o.width/2)-d:i-f+h+Math.round(o.width/2)+d;break;case"top":l=p?i-h+Math.round(o.width/2)-d:i-h-Math.round(o.width/2)+d}return l<0?l=o.width+h:l+o.width/2>e.globals.gridWidth&&(l=l-o.width-h),{bcx:i,bcy:n,dataLabelsX:l,dataLabelsY:g}}},{key:"drawCalculatedDataLabels",value:function(t){var e=t.x,i=t.y,s=t.val,a=t.i,n=t.j,r=t.dataLabelsConfig,o=this.w,l=new L(this.ctx),h=new f(this.ctx),c=r.formatter,d=null,u=o.globals.collapsedSeriesIndices.indexOf(a)>-1;if(r.enabled&&!u){d=h.group({class:"apexcharts-data-labels"});var g="";null!=s&&(g=c(s,{seriesIndex:a,dataPointIndex:n,w:o})),l.plotDataLabelsText({x:e,y:i,text:g,i:a,j:n,parent:d,dataLabelsConfig:r,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return d}}]),t}(),M=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,z),s(i,[{key:"draw",value:function(t,e){var i=this,s=this.w;this.graphics=new f(this.ctx),this.fill=new A(this.ctx),this.bar=new z(this.ctx,this.xyRatios);var a=new b(this.ctx,s);this.series=a.getLogSeries(t),t=this.series,this.yRatio=a.getLogYRatios(this.yRatio),this.series=t,this.initVariables(t),"100%"===s.config.chart.stackType&&(this.series=s.globals.seriesPercent.slice(),t=this.series),this.totalItems=0,this.prevY=[],this.prevX=[],this.prevYF=[],this.prevXF=[],this.prevYVal=[],this.prevXVal=[],this.xArrj=[],this.xArrjF=[],this.xArrjVal=[],this.yArrj=[],this.yArrjF=[],this.yArrjVal=[];for(var n=0;n0&&(this.totalItems+=t[n].length);var r=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"});r.attr("clip-path","url(#gridRectMask".concat(s.globals.cuid,")"));for(var o=0,l=0,h=function(a,n){var h=void 0,c=void 0,u=void 0,g=void 0,f=void 0,p=void 0,x=[],m=[],v=s.globals.comboCharts?e[a]:a;i.yRatio.length>1&&(i.yaxisIndex=v),i.isReversed=s.config.yaxis[i.yaxisIndex]&&s.config.yaxis[i.yaxisIndex].reversed;var b,y,w=i.graphics.group({class:"apexcharts-series ".concat(d.escapeString(s.globals.seriesNames[v])),rel:a+1,"data:realIndex":v}),k=i.graphics.group({class:"apexcharts-datalabels"}),A=0,S=i.initialPositions(o,l,u,g,f,p);l=S.y,b=S.barHeight,g=S.yDivision,p=S.zeroW,o=S.x,y=S.barWidth,u=S.xDivision,f=S.zeroH,i.yArrj=[],i.yArrjF=[],i.yArrjVal=[],i.xArrj=[],i.xArrjF=[],i.xArrjVal=[];for(var C=function(e){s.config.stroke.show&&(A=i.isNullValue?0:Array.isArray(i.strokeWidth)?i.strokeWidth[v]:i.strokeWidth);var r=null;r=i.isHorizontal?i.drawBarPaths({indexes:{i:a,j:e,realIndex:v,bc:n},barHeight:b,strokeWidth:A,pathTo:h,pathFrom:c,zeroW:p,x:o,y:l,yDivision:g,elSeries:w}):i.drawColumnPaths({indexes:{i:a,j:e,realIndex:v,bc:n},x:o,y:l,xDivision:u,pathTo:h,pathFrom:c,barWidth:y,zeroH:f,strokeWidth:A,elSeries:w}),h=r.pathTo,c=r.pathFrom,l=r.y,o=r.x,x.push(o),m.push(l);var d=s.config.plotOptions.bar.distributed?e:a,S=null;i.barOptions.colors.ranges.length>0&&i.barOptions.colors.ranges.map(function(i,s){t[a][e]>=i.from&&t[a][e]<=i.to&&(S=i.color)});var C=i.fill.fillPath({seriesNumber:i.barOptions.distributed?d:v,color:S});w=i.renderSeries({realIndex:v,pathFill:C,j:e,i:a,pathFrom:c,pathTo:h,strokeWidth:A,elSeries:w,x:o,y:l,series:t,barHeight:b,barWidth:y,elDataLabelsWrap:k,type:"bar",visibleSeries:0})},L=0;L0){var y=o;this.prevXVal[f-1][p]<0?y=this.series[f][p]>=0?this.prevX[f-1][p]+v-2*(this.isReversed?v:0):this.prevX[f-1][p]:this.prevXVal[f-1][p]>=0&&(y=this.series[f][p]>=0?this.prevX[f-1][p]:this.prevX[f-1][p]-v+2*(this.isReversed?v:0)),e=y}else e=o;if(l=null===this.series[f][p]?e:e+this.series[f][p]/this.invertedYRatio-2*(this.isReversed?this.series[f][p]/this.invertedYRatio:0),this.xArrj.push(l),this.xArrjF.push(Math.abs(e-l)),this.xArrjVal.push(this.series[f][p]),n=this.graphics.move(e,g),r=this.graphics.move(e,g),u.globals.previousPaths.length>0&&(r=this.bar.getPathFrom(x,p,!1)),n=n+this.graphics.line(l,g)+this.graphics.line(l,g+s-a)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g),r=r+this.graphics.line(e,g)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g),u.config.plotOptions.bar.colors.backgroundBarColors.length>0&&0===f){m>=u.config.plotOptions.bar.colors.backgroundBarColors.length&&(m=0);var w=u.config.plotOptions.bar.colors.backgroundBarColors[m],k=this.graphics.drawRect(0,g,u.globals.gridWidth,s,0,w,u.config.plotOptions.bar.colors.backgroundBarOpacity);d.add(k),k.node.classList.add("apexcharts-backgroundBar")}return{pathTo:n,pathFrom:r,x:l,y:h+=c}}},{key:"drawColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=t.y,a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=t.strokeWidth,c=t.elSeries,d=this.w,u=e.i,g=e.j,f=e.realIndex,p=e.bc;if(d.globals.isXNumeric){var x=d.globals.seriesX[u][g];x||(x=0),i=(x-d.globals.minX)/this.xRatio-o/2}for(var m,v=i,b=0,y=0;y0&&!d.globals.isXNumeric||u>0&&d.globals.isXNumeric&&d.globals.seriesX[u-1][g]===d.globals.seriesX[u][g]){var w=this.prevY[u-1][g];m=this.prevYVal[u-1][g]<0?this.series[u][g]>=0?w-b+2*(this.isReversed?b:0):w:this.series[u][g]>=0?w:w+b-2*(this.isReversed?b:0)}else m=d.globals.gridHeight-l;if(s=m-this.series[u][g]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[u][g]/this.yRatio[this.yaxisIndex]:0),this.yArrj.push(s),this.yArrjF.push(Math.abs(m-s)),this.yArrjVal.push(this.series[u][g]),n=this.graphics.move(v,m),r=this.graphics.move(v,m),d.globals.previousPaths.length>0&&(r=this.bar.getPathFrom(f,g,!1)),n=n+this.graphics.line(v,s)+this.graphics.line(v+o-h,s)+this.graphics.line(v+o-h,m)+this.graphics.line(v,m),r=r+this.graphics.line(v,m)+this.graphics.line(v+o-h,m)+this.graphics.line(v+o-h,m)+this.graphics.line(v+o-h,m)+this.graphics.line(v,m),d.config.plotOptions.bar.colors.backgroundBarColors.length>0&&0===u){p>=d.config.plotOptions.bar.colors.backgroundBarColors.length&&(p=0);var k=d.config.plotOptions.bar.colors.backgroundBarColors[p],A=this.graphics.drawRect(v,0,o,d.globals.gridHeight,0,k,d.config.plotOptions.bar.colors.backgroundBarOpacity);c.add(A),A.node.classList.add("apexcharts-backgroundBar")}return i+=a,{pathTo:n,pathFrom:r,x:d.globals.isXNumeric?i-a:i,y:s}}}]),i}(),P=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,z),s(i,[{key:"draw",value:function(t,e){var i=this.w,s=new f(this.ctx),a=new A(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick;var n=new b(this.ctx,i);this.series=n.getLogSeries(t),t=this.series,this.yRatio=n.getLogYRatios(this.yRatio),this.initVariables(t);var r=s.group({class:"apexcharts-candlestick-series apexcharts-plot-series"});r.attr("clip-path","url(#gridRectMask".concat(i.globals.cuid,")"));for(var o=0,l=0;o0&&(this.visibleI=this.visibleI+1);var k,S,C=0;this.yRatio.length>1&&(this.yaxisIndex=y);var L=this.initialPositions();x=L.y,k=L.barHeight,p=L.x,S=L.barWidth,h=L.xDivision,c=L.zeroH,v.push(p+S/2);for(var z=s.group({class:"apexcharts-datalabels"}),M=0,P=i.globals.dataPoints;M0&&v.push(p+S/2),m.push(x);var X=a.fillPath({seriesNumber:y,color:E}),I=this.candlestickOptions.wick.useFillColor?E:void 0;w=this.renderSeries({realIndex:y,pathFill:X,lineFill:I,j:M,i:o,pathFrom:g,pathTo:u,strokeWidth:C,elSeries:w,x:p,y:x,series:t,barHeight:k,barWidth:S,elDataLabelsWrap:z,visibleSeries:this.visibleI,type:"candlestick"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=m,r.add(w)}return r}},{key:"drawCandleStickPaths",value:function(t){var e=t.indexes,i=t.x,s=(t.y,t.xDivision),a=t.pathTo,n=t.pathFrom,r=t.barWidth,o=t.zeroH,l=t.strokeWidth,h=this.w,c=new f(this.ctx),d=e.i,u=e.j,g=!0,p=h.config.plotOptions.candlestick.colors.upward,x=h.config.plotOptions.candlestick.colors.downward,m=this.yRatio[this.yaxisIndex],v=e.realIndex,b=this.getOHLCValue(v,u),y=o,w=o;b.o>b.c&&(g=!1);var k=Math.min(b.o,b.c),A=Math.max(b.o,b.c);h.globals.isXNumeric&&(i=(h.globals.seriesX[d][u]-h.globals.minX)/this.xRatio-r/2);var S=i+r*this.visibleI;return c.move(S,o),n=c.move(S,o),h.globals.previousPaths.length>0&&(n=this.getPathFrom(v,u,!0)),void 0===this.series[d][u]||null===this.series[d][u]?k=o:(k=o-k/m,A=o-A/m,y=o-b.h/m,w=o-b.l/m),a=c.move(S,A)+c.line(S+r/2,A)+c.line(S+r/2,y)+c.line(S+r/2,A)+c.line(S+r,A)+c.line(S+r,k)+c.line(S+r/2,k)+c.line(S+r/2,w)+c.line(S+r/2,k)+c.line(S,k)+c.line(S,A-l/2),h.globals.isXNumeric||(i+=s),{pathTo:a,pathFrom:n,x:i,y:A,barXPosition:S,color:g?p:x}}},{key:"getOHLCValue",value:function(t,e){var i=this.w;return{o:i.globals.seriesCandleO[t][e],h:i.globals.seriesCandleH[t][e],l:i.globals.seriesCandleL[t][e],c:i.globals.seriesCandleC[t][e]}}}]),i}(),E=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"drawXCrosshairs",value:function(){var t=this.w,e=new f(this.ctx),i=new u(this.ctx),s=t.config.xaxis.crosshairs.fill.gradient,a=t.config.xaxis.crosshairs.dropShadow,n=t.config.xaxis.crosshairs.fill.type,r=s.colorFrom,o=s.colorTo,l=s.opacityFrom,h=s.opacityTo,c=s.stops,g=a.enabled,p=a.left,x=a.top,m=a.blur,v=a.color,b=a.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){"gradient"===n&&(y=e.drawGradient("vertical",r,o,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine()),w.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:t.globals.gridHeight,width:d.isNumber(t.config.xaxis.crosshairs.width)?t.config.xaxis.crosshairs.width:0,height:t.globals.gridHeight,fill:y,filter:"none","fill-opacity":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,"stroke-width":t.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":t.config.xaxis.crosshairs.stroke.dashArray}),g&&(w=i.dropShadow(w,{left:p,top:x,blur:m,color:v,opacity:b})),t.globals.dom.elGraphical.add(w)}}},{key:"drawYCrosshairs",value:function(){var t=this.w,e=new f(this.ctx),i=t.config.yaxis[0].crosshairs;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(0,0,t.globals.gridWidth,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),t.globals.dom.elGraphical.add(s)}var a=e.drawLine(0,0,t.globals.gridWidth,0,i.stroke.color,0,0);a.attr({class:"apexcharts-ycrosshairs-hidden"}),t.globals.dom.elGraphical.add(a)}}]),t}(),T=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return s(t,[{key:"isValidDate",value:function(t){return!isNaN(this.parseDate(t))}},{key:"getUTCTimeStamp",value:function(t){return Date.parse(t)?new Date(new Date(t).toISOString().substr(0,25)).getTime():t}},{key:"parseDate",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getUTCTimeStamp(t);var i=Date.parse(t.replace(/-/g,"/").replace(/[a-z]+/gi," "));return i=this.getUTCTimeStamp(i)}},{key:"treatAsUtc",value:function(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}},{key:"formatDate",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=this.w.globals.locale,n=["\0"].concat(c(a.months)),r=["\x01"].concat(c(a.shortMonths)),o=["\x02"].concat(c(a.days)),l=["\x03"].concat(c(a.shortDays));function h(t,e){var i=t+"";for(e=e||2;i.length12?f-12:0===f?12:f;e=(e=(e=(e=e.replace(/(^|[^\\])HH+/g,"$1"+h(f))).replace(/(^|[^\\])H/g,"$1"+f)).replace(/(^|[^\\])hh+/g,"$1"+h(p))).replace(/(^|[^\\])h/g,"$1"+p);var x=i?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\])mm+/g,"$1"+h(x))).replace(/(^|[^\\])m/g,"$1"+x);var m=i?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\])ss+/g,"$1"+h(m))).replace(/(^|[^\\])s/g,"$1"+m);var v=i?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\])fff+/g,"$1"+h(v,3)),v=Math.round(v/10),e=e.replace(/(^|[^\\])ff/g,"$1"+h(v)),v=Math.round(v/10);var b=f<12?"AM":"PM";e=(e=(e=e.replace(/(^|[^\\])f/g,"$1"+v)).replace(/(^|[^\\])TT+/g,"$1"+b)).replace(/(^|[^\\])T/g,"$1"+b.charAt(0));var y=b.toLowerCase();e=(e=e.replace(/(^|[^\\])tt+/g,"$1"+y)).replace(/(^|[^\\])t/g,"$1"+y.charAt(0));var w=-t.getTimezoneOffset(),k=i||!w?"Z":w>0?"+":"-";if(!i){var A=(w=Math.abs(w))%60;k+=h(Math.floor(w/60))+":"+h(A)}e=e.replace(/(^|[^\\])K/g,"$1"+k);var S=(i?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(o[0],"g"),o[S])).replace(new RegExp(l[0],"g"),l[S])).replace(new RegExp(n[0],"g"),n[u])).replace(new RegExp(r[0],"g"),r[u])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(t,e){var i=this.w;void 0!==i.config.xaxis.min&&(t=i.config.xaxis.min),void 0!==i.config.xaxis.max&&(e=i.config.xaxis.max);var s=new Date(t).getFullYear(),a=new Date(e).getFullYear(),n=new Date(t).getMonth(),r=new Date(e).getMonth(),o=new Date(t).getDate(),l=new Date(e).getDate(),h=new Date(t).getHours(),c=new Date(e).getHours();return{minMinute:new Date(t).getMinutes(),maxMinute:new Date(e).getMinutes(),minHour:h,maxHour:c,minDate:o,maxDate:l,minMonth:n,maxMonth:r,minYear:s,maxYear:a}}},{key:"isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"calculcateLastDaysOfMonth",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:"determineDaysOfYear",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:"determineRemainingDaysOfYear",value:function(t,e,i){var s=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&s++,s}},{key:"determineDaysOfMonths",value:function(t,e){var i=30;switch(t=d.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),X=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w,this.xRatio=s.xRatio,this.yRatio=s.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.width}return s(t,[{key:"draw",value:function(t){var e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-heatmap"});s.attr("clip-path","url(#gridRectMask".concat(e.globals.cuid,")"));var a=e.globals.gridWidth/e.globals.dataPoints,n=e.globals.gridHeight/e.globals.series.length,r=0,o=!1,l=t.slice();e.config.yaxis[0].reversed&&(o=!0,l.reverse());for(var h=o?0:l.length-1;o?h=0;o?h++:h--){var c=i.group({class:"apexcharts-series apexcharts-heatmap-series ".concat(d.escapeString(e.globals.seriesNames[h])),rel:h+1,"data:realIndex":h});if(e.config.chart.dropShadow.enabled){var g=e.config.chart.dropShadow;new u(this.ctx).dropShadow(c,g)}for(var p=0,x=0;xi.globals.maxY?a.colorScale.max:i.globals.maxY);var h=Math.abs(l)+Math.abs(o),d=100*s/(0===h?h-1e-6:h);a.colorScale.ranges.length>0&&a.colorScale.ranges.map(function(t,e){s>=t.from&&s<=t.to&&(r=t.color,o=t.from,l=t.to,h=Math.abs(l)+Math.abs(o),d=100*s/h)});return{color:r,percent:d}}},{key:"calculateHeatmapDataLabels",value:function(t){var e=t.x,i=t.y,s=t.i,a=t.j,n=(t.series,t.rectHeight),r=t.rectWidth,o=this.w,l=o.config.dataLabels,h=new f(this.ctx),c=new L(this.ctx),d=l.formatter,u=null;if(l.enabled){u=h.group({class:"apexcharts-data-labels"});var g=l.offsetX,p=l.offsetY,x=e+r/2+g,m=i+n/2+parseInt(l.style.fontSize)/3+p,v=d(o.globals.series[s][a],{seriesIndex:s,dataPointIndex:a,w:o});c.plotDataLabelsText({x:x,y:m,text:v,i:s,j:a,parent:u,dataLabelsConfig:l})}return u}},{key:"animateHeatMap",value:function(t,e,i,s,a,n){var r=this;new g(this.ctx).animateRect(t,{x:e+s/2,y:i+a/2,width:0,height:0},{x:e,y:i,width:s,height:a},n,function(){r.w.globals.animationEnded=!0})}},{key:"animateHeatColor",value:function(t,e,i,s){t.attr({fill:e}).animate(s).attr({fill:i})}}]),t}(),I=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels;var s=this.w;this.lineColorArr=void 0!==s.globals.stroke.colors?s.globals.stroke.colors:s.globals.colors,this.defaultSize=s.globals.svgHeightthis.fullAngle?e.endAngle=e.endAngle-(s+r):s+r=360&&(l=359.99);var h=Math.PI*(l-90)/180,c=e.centerX+a*Math.cos(o),u=e.centerY+a*Math.sin(o),g=e.centerX+a*Math.cos(h),f=e.centerY+a*Math.sin(h),p=d.polarToCartesian(e.centerX,e.centerY,e.donutSize,l),x=d.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),m=s>180?1:0;return"donut"===n.config.chart.type?["M",c,u,"A",a,a,0,m,1,g,f,"L",p.x,p.y,"A",e.donutSize,e.donutSize,0,m,0,x.x,x.y,"L",c,u,"z"].join(" "):"pie"===n.config.chart.type?["M",c,u,"A",a,a,0,m,1,g,f,"L",e.centerX,e.centerY,"L",c,u].join(" "):["M",c,u,"A",a,a,0,m,1,g,f].join(" ")}},{key:"renderInnerDataLabels",value:function(t,e){var i=this.w,s=new f(this.ctx),a=s.group({class:"apexcharts-datalabels-group",transform:"translate(".concat(e.translateX?e.translateX:0,", ").concat(e.translateY?e.translateY:0,")")}),n=t.total.show;a.node.style.opacity=e.opacity;var r,o,l=e.centerX,h=e.centerY;r=void 0===t.name.color?i.globals.colors[0]:t.name.color,o=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var c=t.value.formatter,d="",u="";if(n?(r=t.total.color,u=t.total.label,d=t.total.formatter(i)):1===i.globals.series.length&&(d=c(i.globals.series[0],i),u=i.globals.seriesNames[0]),t.name.show){var g=s.drawText({x:l,y:h+parseInt(t.name.offsetY),text:u,textAnchor:"middle",foreColor:r,fontSize:t.name.fontSize,fontFamily:t.name.fontFamily});g.node.classList.add("apexcharts-datalabel-label"),a.add(g)}if(t.value.show){var p=t.name.show?parseInt(t.value.offsetY)+16:t.value.offsetY,x=s.drawText({x:l,y:h+p,text:d,textAnchor:"middle",foreColor:o,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});x.node.classList.add("apexcharts-datalabel-value"),a.add(x)}return a}},{key:"printInnerLabels",value:function(t,e,i,s){var a,n=this.w;s?a=void 0===t.name.color?n.globals.colors[parseInt(s.parentNode.getAttribute("rel"))-1]:t.name.color:n.globals.series.length>1&&t.total.show&&(a=t.total.color);var r=n.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=n.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,t.value.formatter)(i,n),s||"function"!=typeof t.total.formatter||(i=t.total.formatter(n)),null!==r&&(r.textContent=e),null!==o&&(o.textContent=i),null!==r&&(r.style.fill=a)}},{key:"printDataLabelsInner",value:function(t,e){var i=this.w,s=t.getAttribute("data:value"),a=i.globals.seriesNames[parseInt(t.parentNode.getAttribute("rel"))-1];i.globals.series.length>1&&this.printInnerLabels(e,a,s,t);var n=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");null!==n&&(n.style.opacity=1)}},{key:"revertDataLabelsInner",value:function(e,i){var s=this.w,a=s.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");if(i.total.show&&s.globals.series.length>1)new t(this.ctx).printInnerLabels(i,i.total.label,i.total.formatter(s));else if(s.globals.selectedDataPoints.length)if(s.globals.selectedDataPoints[0].length>0){var n=s.globals.selectedDataPoints[0],r=s.globals.dom.baseEl.querySelector("#apexcharts-pie-slice-".concat(n));this.printDataLabelsInner(r,i)}else a.style.opacity=0;else(0===s.globals.selectedDataPoints.length||null!==a&&s.globals.series.length>1)&&(a.style.opacity=0)}}]),t}(),Y=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var s=this.w;this.graphics=new f(this.ctx),this.lineColorArr=void 0!==s.globals.stroke.colors?s.globals.stroke.colors:s.globals.colors,this.defaultSize=s.globals.svgHeight0&&(f=e.getPathFrom(r));for(var p=0;p=10?n[h].x>0?(i="start",r+=10):n[h].x<0&&(i="end",r-=10):i="middle",Math.abs(n[h].y)>=t.size-10&&(n[h].y<0?o-=10:n[h].y>0&&(o+=10));var u=c(l,{seriesIndex:-1,dataPointIndex:h,w:e});d.plotDataLabelsText({x:r,y:o,text:u,textAnchor:i,i:h,j:h,parent:a,dataLabelsConfig:s,offsetCorrection:!1})}}),a}},{key:"createPaths",value:function(t,e){var i=this,s=[],a=[],n=[],r=[];if(t.length){a=[this.graphics.move(e.x,e.y)],r=[this.graphics.move(e.x,e.y)];var o=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach(function(e,s){o+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),s===t.length-1&&(o+="Z",l+="Z")}),s.push(o),n.push(l)}return{linePathsFrom:a,linePathsTo:s,areaPathsFrom:r,areaPathsTo:n}}},{key:"getPathFrom",value:function(t){for(var e=this.w,i=null,s=0;s0&&parseInt(a.realIndex)===parseInt(t)&&void 0!==e.globals.previousPaths[s].paths[0]&&(i=e.globals.previousPaths[s].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var s=[],a=0;a=360&&(g=360-Math.abs(this.startAngle)-.1);var p=i.drawPath({d:"",stroke:c,strokeWidth:r*parseInt(h.strokeWidth)/100,fill:"none",strokeOpacity:h.opacity,classes:"apexcharts-radialbar-area"});if(h.dropShadow.enabled){var x=h.dropShadow;a.dropShadow(p,x)}l.add(p),p.attr("id","apexcharts-radialbarTrack-"+o),new I(this.ctx).animatePaths(p,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:o,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return s}},{key:"drawArcs",value:function(t){var e=this.w,i=new f(this.ctx),s=new A(this.ctx),a=new u(this.ctx),n=i.group(),r=this.getStrokeWidth(t);t.size=t.size-r/2;var o=e.config.plotOptions.radialBar.hollow.background,l=t.size-r*t.series.length-this.margin*t.series.length-r*parseInt(e.config.plotOptions.radialBar.track.strokeWidth)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(o=this.drawHollowImage(t,n,l,o));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:o});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var g=e.config.plotOptions.radialBar.hollow.dropShadow;a.dropShadow(c,g)}var p=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(p=0);var x=new I(this.ctx),m=null;this.radialDataLabels.show&&(m=x.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:p})),"back"===e.config.plotOptions.radialBar.hollow.position&&(n.add(c),m&&n.add(m));var v=!1;e.config.plotOptions.radialBar.inverseOrder&&(v=!0);for(var b=v?t.series.length-1:0;v?b>=0:b100?100:t.series[b])/100,z=Math.round(C*L)+this.startAngle,M=void 0;e.globals.dataChanged&&(S=this.startAngle,M=Math.round(C*d.negToZero(e.globals.previousPaths[b])/100)+S),Math.abs(z)+Math.abs(k)>=360&&(z-=.01),Math.abs(M)+Math.abs(S)>=360&&(M-=.01);var P=z-k,E=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[b]:e.config.stroke.dashArray,T=i.drawPath({d:"",stroke:w,strokeWidth:r,fill:"none",fillOpacity:e.config.fill.opacity,classes:"apexcharts-radialbar-area",strokeDashArray:E});if(f.setAttrs(T.node,{"data:angle":P,"data:value":t.series[b]}),e.config.chart.dropShadow.enabled){var X=e.config.chart.dropShadow;a.dropShadow(T,X)}this.addListeners(T,this.radialDataLabels);var Y=new I(this.ctx);y.add(T),T.attr({id:"apexcharts-radialArc-"+b,index:0,j:b});var F=0;!Y.initialAnim||e.globals.resized||e.globals.dataChanged||(F=(z-k)/360*e.config.chart.animations.speed,this.animDur=F/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),e.globals.dataChanged&&(F=(z-k)/360*e.config.chart.animations.dynamicAnimation.speed,this.animDur=F/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),Y.animatePaths(T,{centerX:t.centerX,centerY:t.centerY,endAngle:z,startAngle:k,prevEndAngle:M,prevStartAngle:S,size:t.size,i:b,totalItems:2,animBeginArr:this.animBeginArr,dur:F,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:n,elHollow:c,dataLabels:m}}},{key:"drawHollow",value:function(t){var e=new f(this.ctx).drawCircle(2*t.size);return e.attr({class:"apexcharts-radialbar-hollow",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:"drawHollowImage",value:function(t,e,i,s){var a=this.w,n=new A(this.ctx),r=(Math.random()+1).toString(36).substring(4),o=a.config.plotOptions.radialBar.hollow.image;if(a.config.plotOptions.radialBar.hollow.imageClipped)n.clippedImgArea({width:i,height:i,image:o,patternID:"pattern".concat(a.globals.cuid).concat(r)}),s="url(#pattern".concat(a.globals.cuid).concat(r,")");else{var l=a.config.plotOptions.radialBar.hollow.imageWidth,h=a.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=a.globals.dom.Paper.image(o).loaded(function(e){this.move(t.centerX-e.width/2+a.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+a.config.plotOptions.radialBar.hollow.imageOffsetY)});e.add(c)}else{var d=a.globals.dom.Paper.image(o).loaded(function(e){this.move(t.centerX-l/2+a.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+a.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)});e.add(d)}}return s}},{key:"getStrokeWidth",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size))/100/(t.series.length+1)-this.margin}}]),i}(),O=function(){function t(i,s,a){e(this,t),this.ctx=i,this.w=i.w,this.xyRatios=s,this.pointsChart=!("bubble"!==this.w.config.chart.type&&"scatter"!==this.w.config.chart.type)||a,this.scatter=new C(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.yaxisIndex=0}return s(t,[{key:"draw",value:function(t,e,i){var s=this.w,a=new f(this.ctx),r=new A(this.ctx),o=s.globals.comboCharts?e:s.config.chart.type,l=a.group({class:"apexcharts-".concat(o,"-series apexcharts-plot-series")}),h=new b(this.ctx,s);t=h.getLogSeries(t);var c=this.xyRatios.yRatio;c=h.getLogYRatios(c);for(var u=this.xyRatios.zRatio,g=this.xyRatios.xRatio,p=this.xyRatios.baseLineY,x=[],m=[],v=0,y=0;y1&&(this.yaxisIndex=k),this.isReversed=s.config.yaxis[this.yaxisIndex]&&s.config.yaxis[this.yaxisIndex].reversed;var C=[],z=[],M=s.globals.gridHeight-p[this.yaxisIndex]-(this.isReversed?s.globals.gridHeight:0)+(this.isReversed?2*p[this.yaxisIndex]:0),P=M;M>s.globals.gridHeight&&(P=s.globals.gridHeight),v=w/2;var E=s.globals.padHorizontal+v,T=1;s.globals.isXNumeric&&(E=(s.globals.seriesX[k][0]-s.globals.minX)/g),z.push(E);var X=void 0,I=void 0,Y=void 0,F=void 0,O=[],R=[],D=a.group({class:"apexcharts-series ".concat(d.escapeString(s.globals.seriesNames[k]))}),N=a.group({class:"apexcharts-series-markers-wrap"}),H=a.group({class:"apexcharts-datalabels"});this.ctx.series.addCollapsedClassToSeries(D,k);var W=t[y].length===s.globals.dataPoints;D.attr({"data:longestSeries":W,rel:y+1,"data:realIndex":k}),this.appendPathFrom=!0;var B=E,V=void 0,G=B,_=M,j=0;if(_=this.determineFirstPrevY({i:y,series:t,yRatio:c[this.yaxisIndex],zeroY:M,prevY:_,prevSeriesY:m,lineYPosition:j}).prevY,C.push(_),V=_,null===t[y][0]){for(var U=0;U0){var q=this.checkPreviousPaths({pathFromLine:Y,pathFromArea:F,realIndex:k});Y=q.pathFromLine,F=q.pathFromArea}for(var Z=s.globals.dataPoints>1?s.globals.dataPoints-1:s.globals.dataPoints,$=0;$0&&s.globals.collapsedSeries.length1&&N.node.classList.add("hidden");var it=et.plotChartMarkers(tt,k,$+1);null!==it&&N.add(it)}var st=new L(this.ctx).drawDataLabel(tt,k,$+1);null!==st&&H.add(st)}m.push(C),s.globals.seriesXvalues[k]=z,s.globals.seriesYvalues[k]=C,this.pointsChart||s.globals.delayedElements.push({el:N.node,index:k});var at={i:y,realIndex:k,animationDelay:y,initialSpeed:s.config.chart.animations.speed,dataChangeSpeed:s.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(o),id:"apexcharts-".concat(o)};if(s.config.stroke.show&&!this.pointsChart){var nt=null;nt="line"===o?r.fillPath({seriesNumber:k,i:y}):s.globals.stroke.colors[k];for(var rt=0;rt0;dt--)l.add(x[dt-1]);return l}},{key:"createPaths",value:function(t){var e=t.series,i=t.i,s=t.j,a=t.x,n=t.y,r=t.pX,o=t.pY,l=t.xDivision,h=t.areaBottomY,c=t.linePath,d=t.areaPath,u=t.linePaths,g=t.areaPaths,p=this.w,x=new f(this.ctx),m=Array.isArray(p.config.stroke.curve)?p.config.stroke.curve[i]:p.config.stroke.curve;if("smooth"===m){var v=.35*(a-r);p.globals.hasNullValues?(null!==e[i][s]&&(null!==e[i][s+1]?(c=x.move(r,o)+x.curve(r+v,o,a-v,n,a+1,n),d=x.move(r+1,o)+x.curve(r+v,o,a-v,n,a+1,n)+x.line(a,h)+x.line(r,h)+"z"):(c=x.move(r,o),d=x.move(r,o)+"z")),u.push(c),g.push(d)):(c+=x.curve(r+v,o,a-v,n,a,n),d+=x.curve(r+v,o,a-v,n,a,n)),r=a,o=n,s===e[i].length-2&&(d=d+x.curve(r,o,a,n,a,h)+x.move(a,n)+"z",p.globals.hasNullValues||(u.push(c),g.push(d)))}else null===e[i][s+1]&&(c+=x.move(a,n),d=d+x.line(a-l,h)+x.move(a,n)),null===e[i][s]&&(c+=x.move(a,n),d+=x.move(a,h)),"stepline"===m?(c=c+x.line(a,null,"H")+x.line(null,n,"V"),d=d+x.line(a,null,"H")+x.line(null,n,"V")):"straight"===m&&(c+=x.line(a,n),d+=x.line(a,n)),s===e[i].length-2&&(d=d+x.line(a,h)+x.move(a,n)+"z",u.push(c),g.push(d));return{linePaths:u,areaPaths:g,pX:r,pY:o,linePath:c,areaPath:d}}},{key:"calculatePoints",value:function(t){var e=t.series,i=t.realIndex,s=t.x,a=t.y,n=t.i,r=t.j,o=t.prevY,l=t.categoryAxisCorrection,h=t.xRatio,c=this.w,u=[],g=[];if(0===r){var f=l+c.config.markers.offsetX;c.globals.isXNumeric&&(f=(c.globals.seriesX[i][0]-c.globals.minX)/h+c.config.markers.offsetX),u.push(f),g.push(d.isNumber(e[n][0])?o+c.config.markers.offsetY:null),u.push(s+c.config.markers.offsetX),g.push(d.isNumber(e[n][r+1])?a+c.config.markers.offsetY:null)}else u.push(s+c.config.markers.offsetX),g.push(d.isNumber(e[n][r+1])?a+c.config.markers.offsetY:null);return{x:u,y:g}}},{key:"checkPreviousPaths",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,s=t.realIndex,a=this.w,n=0;n0&&parseInt(r.realIndex)===parseInt(s)&&("line"===r.type?(this.appendPathFrom=!1,e=a.globals.previousPaths[n].paths[0].d):"area"===r.type&&(this.appendPathFrom=!1,a.config.stroke.show?(e=a.globals.previousPaths[n].paths[0].d,i=a.globals.previousPaths[n].paths[1].d):i=a.globals.previousPaths[n].paths[0].d))}return{pathFromLine:e,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(t){var e=t.i,i=t.series,s=t.yRatio,a=t.zeroY,n=t.prevY,r=t.prevSeriesY,o=t.lineYPosition,l=this.w;if(void 0!==i[e][0])n=l.config.chart.stacked?(o=e>0?r[e-1][0]:a)-i[e][0]/s+2*(this.isReversed?i[e][0]/s:0):a-i[e][0]/s+2*(this.isReversed?i[e][0]/s:0);else if(l.config.chart.stacked&&e>0&&void 0===i[e][0])for(var h=e-1;h>=0;h--)if(null!==i[h][0]&&void 0!==i[h][0]){n=o=r[h][0];break}return{prevY:n,lineYPosition:o}}}]),t}(),R=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.xaxisFontSize=this.w.config.xaxis.labels.style.fontSize,this.axisFontFamily=this.w.config.xaxis.labels.style.fontFamily,this.isBarHorizontal=!("bar"!==this.w.config.chart.type||!this.w.config.plotOptions.bar.horizontal),this.xaxisForeColors=this.w.config.xaxis.labels.style.colors,this.xAxisoffX=0,"bottom"===this.w.config.xaxis.position&&(this.xAxisoffX=this.w.globals.gridHeight)}return s(t,[{key:"drawYaxis",value:function(t){var e=this.w,i=new f(this.ctx),s=e.config.yaxis[t].labels.style.fontSize,a=e.config.yaxis[t].labels.style.fontFamily,n=i.group({class:"apexcharts-yaxis",rel:t,transform:"translate("+e.globals.translateYAxisX[t]+", 0)"});if(!e.config.yaxis[t].show)return n;var r=i.group({class:"apexcharts-yaxis-texts-g"});n.add(r);var o=e.globals.yAxisScale[t].result.length-1,l=e.globals.gridHeight/o+.1,h=e.globals.translateY,c=e.globals.yLabelFormatters[t],d=e.globals.yAxisScale[t].result.slice();if(e.config.yaxis[t].reversed&&d.reverse(),e.config.yaxis[t].labels.show)for(var u=o;u>=0;u--){var g=d[u];g=c(g,u);var p=e.config.yaxis[t].labels.padding;e.config.yaxis[t].opposite&&0!==e.config.yaxis.length&&(p*=-1);var x=i.drawText({x:p,y:h+o/10+e.config.yaxis[t].labels.offsetY+1,text:g,textAnchor:e.config.yaxis[t].opposite?"start":"end",fontSize:s,fontFamily:a,foreColor:e.config.yaxis[t].labels.style.color,cssClass:"apexcharts-yaxis-label "+e.config.yaxis[t].labels.style.cssClass});r.add(x);var m=i.rotateAroundCenter(x.node);0!==e.config.yaxis[t].labels.rotate&&x.node.setAttribute("transform","rotate(".concat(e.config.yaxis[t].labels.rotate," ").concat(m.x," ").concat(m.y,")")),h+=l}if(void 0!==e.config.yaxis[t].title.text){var v=i.group({class:"apexcharts-yaxis-title"}),b=0;e.config.yaxis[t].opposite&&(b=e.globals.translateYAxisX[t]);var y=i.drawText({x:b,y:e.globals.gridHeight/2+e.globals.translateY,text:e.config.yaxis[t].title.text,textAnchor:"end",foreColor:e.config.yaxis[t].title.style.color,fontSize:e.config.yaxis[t].title.style.fontSize,fontFamily:e.config.yaxis[t].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+e.config.yaxis[t].title.style.cssClass});v.add(y),n.add(v)}var w=e.config.yaxis[t].axisBorder;if(w.show){var k=31+w.offsetX;e.config.yaxis[t].opposite&&(k=-31-w.offsetX);var A=i.drawLine(k,e.globals.translateY+w.offsetY-2,k,e.globals.gridHeight+e.globals.translateY+w.offsetY+2,w.color);n.add(A),this.drawAxisTicks(k,o,w,e.config.yaxis[t].axisTicks,t,l,n)}return n}},{key:"drawYaxisInversed",value:function(t){var e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),a=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});s.add(a);var n=e.globals.yAxisScale[t].result.length-1,r=e.globals.gridWidth/n+.1,o=r+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice();if(e.config.yaxis[t].reversed&&h.reverse(),e.config.xaxis.labels.show)for(var c=n;c>=0;c--){var d=h[c];d=l(d,c);var u=i.drawText({x:e.globals.gridWidth+e.globals.padHorizontal-(o-r+e.config.xaxis.labels.offsetX),y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30,text:"",textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,cssClass:"apexcharts-xaxis-label "+e.config.xaxis.labels.style.cssClass});a.add(u),u.tspan(d);var g=document.createElementNS(e.globals.SVGNS,"title");g.textContent=d,u.node.appendChild(g),o+=r}if(void 0!==e.config.xaxis.title.text){var p=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),x=i.drawText({x:e.globals.gridWidth/2,y:this.xAxisoffX+parseInt(this.xaxisFontSize)+parseInt(e.config.xaxis.title.style.fontSize)+20,text:e.config.xaxis.title.text,textAnchor:"middle",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,cssClass:"apexcharts-xaxis-title-text "+e.config.xaxis.title.style.cssClass});p.add(x),s.add(p)}var m=e.config.yaxis[t].axisBorder;if(m.show){var v=i.drawLine(e.globals.padHorizontal+m.offsetX,1+m.offsetY,e.globals.padHorizontal+m.offsetX,e.globals.gridHeight+m.offsetY,m.color);s.add(v)}return s}},{key:"drawAxisTicks",value:function(t,e,i,s,a,n,r){var o=this.w,l=new f(this.ctx),h=o.globals.translateY;if(s.show){!0===o.config.yaxis[a].opposite&&(t+=s.width);for(var c=e;c>=0;c--){var d=h+e/10+o.config.yaxis[a].labels.offsetY-1;this.isBarHorizontal&&(d=n*c);var u=l.drawLine(t+i.offsetX-s.width+s.offsetX,d+s.offsetY,t+i.offsetX+s.offsetX,d+s.offsetY,i.color);r.add(u),h+=n}}}},{key:"yAxisTitleRotate",value:function(t,e){var i=this.w,s=new f(this.ctx),a={width:0,height:0},n={width:0,height:0},r=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-texts-g"));null!==r&&(a=r.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-title text"));if(null!==o&&(n=o.getBoundingClientRect()),null!==o){var l=this.xPaddingForYAxisTitle(t,a,n,e);o.setAttribute("x",l.xPos-(e?10:0))}if(null!==o){var h=s.rotateAroundCenter(o);e?o.setAttribute("transform","rotate(".concat(i.config.yaxis[t].title.rotate," ").concat(h.x," ").concat(h.y,")")):o.setAttribute("transform","rotate(-".concat(i.config.yaxis[t].title.rotate," ").concat(h.x," ").concat(h.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(t,e,i,s){var a=this.w,n=0,r=0,o=10;return void 0===a.config.yaxis[t].title.text||t<0?{xPos:r,padd:0}:(s?(r=e.width+a.config.yaxis[t].title.offsetX+i.width/2+o/2,0===(n+=1)&&(r-=o/2)):(r=-1*e.width+a.config.yaxis[t].title.offsetX+o/2+i.width/2,this.isBarHorizontal&&(o=25,r=-1*e.width-a.config.yaxis[t].title.offsetX-o)),{xPos:r,padd:o})}},{key:"setYAxisXPosition",value:function(t,e){var i=this,s=this.w,a=0,n=0,r=21,o=1;s.config.yaxis.length>1&&(this.multipleYs=!0),s.config.yaxis.map(function(l,h){var c=s.globals.ignoreYAxisIndexes.indexOf(h)>-1||!l.show||l.floating||0===t[h].width,d=t[h].width+e[h].width;l.opposite?i.isBarHorizontal?(n=s.globals.gridWidth+s.globals.translateX-1,s.globals.translateYAxisX[h]=n-l.labels.offsetX):(n=s.globals.gridWidth+s.globals.translateX+o,c||(o=o+d+20),s.globals.translateYAxisX[h]=n-l.labels.offsetX+20):(a=s.globals.translateX-r,c||(r=r+d+20),s.globals.translateYAxisX[h]=a+l.labels.offsetX)})}}]),t}(),D=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.tooltipKeyFormat="dd MMM"}return s(t,[{key:"xLabelFormat",value:function(t,e){var i=this.w;if("datetime"===i.config.xaxis.type&&void 0===i.config.tooltip.x.formatter)return new T(this.ctx).formatDate(new Date(e),i.config.tooltip.x.format,!0,!0);return t(e)}},{key:"setLabelFormatters",value:function(){var t=this.w;return t.globals.xLabelFormatter=function(t){return t},t.globals.xaxisTooltipFormatter=function(t){return t},t.globals.ttKeyFormatter=function(t){return t},t.globals.ttZFormatter=function(t){return t},t.globals.legendFormatter=function(t){return t},"function"==typeof t.config.tooltip.x.formatter&&(t.globals.ttKeyFormatter=t.config.tooltip.x.formatter),"function"==typeof t.config.xaxis.tooltip.formatter&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),Array.isArray(t.config.tooltip.y)?t.globals.ttVal=t.config.tooltip.y:void 0!==t.config.tooltip.y.formatter&&(t.globals.ttVal=t.config.tooltip.y),void 0!==t.config.tooltip.z.formatter&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),void 0!==t.config.legend.formatter&&(t.globals.legendFormatter=t.config.legend.formatter),void 0!==t.config.xaxis.labels.formatter?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(e){return d.isNumber(e)?"numeric"===t.config.xaxis.type&&t.globals.dataPoints<50?e.toFixed(1):e.toFixed(0):e},t.config.yaxis.forEach(function(e,i){void 0!==e.labels.formatter?t.globals.yLabelFormatters[i]=e.labels.formatter:t.globals.yLabelFormatters[i]=function(i){return d.isNumber(i)?0!==t.globals.yValueDecimal||t.globals.maxY-t.globals.minY<1?i.toFixed(e.decimalsInFloat):i.toFixed(0):i}}),t.globals}},{key:"heatmapLabelFormatters",value:function(){var t=this.w;if("heatmap"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce(function(t,e){return t.length>e.length?t:e},0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),N=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var s=this.w;this.xaxisLabels=s.globals.labels.slice(),s.globals.timelineLabels.length>0&&(this.xaxisLabels=s.globals.timelineLabels.slice()),this.drawnLabels=[],"top"===s.config.xaxis.position?this.offY=0:this.offY=s.globals.gridHeight+1,this.offY=this.offY+s.config.xaxis.axisBorder.offsetY,this.xaxisFontSize=s.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=s.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=s.config.xaxis.labels.style.colors,this.xaxisBorderWidth=s.config.xaxis.axisBorder.width,this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=s.globals.gridWidth*parseInt(this.xaxisBorderWidth)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth),this.xaxisBorderHeight=s.config.xaxis.axisBorder.height,this.yaxis=s.config.yaxis[0]}return s(t,[{key:"drawXaxis",value:function(){var t,e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),a=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});s.add(a);for(var n=e.globals.padHorizontal,r=[],o=0;o0?(p=e.globals.timelineLabels[d].position,g=e.globals.timelineLabels[d].value):"datetime"===e.config.xaxis.type&&void 0===h&&(g=""),(0===(g=g.toString()).indexOf("NaN")||"undefined"===g||0===g.toLowerCase().indexOf("invalid")||g.toLowerCase().indexOf("infinity")>=0||this.drawnLabels.indexOf(g)>=0&&!e.config.xaxis.labels.showDuplicates)&&(g=""),this.drawnLabels.push(g);var x=28;e.globals.rotateXLabels&&(x=22);var m=i.drawText({x:p,y:this.offY+e.config.xaxis.labels.offsetY+x,text:"",textAnchor:"middle",fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[d]:this.xaxisForeColors,cssClass:"apexcharts-xaxis-label "+e.config.xaxis.labels.style.cssClass});a.add(m),i.addTspan(m,g,this.xaxisFontFamily);var v=document.createElementNS(e.globals.SVGNS,"title");v.textContent=g,m.node.appendChild(v),n+=t}if(void 0!==e.config.xaxis.title.text){var b=i.group({class:"apexcharts-xaxis-title"}),y=i.drawText({x:e.globals.gridWidth/2+e.config.xaxis.title.offsetX,y:this.offY-parseInt(this.xaxisFontSize)+e.globals.xAxisLabelsHeight+e.config.xaxis.title.offsetY,text:e.config.xaxis.title.text,textAnchor:"middle",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,foreColor:e.config.xaxis.title.style.color,cssClass:"apexcharts-xaxis-title-text "+e.config.xaxis.title.style.cssClass});b.add(y),s.add(b)}if(e.config.xaxis.axisBorder.show){var w=0;"bar"===e.config.chart.type&&e.globals.isXNumeric&&(w-=15);var k=i.drawLine(e.globals.padHorizontal+w+e.config.xaxis.axisBorder.offsetX,this.offY,this.xaxisBorderWidth,this.offY,e.config.xaxis.axisBorder.color,0,this.xaxisBorderHeight);s.add(k)}return s}},{key:"drawXaxisInversed",value:function(t){var e,i,s=this.w,a=new f(this.ctx),n=s.config.yaxis[0].opposite?s.globals.translateYAxisX[t]:0,r=a.group({class:"apexcharts-yaxis apexcharts-xaxis-inversed",rel:t}),o=a.group({class:"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g",transform:"translate("+n+", 0)"});r.add(o);for(var l=[],h=0;hi.globals.gridWidth)){var a=this.offY+i.config.xaxis.axisTicks.offsetY,n=a+i.config.xaxis.axisTicks.height;if(i.config.xaxis.axisTicks.show){var r=new f(this.ctx).drawLine(t+i.config.xaxis.axisTicks.offsetX,a+i.config.xaxis.offsetY,s+i.config.xaxis.axisTicks.offsetX,n+i.config.xaxis.offsetY,i.config.xaxis.axisTicks.color);e.add(r),r.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,s=t.globals.padHorizontal;if(t.globals.timelineLabels.length>0)for(var a=0;a0){var u=a[a.length-1].getBBox(),g=a[0].getBBox();u.x<-20&&a[a.length-1].parentNode.removeChild(a[a.length-1]),g.x+g.width>t.globals.gridWidth&&a[0].parentNode.removeChild(a[0]);for(var p=0;p2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;if(t===Number.MIN_VALUE&&0===e||!d.isNumber(t)&&!d.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE)return t=0,e=s,this.linearScale(t,e,s);t>e?(console.warn("yaxis.min cannot be greater than yaxis.max"),e=t+.1):t===e&&(t=0===t?0:t-.1,e=0===e?2:e+.1);var a=[],n=s+1;n<2?n=2:n>2&&(n-=2);for(var r=(e-t)/n,o=Math.floor(d.log10(r)),l=Math.pow(10,o),h=parseInt(r/l)*l,c=h*Math.floor(t/h),u=h*Math.ceil(e/h),g=c;a.push(g),!((g+=h)>u););if(void 0===this.w.config.yaxis[i].max&&void 0===this.w.config.yaxis[i].min||this.w.config.yaxis[i].forceNiceScale)return{result:a,niceMin:a[0],niceMax:a[a.length-1]};var f=t;(a=[]).push(f);for(var p=Math.abs(e-t)/s,x=0;x<=s-1;x++)f+=p,a.push(f);return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:"linearScale",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,s=Math.abs(e-t)/i;i===Number.MAX_VALUE&&(i=10,s=1);for(var a=[],n=t;i>=0;)a.push(n),n+=s,i-=1;return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:"logarithmicScale",value:function(t,e,i,s){(e<0||e===Number.MIN_VALUE)&&(e=.01);for(var a=Math.log(e)/Math.log(10),n=Math.log(i)/Math.log(10),r=Math.abs(i-e)/s,o=[],l=e;s>=0;)o.push(l),l+=r,s-=1;var h=o.map(function(t,s){t<=0&&(t=.01);var r=(n-a)/(i-e),o=Math.pow(10,a+r*(t-a));return Math.round(o/d.roundToBase(o,10))*d.roundToBase(o,10)});return 0===h[0]&&(h[0]=1),{result:h,niceMin:h[0],niceMax:h[h.length-1]}}},{key:"setYScaleForIndex",value:function(t,e,i){var s=this.w.globals,a=this.w.config,n=this.isBarHorizontal?a.xaxis:a.yaxis[t];void 0===s.yAxisScale[t]&&(s.yAxisScale[t]=[]),n.logarithmic?(s.allSeriesCollapsed=!1,s.yAxisScale[t]=this.logarithmicScale(t,e,i,n.tickAmount?n.tickAmount:Math.floor(Math.log10(i)))):i!==-Number.MAX_VALUE&&d.isNumber(i)?(s.allSeriesCollapsed=!1,s.yAxisScale[t]=this.niceScale(e,i,t,n.tickAmount?n.tickAmount:5)):s.yAxisScale[t]=this.linearScale(0,5,5)}},{key:"setMultipleYScales",value:function(){var t=this,e=this.w.globals,i=this.w.config,s=e.minYArr.concat([]),a=e.maxYArr.concat([]),n=[];i.yaxis.forEach(function(r,o){var l=o;i.series.forEach(function(t,i){t.name===r.seriesName&&-1===e.collapsedSeriesIndices.indexOf(i)&&(l=i,o!==i?n.push({index:i,similarIndex:o,alreadyExists:!0}):n.push({index:i}))});var h=s[l],c=a[l];t.setYScaleForIndex(o,h,c)}),this.sameScaleInMultipleAxes(s,a,n)}},{key:"sameScaleInMultipleAxes",value:function(t,e,i){var s=this,a=this.w.config,n=this.w.globals,r=[];i.forEach(function(t){t.alreadyExists&&(void 0===r[t.index]&&(r[t.index]=[]),r[t.index].push(t.index),r[t.index].push(t.similarIndex))}),r.forEach(function(t,e){r.forEach(function(i,s){var a,n;e!==s&&(a=t,n=i,a.filter(function(t){return-1!==n.indexOf(t)})).length>0&&(r[e]=r[e].concat(r[s]))})});var o=r.map(function(t){return t.filter(function(e,i){return t.indexOf(e)===i})}).map(function(t){return t.sort()});r=r.filter(function(t){return!!t});var l=o.slice(),h=l.map(function(t){return JSON.stringify(t)});l=l.filter(function(t,e){return h.indexOf(JSON.stringify(t))===e});var c=[],d=[];t.forEach(function(t,i){l.forEach(function(s,a){s.indexOf(i)>-1&&(void 0===c[a]&&(c[a]=[],d[a]=[]),c[a].push({key:i,value:t}),d[a].push({key:i,value:e[i]}))})});var u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach(function(t,e){t.forEach(function(t,i){u[e]=Math.min(t.value,u[e])})}),d.forEach(function(t,e){t.forEach(function(t,i){g[e]=Math.max(t.value,g[e])})}),t.forEach(function(t,e){d.forEach(function(t,i){var r=u[i],o=g[i];t.forEach(function(i,l){t[l].key===e&&(void 0!==a.yaxis[e].min&&(r="function"==typeof a.yaxis[e].min?a.yaxis[e].min(n.minY):a.yaxis[e].min),void 0!==a.yaxis[e].max&&(o="function"==typeof a.yaxis[e].max?a.yaxis[e].max(n.maxY):a.yaxis[e].max),s.setYScaleForIndex(e,r,o))})})})}},{key:"autoScaleY",value:function(t,e){t||(t=this);var i=[];return t.w.config.series.forEach(function(t){var s,a,n=t.data.find(function(t){return t[0]>=e.xaxis.min})[1];a=s=n,t.data.forEach(function(t){t[0]<=e.xaxis.max&&t[0]>=e.xaxis.min&&(t[1]>a&&null!==t[1]&&(a=t[1]),t[1]1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=this.w.globals,n=-Number.MAX_VALUE,r=Number.MIN_VALUE;null===s&&(s=t+1);var o=a.series,l=o,h=o;"candlestick"===this.w.config.chart.type&&(l=a.seriesCandleL,h=a.seriesCandleH);for(var c=t;cl[c][u]&&l[c][u]<0&&(r=l[c][u])):a.hasNullValues=!0}return{minY:r,maxY:n,lowestY:e,highestY:i}}},{key:"setYRange",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var s=0;s0?h=h+parseFloat(t.series[u][l])+1e-4:c+=parseFloat(t.series[u][l])),u===t.series.length-1&&(r.push(h),o.push(c));for(var g=0;g=0&&i<=10&&(f=0),t.minY=i-5*f/100,t.maxY=t.maxY+5*f/100+.05}e.yaxis.map(function(e,i){void 0!==e.max&&("number"==typeof e.max?t.maxYArr[i]=e.max:"function"==typeof e.max&&(t.maxYArr[i]=e.max(t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&("number"==typeof e.min?t.minYArr[i]=e.min:"function"==typeof e.min&&(t.minYArr[i]=e.min(t.minY)),t.minY=t.minYArr[i])}),this.isBarHorizontal&&(void 0!==e.xaxis.min&&"number"==typeof e.xaxis.min&&(t.minY=e.xaxis.min),void 0!==e.xaxis.max&&"number"==typeof e.xaxis.max&&(t.maxY=e.xaxis.max)),t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach(function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax})):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax)}},{key:"setXRange",value:function(){var t,e=this.w.globals,i=this.w.config,s="numeric"===i.xaxis.type||"datetime"===i.xaxis.type||"category"===i.xaxis.type&&!e.noLabelsProvided;if(e.isXNumeric)for(var a=0;ae.dataPoints&&0!==e.dataPoints&&(t=e.dataPoints-1)):t="dataPoints"===i.xaxis.tickAmount?e.series[e.maxValsInArrayIndex].length-1:i.xaxis.tickAmount,void 0!==i.xaxis.max&&"number"==typeof i.xaxis.max&&(e.maxX=i.xaxis.max),void 0!==i.xaxis.min&&"number"==typeof i.xaxis.min&&(e.minX=i.xaxis.min),void 0!==i.xaxis.range&&(e.minX=e.maxX-i.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE?e.xAxisScale=this.scales.linearScale(e.minX,e.maxX,t):(e.xAxisScale=this.scales.linearScale(1,t,t),e.noLabelsProvided&&e.labels.length>0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,t-1),e.seriesX=e.labels.slice())),s&&(e.labels=e.xAxisScale.result.slice()));if(e.minX===e.maxX)if("datetime"===i.xaxis.type){var l=new Date(e.minX);l.setDate(l.getDate()-2),e.minX=new Date(l).getTime();var h=new Date(e.maxX);h.setDate(h.getDate()+2),e.maxX=new Date(h).getTime()}else("numeric"===i.xaxis.type||"category"===i.xaxis.type&&!e.noLabelsProvided)&&(e.minX=e.minX-2,e.maxX=e.maxX+2)}},{key:"setZRange",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e=t.from&&i<=t.to&&s[e].classList.remove("legend-mouseover-inactive")}}(i.config.plotOptions.heatmap.colorScale.ranges[n])}else"mouseout"===t.type&&a()}},{key:"getActiveSeriesIndex",value:function(){var t=this.w,e=0;if(t.globals.series.length>1)for(var i=t.globals.series.map(function(e,i){return e.length>0&&"bar"!==t.config.series[i].type&&"column"!==t.config.series[i].type?i:-1}),s=0;s1)for(var i=t.config.series.map(function(t,e){return t.data&&t.data.length>0?e:-1}),s=0;s0)for(var s=i.length-1;s>=0;s--)e(i,s,"line");var a=t.globals.dom.baseEl.querySelectorAll(".apexcharts-area-series .apexcharts-series");if(a.length>0)for(var n=a.length-1;n>=0;n--)e(a,n,"area");var r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series .apexcharts-series");if(r.length>0)for(var o=0;o0)for(var h=0;h0)for(var d=0;d0)for(var g=0;g0)for(var v=0;v0)for(var A=0;A0?t:[]});return t}}]),t}(),V=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.lgRect={},this.yAxisWidth=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.xPadRight=0,this.xPadLeft=0,this.isBarHorizontal=!("bar"!==this.w.config.chart.type||!this.w.config.plotOptions.bar.horizontal)}return s(t,[{key:"plotCoords",value:function(){var t=this.w,e=t.globals,i=this.getLegendsRect();e.axisCharts?this.setGridCoordsForAxisCharts(i):this.setGridCoordsForNonAxisCharts(i),this.titleSubtitleOffset(),e.gridHeight=e.gridHeight-t.config.grid.padding.top-t.config.grid.padding.bottom,e.gridWidth=e.gridWidth-t.config.grid.padding.left-t.config.grid.padding.right-this.xPadRight-this.xPadLeft,e.translateX=e.translateX+t.config.grid.padding.left+this.xPadLeft,e.translateY=e.translateY+t.config.grid.padding.top}},{key:"conditionalChecksForAxisCoords",value:function(t,e){var i=this.w;this.xAxisHeight=(t.height+e.height)*i.globals.LINE_HEIGHT_RATIO+15,this.xAxisWidth=t.width,this.xAxisHeight-e.height>i.config.xaxis.labels.maxHeight&&(this.xAxisHeight=i.config.xaxis.labels.maxHeight),i.config.xaxis.labels.minHeight&&this.xAxisHeighti.config.yaxis[0].labels.maxWidth&&(this.yAxisWidth=i.config.yaxis[0].labels.maxWidth))}},{key:"setGridCoordsForAxisCharts",value:function(t){var e=this.w,i=e.globals,s=this.getyAxisLabelsCoords(),a=this.getxAxisLabelsCoords(),n=this.getyAxisTitleCoords(),r=this.getxAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map(function(t,i){e.globals.yLabelsCoords.push({width:s[i].width,index:i}),e.globals.yTitleCoords.push({width:n[i].width,index:i})}),this.conditionalChecksForAxisCoords(a,r),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,this.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var o=this.yAxisWidth,l=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight,i.xAxisHeight=this.xAxisHeight;var h=10;switch(e.config.grid.show&&"radar"!==e.config.chart.type||(o=0,l=35),this.isSparkline&&(t={height:0,width:0},l=0,o=0,h=0),this.additionalPaddingXLabels(a),e.config.legend.position){case"bottom":i.translateY=h,i.translateX=o,i.gridHeight=i.svgHeight-t.height-l-(this.isSparkline?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-o;break;case"top":i.translateY=t.height+h,i.translateX=o,i.gridHeight=i.svgHeight-t.height-l-(this.isSparkline?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-o;break;case"left":i.translateY=h,i.translateX=t.width+o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-t.width-o;break;case"right":i.translateY=h,i.translateX=o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-t.width-o-5;break;default:throw new Error("Legend position not supported")}this.setGridXPosForDualYAxis(n,s),new R(this.ctx).setYAxisXPosition(s,n)}},{key:"setGridCoordsForNonAxisCharts",value:function(t){var e=this.w,i=e.globals,s=0;e.config.legend.show&&!e.config.legend.floating&&(s=20);var a=10,n=0;if("pie"===e.config.chart.type||"donut"===e.config.chart.type?(a+=e.config.plotOptions.pie.offsetY,n+=e.config.plotOptions.pie.offsetX):"radialBar"===e.config.chart.type&&(a+=e.config.plotOptions.radialBar.offsetY,n+=e.config.plotOptions.radialBar.offsetX),!e.config.legend.show)return i.gridHeight=i.svgHeight-35,i.gridWidth=i.gridHeight,i.translateY=a-10,void(i.translateX=n+(i.svgWidth-i.gridWidth)/2);switch(e.config.legend.position){case"bottom":i.gridHeight=i.svgHeight-t.height-35,i.gridWidth=i.gridHeight,i.translateY=a-20,i.translateX=n+(i.svgWidth-i.gridWidth)/2;break;case"top":i.gridHeight=i.svgHeight-t.height-35,i.gridWidth=i.gridHeight,i.translateY=t.height+a,i.translateX=n+(i.svgWidth-i.gridWidth)/2;break;case"left":i.gridWidth=i.svgWidth-t.width-s,i.gridHeight=i.gridWidth,i.translateY=a,i.translateX=n+t.width+s;break;case"right":i.gridWidth=i.svgWidth-t.width-s-5,i.gridHeight=i.gridWidth,i.translateY=a,i.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"setGridXPosForDualYAxis",value:function(t,e){var i=this.w;i.config.yaxis.map(function(s,a){-1===i.globals.ignoreYAxisIndexes.indexOf(a)&&!i.config.yaxis[a].floating&&i.config.yaxis[a].show&&s.opposite&&(i.globals.translateX=i.globals.translateX-(e[a].width+t[a].width)-parseInt(i.config.yaxis[a].labels.style.fontSize)/1.2-12)})}},{key:"additionalPaddingXLabels",value:function(t){var e=this,i=this.w;if("category"===i.config.xaxis.type&&this.isBarHorizontal||"numeric"===i.config.xaxis.type){var s="line"===i.config.chart.type||"area"===i.config.chart.type;i.config.yaxis.forEach(function(a,n){var r;(!a.show||a.floating||-1!==i.globals.collapsedSeriesIndices.indexOf(n)||s||a.opposite&&e.isBarHorizontal)&&((s&&i.globals.isMultipleYAxis&&-1!==i.globals.collapsedSeriesIndices.indexOf(n)||e.isBarHorizontal&&a.opposite)&&(r=t,i.config.grid.padding.left1&&(i+=10);var s=this.getTitleSubtitleCoords("title"),a=this.getTitleSubtitleCoords("subtitle");e.gridHeight=e.gridHeight-s.height-a.height-i,e.translateY=e.translateY+s.height+a.height+i}},{key:"getTotalYAxisWidth",value:function(){var t=this.w,e=0,i=10,s=function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1};return t.globals.yLabelsCoords.map(function(a,n){var r=t.config.yaxis[n].floating;a.width>0&&!r?(e=e+a.width+i,s(n)&&(e=e-a.width-i)):e+=r||!t.config.yaxis[n].show?0:5}),t.globals.yTitleCoords.map(function(a,n){var r=t.config.yaxis[n].floating;i=parseInt(t.config.yaxis[n].title.style.fontSize),a.width>0&&!r?(e=e+a.width+i,s(n)&&(e=e-a.width-i)):e+=r||!t.config.yaxis[n].show?0:5}),e}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var t,e=this.w,i=e.globals.timelineLabels.slice().map(function(t){return t.value}),s=i.reduce(function(t,e){return void 0===t?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):t.length>e.length?t:e},0);return 1.05*(t=new f(this.ctx).getTextRects(s,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:"getxAxisLabelsCoords",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.globals.timelineLabels.length>0){var s=this.getxAxisTimeScaleLabelsCoords();t={width:s.width,height:s.height}}else{var a="left"!==e.config.legend.position||"right"!==e.config.legend.position||e.config.legend.floating?0:this.lgRect.width,n=i.reduce(function(t,e){return t.length>e.length?t:e},0);this.isBarHorizontal&&(n=e.globals.yAxisScale[0].result.reduce(function(t,e){return t.length>e.length?t:e},0));var r=e.globals.xLabelFormatter;n=new D(this.ctx).xLabelFormat(r,n);var o=new f(this.ctx),l=o.getTextRects(n,e.config.xaxis.labels.style.fontSize);(t={width:l.width,height:l.height}).width*i.length>e.globals.svgWidth-a-this.yAxisWidth&&0!==e.config.xaxis.labels.rotate?this.isBarHorizontal||(e.globals.rotateXLabels=!0,l=o.getTextRects(n,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,"rotate(".concat(e.config.xaxis.labels.rotate," 0 0)"),!1),t.height=l.height/1.66):e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:"getyAxisLabelsCoords",value:function(){var t=this,e=this.w,i=[],s=10;return e.config.yaxis.map(function(a,n){if(a.show&&a.labels.show&&e.globals.yAxisScale[n].result.length){var r=e.globals.yLabelFormatters[n],o=r(e.globals.yAxisScale[n].niceMax,-1);if(void 0!==o&&0!==o.length||(o=e.globals.yAxisScale[n].niceMax),t.isBarHorizontal)s=0,o=r(o=e.globals.labels.slice().reduce(function(t,e){return t.length>e.length?t:e},0),-1);var l=new f(t.ctx).getTextRects(o,a.labels.style.fontSize);i.push({width:l.width+s,height:l.height})}else i.push({width:0,height:0})}),i}},{key:"getxAxisTitleCoords",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var s=new f(this.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=s.width,i=s.height}return{width:e,height:i}}},{key:"getyAxisTitleCoords",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map(function(e,s){if(e.show&&void 0!==e.title.text){var a=new f(t.ctx).getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,"rotate(-90 0 0)",!1);i.push({width:a.width,height:a.height})}else i.push({width:0,height:0})}),i}},{key:"getTitleSubtitleCoords",value:function(t){var e=this.w,i=0,s=0,a="title"===t?e.config.title.floating:e.config.subtitle.floating,n=e.globals.dom.baseEl.querySelector(".apexcharts-".concat(t,"-text"));if(null!==n&&!a){var r=n.getBoundingClientRect();i=r.width,s=e.globals.axisCharts?r.height+5:r.height}return{width:i,height:s}}},{key:"getLegendsRect",value:function(){var t=this.w,e=t.globals.dom.baseEl.querySelector(".apexcharts-legend"),i=Object.assign({},d.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.lgRect={x:0,y:0,height:0,width:0},this.lgRect}}]),t}(),G=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.timeScaleArray=[]}return s(t,[{key:"calculateTimeScaleTicks",value:function(t,e){var i=this,s=this.w;if(s.globals.allSeriesCollapsed)return s.globals.labels=[],s.globals.timelineLabels=[],[];var a=new T(this.ctx),r=(e-t)/864e5;this.determineInterval(r),s.globals.disableZoomIn=!1,s.globals.disableZoomOut=!1,r<.005?s.globals.disableZoomIn=!0:r>5e4&&(s.globals.disableZoomOut=!0);var o=a.getTimeUnitsfromTimestamp(t,e),l=s.globals.gridWidth/r,h=l/24,c=h/60,d=Math.floor(24*r),u=Math.floor(24*r*60),g=Math.floor(r),f=Math.floor(r/30),p=Math.floor(r/365),x={minMinute:o.minMinute,minHour:o.minHour,minDate:o.minDate,minMonth:o.minMonth,minYear:o.minYear},m={firstVal:x,currentMinute:x.minMinute,currentHour:x.minHour,currentMonthDate:x.minDate,currentDate:x.minDate,currentMonth:x.minMonth,currentYear:x.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,numberOfMinutes:u,numberOfHours:d,numberOfDays:g,numberOfMonths:f,numberOfYears:p};switch(this.tickInterval){case"years":this.generateYearScale(m);break;case"months":case"half_year":this.generateMonthScale(m);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(m);break;case"hours":this.generateHourScale(m);break;case"minutes":this.generateMinuteScale(m)}var v=this.timeScaleArray.map(function(t){var e={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return"month"===t.unit?n({},e,{value:t.value+1}):"day"===t.unit||"hour"===t.unit?n({},e,{value:t.value}):"minute"===t.unit?n({},e,{value:t.value,minute:t.value}):t});return v.filter(function(t){var e=1,a=Math.ceil(s.globals.gridWidth/120),n=t.value;void 0!==s.config.xaxis.tickAmount&&(a=s.config.xaxis.tickAmount),v.length>a&&(e=Math.floor(v.length/a));var r=!1,o=!1;switch(i.tickInterval){case"half_year":e=7,"year"===t.unit&&(r=!0);break;case"months":e=1,"year"===t.unit&&(r=!0);break;case"months_fortnight":e=15,"year"!==t.unit&&"month"!==t.unit||(r=!0),30===n&&(o=!0);break;case"months_days":e=10,"month"===t.unit&&(r=!0),30===n&&(o=!0);break;case"week_days":e=8,"month"===t.unit&&(r=!0);break;case"days":e=1,"month"===t.unit&&(r=!0);break;case"hours":"day"===t.unit&&(r=!0);break;case"minutes":n%5!=0&&(o=!0)}if("minutes"===i.tickInterval||"hours"===i.tickInterval){if(!o)return!0}else if((n%e==0||r)&&!o)return!0})}},{key:"recalcDimensionsBasedOnFormat",value:function(t){var e=this.w,i=this.formatDates(t),s=this.removeOverlappingTS(i);e.globals.timelineLabels=s.slice(),new V(this.ctx).plotCoords()}},{key:"determineInterval",value:function(t){switch(!0){case t>1825:this.tickInterval="years";break;case t>800&&t<=1825:this.tickInterval="half_year";break;case t>180&&t<=800:this.tickInterval="months";break;case t>90&&t<=180:this.tickInterval="months_fortnight";break;case t>60&&t<=90:this.tickInterval="months_days";break;case t>30&&t<=60:this.tickInterval="week_days";break;case t>2&&t<=30:this.tickInterval="days";break;case t>.1&&t<=2:this.tickInterval="hours";break;case t<.1:this.tickInterval="minutes";break;default:this.tickInterval="days"}}},{key:"generateYearScale",value:function(t){var e=t.firstVal,i=t.currentMonth,s=t.currentYear,a=t.daysWidthOnXAxis,n=t.numberOfYears,r=e.minYear,o=0,l=new T(this.ctx);if(e.minDate>1&&e.minMonth>0){var h=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);o=(l.determineDaysOfYear(e.minYear)-h+1)*a,r=e.minYear+1,this.timeScaleArray.push({position:o,value:r,unit:"year",year:r,month:d.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:o,value:r,unit:"year",year:s,month:d.monthMod(i+1)});for(var c=r,u=o,g=0;g1){l=(h.determineDaysOfMonths(s+1,e.minYear)-i+1)*n,o=d.monthMod(s+1);var g=a+u,f=d.monthMod(o),p=o;0===o&&(c="year",p=g,f=1,g+=u+=1),this.timeScaleArray.push({position:l,value:p,unit:c,year:g,month:f})}else this.timeScaleArray.push({position:l,value:o,unit:c,year:a,month:d.monthMod(s)});for(var x=o+1,m=l,v=0,b=1;vr.determineDaysOfMonths(e+1,i)?(g=1,o="month",c=e+=1,e):e},g=h,f=u(g,i,s);this.timeScaleArray.push({position:l,value:c,unit:o,year:s,month:d.monthMod(f),day:g});for(var p=l,x=0;xo.determineDaysOfMonths(e+1,a)&&(x=1,e+=1),{month:e,date:x}},c=function(t,e){return t>o.determineDaysOfMonths(e+1,a)?e+=1:e},u=60-e.minMinute,g=u*n,f=e.minHour+1,p=f+1;60===u&&(g=0,p=(f=e.minHour)+1);var x=i,m=c(x,s);this.timeScaleArray.push({position:g,value:f,unit:l,day:x,hour:p,year:a,month:d.monthMod(m)});for(var v=g,b=0;b=24)p=0,l="day",m=h(x+=1,m).month,m=c(x,m);var y=a+Math.floor(m/12)+0;v=0===p&&0===b?u*n:60*n+v;var w=0===p?x:p;this.timeScaleArray.push({position:v,value:w,unit:l,hour:p,day:x,year:y,month:d.monthMod(m)}),p++}}},{key:"generateMinuteScale",value:function(t){var e=t.firstVal,i=t.currentMinute,s=t.currentHour,a=t.currentDate,n=t.currentMonth,r=t.currentYear,o=t.minutesWidthOnXAxis,l=t.numberOfMinutes,h=o-(i-e.minMinute),c=e.minMinute+1,u=c+1,g=a,f=n,p=r,x=s;this.timeScaleArray.push({position:h,value:c,unit:"minute",day:g,hour:x,minute:u,year:p,month:d.monthMod(f)});for(var m=h,v=0;v=60&&(u=0,24===(x+=1)&&(x=0));var b=r+Math.floor(f/12)+0;m=o+m;var y=u;this.timeScaleArray.push({position:m,value:y,unit:"minute",hour:x,minute:u,day:g,year:b,month:d.monthMod(f)}),u++}}},{key:"createRawDateString",value:function(t,e){var i=t.year;return i+="-"+("0"+t.month.toString()).slice(-2),"day"===t.unit?i+="day"===t.unit?"-"+("0"+e).slice(-2):"-01":i+="-"+("0"+(t.day?t.day:"1")).slice(-2),"hour"===t.unit?i+="hour"===t.unit?"T"+("0"+e).slice(-2):"T00":i+="T"+("0"+(t.hour?t.hour:"0")).slice(-2),i+="minute"===t.unit?":"+("0"+e).slice(-2)+":00.000Z":":00:00.000Z"}},{key:"formatDates",value:function(t){var e=this,i=this.w;return t.map(function(t){var s=t.value.toString(),a=new T(e.ctx),n=e.createRawDateString(t,s),r=new Date(Date.parse(n));if(void 0===i.config.xaxis.labels.format){var o="dd MMM",l=i.config.xaxis.labels.datetimeFormatter;"year"===t.unit&&(o=l.year),"month"===t.unit&&(o=l.month),"day"===t.unit&&(o=l.day),"hour"===t.unit&&(o=l.hour),"minute"===t.unit&&(o=l.minute),s=a.formatDate(r,o,!0,!1)}else s=a.formatDate(r,i.config.xaxis.labels.format);return{dateString:n,position:t.position,value:s,unit:t.unit,year:t.year,month:t.month}})}},{key:"removeOverlappingTS",value:function(t){var e=this,i=new f(this.ctx),s=0,a=t.map(function(a,n){if(n>0&&e.w.config.xaxis.labels.hideOverlappingLabels){var r=i.getTextRects(t[s].value).width,o=t[s].position;return a.position>o+r+10?(s=n,a):null}return a});return a=a.filter(function(t){return null!==t})}}]),t}(),_=function(){function t(i,s){e(this,t),this.ctx=s,this.w=s.w,this.el=i,this.coreUtils=new b(this.ctx),this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[]}return s(t,[{key:"setupElements",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=["line","area","bar","candlestick","radar","scatter","bubble","heatmap"].indexOf(i)>-1,t.xyCharts=["line","area","bar","candlestick","scatter","bubble"].indexOf(i)>-1,t.chartClass=".apexcharts"+t.cuid,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement("div"),f.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:"apexcharts-canvas "+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(e.chart.offsetX,", ").concat(e.chart.offsetY,")")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elGraphical=t.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.elLegendWrap=document.createElement("div"),t.dom.elLegendWrap.classList.add("apexcharts-legend"),t.dom.elWrap.appendChild(t.dom.elLegendWrap),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:"plotChartType",value:function(t,e){var i=this.w,s=i.config,a=i.globals,n={series:[],i:[]},r={series:[],i:[]},o={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]};a.series.map(function(e,s){void 0!==t[s].type?("column"===t[s].type||"bar"===t[s].type?(i.config.plotOptions.bar.horizontal=!1,l.series.push(e),l.i.push(s)):"area"===t[s].type?(r.series.push(e),r.i.push(s)):"line"===t[s].type?(n.series.push(e),n.i.push(s)):"scatter"===t[s].type?(o.series.push(e),o.i.push(s)):"bubble"===t[s].type||("candlestick"===t[s].type?(h.series.push(e),h.i.push(s)):console.warn("You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble")),a.comboCharts=!0):(n.series.push(e),n.i.push(s))});var c=new O(this.ctx,e),d=new P(this.ctx,e),u=new I(this.ctx),g=new F(this.ctx),f=new Y(this.ctx),p=[];if(a.comboCharts){if(r.series.length>0&&p.push(c.draw(r.series,"area",r.i)),l.series.length>0)if(i.config.chart.stacked){var x=new M(this.ctx,e);p.push(x.draw(l.series,l.i))}else{var m=new z(this.ctx,e);p.push(m.draw(l.series,l.i))}if(n.series.length>0&&p.push(c.draw(n.series,"line",n.i)),h.series.length>0&&p.push(d.draw(h.series,h.i)),o.series.length>0){var v=new O(this.ctx,e,!0);p.push(v.draw(o.series,"scatter",o.i))}}else switch(s.chart.type){case"line":p=c.draw(a.series,"line");break;case"area":p=c.draw(a.series,"area");break;case"bar":if(s.chart.stacked)p=new M(this.ctx,e).draw(a.series);else p=new z(this.ctx,e).draw(a.series);break;case"candlestick":p=new P(this.ctx,e).draw(a.series);break;case"heatmap":p=new X(this.ctx,e).draw(a.series);break;case"pie":case"donut":p=u.draw(a.series);break;case"radialBar":p=g.draw(a.series);break;case"radar":p=f.draw(a.series);break;default:p=c.draw(a.series)}return p}},{key:"setSVGDimensions",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=d.getDimensions(this.el),s=e.chart.width.toString().split(/[0-9]+/g).pop();if("%"===s?d.isNumber(i[0])&&(0===i[0].width&&(i=d.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width)/100):"px"!==s&&""!==s||(t.svgWidth=parseInt(e.chart.width)),"auto"!==t.svgHeight&&""!==t.svgHeight)if("%"===e.chart.height.toString().split(/[0-9]+/g).pop()){var a=d.getDimensions(this.el.parentNode);t.svgHeight=a[1]*parseInt(e.chart.height)/100}else t.svgHeight=parseInt(e.chart.height);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth;f.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight});var n=e.chart.sparkline.enabled?0:t.axisCharts?14:5;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+n+"px",t.dom.elWrap.style.width=t.svgWidth+"px",t.dom.elWrap.style.height=t.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var t=this.w.globals,e=t.translateY,i={transform:"translate("+t.translateX+", "+e+")"};f.setAttrs(t.dom.elGraphical.node,i)}},{key:"coreCalculations",value:function(){new W(this.ctx).init()}},{key:"resetGlobals",value:function(){var t=this,e=this.w.globals;e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesPercent=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.stackedSeriesTotals=[],e.labels=[],e.timelineLabels=[],e.noLabelsProvided=!1,e.timescaleTicks=[],e.resizeTimer=null,e.selectionResizeTimer=null,e.seriesXvalues=t.w.config.series.map(function(t){return[]}),e.seriesYvalues=t.w.config.series.map(function(t){return[]}),e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.isDataXYZ=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialmaxX=-Number.MAX_VALUE,e.initialminX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.config.chart.stacked=!1,this.w.globals.isMultipleYAxis=!0,!0}},{key:"excludeCollapsedSeriesInYAxis",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map(function(e,i){if(t.w.globals.isMultipleYAxis)return e.index})}},{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var t=this.w.config.series.slice(),e=new B(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:"isFormat2DArray",value:function(){var t=this.w.config.series.slice(),e=new B(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(t,e){for(var i=this.w.config,s=this.w.globals,a=0;a-1&&(n=this.activeSeriesIndex);for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:this.ctx,i=this.w.config,s=this.w.globals,a=new T(e),n=0;n0?i.labels.slice():i.xaxis.categories.slice(),o=0;o0?i.labels.slice():i.xaxis.categories.slice();l.length>0&&(this.twoDSeriesX=l,s.seriesX.push(this.twoDSeriesX))}s.labels.push(this.twoDSeriesX);var h=t[n].data.map(function(t){return d.parseNumber(t)});s.series.push(h)}s.seriesZ.push(this.threeDSeries),void 0!==t[n].name?s.seriesNames.push(t[n].name):s.seriesNames.push("series-"+parseInt(n+1))}return this.w}},{key:"parseDataNonAxisCharts",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var s=0;s0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory)i.labels=i.labels[0];else{var s=[];if(i.axisCharts){for(var a=0;a0&&(this.xaxisLabels=s.globals.timelineLabels.slice())}return s(t,[{key:"drawGridArea",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new f(this.ctx);null===t&&(t=i.group({class:"apexcharts-grid"}));var s=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,"transparent"),a=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,"transparent");return t.add(a),t.add(s),t}},{key:"drawGrid",value:function(){var t=this.w,e=new N(this.ctx),i=this.w.globals,s=null;if(i.axisCharts){if(t.config.grid.show)s=this.renderGrid(),i.dom.elGraphical.add(s.el),this.drawGridArea(s.el);else{var a=this.drawGridArea();i.dom.elGraphical.add(a)}null!==s&&e.xAxisLabelCorrections(s.xAxisTickWidth)}}},{key:"createGridMask",value:function(){var t=this.w,e=t.globals,i=new f(this.ctx),s=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var a=0;t.config.stroke.width.forEach(function(t){a=Math.max(a,t)}),s=a}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(e.cuid)),e.dom.elGridRect=i.drawRect(-s/2,-s/2,e.gridWidth+s,e.gridHeight+s,0,"#fff"),new b(this).getLargestMarkerSize();var n=t.globals.markers.largestSize+t.config.markers.hover.sizeOffset+1;e.dom.elGridRectMarker=i.drawRect(-n,-n,e.gridWidth+2*n,e.gridHeight+2*n,0,"#fff"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var r=e.dom.baseEl.querySelector("defs");r.appendChild(e.dom.elGridRectMask),r.appendChild(e.dom.elGridRectMarkerMask)}},{key:"renderGrid",value:function(){for(var t,e=this.w,i=new f(this.ctx),s=e.config.grid.strokeDashArray,a=i.group({class:"apexcharts-grid"}),n=8,r=0;r2));r++);if(!(!e.config.plotOptions.bar.horizontal||"bar"!==e.config.chart.type)){if(t=n,e.config.grid.xaxis.lines.show||e.config.xaxis.axisTicks.show)for(var o,l=e.globals.padHorizontal,h=e.globals.gridHeight,c=0;c0)for(var w=0;w0&&b0)for(var n=0,r=s.globals.gridHeight/i,o=s.globals.gridWidth,l=0,h=0;l=s.config.grid.row.colors.length&&(h=0);var c=s.config.grid.row.colors[h],d=a.drawRect(0,n,o,r,0,c,s.config.grid.row.opacity);t.add(d),d.node.classList.add("apexcharts-gridRow"),n+=s.globals.gridHeight/i}if(void 0!==s.config.grid.column.colors&&s.config.grid.column.colors.length>0)for(var u=s.globals.padHorizontal,g=s.globals.padHorizontal+s.globals.gridWidth/e,p=s.globals.gridHeight,x=0,m=0;x=s.config.grid.column.colors.length&&(m=0);var v=s.config.grid.column.colors[m],b=a.drawRect(u,0,g,p,0,v,s.config.grid.column.opacity);b.node.classList.add("apexcharts-gridColumn"),t.add(b),u+=s.globals.gridWidth/e}}},{key:"animateLine",value:function(t,e,i){var s=this.w,a=s.config.chart.animations;if(a&&!s.globals.resized&&!s.globals.dataChanged){var n=a.speed;this.anim.animateLine(t,e,i,n)}}}]),t}(),nt=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this)}return s(t,[{key:"init",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),d.isIE11()?document.getElementsByTagName("head")[0].appendChild(this.getLegendStyles()):this.appendToForeignObject(),"bottom"===i.legend.position||"top"===i.legend.position?this.legendAlignHorizontal():"right"!==i.legend.position&&"left"!==i.legend.position||this.legendAlignVertical()}}},{key:"appendToForeignObject",value:function(){var t=this.w.globals,e=document.createElementNS(t.SVGNS,"foreignObject");e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("width",t.svgWidth),e.setAttribute("height",t.svgHeight),t.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.appendChild(t.dom.elLegendWrap),e.appendChild(this.getLegendStyles()),t.dom.Paper.node.insertBefore(e,t.dom.elGraphical.node)}},{key:"drawLegends",value:function(){var t=this.w,e=t.config.legend.fontFamily,i=t.globals.seriesNames,s=t.globals.colors.slice();if("heatmap"===t.config.chart.type){var a=t.config.plotOptions.heatmap.colorScale.ranges;i=a.map(function(t){return t.name?t.name:t.from+" - "+t.to}),s=a.map(function(t){return t.color})}for(var n=t.globals.legendFormatter,r=0;r<=i.length-1;r++){var o=n(i[r],{seriesIndex:r,w:t}),l=!1,h=!1;if(t.globals.collapsedSeries.length>0)for(var c=0;c0)for(var d=0;d0?l-10:0)+(h>0?h-10:0)}s.style.position="absolute",n=n+t+i.config.legend.offsetX,r=r+e+i.config.legend.offsetY,s.style.left=n+"px",s.style.top=r+"px","bottom"===i.config.legend.position?(s.style.top="auto",s.style.bottom=10+i.config.legend.offsetY+"px"):"right"===i.config.legend.position&&(s.style.left="auto",s.style.right=25+i.config.legend.offsetX+"px"),s.style.width&&(s.style.width=parseInt(i.config.legend.width)+"px"),s.style.height&&(s.style.height=parseInt(i.config.legend.height)+"px")}},{key:"legendAlignHorizontal",value:function(){var t=this.w;t.globals.dom.baseEl.querySelector(".apexcharts-legend").style.right=0;var e=this.getLegendBBox(),i=new V(this.ctx),s=i.getTitleSubtitleCoords("title"),a=i.getTitleSubtitleCoords("subtitle"),n=0;"bottom"===t.config.legend.position?n=-e.clwh/1.8:"top"===t.config.legend.position&&(n=s.height+a.height+t.config.title.margin+t.config.subtitle.margin-15),this.setLegendWrapXY(20,n)}},{key:"legendAlignVertical",value:function(){var t=this.w,e=this.getLegendBBox(),i=0;"left"===t.config.legend.position&&(i=20),"right"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(t){var e=this.w,i=t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker");if("heatmap"!==e.config.chart.type)!t.target.classList.contains("inactive-legend")&&i&&new B(this.ctx).toggleSeriesOnHover(t,t.target);else if(i){var s=parseInt(t.target.getAttribute("rel"))-1;this.ctx.fireEvent("legendHover",[this.ctx,s,this.w]),new B(this.ctx).highlightRangeInSeries(t,t.target)}}},{key:"onLegendClick",value:function(t){if(t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker")){var e=parseInt(t.target.getAttribute("rel"))-1,i="true"===t.target.getAttribute("data:collapsed"),s=this.w.config.chart.events.legendClick;"function"==typeof s&&s(this.ctx,e,this.w),this.ctx.fireEvent("legendClick",[this.ctx,e,this.w]);var a=this.w.config.legend.markers.onClick;"function"==typeof a&&t.target.classList.contains("apexcharts-legend-marker")&&(a(this.ctx,e,this.w),this.ctx.fireEvent("legendMarkerClick",[this.ctx,e,this.w])),this.toggleDataSeries(e,i)}}},{key:"getLegendStyles",value:function(){var t=document.createElement("style");t.setAttribute("type","text/css");var e=document.createTextNode("\n \n .apexcharts-legend {\n display: flex;\n overflow: auto;\n padding: 0 10px;\n }\n\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\n flex-wrap: wrap\n }\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n flex-direction: column;\n bottom: 0;\n }\n\n .apexcharts-legend.position-bottom.left, .apexcharts-legend.position-top.left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n justify-content: flex-start;\n }\n\n .apexcharts-legend.position-bottom.center, .apexcharts-legend.position-top.center {\n justify-content: center; \n }\n\n .apexcharts-legend.position-bottom.right, .apexcharts-legend.position-top.right {\n justify-content: flex-end;\n }\n\n .apexcharts-legend-series {\n cursor: pointer;\n line-height: normal;\n }\n\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\n display: flex;\n align-items: center;\n }\n\n .apexcharts-legend-text {\n position: relative;\n font-size: 14px;\n }\n\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\n pointer-events: none;\n }\n\n .apexcharts-legend-marker {\n position: relative;\n display: inline-block;\n cursor: pointer;\n margin-right: 3px;\n }\n \n .apexcharts-legend.right .apexcharts-legend-series, .apexcharts-legend.left .apexcharts-legend-series{\n display: inline-block;\n }\n\n .apexcharts-legend-series.no-click {\n cursor: auto;\n }\n\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\n display: none !important;\n }\n\n .inactive-legend {\n opacity: 0.45;\n }");return t.appendChild(e),t}},{key:"resetToggleDataSeries",value:function(){var t=this.w,e=[];if(t.globals.axisCharts?t.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]").forEach(function(t){e.push(parseInt(t.getAttribute("data:realIndex")))}):t.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]").forEach(function(t){e.push(parseInt(t.getAttribute("rel"))-1)}),e.sort(),t.globals.collapsedSeries.length>0){for(var i=t.globals.risingSeries.slice(),s=t.config.series.slice(),a=0;a0)for(var a=0;ae.breakpoint?1:e.breakpoint>t.breakpoint?-1:0}).reverse();var n=new y({}),r=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=a[0].breakpoint,r=window.innerWidth>0?window.innerWidth:screen.width;if(r>s){var o=b.extendArrayProps(n,i.globals.initialConfig);t=d.extend(o,t),t=d.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l2&&void 0!==arguments[2]?arguments[2]:null,s=this.w,a=e||s.globals.series.length;if(null===i&&(i="bar"===s.config.chart.type&&s.config.plotOptions.bar.distributed||"heatmap"===s.config.chart.type&&s.config.plotOptions.heatmap.colorScale.inverse),i&&(a=s.globals.series[0].length*s.globals.series.length),t.lengthr.globals.gridWidth||d>r.globals.gridHeight?(e.classList.remove("hovering-zoom"),e.classList.remove("hovering-pan")):r.globals.zoomEnabled?(e.classList.remove("hovering-pan"),e.classList.add("hovering-zoom")):r.globals.panEnabled&&(e.classList.remove("hovering-zoom"),e.classList.add("hovering-pan"));var u=Math.round(c/l);n&&(u=Math.ceil(c/l),u-=1);for(var g,f=null,p=null,x=[],m=0;m1?n=this.getFirstActiveXArray(i):r=0;var l=s[n][0],h=i[n][0],c=Math.abs(t-h),d=Math.abs(e-l),u=d+c;return s.map(function(a,n){a.map(function(a,l){var h=Math.abs(e-s[n][l]),g=Math.abs(t-i[n][l]),f=g+h;f0?e:-1}),a=0;a0)for(var s=0;s-1?g[0].parentNode.style.display="none":g[0].parentNode.style.display=o.config.tooltip.items.display)}},{key:"toggleActiveInactiveSeries",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var i=e.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group");i&&(i.classList.add("active"),i.style.display=e.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(t){var e=t.i,i=t.j,s=this.w,a=this.ctx.series.filteredSeriesX(),n="",r=null,o=null,l={series:s.globals.series,seriesIndex:e,dataPointIndex:i,w:s},h=s.globals.ttZFormatter;null===i?o=s.globals.series[e]:s.globals.isXNumeric?(n=a[e][i],0===a[e].length&&(n=a[this.tooltipUtil.getFirstActiveXArray(a)][i])):n=void 0!==s.globals.labels[i]?s.globals.labels[i]:"";var c=n;s.globals.isXNumeric&&"datetime"===s.config.xaxis.type?n=new D(this.ctx).xLabelFormat(s.globals.ttKeyFormatter,c):n=s.globals.xLabelFormatter(c,l);return void 0!==s.config.tooltip.x.formatter&&(n=s.globals.ttKeyFormatter(c,l)),s.globals.seriesZ.length>0&&s.globals.seriesZ[0].length>0&&(r=h(s.globals.seriesZ[e][i],s)),{val:o,xVal:n,xAxisTTVal:"function"==typeof s.config.xaxis.tooltip.formatter?s.globals.xaxisTooltipFormatter(c,l):n,zVal:r}}},{key:"handleCustomTooltip",value:function(t){var e=t.i,i=t.j,s=this.w;this.ttCtx.getElTooltip().innerHTML=s.config.tooltip.custom({series:s.globals.series,seriesIndex:e,dataPointIndex:i,w:s})}}]),t}(),ct=function(){function t(i){e(this,t),this.ttCtx=i,this.ctx=i.ctx,this.w=i.w}return s(t,[{key:"moveXCrosshairs",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,s=this.w,a=i.getElXCrosshairs(),n=t-i.xcrosshairsWidth/2,r=s.globals.labels.slice().length;if(null!==e&&(n=s.globals.gridWidth/r*e),"tickWidth"===s.config.xaxis.crosshairs.width||"barWidth"===s.config.xaxis.crosshairs.width?n+i.xcrosshairsWidth>s.globals.gridWidth&&(n=s.globals.gridWidth-i.xcrosshairsWidth):null!==e&&(n+=s.globals.gridWidth/r/2),n<0&&(n=0),n>s.globals.gridWidth&&(n=s.globals.gridWidth),null!==a&&(a.setAttribute("x",n),a.setAttribute("x1",n),a.setAttribute("x2",n),a.setAttribute("y2",s.globals.gridHeight),a.classList.add("active")),i.blxaxisTooltip){var o=n;"tickWidth"!==s.config.xaxis.crosshairs.width&&"barWidth"!==s.config.xaxis.crosshairs.width||(o=n+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&(f.setAttrs(e.ycrosshairs,{y1:t,y2:t}),f.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t}))}},{key:"moveXAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip){i.xaxisTooltip.classList.add("active");var s=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var a;a=new f(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=a.width+"px",i.xaxisTooltip.style.left=t+"px",i.xaxisTooltip.style.top=s+"px"}}}},{key:"moveYAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var s=parseInt(i.ycrosshairsHidden.getAttribute("y1")),a=e.globals.translateY+s,n=i.yaxisTTEls[t].getBoundingClientRect().height,r=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(r-=26),a-=n/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add("active"),i.yaxisTTEls[t].style.top=a+"px",i.yaxisTTEls[t].style.left=r+e.config.yaxis[t].tooltip.offsetX+"px"):i.yaxisTTEls[t].classList.remove("active")}},{key:"moveTooltip",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=this.w,a=this.ttCtx,n=a.getElTooltip(),r=a.tooltipRect,o=null!==i?parseInt(i):1,l=parseInt(t)+o+5,h=parseInt(e)+o/2;if(l>s.globals.gridWidth/2&&(l=l-r.ttWidth-o-15),l>s.globals.gridWidth-r.ttWidth-10&&(l=s.globals.gridWidth-r.ttWidth),l<-20&&(l=-20),s.config.tooltip.followCursor){var c=a.getElGrid().getBoundingClientRect();h=a.e.clientY-c.top-r.ttHeight/2}var d=this.positionChecks(r,l,h);l=d.x,h=d.y,isNaN(l)||(l+=s.globals.translateX,n.style.left=l+"px",n.style.top=h+"px")}},{key:"positionChecks",value:function(t,e,i){var s=this.w;return t.ttHeight+i>s.globals.gridHeight&&(i=s.globals.gridHeight-t.ttHeight+s.globals.translateY),i<0&&(i=0),{x:e,y:i}}},{key:"moveMarkers",value:function(t,e){var i=this.w,s=this.ttCtx;if(i.globals.markers.size[t]>0)for(var a=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(t,"'] .apexcharts-marker")),n=0;nr.globals.gridWidth/2&&(s=h-n.tooltipRect.ttWidth/2+d),n.w.config.tooltip.followCursor){var g=n.getElGrid().getBoundingClientRect();a=n.e.clientY-g.top+r.globals.translateY/2-10}}return{x:s,y:a}}},{key:"handleMarkerTooltip",value:function(t){var e,i,s=t.e,a=t.opt,n=t.x,r=t.y,o=this.w,l=this.ttCtx;if(s.target.classList.contains("apexcharts-marker")){var h=parseInt(a.paths.getAttribute("cx")),c=parseInt(a.paths.getAttribute("cy")),u=parseFloat(a.paths.getAttribute("val"));if(i=parseInt(a.paths.getAttribute("rel")),e=parseInt(a.paths.parentNode.parentNode.parentNode.getAttribute("rel"))-1,l.intersect){var g=d.findAncestor(a.paths,"apexcharts-series");g&&(e=parseInt(g.getAttribute("data:realIndex")))}if(l.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:e,j:i,shared:!l.intersect&&o.config.tooltip.shared}),l.marker.enlargeCurrentPoint(i,a.paths),n=h,r=c-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var f=l.getElGrid().getBoundingClientRect();r=l.e.clientY-f.top}u<0&&(r=c)}return{x:n,y:r}}},{key:"handleBarTooltip",value:function(t){var e,i,s=t.e,a=t.opt,n=this.w,r=this.ttCtx,o=r.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:s,opt:a});e=d.i;var u=d.barHeight,g=d.j;if(r.isBarHorizontal&&r.hasBars()||!n.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(n.config.stroke.width)?n.config.stroke.width[e]:n.config.stroke.width,l=h):n.globals.comboCharts||n.config.tooltip.shared||(l/=2),isNaN(c)&&(c=n.globals.svgHeight-r.tooltipRect.ttHeight),h+r.tooltipRect.ttWidth>n.globals.gridWidth?h-=r.tooltipRect.ttWidth:h<0&&(h+=r.tooltipRect.ttWidth),r.w.config.tooltip.followCursor){var f=r.getElGrid().getBoundingClientRect();c=r.e.clientY-f.top}if(null===r.tooltip&&(r.tooltip=n.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),n.config.tooltip.shared||(n.globals.comboChartsHasBars?r.tooltipPosition.moveXCrosshairs(l+i/2):r.tooltipPosition.moveXCrosshairs(l)),!r.fixedTooltip&&(!n.config.tooltip.shared||r.isBarHorizontal&&r.hasBars())){x&&(h=n.globals.gridWidth-h),o.style.left=h+n.globals.translateX+"px";var p=parseInt(a.paths.parentNode.getAttribute("data:realIndex")),x=n.globals.isMultipleYAxis?n.config.yaxis[p].reversed:n.config.yaxis[0].reversed;!x||r.isBarHorizontal&&r.hasBars()||(c=c+u-2*(n.globals.series[e][g]<0?u:0)),r.tooltipRect.ttHeight+c>n.globals.gridHeight?(c=n.globals.gridHeight-r.tooltipRect.ttHeight+n.globals.translateY,o.style.top=c+"px"):o.style.top=c+n.globals.translateY-r.tooltipRect.ttHeight/2+"px"}}},{key:"getBarTooltipXY",value:function(t){var e=t.e,i=t.opt,s=this.w,a=null,n=this.ttCtx,r=0,o=0,l=0,h=0,c=0,d=e.target.classList;if(d.contains("apexcharts-bar-area")||d.contains("apexcharts-candlestick-area")){var u=e.target,g=u.getBoundingClientRect(),f=i.elGrid.getBoundingClientRect(),p=g.height;c=g.height;var x=g.width,m=parseInt(u.getAttribute("cx")),v=parseInt(u.getAttribute("cy"));h=parseFloat(u.getAttribute("barWidth"));var b="touchmove"===e.type?e.touches[0].clientX:e.clientX;a=parseInt(u.getAttribute("j")),r=parseInt(u.parentNode.getAttribute("rel"))-1,s.globals.comboCharts&&(r=parseInt(u.parentNode.getAttribute("data:realIndex"))),n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:r,j:a,shared:!n.showOnIntersect&&s.config.tooltip.shared}),s.config.tooltip.followCursor?s.config.plotOptions.bar.horizontal?(o=b-f.left+15,l=v-n.dataPointsDividedHeight+p/2-n.tooltipRect.ttHeight/2):(o=s.globals.isXNumeric?m-x/2:m-n.dataPointsDividedWidth+x/2,l=e.clientY-f.top-n.tooltipRect.ttHeight/2-15):s.config.plotOptions.bar.horizontal?((o=m)0&&i.setAttribute("width",e.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(t,e,i){var s=this.ttCtx,a=this.w,n=a.globals.yLabelFormatters[t];if(s.blyaxisTooltip){var r=s.getElGrid().getBoundingClientRect(),o=(e-r.top)*i.yRatio[t],l=a.globals.maxYArr[t]-a.globals.minYArr[t],h=a.globals.minYArr[t]+(l-o);s.tooltipPosition.moveYCrosshairs(e-r.top),s.yaxisTooltipText[t].innerHTML=n(h),s.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),ft=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var s=this.w;this.tooltipUtil=new lt(this),this.tooltipLabels=new ht(this),this.tooltipPosition=new ct(this),this.marker=new dt(this),this.intersect=new ut(this),this.axesTooltip=new gt(this),this.showOnIntersect=s.config.tooltip.intersect,this.showTooltipTitle=s.config.tooltip.x.show,this.fixedTooltip=s.config.tooltip.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarHorizontal=s.config.plotOptions.bar.horizontal,this.isBarShared=!s.config.plotOptions.bar.horizontal&&s.config.tooltip.shared}return s(t,[{key:"getElTooltip",value:function(t){return t||(t=this),t.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip")}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(t){var e=this.w;this.xyRatios=t,this.blxaxisTooltip=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.blyaxisTooltip=e.config.yaxis[0].tooltip.enabled&&e.globals.axisCharts,this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),i.classList.add(e.config.tooltip.theme),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var s=new N(this.ctx);this.xAxisTicksPositions=s.getXAxisTicksPositions()}if((e.globals.comboCharts&&!e.config.tooltip.shared||e.config.tooltip.intersect&&!e.config.tooltip.shared||"bar"===e.config.chart.type&&!e.config.tooltip.shared)&&(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=e.config.tooltip.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=e.config.tooltip.style.fontSize,i.appendChild(this.tooltipTitle));var a=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&e.config.tooltip.shared&&(a=this.showOnIntersect?1:e.globals.series.length),this.ttItems=this.createTTElements(a),this.addSVGEvents()}}},{key:"createTTElements",value:function(t){for(var e=this.w,i=[],s=this.getElTooltip(),a=0;a0&&this.addPathsEventListeners(u,h);var g=t.globals.dom.baseEl.querySelectorAll(".apexcharts-area-series .apexcharts-marker");g.length>0&&this.addPathsEventListeners(g,h),this.hasBars()&&!t.config.tooltip.shared&&this.addBarsEventListeners(h)}}},{key:"drawFixedTooltipRect",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),s=i.width+10,a=i.height+10,n=t.config.tooltip.fixed.offsetX,r=t.config.tooltip.fixed.offsetY;return t.config.tooltip.fixed.position.toLowerCase().indexOf("right")>-1&&(n=n+t.globals.svgWidth-s+10),t.config.tooltip.fixed.position.toLowerCase().indexOf("bottom")>-1&&(r=r+t.globals.svgHeight-a-10),e.style.left=n+"px",e.style.top=r+"px",{x:n,y:r,ttWidth:s,ttHeight:a}}},{key:"addPointsEventsListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker");this.addPathsEventListeners(e,t)}},{key:"addBarsEventListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-area, .apexcharts-candlestick-area");this.addPathsEventListeners(e,t)}},{key:"addPathsEventListeners",value:function(t,e){for(var i=this,s=this,a=function(a){var n={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};i.w.globals.tooltipOpts=n;["mousemove","touchmove","mouseout","touchend"].map(function(e){return t[a].addEventListener(e,s.seriesHover.bind(s,n),{capture:!1,passive:!0})})},n=0;nl.top+l.height)this.handleMouseOut(n);else{var d=this.getElTooltip(),u=this.getElXCrosshairs(),g=r.globals.xyCharts||"bar"===r.config.chart.type&&!this.isBarHorizontal&&this.hasBars()&&r.config.tooltip.shared||r.globals.comboCharts&&this.hasBars;if("bar"===r.config.chart.type&&this.isBarHorizontal&&this.hasBars()&&(g=!1),"mousemove"===a.type||"touchmove"===a.type){if(null!==u&&u.classList.add("active"),null!==this.ycrosshairs&&this.blyaxisTooltip&&this.ycrosshairs.classList.add("active"),g&&!this.showOnIntersect){e=(o=this.tooltipUtil.getNearestValues({context:this,hoverArea:n.hoverArea,elGrid:n.elGrid,clientX:h,clientY:c,hasBars:this.hasBars})).j;var f=o.capturedSeries;if(o.hoverX<0||o.hoverX>r.globals.gridWidth)return void this.handleMouseOut(n);if(null!==f){if(null===r.globals.series[f][e])return void n.tooltipEl.classList.remove("active");void 0!==r.globals.series[f][e]?r.config.tooltip.shared&&this.tooltipUtil.isXoverlap(e)&&this.tooltipUtil.isinitialSeriesSameLen()?this.create(this,f,e,n.ttItems):this.create(this,f,e,n.ttItems,!1):this.tooltipUtil.isXoverlap(e)&&this.create(this,0,e,n.ttItems)}else this.tooltipUtil.isXoverlap(e)&&this.create(this,0,e,n.ttItems)}else if("heatmap"===r.config.chart.type){var p=this.intersect.handleHeatTooltip({e:a,opt:n,x:i,y:s});i=p.x,s=p.y,d.style.left=i+"px",d.style.top=s+"px"}else this.hasBars&&this.intersect.handleBarTooltip({e:a,opt:n}),this.hasMarkers&&this.intersect.handleMarkerTooltip({e:a,opt:n,x:i,y:s});if(this.blyaxisTooltip)for(var x=0;xa.globals.gridWidth&&(u=c-d.left-s.ttWidth+o),g<0&&(g=s.ttHeight+20),r.style.left=u+a.globals.translateX+"px",r.style.top=g+"px"}else"mouseout"!==e.type&&"touchend"!==e.type||r.classList.remove("active")}},{key:"deactivateHoverFilter",value:function(){for(var t=this.w,e=new f(this.ctx),i=t.globals.dom.Paper.select(".apexcharts-bar-area"),s=0;s0}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"create",value:function(t,e,i,s){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=this.w,r=t;null===a&&(a=n.config.tooltip.shared);var o=this.hasMarkers(),l=this.getElBars();if(a){if(r.tooltipLabels.drawSeriesTexts({ttItems:s,i:e,j:i,shared:!this.showOnIntersect&&n.config.tooltip.shared}),o&&(n.globals.markers.largestSize>0?r.marker.enlargePoints(i):r.tooltipPosition.moveDynamicPointsOnHover(i)),this.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(l),this.barSeriesHeight>0)){var h=new f(this.ctx),c=n.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(i,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(i);for(var d=0;d\n \n \n\n',title:this.localeValues.zoomIn,class:"apexcharts-zoom-in-icon"}),this.t.zoomout&&t.config.chart.zoom.enabled&&s.push({el:this.elZoomOut,icon:"string"==typeof this.t.zoomout?this.t.zoomout:'\n \n \n\n',title:this.localeValues.zoomOut,class:"apexcharts-zoom-out-icon"}),this.t.zoom&&t.config.chart.zoom.enabled&&s.push({el:this.elZoom,icon:"string"==typeof this.t.zoom?this.t.zoom:'\n \n \n \n',title:this.localeValues.selectionZoom,class:t.globals.isTouchDevice?"hidden":"apexcharts-zoom-icon"}),this.t.selection&&t.config.chart.selection.enabled&&s.push({el:this.elSelection,icon:"string"==typeof this.t.selection?this.t.selection:'\n \n \n',title:this.localeValues.selection,class:t.globals.isTouchDevice?"hidden":"apexcharts-selection-icon"}),this.t.pan&&t.config.chart.zoom.enabled&&s.push({el:this.elPan,icon:"string"==typeof this.t.pan?this.t.pan:'\n \n \n \n \n \n \n \n',title:this.localeValues.pan,class:t.globals.isTouchDevice?"hidden":"apexcharts-pan-icon"}),this.t.reset&&t.config.chart.zoom.enabled&&s.push({el:this.elZoomReset,icon:"string"==typeof this.t.reset?this.t.reset:'\n \n \n',title:this.localeValues.reset,class:"apexcharts-reset-zoom-icon"}),this.t.download&&s.push({el:this.elMenuIcon,icon:"string"==typeof this.t.download?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var a=0;a0&&e.height>0&&this.slDraggableRect.selectize().resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,s={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(s),this.makeSelectionRectDraggable(),"function"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:"drawSelectionRect",value:function(t){var e=t.x,i=t.y,s=t.width,a=t.height,n=t.translateX,r=t.translateY,o=this.w,l=this.zoomRect,h=this.selectionRect;if(this.dragged||null!==o.globals.selection){var c={transform:"translate("+n+", "+r+")"};o.globals.zoomEnabled&&this.dragged&&(l.attr({x:e,y:i,width:s,height:a,fill:o.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":o.config.chart.zoom.zoomedArea.fill.opacity,stroke:o.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":o.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":o.config.chart.zoom.zoomedArea.stroke.opacity}),f.setAttrs(l.node,c)),o.globals.selectionEnabled&&(h.attr({x:e,y:i,width:s>0?s:0,height:a>0?a:0,fill:o.config.chart.selection.fill.color,"fill-opacity":o.config.chart.selection.fill.opacity,stroke:o.config.chart.selection.stroke.color,"stroke-width":o.config.chart.selection.stroke.width,"stroke-dasharray":o.config.chart.selection.stroke.dashArray,"stroke-opacity":o.config.chart.selection.stroke.opacity}),f.setAttrs(h.node,c))}}},{key:"hideSelectionRect",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(t){var e=t.context,i=t.zoomtype,s=this.w,a=e,n=this.gridRect.getBoundingClientRect(),r=a.startX-1,o=a.startY,l=a.clientX-n.left-r,h=a.clientY-n.top-o,c=0,d=0,u={};return(Math.abs(l+r)>s.globals.gridWidth||a.clientX-n.left<0)&&(a.hideSelectionRect(this.zoomRect),a.dragged=!1,a.w.globals.mousedown=!1),r>a.clientX-n.left&&(c=-(l=Math.abs(l))),o>a.clientY-n.top&&(d=-(h=Math.abs(h))),u="x"===i?{x:r,y:0,width:l,height:s.globals.gridHeight,translateX:c,translateY:0}:"y"===i?{x:0,y:o,width:s.globals.gridWidth,height:h,translateX:0,translateY:d}:{x:r,y:o,width:l,height:h,translateX:c,translateY:d},a.drawSelectionRect(u),u}},{key:"selectionDragging",value:function(t,e){var i=this,s=this.w,a=this.xyRatios,n=this.selectionRect,r=0;"resizing"===t&&(r=30),"function"==typeof s.config.chart.events.selection&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout(function(){var t=i.gridRect.getBoundingClientRect(),e=n.node.getBoundingClientRect(),r=s.globals.xAxisScale.niceMin+(e.left-t.left)*a.xRatio,o=s.globals.xAxisScale.niceMin+(e.right-t.left)*a.xRatio,l=s.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*a.yRatio[0],h=s.globals.yAxisScale[0].niceMax-(e.top-t.top)*a.yRatio[0];s.config.chart.events.selection(i.ctx,{xaxis:{min:r,max:o},yaxis:{min:l,max:h}})},r))}},{key:"selectionDrawn",value:function(t){var e=t.context,i=t.zoomtype,s=this.w,a=e,n=this.xyRatios,r=this.ctx.toolbar;if(a.startX>a.endX){var o=a.startX;a.startX=a.endX,a.endX=o}if(a.startY>a.endY){var l=a.startY;a.startY=a.endY,a.endY=l}var h=s.globals.xAxisScale.niceMin+a.startX*n.xRatio,c=s.globals.xAxisScale.niceMin+a.endX*n.xRatio,u=[],g=[];if(s.config.yaxis.forEach(function(t,e){u.push(Math.floor(s.globals.yAxisScale[e].niceMax-n.yRatio[e]*a.startY)),g.push(Math.floor(s.globals.yAxisScale[e].niceMax-n.yRatio[e]*a.endY))}),a.dragged&&(a.dragX>10||a.dragY>10)&&h!==c)if(s.globals.zoomEnabled){var f=d.clone(s.config.yaxis);s.globals.zoomed||(s.globals.lastXAxis=d.clone(s.config.xaxis),s.globals.lastYAxis=d.clone(s.config.yaxis));var p={min:h,max:c};if("xy"!==i&&"y"!==i||f.forEach(function(t,e){f[e].min=g[e],f[e].max=u[e]}),s.config.chart.zoom.autoScaleYaxis){var x=new H(a.ctx);f=x.autoScaleY(a.ctx,{xaxis:p})}if(r){var m=r.getBeforeZoomRange(p,f);m&&(p=m.xaxis?m.xaxis:p,f=m.yaxis?m.yaxe:f)}"x"===i?a.ctx._updateOptions({xaxis:p},!1,a.w.config.chart.animations.dynamicAnimation.enabled):"y"===i?a.ctx._updateOptions({yaxis:f},!1,a.w.config.chart.animations.dynamicAnimation.enabled):a.ctx._updateOptions({xaxis:p,yaxis:f},!1,a.w.config.chart.animations.dynamicAnimation.enabled),"function"==typeof s.config.chart.events.zoomed&&r.zoomCallback(p,f),s.globals.zoomed=!0}else if(s.globals.selectionEnabled){var v,b=null;v={min:h,max:c},"xy"!==i&&"y"!==i||(b=d.clone(s.config.yaxis)).forEach(function(t,e){b[e].min=g[e],b[e].max=u[e]}),s.globals.selection=a.selection,"function"==typeof s.config.chart.events.selection&&s.config.chart.events.selection(a.ctx,{xaxis:v,yaxis:b})}}},{key:"panDragging",value:function(t){var e,i=t.context,s=(t.zoomtype,this.w),a=i;if(void 0!==s.globals.lastClientPosition.x){var n=s.globals.lastClientPosition.x-a.clientX,r=s.globals.lastClientPosition.y-a.clientY;Math.abs(n)>Math.abs(r)&&n>0?e="left":Math.abs(n)>Math.abs(r)&&n<0?e="right":Math.abs(r)>Math.abs(n)&&r>0?e="up":Math.abs(r)>Math.abs(n)&&r<0&&(e="down")}s.globals.lastClientPosition={x:a.clientX,y:a.clientY};var o=s.globals.minX,l=s.globals.maxX;this.panScrolled(e,o,l)}},{key:"panScrolled",value:function(t,e,i){var s=this.w,a=this.xyRatios,n=d.clone(s.config.yaxis);"left"===t?(e=s.globals.minX+s.globals.gridWidth/15*a.xRatio,i=s.globals.maxX+s.globals.gridWidth/15*a.xRatio):"right"===t&&(e=s.globals.minX-s.globals.gridWidth/15*a.xRatio,i=s.globals.maxX-s.globals.gridWidth/15*a.xRatio),(es.globals.initialmaxX)&&(e=s.globals.minX,i=s.globals.maxX);var r={min:e,max:i};s.config.chart.zoom.autoScaleYaxis&&(n=new H(me.ctx).autoScaleY(me.ctx,{xaxis:r}));this.ctx._updateOptions({xaxis:{min:e,max:i},yaxis:n},!1,!1),"function"==typeof s.config.chart.events.scrolled&&s.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(),mt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"draw",value:function(){this.drawTitleSubtitle("title"),this.drawTitleSubtitle("subtitle")}},{key:"drawTitleSubtitle",value:function(t){var e=this.w,i="title"===t?e.config.title:e.config.subtitle,s=e.globals.svgWidth/2,a=i.offsetY,n="middle";if("left"===i.align?(s=10,n="start"):"right"===i.align&&(s=e.globals.svgWidth-10,n="end"),s+=i.offsetX,a=a+parseInt(i.style.fontSize)+2,void 0!==i.text){var r=new f(this.ctx).drawText({x:s,y:a,text:i.text,textAnchor:n,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,foreColor:i.style.color,opacity:1});r.node.setAttribute("class","apexcharts-".concat(t,"-text")),e.globals.dom.Paper.add(r)}}}]),t}();et="undefined"!=typeof window?window:void 0,it=function(e,i){var s=(void 0!==this?this:e).SVG=function(t){if(s.supported)return t=new s.Doc(t),s.parser.draw||s.prepare(),t};if(s.ns="http://www.w3.org/2000/svg",s.xmlns="http://www.w3.org/2000/xmlns/",s.xlink="http://www.w3.org/1999/xlink",s.svgjs="http://svgjs.com/svgjs",s.supported=!0,!s.supported)return!1;s.did=1e3,s.eid=function(t){return"Svgjs"+d(t)+s.did++},s.create=function(t){var e=i.createElementNS(this.ns,t);return e.setAttribute("id",this.eid(t)),e},s.extend=function(){var t,e,i,a;for(e=(t=[].slice.call(arguments)).pop(),a=t.length-1;a>=0;a--)if(t[a])for(i in e)t[a].prototype[i]=e[i];s.Set&&s.Set.inherit&&s.Set.inherit()},s.invent=function(t){var e="function"==typeof t.create?t.create:function(){this.constructor.call(this,s.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&s.extend(e,t.extend),t.construct&&s.extend(t.parent||s.Container,t.construct),e},s.adopt=function(t){return t?t.instance?t.instance:((i="svg"==t.nodeName?t.parentNode instanceof e.SVGElement?new s.Nested:new s.Doc:"linearGradient"==t.nodeName?new s.Gradient("linear"):"radialGradient"==t.nodeName?new s.Gradient("radial"):s[d(t.nodeName)]?new(s[d(t.nodeName)]):new s.Element(t)).type=t.nodeName,i.node=t,t.instance=i,i instanceof s.Doc&&i.namespace().defs(),i.setData(JSON.parse(t.getAttribute("svgjs:data"))||{}),i):null;var i},s.prepare=function(){var t=i.getElementsByTagName("body")[0],e=(t?new s.Doc(t):s.adopt(i.documentElement).nested()).size(2,0);s.parser={body:t||i.documentElement,draw:e.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:e.polyline().node,path:e.path().node,native:s.create("svg")}},s.parser={native:s.create("svg")},i.addEventListener("DOMContentLoaded",function(){s.parser.draw||s.prepare()},!1),s.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},s.utils={map:function(t,e){var i,s=t.length,a=[];for(i=0;i1?1:t,new s.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),s.Color.test=function(t){return t+="",s.regex.isHex.test(t)||s.regex.isRgb.test(t)},s.Color.isRgb=function(t){return t&&"number"==typeof t.r&&"number"==typeof t.g&&"number"==typeof t.b},s.Color.isColor=function(t){return s.Color.isRgb(t)||s.Color.test(t)},s.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},s.extend(s.Array,{morph:function(t){if(this.destination=this.parse(t),this.value.length!=this.destination.length){for(var e=this.value[this.value.length-1],i=this.destination[this.destination.length-1];this.value.length>this.destination.length;)this.destination.push(i);for(;this.value.length=0;s--)this.value[s]=[this.value[s][0]+t,this.value[s][1]+e];return this},size:function(t,e){var i,s=this.bbox();for(i=this.value.length-1;i>=0;i--)s.width&&(this.value[i][0]=(this.value[i][0]-s.x)*t/s.width+s.x),s.height&&(this.value[i][1]=(this.value[i][1]-s.y)*e/s.height+s.y);return this},bbox:function(){return s.parser.draw||s.prepare(),s.parser.poly.setAttribute("points",this.toString()),s.parser.poly.getBBox()}});for(var a={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],["M",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],["L",t[0],t[1]]},H:function(t,e){return e.x=t[0],["H",t[0]]},V:function(t,e){return e.y=t[0],["V",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],["C",t[0],t[1],t[2],t[3],t[4],t[5]]},S:function(t,e){return e.x=t[2],e.y=t[3],["S",t[0],t[1],t[2],t[3]]},Q:function(t,e){return e.x=t[2],e.y=t[3],["Q",t[0],t[1],t[2],t[3]]},T:function(t,e){return e.x=t[0],e.y=t[1],["T",t[0],t[1]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,["Z"]},A:function(t,e){return e.x=t[5],e.y=t[6],["A",t[0],t[1],t[2],t[3],t[4],t[5],t[6]]}},n="mlhvqtcsaz".split(""),r=0,o=n.length;r=0;a--)"M"==(s=this.value[a][0])||"L"==s||"T"==s?(this.value[a][1]+=t,this.value[a][2]+=e):"H"==s?this.value[a][1]+=t:"V"==s?this.value[a][1]+=e:"C"==s||"S"==s||"Q"==s?(this.value[a][1]+=t,this.value[a][2]+=e,this.value[a][3]+=t,this.value[a][4]+=e,"C"==s&&(this.value[a][5]+=t,this.value[a][6]+=e)):"A"==s&&(this.value[a][6]+=t,this.value[a][7]+=e);return this},size:function(t,e){var i,s,a=this.bbox();for(i=this.value.length-1;i>=0;i--)"M"==(s=this.value[i][0])||"L"==s||"T"==s?(this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x,this.value[i][2]=(this.value[i][2]-a.y)*e/a.height+a.y):"H"==s?this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x:"V"==s?this.value[i][1]=(this.value[i][1]-a.y)*e/a.height+a.y:"C"==s||"S"==s||"Q"==s?(this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x,this.value[i][2]=(this.value[i][2]-a.y)*e/a.height+a.y,this.value[i][3]=(this.value[i][3]-a.x)*t/a.width+a.x,this.value[i][4]=(this.value[i][4]-a.y)*e/a.height+a.y,"C"==s&&(this.value[i][5]=(this.value[i][5]-a.x)*t/a.width+a.x,this.value[i][6]=(this.value[i][6]-a.y)*e/a.height+a.y)):"A"==s&&(this.value[i][1]=this.value[i][1]*t/a.width,this.value[i][2]=this.value[i][2]*e/a.height,this.value[i][6]=(this.value[i][6]-a.x)*t/a.width+a.x,this.value[i][7]=(this.value[i][7]-a.y)*e/a.height+a.y);return this},equalCommands:function(t){var e,i,a;for(t=new s.PathArray(t),a=this.value.length===t.value.length,e=0,i=this.value.length;a&&el);return n},bbox:function(){return s.parser.draw||s.prepare(),s.parser.path.setAttribute("d",this.toString()),s.parser.path.getBBox()}}),s.Number=s.invent({create:function(t,e){this.value=0,this.unit=e||"","number"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-3.4e38:3.4e38:"string"==typeof t?(e=t.match(s.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),"%"==e[5]?this.value/=100:"s"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof s.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return("%"==this.unit?~~(1e8*this.value)/1e6:"s"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new s.Number(t),new s.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new s.Number(t),new s.Number(this-t,this.unit||t.unit)},times:function(t){return t=new s.Number(t),new s.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new s.Number(t),new s.Number(this/t,this.unit||t.unit)},to:function(t){var e=new s.Number(this);return"string"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new s.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new s.Number(this.destination).minus(this).times(t).plus(this):this}}}),s.Element=s.invent({create:function(t){this._stroke=s.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute("stroke")||this._stroke)},extend:{x:function(t){return this.attr("x",t)},y:function(t){return this.attr("y",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr("width",t)},height:function(t){return this.attr("height",t)},size:function(t,e){var i=g(this,t,e);return this.width(new s.Number(i.width)).height(new s.Number(i.height))},clone:function(t){this.writeDataToDom();var e=m(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr("id",t)},inside:function(t,e){var i=this.bbox();return t>i.x&&e>i.y&&t/,"").replace(/<\/svg>$/,"");e.innerHTML=""+t.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var a=0,n=e.firstChild.childNodes.length;a":function(t){return-Math.cos(t*Math.PI)/2+.5},">":function(t){return Math.sin(t*Math.PI/2)},"<":function(t){return 1-Math.cos(t*Math.PI/2)}},s.morph=function(t){return function(e,i){return new s.MorphObj(e,i).at(t)}},s.Situation=s.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new s.Number(t.duration).valueOf(),this.delay=new s.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),s.FX=s.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(e,i,a){"object"===t(e)&&(i=e.ease,a=e.delay,e=e.duration);var n=new s.Situation({duration:e||1e3,delay:a||0,ease:s.easing[i||"-"]||i});return this.queue(n),this},delay:function(t){var e=new s.Situation({duration:t,delay:0,ease:s.easing["-"]});return this.queue(e)},target:function(t){return t&&t instanceof s.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=e.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){e.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return("function"==typeof t||t instanceof s.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof s.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e,i,a=this.situation;if(a.init)return this;for(t in a.animations)for(i=this.target()[t](),Array.isArray(i)||(i=[i]),Array.isArray(a.animations[t])||(a.animations[t]=[a.animations[t]]),e=i.length;e--;)a.animations[t][e]instanceof s.Number&&(i[e]=new s.Number(i[e])),a.animations[t][e]=i[e].morph(a.animations[t][e]);for(t in a.attrs)a.attrs[t]=new s.MorphObj(this.target().attr(t),a.attrs[t]);for(t in a.styles)a.styles[t]=new s.MorphObj(this.target().style(t),a.styles[t]);return a.initialTransformation=this.target().matrixify(),a.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},reset:function(){if(this.situation){var t=this.situation;this.stop(),this.situation=t,this.atStart()}return this},finish:function(){for(this.stop(!0,!1);this.dequeue().situation&&this.stop(!0,!1););return this.clearQueue().clearCurrent(),this},atStart:function(){return this.at(0,!0)},atEnd:function(){return!0===this.situation.loops&&(this.situation.loops=this.situation.loop+1),"number"==typeof this.situation.loops?this.at(this.situation.loops,!0):this.at(1,!0)},at:function(t,e){var i=this.situation.duration/this._speed;return this.absPos=t,e||(this.situation.reversed&&(this.absPos=1-this.absPos),this.absPos+=this.situation.loop),this.situation.start=+new Date-this.absPos*i,this.situation.finish=this.situation.start+i,this.step(!0)},speed:function(t){return 0===t?this.pause():t?(this._speed=t,this.at(this.absPos,!0)):this._speed},loop:function(t,e){var i=this.last();return i.loops=null==t||t,i.loop=0,e&&(i.reversing=!0),this},pause:function(){return this.paused=!0,this.stopAnimFrame(),this},play:function(){return this.paused?(this.paused=!1,this.at(this.absPos,!0)):this},reverse:function(t){var e=this.last();return e.reversed=void 0===t?!e.reversed:t,this},progress:function(t){return t?this.situation.ease(this.pos):this.pos},after:function(t){var e=this.last();return this.target().on("finished.fx",function i(s){s.detail.situation==e&&(t.call(this,e),this.off("finished.fx",i))}),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,s.morph(i.detail.pos),i.detail.eased,e)};return this.target().off("during.fx",i).on("during.fx",i),this.after(function(){this.off("during.fx",i)}),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off("allfinished.fx",e)};return this.target().off("allfinished.fx",e).on("allfinished.fx",e),this._callStart()},duringAll:function(t){var e=function(e){t.call(this,e.detail.pos,s.morph(e.detail.pos),e.detail.eased,e.detail.situation)};return this.target().off("during.fx",e).on("during.fx",e),this.afterAll(function(){this.off("during.fx",e)}),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||"animations"][t]=e,this._callStart()},step:function(t){var e,i,s;(t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops)?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||ithis.lastPos&&n<=a&&(this.situation.once[n].call(this.target(),this.pos,a),delete this.situation.once[n]);return this.active&&this.target().fire("during",{pos:this.pos,eased:a,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=a,this):this},eachAt:function(){var t,e,i,a=this,n=this.target(),r=this.situation;for(t in r.animations)i=[].concat(r.animations[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n[t].apply(n,i);for(t in r.attrs)i=[t].concat(r.attrs[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n.attr.apply(n,i);for(t in r.styles)i=[t].concat(r.styles[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n.style.apply(n,i);if(r.transforms.length){for(i=r.initialTransformation,t=0,e=r.transforms.length;t=0;--i)this[y[i]]=null!=e[y[i]]?e[y[i]]:a[y[i]]},extend:{extract:function(){var t=f(this,0,1),e=f(this,1,0),i=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(i*Math.PI/180)+this.f*Math.sin(i*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(i*Math.PI/180)+this.e*Math.sin(-i*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),skewX:-i,skewY:180/Math.PI*Math.atan2(e.y,e.x),scaleX:Math.sqrt(this.a*this.a+this.b*this.b),scaleY:Math.sqrt(this.c*this.c+this.d*this.d),rotation:i,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new s.Matrix(this)}},clone:function(){return new s.Matrix(this)},morph:function(t){return this.destination=new s.Matrix(t),this},at:function(t){return this.destination?new s.Matrix({a:this.a+(this.destination.a-this.a)*t,b:this.b+(this.destination.b-this.b)*t,c:this.c+(this.destination.c-this.c)*t,d:this.d+(this.destination.d-this.d)*t,e:this.e+(this.destination.e-this.e)*t,f:this.f+(this.destination.f-this.f)*t}):this},multiply:function(t){return new s.Matrix(this.native().multiply(function(t){t instanceof s.Matrix||(t=new s.Matrix(t));return t}(t).native()))},inverse:function(){return new s.Matrix(this.native().inverse())},translate:function(t,e){return new s.Matrix(this.native().translate(t||0,e||0))},scale:function(t,e,i,a){return 1==arguments.length?e=t:3==arguments.length&&(a=i,i=e,e=t),this.around(i,a,new s.Matrix(t,0,0,e,0,0))},rotate:function(t,e,i){return t=s.utils.radians(t),this.around(e,i,new s.Matrix(Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0))},flip:function(t,e){return"x"==t?this.scale(-1,1,e,0):"y"==t?this.scale(1,-1,0,e):this.scale(-1,-1,t,null!=e?e:t)},skew:function(t,e,i,a){return 1==arguments.length?e=t:3==arguments.length&&(a=i,i=e,e=t),t=s.utils.radians(t),e=s.utils.radians(e),this.around(i,a,new s.Matrix(1,Math.tan(e),Math.tan(t),1,0,0))},skewX:function(t,e,i){return this.skew(t,0,e,i)},skewY:function(t,e,i){return this.skew(0,t,e,i)},around:function(t,e,i){return this.multiply(new s.Matrix(1,0,0,1,t||0,e||0)).multiply(i).multiply(new s.Matrix(1,0,0,1,-t||0,-e||0))},native:function(){for(var t=s.parser.native.createSVGMatrix(),e=y.length-1;e>=0;e--)t[y[e]]=this[y[e]];return t},toString:function(){return"matrix("+b(this.a)+","+b(this.b)+","+b(this.c)+","+b(this.d)+","+b(this.e)+","+b(this.f)+")"}},parent:s.Element,construct:{ctm:function(){return new s.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof s.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new s.Matrix(e)}return new s.Matrix(this.node.getScreenCTM())}}}),s.Point=s.invent({create:function(e,i){var s;s=Array.isArray(e)?{x:e[0],y:e[1]}:"object"===t(e)?{x:e.x,y:e.y}:null!=e?{x:e,y:null!=i?i:e}:{x:0,y:0},this.x=s.x,this.y=s.y},extend:{clone:function(){return new s.Point(this)},morph:function(t,e){return this.destination=new s.Point(t,e),this},at:function(t){return this.destination?new s.Point({x:this.x+(this.destination.x-this.x)*t,y:this.y+(this.destination.y-this.y)*t}):this},native:function(){var t=s.parser.native.createSVGPoint();return t.x=this.x,t.y=this.y,t},transform:function(t){return new s.Point(this.native().matrixTransform(t.native()))}}}),s.extend(s.Element,{point:function(t,e){return new s.Point(t,e).transform(this.screenCTM().inverse())}}),s.extend(s.Element,{attr:function(e,i,a){if(null==e){for(e={},a=(i=this.node.attributes).length-1;a>=0;a--)e[i[a].nodeName]=s.regex.isNumber.test(i[a].nodeValue)?parseFloat(i[a].nodeValue):i[a].nodeValue;return e}if("object"===t(e))for(i in e)this.attr(i,e[i]);else if(null===i)this.node.removeAttribute(e);else{if(null==i)return null==(i=this.node.getAttribute(e))?s.defaults.attrs[e]:s.regex.isNumber.test(i)?parseFloat(i):i;"stroke-width"==e?this.attr("stroke",parseFloat(i)>0?this._stroke:null):"stroke"==e&&(this._stroke=i),"fill"!=e&&"stroke"!=e||(s.regex.isImage.test(i)&&(i=this.doc().defs().image(i,0,0)),i instanceof s.Image&&(i=this.doc().defs().pattern(0,0,function(){this.add(i)}))),"number"==typeof i?i=new s.Number(i):s.Color.isColor(i)?i=new s.Color(i):Array.isArray(i)&&(i=new s.Array(i)),"leading"==e?this.leading&&this.leading(i):"string"==typeof a?this.node.setAttributeNS(a,e,i.toString()):this.node.setAttribute(e,i.toString()),!this.rebuild||"font-size"!=e&&"x"!=e||this.rebuild(e,i)}return this}}),s.extend(s.Element,{transform:function(e,i){var a,n;if("object"!==t(e))return a=new s.Matrix(this).extract(),"string"==typeof e?a[e]:a;if(a=new s.Matrix(this),i=!!i||!!e.relative,null!=e.a)a=i?a.multiply(new s.Matrix(e)):new s.Matrix(e);else if(null!=e.rotation)x(e,this),a=i?a.rotate(e.rotation,e.cx,e.cy):a.rotate(e.rotation-a.extract().rotation,e.cx,e.cy);else if(null!=e.scale||null!=e.scaleX||null!=e.scaleY){if(x(e,this),e.scaleX=null!=e.scale?e.scale:null!=e.scaleX?e.scaleX:1,e.scaleY=null!=e.scale?e.scale:null!=e.scaleY?e.scaleY:1,!i){var r=a.extract();e.scaleX=1*e.scaleX/r.scaleX,e.scaleY=1*e.scaleY/r.scaleY}a=a.scale(e.scaleX,e.scaleY,e.cx,e.cy)}else if(null!=e.skew||null!=e.skewX||null!=e.skewY){if(x(e,this),e.skewX=null!=e.skew?e.skew:null!=e.skewX?e.skewX:0,e.skewY=null!=e.skew?e.skew:null!=e.skewY?e.skewY:0,!i){r=a.extract();a=a.multiply((new s.Matrix).skew(r.skewX,r.skewY,e.cx,e.cy).inverse())}a=a.skew(e.skewX,e.skewY,e.cx,e.cy)}else e.flip?("x"==e.flip||"y"==e.flip?e.offset=null==e.offset?this.bbox()["c"+e.flip]:e.offset:null==e.offset?(n=this.bbox(),e.flip=n.cx,e.offset=n.cy):e.flip=e.offset,a=(new s.Matrix).flip(e.flip,e.offset)):null==e.x&&null==e.y||(i?a=a.translate(e.x,e.y):(null!=e.x&&(a.e=e.x),null!=e.y&&(a.f=e.y)));return this.attr("transform",a)}}),s.extend(s.FX,{transform:function(e,i){var a,n,r=this.target();return"object"!==t(e)?(a=new s.Matrix(r).extract(),"string"==typeof e?a[e]:a):(i=!!i||!!e.relative,null!=e.a?a=new s.Matrix(e):null!=e.rotation?(x(e,r),a=new s.Rotate(e.rotation,e.cx,e.cy)):null!=e.scale||null!=e.scaleX||null!=e.scaleY?(x(e,r),e.scaleX=null!=e.scale?e.scale:null!=e.scaleX?e.scaleX:1,e.scaleY=null!=e.scale?e.scale:null!=e.scaleY?e.scaleY:1,a=new s.Scale(e.scaleX,e.scaleY,e.cx,e.cy)):null!=e.skewX||null!=e.skewY?(x(e,r),e.skewX=null!=e.skewX?e.skewX:0,e.skewY=null!=e.skewY?e.skewY:0,a=new s.Skew(e.skewX,e.skewY,e.cx,e.cy)):e.flip?("x"==e.flip||"y"==e.flip?e.offset=null==e.offset?r.bbox()["c"+e.flip]:e.offset:null==e.offset?(n=r.bbox(),e.flip=n.cx,e.offset=n.cy):e.flip=e.offset,a=(new s.Matrix).flip(e.flip,e.offset)):null==e.x&&null==e.y||(a=new s.Translate(e.x,e.y)),a?(a.relative=i,this.last().transforms.push(a),this._callStart()):this)}}),s.extend(s.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(s.regex.transforms).slice(0,-1).map(function(t){var e=t.trim().split("(");return[e[0],e[1].split(s.regex.delimiter).map(function(t){return parseFloat(t)})]}).reduce(function(t,e){return"matrix"==e[0]?t.multiply(p(e[1])):t[e[0]].apply(t,e[1])},new s.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),s.Transformation=s.invent({create:function(e,i){if(arguments.length>1&&"boolean"!=typeof i)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(e))for(var s=0,a=this.arguments.length;s=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return s.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){var i,a,n=this.children();for(i=0,a=n.length;in/r?this.height/r:this.width/n,this.x=i,this.y=a,this.width=n,this.height=r)}else e="string"==typeof e?e.match(u).map(function(t){return parseFloat(t)}):Array.isArray(e)?e:"object"===t(e)?[e.x,e.y,e.width,e.height]:4==arguments.length?[].slice.call(arguments):[0,0,0,0],this.x=e[0],this.y=e[1],this.width=e[2],this.height=e[3]},extend:{toString:function(){return this.x+" "+this.y+" "+this.width+" "+this.height},morph:function(t,e,i,a){return this.destination=new s.ViewBox(t,e,i,a),this},at:function(t){return this.destination?new s.ViewBox([this.x+(this.destination.x-this.x)*t,this.y+(this.destination.y-this.y)*t,this.width+(this.destination.width-this.width)*t,this.height+(this.destination.height-this.height)*t]):this}},parent:s.Container,construct:{viewbox:function(t,e,i,a){return 0==arguments.length?new s.ViewBox(this):this.attr("viewBox",new s.ViewBox(t,e,i,a))}}}),["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","touchstart","touchmove","touchleave","touchend","touchcancel"].forEach(function(t){s.Element.prototype[t]=function(e){return s.on(this.node,t,e),this}}),s.listeners=[],s.handlerMap=[],s.listenerId=0,s.on=function(t,e,i,a,n){var r=i.bind(a||t.instance||t),o=(s.handlerMap.indexOf(t)+1||s.handlerMap.push(t))-1,l=e.split(".")[0],h=e.split(".")[1]||"*";s.listeners[o]=s.listeners[o]||{},s.listeners[o][l]=s.listeners[o][l]||{},s.listeners[o][l][h]=s.listeners[o][l][h]||{},i._svgjsListenerId||(i._svgjsListenerId=++s.listenerId),s.listeners[o][l][h][i._svgjsListenerId]=r,t.addEventListener(l,r,n||!1)},s.off=function(t,e,i){var a=s.handlerMap.indexOf(t),n=e&&e.split(".")[0],r=e&&e.split(".")[1],o="";if(-1!=a)if(i){if("function"==typeof i&&(i=i._svgjsListenerId),!i)return;s.listeners[a][n]&&s.listeners[a][n][r||"*"]&&(t.removeEventListener(n,s.listeners[a][n][r||"*"][i],!1),delete s.listeners[a][n][r||"*"][i])}else if(r&&n){if(s.listeners[a][n]&&s.listeners[a][n][r]){for(i in s.listeners[a][n][r])s.off(t,[n,r].join("."),i);delete s.listeners[a][n][r]}}else if(r)for(e in s.listeners[a])for(o in s.listeners[a][e])r===o&&s.off(t,[e,r].join("."));else if(n){if(s.listeners[a][n]){for(o in s.listeners[a][n])s.off(t,[n,o].join("."));delete s.listeners[a][n]}}else{for(e in s.listeners[a])s.off(t,e);delete s.listeners[a],delete s.handlerMap[a]}},s.extend(s.Element,{on:function(t,e,i,a){return s.on(this.node,t,e,i,a),this},off:function(t,e){return s.off(this.node,t,e),this},fire:function(t,i){return t instanceof e.Event?this.node.dispatchEvent(t):this.node.dispatchEvent(t=new s.CustomEvent(t,{detail:i,cancelable:!0})),this._event=t,this},event:function(){return this._event}}),s.Defs=s.invent({create:"defs",inherit:s.Container}),s.G=s.invent({create:"g",inherit:s.Container,extend:{x:function(t){return null==t?this.transform("x"):this.transform({x:t-this.x()},!0)},y:function(t){return null==t?this.transform("y"):this.transform({y:t-this.y()},!0)},cx:function(t){return null==t?this.gbox().cx:this.x(t-this.gbox().width/2)},cy:function(t){return null==t?this.gbox().cy:this.y(t-this.gbox().height/2)},gbox:function(){var t=this.bbox(),e=this.transform();return t.x+=e.x,t.x2+=e.x,t.cx+=e.x,t.y+=e.y,t.y2+=e.y,t.cy+=e.y,t}},construct:{group:function(){return this.put(new s.G)}}}),s.Doc=s.invent({create:function(t){t&&("svg"==(t="string"==typeof t?i.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,s.create("svg")),t.appendChild(this.node),this.size("100%","100%")),this.namespace().defs())},inherit:s.Container,extend:{namespace:function(){return this.attr({xmlns:s.ns,version:"1.1"}).attr("xmlns:xlink",s.xlink,s.xmlns).attr("xmlns:svgjs",s.svgjs,s.xmlns)},defs:function(){var t;this._defs||((t=this.node.getElementsByTagName("defs")[0])?this._defs=s.adopt(t):this._defs=new s.Defs,this.node.appendChild(this._defs.node));return this._defs},parent:function(){return this.node.parentNode&&"#document"!=this.node.parentNode.nodeName?this.node.parentNode:null},spof:function(){var t=this.node.getScreenCTM();return t&&this.style("left",-t.e%1+"px").style("top",-t.f%1+"px"),this},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,s.parser.draw&&!s.parser.draw.parentNode&&this.node.appendChild(s.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=m(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),s.extend(s.Element,{siblings:function(){return this.parent().children()},position:function(){return this.parent().index(this)},next:function(){return this.siblings()[this.position()+1]},previous:function(){return this.siblings()[this.position()-1]},forward:function(){var t=this.position()+1,e=this.parent();return e.removeElement(this).add(this,t),e instanceof s.Doc&&e.node.appendChild(e.defs().node),this},backward:function(){var t=this.position();return t>0&&this.parent().removeElement(this).add(this,t-1),this},front:function(){var t=this.parent();return t.node.appendChild(this.node),t instanceof s.Doc&&t.node.appendChild(t.defs().node),this},back:function(){return this.position()>0&&this.parent().removeElement(this).add(this,0),this},before:function(t){t.remove();var e=this.position();return this.parent().add(t,e),this},after:function(t){t.remove();var e=this.position();return this.parent().add(t,e+1),this}}),s.Mask=s.invent({create:function(){this.constructor.call(this,s.create("mask")),this.targets=[]},inherit:s.Container,extend:{remove:function(){for(var t=this.targets.length-1;t>=0;t--)this.targets[t]&&this.targets[t].unmask();return this.targets=[],s.Element.prototype.remove.call(this),this}},construct:{mask:function(){return this.defs().put(new s.Mask)}}}),s.extend(s.Element,{maskWith:function(t){return this.masker=t instanceof s.Mask?t:this.parent().mask().add(t),this.masker.targets.push(this),this.attr("mask",'url("#'+this.masker.attr("id")+'")')},unmask:function(){return delete this.masker,this.attr("mask",null)}}),s.ClipPath=s.invent({create:function(){this.constructor.call(this,s.create("clipPath")),this.targets=[]},inherit:s.Container,extend:{remove:function(){for(var t=this.targets.length-1;t>=0;t--)this.targets[t]&&this.targets[t].unclip();return this.targets=[],this.parent().removeElement(this),this}},construct:{clip:function(){return this.defs().put(new s.ClipPath)}}}),s.extend(s.Element,{clipWith:function(t){return this.clipper=t instanceof s.ClipPath?t:this.parent().clip().add(t),this.clipper.targets.push(this),this.attr("clip-path",'url("#'+this.clipper.attr("id")+'")')},unclip:function(){return delete this.clipper,this.attr("clip-path",null)}}),s.Gradient=s.invent({create:function(t){this.constructor.call(this,s.create(t+"Gradient")),this.type=t},inherit:s.Container,extend:{at:function(t,e,i){return this.put(new s.Stop).update(t,e,i)},update:function(t){return this.clear(),"function"==typeof t&&t.call(this,this),this},fill:function(){return"url(#"+this.id()+")"},toString:function(){return this.fill()},attr:function(t,e,i){return"transform"==t&&(t="gradientTransform"),s.Container.prototype.attr.call(this,t,e,i)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),s.extend(s.Gradient,s.FX,{from:function(t,e){return"radial"==(this._target||this).type?this.attr({fx:new s.Number(t),fy:new s.Number(e)}):this.attr({x1:new s.Number(t),y1:new s.Number(e)})},to:function(t,e){return"radial"==(this._target||this).type?this.attr({cx:new s.Number(t),cy:new s.Number(e)}):this.attr({x2:new s.Number(t),y2:new s.Number(e)})}}),s.extend(s.Defs,{gradient:function(t,e){return this.put(new s.Gradient(t)).update(e)}}),s.Stop=s.invent({create:"stop",inherit:s.Element,extend:{update:function(t){return("number"==typeof t||t instanceof s.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr("stop-opacity",t.opacity),null!=t.color&&this.attr("stop-color",t.color),null!=t.offset&&this.attr("offset",new s.Number(t.offset)),this}}}),s.Pattern=s.invent({create:"pattern",inherit:s.Container,extend:{fill:function(){return"url(#"+this.id()+")"},update:function(t){return this.clear(),"function"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,i){return"transform"==t&&(t="patternTransform"),s.Container.prototype.attr.call(this,t,e,i)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),s.extend(s.Defs,{pattern:function(t,e,i){return this.put(new s.Pattern).update(i).attr({x:0,y:0,width:t,height:e,patternUnits:"userSpaceOnUse"})}}),s.Shape=s.invent({create:function(t){this.constructor.call(this,t)},inherit:s.Element}),s.Bare=s.invent({create:function(t,e){if(this.constructor.call(this,s.create(t)),e)for(var i in e.prototype)"function"==typeof e.prototype[i]&&(this[i]=e.prototype[i])},inherit:s.Element,extend:{words:function(t){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return this.node.appendChild(i.createTextNode(t)),this}}}),s.extend(s.Parent,{element:function(t,e){return this.put(new s.Bare(t,e))}}),s.Symbol=s.invent({create:"symbol",inherit:s.Container,construct:{symbol:function(){return this.put(new s.Symbol)}}}),s.Use=s.invent({create:"use",inherit:s.Shape,extend:{element:function(t,e){return this.attr("href",(e||"")+"#"+t,s.xlink)}},construct:{use:function(t,e){return this.put(new s.Use).element(t,e)}}}),s.Rect=s.invent({create:"rect",inherit:s.Shape,construct:{rect:function(t,e){return this.put(new s.Rect).size(t,e)}}}),s.Circle=s.invent({create:"circle",inherit:s.Shape,construct:{circle:function(t){return this.put(new s.Circle).rx(new s.Number(t).divide(2)).move(0,0)}}}),s.extend(s.Circle,s.FX,{rx:function(t){return this.attr("r",t)},ry:function(t){return this.rx(t)}}),s.Ellipse=s.invent({create:"ellipse",inherit:s.Shape,construct:{ellipse:function(t,e){return this.put(new s.Ellipse).size(t,e).move(0,0)}}}),s.extend(s.Ellipse,s.Rect,s.FX,{rx:function(t){return this.attr("rx",t)},ry:function(t){return this.attr("ry",t)}}),s.extend(s.Circle,s.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr("cx"):this.attr("cx",t)},cy:function(t){return null==t?this.attr("cy"):this.attr("cy",t)},width:function(t){return null==t?2*this.rx():this.rx(new s.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new s.Number(t).divide(2))},size:function(t,e){var i=g(this,t,e);return this.rx(new s.Number(i.width).divide(2)).ry(new s.Number(i.height).divide(2))}}),s.Line=s.invent({create:"line",inherit:s.Shape,extend:{array:function(){return new s.PointArray([[this.attr("x1"),this.attr("y1")],[this.attr("x2"),this.attr("y2")]])},plot:function(t,e,i,a){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:i,y2:a}:new s.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=g(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,i,a){return s.Line.prototype.plot.apply(this.put(new s.Line),null!=t?[t,e,i,a]:[0,0,0,0])}}}),s.Polyline=s.invent({create:"polyline",inherit:s.Shape,construct:{polyline:function(t){return this.put(new s.Polyline).plot(t||new s.PointArray)}}}),s.Polygon=s.invent({create:"polygon",inherit:s.Shape,construct:{polygon:function(t){return this.put(new s.Polygon).plot(t||new s.PointArray)}}}),s.extend(s.Polyline,s.Polygon,{array:function(){return this._array||(this._array=new s.PointArray(this.attr("points")))},plot:function(t){return null==t?this.array():this.clear().attr("points","string"==typeof t?t:this._array=new s.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr("points",this.array().move(t,e))},size:function(t,e){var i=g(this,t,e);return this.attr("points",this.array().size(i.width,i.height))}}),s.extend(s.Line,s.Polyline,s.Polygon,{morphArray:s.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),s.Path=s.invent({create:"path",inherit:s.Shape,extend:{morphArray:s.PathArray,array:function(){return this._array||(this._array=new s.PathArray(this.attr("d")))},plot:function(t){return null==t?this.array():this.clear().attr("d","string"==typeof t?t:this._array=new s.PathArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr("d",this.array().move(t,e))},x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},size:function(t,e){var i=g(this,t,e);return this.attr("d",this.array().size(i.width,i.height))},width:function(t){return null==t?this.bbox().width:this.size(t,this.bbox().height)},height:function(t){return null==t?this.bbox().height:this.size(this.bbox().width,t)}},construct:{path:function(t){return this.put(new s.Path).plot(t||new s.PathArray)}}}),s.Image=s.invent({create:"image",inherit:s.Shape,extend:{load:function(t){if(!t)return this;var i=this,a=new e.Image;return s.on(a,"load",function(){s.off(a);var e=i.parent(s.Pattern);null!==e&&(0==i.width()&&0==i.height()&&i.size(a.width,a.height),e&&0==e.width()&&0==e.height()&&e.size(i.width(),i.height()),"function"==typeof i._loaded&&i._loaded.call(i,{width:a.width,height:a.height,ratio:a.width/a.height,url:t}))}),s.on(a,"error",function(t){s.off(a),"function"==typeof i._error&&i._error.call(i,t)}),this.attr("href",a.src=this.src=t,s.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,i){return this.put(new s.Image).load(t).size(e||0,i||e||0)}}}),s.Text=s.invent({create:function(){this.constructor.call(this,s.create("text")),this.dom.leading=new s.Number(1.3),this._rebuild=!0,this._build=!1,this.attr("font-family",s.defaults.attrs["font-family"])},inherit:s.Shape,extend:{x:function(t){return null==t?this.attr("x"):this.attr("x",t)},y:function(t){var e=this.attr("y"),i="number"==typeof e?e-this.bbox().y:0;return null==t?"number"==typeof e?e-i:e:this.attr("y","number"==typeof t.valueOf()?t+i:t)},cx:function(t){return null==t?this.bbox().cx:this.x(t-this.bbox().width/2)},cy:function(t){return null==t?this.bbox().cy:this.y(t-this.bbox().height/2)},text:function(t){if(void 0===t){t="";for(var e=this.node.childNodes,i=0,a=e.length;i=0;i--)t.childNodes[i]instanceof e.SVGElement&&m(t.childNodes[i]);return s.adopt(t).id(s.eid(t.nodeName))}function v(t){return null==t.x&&(t.x=0,t.y=0,t.width=0,t.height=0),t.w=t.width,t.h=t.height,t.x2=t.x+t.width,t.y2=t.y+t.height,t.cx=t.x+t.width/2,t.cy=t.y+t.height/2,t}function b(t){return Math.abs(t)>1e-37?t:0}["fill","stroke"].forEach(function(t){var e,i={};i[t]=function(i){if(void 0===i)return this;if("string"==typeof i||s.Color.isRgb(i)||i&&"function"==typeof i.fill)this.attr(t,i);else for(e=l[t].length-1;e>=0;e--)null!=i[l[t][e]]&&this.attr(l.prefix(t,l[t][e]),i[l[t][e]]);return this},s.extend(s.Element,s.FX,i)}),s.extend(s.Element,s.FX,{rotate:function(t,e,i){return this.transform({rotation:t,cx:e,cy:i})},skew:function(t,e,i,s){return 1==arguments.length||3==arguments.length?this.transform({skew:t,cx:e,cy:i}):this.transform({skewX:t,skewY:e,cx:i,cy:s})},scale:function(t,e,i,s){return 1==arguments.length||3==arguments.length?this.transform({scale:t,cx:e,cy:i}):this.transform({scaleX:t,scaleY:e,cx:i,cy:s})},translate:function(t,e){return this.transform({x:t,y:e})},flip:function(t,e){return e="number"==typeof t?t:e,this.transform({flip:t||"both",offset:e})},matrix:function(t){return this.attr("transform",new s.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr("opacity",t)},dx:function(t){return this.x(new s.Number(t).plus(this instanceof s.FX?0:this.x()),!0)},dy:function(t){return this.y(new s.Number(t).plus(this instanceof s.FX?0:this.y()),!0)},dmove:function(t,e){return this.dx(t).dy(e)}}),s.extend(s.Rect,s.Ellipse,s.Circle,s.Gradient,s.FX,{radius:function(t,e){var i=(this._target||this).type;return"radial"==i||"circle"==i?this.attr("r",new s.Number(t)):this.rx(t).ry(null==e?t:e)}}),s.extend(s.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),s.extend(s.Parent,s.Text,s.Tspan,s.FX,{font:function(e,i){if("object"===t(e))for(i in e)this.font(i,e[i]);return"leading"==e?this.leading(i):"anchor"==e?this.attr("text-anchor",i):"size"==e||"family"==e||"weight"==e||"stretch"==e||"variant"==e||"style"==e?this.attr("font-"+e,i):this.attr(e,i)}}),s.Set=s.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){var t,e,i=[].slice.call(arguments);for(t=0,e=i.length;t-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members},bbox:function(){if(0==this.members.length)return new s.RBox;var t=this.members[0].rbox(this.members[0].doc());return this.each(function(){t=t.merge(this.rbox(this.doc()))}),t}},construct:{set:function(t){return new s.Set(t)}}}),s.FX.Set=s.invent({create:function(t){this.set=t}}),s.Set.inherit=function(){var t=[];for(var e in s.Shape.prototype)"function"==typeof s.Shape.prototype[e]&&"function"!=typeof s.Set.prototype[e]&&t.push(e);for(var e in t.forEach(function(t){s.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),s.get=function(t){var e=i.getElementById(function(t){var e=(t||"").toString().match(s.regex.reference);if(e)return e[1]}(t)||t);return s.adopt(e)},s.select=function(t,e){return new s.Set(s.utils.map((e||i).querySelectorAll(t),function(t){return s.adopt(t)}))},s.extend(s.Parent,{select:function(t){return s.select(t,this.node)}});var y="abcdef".split("");if("function"!=typeof e.CustomEvent){var w=function(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var s=i.createEvent("CustomEvent");return s.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),s};w.prototype=e.Event.prototype,s.CustomEvent=w}else s.CustomEvent=e.CustomEvent;return function(t){for(var i=0,s=["moz","webkit"],a=0;a1&&(s=Math.sqrt(s),M*=s,P*=s);a=(new SVG.Matrix).rotate(E).scale(1/M,1/P).rotate(-E),F=F.transform(a),O=O.transform(a),n=[O.x-F.x,O.y-F.y],o=n[0]*n[0]+n[1]*n[1],r=Math.sqrt(o),n[0]/=r,n[1]/=r,l=o<4?Math.sqrt(1-o/4):0,T===X&&(l*=-1);h=new SVG.Point((O.x+F.x)/2+l*-n[1],(O.y+F.y)/2+l*n[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(O.x-h.x,O.y-h.y),u=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(u*=-1);g=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(g*=-1);X&&u>g&&(g+=2*Math.PI);!X&&un.maxX-e.width&&(s=n.maxX-e.width),null!=n.minY&&an.maxY-e.height&&(a=n.maxY-e.height),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:r,y:o},!0):this.el.move(s,a));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire("dragend",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,i){"function"!=typeof e&&"object"!=typeof e||(i=e,e=!0);var s=this.remember("_draggable")||new t(this);return(e=void 0===e||e)?s.init(i||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1}}t.prototype.init=function(t,e){var i=this.el.bbox();for(var s in this.options={},this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==["line","polyline","polygon"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set?this:(this.pointSelection.set=this.parent.set(),this.drawCircles(),this)},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map(function(e){return[e[0]-t.x,e[1]-t.y]})},t.prototype.drawCircles=function(){for(var t=this,e=this.getPointArray(),i=0,s=e.length;i0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case"rt":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case"rb":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case"lb":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case"t":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case"r":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case"b":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case"l":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case"rot":this.calc=function(t,e){var i=t+this.parameters.p.x,s=e+this.parameters.p.y,a=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),n=180*(Math.atan2(s-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2)-a)/Math.PI;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(this.parameters.rotation+n-n%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),s=this.el.array().valueOf();s[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],s[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(s)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,"touchmove.resize",function(t){e.update(t||window.event)}),SVG.on(window,"touchend.resize",function(){e.done()}),SVG.on(window,"mousemove.resize",function(t){e.update(t||window.event)}),SVG.on(window,"mouseup.resize",function(){e.done()})},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),s=i.x-this.parameters.p.x,a=i.y-this.parameters.p.y;this.lastUpdateCall=[s,a],this.calc(s,a),this.el.fire("resizing",{dx:s,dy:a,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},t.prototype.snapToGrid=function(t,e,i,s){var a;return void 0!==s?a=[(i+t)%this.options.snapToGrid,(s+e)%this.options.snapToGrid]:(i=null==i?3:i,a=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t-=Math.abs(a[0])r.maxX&&(t=r.maxX-a),void 0!==r.minY&&n+er.maxY&&(e=r.maxY-n),[t,e]},t.prototype.checkAspectRatio=function(t){if(!this.options.saveAspectRatio)return t;var e=t.slice(),i=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],a=this.parameters.box.height-t[1],n=s/a;return ni&&(e[0]=this.parameters.box.width-a*i),e},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}();return function(t,e){void 0===e&&(e={});var i=e.insertAt;if(t&&"undefined"!=typeof document){var s=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css","top"===i&&s.firstChild?s.insertBefore(a,s.firstChild):s.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}}('.apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #222;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: " ";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: " ";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n.apexcharts-zoom-icon.selected svg, \n.apexcharts-selection-icon.selected svg, \n.apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.apexcharts-selection-icon:not(.selected):hover svg,\n.apexcharts-zoom-icon:not(.selected):hover svg, \n.apexcharts-zoom-in-icon:hover svg, \n.apexcharts-zoom-out-icon:hover svg, \n.apexcharts-reset-zoom-icon:hover svg, \n.apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.apexcharts-menu-item:hover {\n background: #eee;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}'),"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||function(t){if("Element"in t){var e=t.Element.prototype,i=Object,s=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")},a=Array.prototype.indexOf||function(t){for(var e=0,i=this.length;e div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',i=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e)),i.appendChild(s),t=!0}}(),s.__resizeLast__={},s.__resizeListeners__=[],(s.__resizeTriggers__=document.createElement("div")).className="resize-triggers",s.__resizeTriggers__.innerHTML='
',s.appendChild(s.__resizeTriggers__),e(s),s.addEventListener("scroll",i,!0),h&&s.__resizeTriggers__.addEventListener(h,function(t){"resizeanim"==t.animationName&&e(s)})),s.__resizeListeners__.push(a)},window.removeResizeListener=function(t,e){t&&(t.__resizeListeners__.splice(t.__resizeListeners__.indexOf(e),1),t.__resizeListeners__.length||(t.removeEventListener("scroll",i),t.__resizeTriggers__=!t.removeChild(t.__resizeTriggers__)))}}(),window.Apex={},function(){function i(t,s){e(this,i),this.opts=s,this.ctx=this,this.w=new k(s).init(),this.el=t,this.w.globals.cuid=(Math.random()+1).toString(36).substring(4),this.w.globals.chartID=this.w.config.chart.id?this.w.config.chart.id:this.w.globals.cuid,this.initModules(),this.create=d.bind(this.create,this),this.windowResizeHandler=this.windowResize.bind(this)}return s(i,[{key:"render",value:function(){var t=this;return new q(function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var s=t.w.config.chart.events.beforeMount;"function"==typeof s&&s(t,t.w),t.fireEvent("beforeMount",[t,t.w]),window.addEventListener("resize",t.windowResizeHandler),window.addResizeListener(t.el.parentNode,t.parentResizeCallback.bind(t));var a=t.create(t.w.config.series,{});if(!a)return e(t);t.mount(a).then(function(){e(a),"function"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.fireEvent("mounted",[t,t.w])}).catch(function(t){i(t)})}else i(new Error("Element not found"))})}},{key:"initModules",value:function(){this.animations=new g(this.ctx),this.annotations=new m(this.ctx),this.core=new _(this.el,this),this.grid=new at(this),this.coreUtils=new b(this),this.config=new y({}),this.crosshairs=new E(this.ctx),this.options=new x,this.responsive=new rt(this.ctx),this.series=new B(this.ctx),this.theme=new ot(this.ctx),this.formatters=new D(this.ctx),this.titleSubtitle=new mt(this.ctx),this.legend=new nt(this.ctx),this.toolbar=new pt(this.ctx),this.dimensions=new V(this.ctx),this.zoomPanSelection=new xt(this.ctx),this.w.globals.tooltip=new ft(this.ctx)}},{key:"addEventListener",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:"removeEventListener",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var s=i.globals.events[t].indexOf(e);-1!==s&&i.globals.events[t].splice(s,1)}}},{key:"fireEvent",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var s=i.globals.events[t],a=s.length,n=0;n0&&void 0!==arguments[0]?arguments[0]:null,e=this,i=e.w;return new q(function(s,a){if(null===e.el)return a(new Error("Not enough data to display or target element not found"));if((null===t||i.globals.allSeriesCollapsed)&&e.series.handleNoData(),e.core.drawAxis(i.config.chart.type,t.xyRatios),e.grid=new at(e),"back"===i.config.grid.position&&e.grid.drawGrid(),"back"===i.config.annotations.position&&e.annotations.drawAnnotations(),t.elGraph instanceof Array)for(var n=0;n0&&i.globals.memory.methodsToExec.forEach(function(t){t.method(t.params,!1,t.context)}),s(e)})}},{key:"clearPreviousPaths",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1,t.globals.collapsedSeries=[],t.globals.collapsedSeriesIndices=[]}},{key:"updateOptions",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=this.w;return t.series&&(t.series[0].data&&(t.series=t.series.map(function(t,e){return n({},a.config.series[e],{name:t.name?t.name:a.config.series[e].name,type:t.type,data:t.data})})),this.revertDefaultAxisMinMax()),t.xaxis&&((t.xaxis.min||t.xaxis.max)&&this.forceXAxisUpdate(t),t.xaxis.categories&&t.xaxis.categories.length&&a.config.xaxis.convertedCatToNumeric&&(t=v.convertCatToNumeric(t))),a.globals.collapsedSeriesIndices.length>0&&this.clearPreviousPaths(),this._updateOptions(t,e,i,s)}},{key:"_updateOptions",value:function(e){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.getSyncedCharts().forEach(function(n){var r=n.w;return r.globals.shouldAnimate=s,i||(r.globals.resized=!0,r.globals.dataChanged=!0,s&&n.series.getPreviousPaths()),e&&"object"===t(e)&&(n.config=new y(e),e=b.extendArrayProps(n.config,e),r.config=d.extend(r.config,e),a&&(r.globals.lastXAxis=[],r.globals.lastYAxis=[],r.globals.initialConfig=d.extend({},r.config),r.globals.initialSeries=JSON.parse(JSON.stringify(r.config.series)))),n.update(e)})}},{key:"updateSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.revertDefaultAxisMinMax(),this._updateSeries(t,e,i)}},{key:"appendSeries",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.w.config.series.slice();return i.push(t),this.revertDefaultAxisMinMax(),this._updateSeries(i,e)}},{key:"_updateSeries",value:function(t,e){var i,s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=this.w;return this.w.globals.shouldAnimate=e,a.globals.dataChanged=!0,a.globals.allSeriesCollapsed&&(a.globals.allSeriesCollapsed=!1),e&&this.series.getPreviousPaths(),t[0].data?(i=t.map(function(t,e){return n({},a.config.series[e],{name:t.name?t.name:a.config.series[e].name,type:t.type,data:t.data})}),a.config.series=i):a.config.series=t.slice(),s&&(a.globals.initialConfig.series=JSON.parse(JSON.stringify(a.config.series)),a.globals.initialSeries=JSON.parse(JSON.stringify(a.config.series))),this.update()}},{key:"getSyncedCharts",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach(function(t){e.push(t)})),e}},{key:"getGroupedCharts",value:function(){var t=this;return Apex._chartInstances.filter(function(t){if(t.group)return!0}).map(function(e){return t.w.config.chart.group===e.group?e.chart:t})}},{key:"appendData",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var s=i.w.config.series.slice(),a=0;a1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addXaxisAnnotationExternal(t,e,s)}},{key:"addYaxisAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addYaxisAnnotationExternal(t,e,s)}},{key:"addPointAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addPointAnnotationExternal(t,e,s)}},{key:"clearAnnotations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:"addText",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addText(t,e,s)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:"getHighestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new W(this.ctx).getMinYMaxY(t).highestY}},{key:"getLowestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new W(this.ctx).getMinYMaxY(t).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"setLocale",value:function(t){this.setCurrentLocaleValues(t)}},{key:"setCurrentLocaleValues",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter(function(e){return e.name===t})[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var s=d.extend(p,i);this.w.globals.locale=s.options}},{key:"svgUrl",value:function(){return new st(this.ctx).svgUrl()}},{key:"dataURI",value:function(){return new st(this.ctx).dataURI()}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.windowResize()}},{key:"windowResize",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout(function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.update()},150)}}],[{key:"initOnLoad",value:function(){for(var t=document.querySelectorAll("[data-apexcharts]"),e=0;e2?s-2:0),n=2;n>16,r=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((s-n)*a)+n)+256*(Math.round((s-r)*a)+r)+(Math.round((s-o)*a)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(t,e){return e.length>7?this.shadeRGBColor(t,e):this.shadeHexColor(t,e)}}],[{key:"bind",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:"isObject",value:function(e){return e&&"object"===t(e)&&!Array.isArray(e)&&null!=e}},{key:"listToArray",value:function(t){var e,i=[];for(e=0;e1?(e.shift(),this.addProps(s,e,i)):t[e[0]]=i,t}},{key:"clone",value:function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var i=[],s=0;s0&&void 0!==arguments[0]?arguments[0]:"#999999",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;"#"!==t.substring(0,1)&&(t="#999999");var i=t.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:"x",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,e)}},{key:"negToZero",value:function(t){return t<0?0:t}},{key:"moveIndexInArray",value:function(t,e,i){if(i>=t.length)for(var s=i-t.length+1;s--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:"extractNumber",value:function(t){return parseFloat(t.replace(/[^\d\.]*/g,""))}},{key:"randomString",value:function(t){for(var e="",i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",s=0;s-1}},{key:"isIE11",value:function(){if(-1!==window.navigator.userAgent.indexOf("MSIE")||window.navigator.appVersion.indexOf("Trident/")>-1)return!0}},{key:"isIE",value:function(){var t=window.navigator.userAgent,e=t.indexOf("MSIE ");if(e>0)return parseInt(t.substring(e+5,t.indexOf(".",e)),10);if(t.indexOf("Trident/")>0){var i=t.indexOf("rv:");return parseInt(t.substring(i+3,t.indexOf(".",i)),10)}var s=t.indexOf("Edge/");return s>0&&parseInt(t.substring(s+5,t.indexOf(".",s)),10)}}]),i}(),u=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getDefaultFilter",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size("120%","180%","-5%","-40%"),"none"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:"addNormalFilter",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:"addLightenFilter",value:function(t,e,i){var s=this,a=this.w,n=i.intensity;if(!d.isFirefox()){t.unfilter(!0);var r=new window.SVG.Filter;r.size("120%","180%","-5%","-40%"),t.filter(function(t){var i=a.config.chart.dropShadow;(r=i.enabled?s.addShadow(t,e,i):t).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:n}})}),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse")}}},{key:"addDarkenFilter",value:function(t,e,i){var s=this,a=this.w,n=i.intensity;if(!d.isFirefox()){t.unfilter(!0);var r=new window.SVG.Filter;r.size("120%","180%","-5%","-40%"),t.filter(function(t){var i=a.config.chart.dropShadow;(r=i.enabled?s.addShadow(t,e,i):t).componentTransfer({rgb:{type:"linear",slope:n}})}),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse")}}},{key:"applyFilter",value:function(t,e,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(t,e);break;case"lighten":this.addLightenFilter(t,e,{intensity:s});break;case"darken":this.addDarkenFilter(t,e,{intensity:s})}}},{key:"addShadow",value:function(t,e,i){var s=i.blur,a=i.top,n=i.left,r=i.color,o=i.opacity,l=t.flood(Array.isArray(r)?r[e]:r,o).composite(t.sourceAlpha,"in").offset(n,a).gaussianBlur(s).merge(t.source);return t.blend(t.source,l)}},{key:"dropShadow",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=e.top,a=e.left,n=e.blur,r=e.color,o=e.opacity,l=e.noUserSpaceOnUse;return t.unfilter(!0),r=Array.isArray(r)?r[i]:r,(new window.SVG.Filter).size("120%","180%","-5%","-40%"),t.filter(function(t){var e=null;e=d.isSafari()||d.isFirefox()||d.isIE()?t.flood(r,o).composite(t.sourceAlpha,"in").offset(a,s).gaussianBlur(n):t.flood(r,o).composite(t.sourceAlpha,"in").offset(a,s).gaussianBlur(n).merge(t.source),t.blend(t.source,e)}),l||t.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),t}},{key:"setSelectionFilter",value:function(t,e,i){var s=this.w;if(void 0!==s.globals.selectedDataPoints[e]&&s.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute("selected",!0);var a=s.config.states.active.filter;"none"!==a&&this.applyFilter(t,e,a.type,a.value)}}}]),t}(),g=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.setEasingFunctions()}return s(t,[{key:"setEasingFunctions",value:function(){var t;switch(this.w.config.chart.animations.easing){case"linear":t="-";break;case"easein":t="<";break;case"easeout":t=">";break;case"easeinout":t="<>";break;case"swing":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case"bounce":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1};break;default:t="<>"}this.w.globals.easing=t}},{key:"animateLine",value:function(t,e,i,s){t.attr(e).animate(s).attr(i)}},{key:"animateCircleRadius",value:function(t,e,i,s,a){e||(e=0),t.attr({r:e}).animate(s,a).attr({r:i})}},{key:"animateCircle",value:function(t,e,i,s,a){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(s,a).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:"animateRect",value:function(t,e,i,s,a){t.attr(e).animate(s).attr(i).afterAll(function(){a()})}},{key:"animatePathsGradually",value:function(t){var e=t.el,i=t.j,s=t.pathFrom,a=t.pathTo,n=t.speed,r=t.delay,o=t.strokeWidth,l=this.w,h=0;l.config.chart.animations.animateGradually.enabled&&(h=l.config.chart.animations.animateGradually.delay),l.config.chart.animations.dynamicAnimation.enabled&&l.globals.dataChanged&&(h=0),this.morphSVG(e,i,s,a,n,o,r*h)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach(function(t){t.el.classList.remove("hidden")})}},{key:"morphSVG",value:function(t,e,i,s,a,n,r){var o=this,l=this.w;i||(i=t.attr("pathFrom")),s||(s=t.attr("pathTo")),(!i||i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(l.globals.gridHeight),a=1),(s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s="M 0 ".concat(l.globals.gridHeight),a=1),l.globals.shouldAnimate||(a=1),t.plot(i).animate(1,l.globals.easing,r).plot(i).animate(a,l.globals.easing,r).plot(s).afterAll(function(){d.isNumber(e)?e===l.globals.series[l.globals.maxValsInArrayIndex].length-2&&l.globals.shouldAnimate&&(l.globals.animationEnded=!0):l.globals.shouldAnimate&&(l.globals.animationEnded=!0,"function"==typeof l.config.chart.events.animationEnd&&l.config.chart.events.animationEnd(o.ctx,l)),o.showDelayedElements()})}}]),t}(),f=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"drawLine",value:function(t,e,i,s){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"#a8a8a8",n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;return this.w.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:s,stroke:a,"stroke-dasharray":n,"stroke-width":r})}},{key:"drawRect",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"#fefefe",r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w.globals.dom.Paper.rect();return c.attr({x:t,y:e,width:i>0?i:0,height:s>0?s:0,rx:a,ry:a,fill:n,opacity:r,"stroke-width":null!==o?o:0,stroke:null!==l?l:"none","stroke-dasharray":h}),c}},{key:"drawPolygon",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#e1e1e1",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none";return this.w.globals.dom.Paper.polygon(t).attr({fill:i,stroke:e})}},{key:"drawCircle",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w.globals.dom.Paper.circle(2*t);return null!==e&&i.attr(e),i}},{key:"drawPath",value:function(t){var e=t.d,i=void 0===e?"":e,s=t.stroke,a=void 0===s?"#a8a8a8":s,n=t.strokeWidth,r=void 0===n?1:n,o=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,u=t.classes,g=t.strokeLinecap,f=void 0===g?null:g,p=t.strokeDashArray,x=void 0===p?0:p,b=this.w;return null===f&&(f=b.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":h,stroke:a,"stroke-opacity":d,"stroke-linecap":f,"stroke-width":r,"stroke-dasharray":x,class:u})}},{key:"group",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w.globals.dom.Paper.group();return null!==t&&e.attr(t),e}},{key:"move",value:function(t,e){var i=["M",t,e].join(" ");return i}},{key:"line",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=null;return null===i?s=["L",t,e].join(" "):"H"===i?s=["H",t].join(" "):"V"===i&&(s=["V",e].join(" ")),s}},{key:"curve",value:function(t,e,i,s,a,n){var r=["C",t,e,i,s,a,n].join(" ");return r}},{key:"quadraticCurve",value:function(t,e,i,s){return["Q",t,e,i,s].join(" ")}},{key:"arc",value:function(t,e,i,s,a,n,r){var o="A";arguments.length>7&&void 0!==arguments[7]&&arguments[7]&&(o="a");var l=[o,t,e,i,s,a,n,r].join(" ");return l}},{key:"renderPaths",value:function(t){var e,i=t.i,s=t.j,a=t.realIndex,r=t.pathFrom,o=t.pathTo,l=t.stroke,h=t.strokeWidth,c=t.strokeLinecap,d=t.fill,f=t.animationDelay,p=t.initialSpeed,x=t.dataChangeSpeed,b=t.className,m=t.id,v=t.shouldClipToGrid,y=void 0===v||v,w=t.bindEventsOnPaths,k=void 0===w||w,A=t.drawShadow,S=void 0===A||A,C=this.w,L=new u(this.ctx),z=new g(this.ctx),P=this.w.config.chart.animations.enabled,M=P&&this.w.config.chart.animations.dynamicAnimation.enabled,E=!!(P&&!C.globals.resized||M&&C.globals.dataChanged&&C.globals.shouldAnimate);E?e=r:(e=o,this.w.globals.animationEnded=!0);var T=C.config.stroke.dashArray,X=0;X=Array.isArray(T)?T[a]:C.config.stroke.dashArray;var I=this.drawPath({d:e,stroke:l,strokeWidth:h,fill:d,fillOpacity:1,classes:b,strokeLinecap:c,strokeDashArray:X});if(I.attr("id","".concat(m,"-").concat(i)),I.attr("index",a),y&&I.attr({"clip-path":"url(#gridRectMask".concat(C.globals.cuid,")")}),"none"!==C.config.states.normal.filter.type)L.getDefaultFilter(I,a);else if(C.config.chart.dropShadow.enabled&&S&&(!C.config.chart.dropShadow.enabledSeries||C.config.chart.dropShadow.enabledSeries&&-1!==C.config.chart.dropShadow.enabledSeries.indexOf(a))){var Y=C.config.chart.dropShadow;L.dropShadow(I,Y,a)}k&&(I.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,I)),I.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,I)),I.node.addEventListener("mousedown",this.pathMouseDown.bind(this,I))),I.attr({pathTo:o,pathFrom:r});var F={el:I,j:s,pathFrom:r,pathTo:o,strokeWidth:h};return!P||C.globals.resized||C.globals.dataChanged?!C.globals.resized&&C.globals.dataChanged||z.showDelayedElements():z.animatePathsGradually(n({},F,{speed:p,delay:f})),C.globals.dataChanged&&M&&E&&z.animatePathsGradually(n({},F,{speed:x})),I}},{key:"drawPattern",value:function(t,e,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#a8a8a8",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return this.w.globals.dom.Paper.pattern(e,i,function(n){"horizontalLines"===t?n.line(0,0,i,0).stroke({color:s,width:a+1}):"verticalLines"===t?n.line(0,0,0,e).stroke({color:s,width:a+1}):"slantedLines"===t?n.line(0,0,e,i).stroke({color:s,width:a}):"squares"===t?n.rect(e,i).fill("none").stroke({color:s,width:a}):"circles"===t&&n.circle(e).fill("none").stroke({color:s,width:a})})}},{key:"drawGradient",value:function(t,e,i,s,a){var n,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e=d.hexToRgba(e,s),i=d.hexToRgba(i,a);var u=0,g=1,f=1,p=null;null!==o&&(u=void 0!==o[0]?o[0]/100:0,g=void 0!==o[1]?o[1]/100:1,f=void 0!==o[2]?o[2]/100:1,p=void 0!==o[3]?o[3]/100:null);var x=!("donut"!==c.config.chart.type&&"pie"!==c.config.chart.type&&"bubble"!==c.config.chart.type);if(n=null===l||0===l.length?c.globals.dom.Paper.gradient(x?"radial":"linear",function(t){t.at(u,e,s),t.at(g,i,a),t.at(f,i,a),null!==p&&t.at(p,e,s)}):c.globals.dom.Paper.gradient(x?"radial":"linear",function(t){(Array.isArray(l[h])?l[h]:l).forEach(function(e){t.at(e.offset/100,e.color,e.opacity)})}),x){var b=c.globals.gridWidth/2,m=c.globals.gridHeight/2;"bubble"!==c.config.chart.type?n.attr({gradientUnits:"userSpaceOnUse",cx:b,cy:m,r:r}):n.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else"vertical"===t?n.from(0,0).to(0,1):"diagonal"===t?n.from(0,0).to(1,1):"horizontal"===t?n.from(0,1).to(1,1):"diagonal2"===t&&n.from(0,1).to(2,2);return n}},{key:"drawText",value:function(t){var e,i=this.w,s=t.x,a=t.y,n=t.text,r=t.textAnchor,o=t.fontSize,l=t.fontFamily,h=t.foreColor,c=t.opacity;return void 0===n&&(n=""),r||(r="start"),h||(h=i.config.chart.foreColor),l=l||i.config.chart.fontFamily,(e=Array.isArray(n)?i.globals.dom.Paper.text(function(t){for(var e=0;e-1){var o=i.globals.selectedDataPoints[a].indexOf(n);i.globals.selectedDataPoints[a].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(".apexcharts-series path").members,h=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members;l.forEach(function(t){t.node.setAttribute("selected","false"),s.getDefaultFilter(t,a)}),h.forEach(function(t){t.node.setAttribute("selected","false"),s.getDefaultFilter(t,a)})}t.node.setAttribute("selected","true"),r="true",void 0===i.globals.selectedDataPoints[a]&&(i.globals.selectedDataPoints[a]=[]),i.globals.selectedDataPoints[a].push(n)}if("true"===r){var c=i.config.states.active.filter;"none"!==c&&s.applyFilter(t,a,c.type,c.value)}else"none"!==i.config.states.active.filter.type&&s.getDefaultFilter(t,a);"function"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:a,dataPointIndex:n,w:i}),this.ctx.fireEvent("dataPointSelection",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:a,dataPointIndex:n,w:i}])}},{key:"rotateAroundCenter",value:function(t){var e=t.getBBox();return{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:"getTextRects",value:function(t,e,i,s){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],n=this.w,r=this.drawText({x:-200,y:-200,text:t,textAnchor:"start",fontSize:e,fontFamily:i,foreColor:"#fff",opacity:0});s&&r.attr("transform",s),n.globals.dom.Paper.add(r);var o=r.bbox();return a||(o=r.node.getBoundingClientRect()),r.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(t,e,i){if(t.textContent=e,e.length>0&&t.getSubStringLength(0,e.length)>=i){for(var s=e.length-3;s>0;s-=3)if(t.getSubStringLength(0,s)<=i)return void(t.textContent=e.substring(0,s)+"...");t.textContent="..."}}}],[{key:"setAttrs",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}();var p={name:"en",options:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},x=function(){function t(){e(this,t),this.yAxis={show:!0,showAlways:!1,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#78909C",offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#78909C",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.xAxisAnnotation={x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.yAxisAnnotation={y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",opacity:.3,offsetX:0,offsetY:0,yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:0,bottom:2}}}},this.pointAnnotation={x:0,y:null,yAxisIndex:0,seriesIndex:0,marker:{size:0,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,radius:2,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"middle",offsetX:0,offsetY:-15,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:0,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0}}}return s(t,[{key:"init",value:function(){return{annotations:{position:"front",yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"transparent",locales:[p],defaultLocale:"en",dropShadow:{enabled:!1,enabledSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,zoomed:void 0,scrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!1,target:void 0},stacked:!1,stackType:"normal",toolbar:{show:!0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,endingShape:"flat",colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1},dataLabels:{maxItems:100,hideOverflowingLabels:!0,position:"top"}},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!0,distributed:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{size:void 0,inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,color:void 0,offsetY:0},value:{show:!0,fontSize:"14px",fontFamily:void 0,color:void 0,offsetY:16,formatter:function(t){return t+"%"}},total:{show:!1,label:"Total",color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce(function(t,e){return t+e},0)/t.globals.series.length+"%"}}}},rangeBar:{},pie:{size:void 0,customScale:1,offsetX:0,offsetY:0,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,color:void 0,offsetY:-10},value:{show:!0,fontSize:"20px",fontFamily:void 0,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,label:"Total",color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce(function(t,e){return t+e},0)}}}}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return t},textAnchor:"middle",offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,colors:void 0},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"sqaures",width:6,height:6,strokeWidth:2}},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1,animate:!1}},yaxis:{lines:{show:!0,animate:!1}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",fontSize:"12px",fontFamily:void 0,width:void 0,height:void 0,formatter:void 0,offsetX:-20,offsetY:0,labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,strokeColor:"#fff",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:0,vertical:5},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,fillOpacity:1,shape:"circle",radius:2,offsetX:0,offsetY:0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.15}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.65}}},title:{text:void 0,align:"left",margin:10,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:10,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],offsetX:0,offsetY:0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!0,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss"}},axisBorder:{show:!0,color:"#78909C",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#78909C",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:"light",palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),t}(),b=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.graphics=new f(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return s(t,[{key:"drawAnnotations",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.drawYAxisAnnotations(),i=this.drawXAxisAnnotations(),s=this.drawPointAnnotations(),a=t.config.chart.animations.enabled,n=[e,i,s],r=[i.node,e.node,s.node],o=0;o<3;o++)t.globals.dom.elGraphical.add(n[o]),!a||t.globals.resized||t.globals.dataChanged||r[o].classList.add("hidden"),t.globals.delayedElements.push({el:r[o],index:0});this.annotationsBackground()}}},{key:"addXaxisAnnotation",value:function(t,e,i){var s=this.w,a=this.invertAxis?s.globals.minY:s.globals.minX,n=this.invertAxis?s.globals.yRange[0]:s.globals.xRange,r=(t.x-a)/(n/s.globals.gridWidth),o=t.label.text;if("category"===s.config.xaxis.type||s.config.xaxis.convertedCatToNumeric){var l=s.globals.labels.indexOf(t.x),h=s.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(l+1)+")");h&&(r=parseFloat(h.getAttribute("x")))}var c=t.strokeDashArray;if(!(r<0||r>s.globals.gridWidth)){if(null===t.x2){var d=this.graphics.drawLine(r+t.offsetX,0+t.offsetY,r+t.offsetX,s.globals.gridHeight+t.offsetY,t.borderColor,c);e.appendChild(d.node)}else{var u=(t.x2-a)/(n/s.globals.gridWidth);if(us){var g=s;s=a,a=g}if(h){var f=this.graphics.drawRect(0+t.offsetX,a+t.offsetY,n.globals.gridWidth+t.offsetX,s-a,0,t.fillColor,t.opacity,1,t.borderColor,r);e.appendChild(f.node)}}var p="right"===t.label.position?n.globals.gridWidth:0,x=this.graphics.drawText({x:p+t.label.offsetX,y:(a||s)+t.label.offsetY-3,text:h,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,foreColor:t.label.style.color,cssClass:"apexcharts-yaxis-annotation-label "+t.label.style.cssClass});x.attr({rel:i}),e.appendChild(x.node)}},{key:"drawYAxisAnnotations",value:function(){var t=this,e=this.w,i=this.graphics.group({class:"apexcharts-yaxis-annotations"});return e.config.annotations.yaxis.map(function(e,s){t.addYaxisAnnotation(e,i.node,s)}),i}},{key:"clearAnnotations",value:function(t){var e=t.w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations");(e=d.listToArray(e)).forEach(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)})}},{key:"addPointAnnotation",value:function(t,e,i){var s=this.w,a=0,n=0,r=0;if(this.invertAxis&&console.warn("Point annotation is not supported in horizontal bar charts."),"string"==typeof t.x){var o=s.globals.labels.indexOf(t.x),l=s.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(o+1)+")");a=parseFloat(l.getAttribute("x"));var h=t.y;null===t.y&&(h=s.globals.series[t.seriesIndex][o]),n=s.globals.gridHeight-(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=s.globals.gridHeight-(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight),s.config.yaxis[t.yAxisIndex]&&s.config.yaxis[t.yAxisIndex].reversed&&(n=(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)+parseInt(t.label.style.fontSize)+t.marker.size,r=(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight))}else a=(t.x-s.globals.minX)/(s.globals.xRange/s.globals.gridWidth),n=s.globals.gridHeight-(parseFloat(t.y)-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=s.globals.gridHeight-(t.y-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight),s.config.yaxis[t.yAxisIndex]&&s.config.yaxis[t.yAxisIndex].reversed&&(n=(parseFloat(t.y)-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=(t.y-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight));if(!(a<0||a>s.globals.gridWidth)){var c={pSize:t.marker.size,pWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,radius:t.marker.radius,class:"apexcharts-point-annotation-marker "+t.marker.cssClass},d=this.graphics.drawMarker(a+t.marker.offsetX,r+t.marker.offsetY,c);e.appendChild(d.node);var u=t.label.text?t.label.text:"",g=this.graphics.drawText({x:a+t.label.offsetX,y:n+t.label.offsetY,text:u,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,foreColor:t.label.style.color,cssClass:"apexcharts-point-annotation-label "+t.label.style.cssClass});if(g.attr({rel:i}),e.appendChild(g.node),t.customSVG.SVG){var f=this.graphics.group({class:"apexcharts-point-annotations-custom-svg "+t.customSVG.cssClass});f.attr({transform:"translate(".concat(a+t.customSVG.offsetX,", ").concat(n+t.customSVG.offsetY,")")}),f.node.innerHTML=t.customSVG.SVG,e.appendChild(f.node)}}}},{key:"drawPointAnnotations",value:function(){var t=this,e=this.w,i=this.graphics.group({class:"apexcharts-point-annotations"});return e.config.annotations.points.map(function(e,s){t.addPointAnnotation(e,i.node,s)}),i}},{key:"setOrientations",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if("vertical"===t.label.orientation){var s=null!==e?e:0,a=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(s,"']"));if(null!==a){var n=a.getBoundingClientRect();a.setAttribute("x",parseFloat(a.getAttribute("x"))-n.height+4),"top"===t.label.position?a.setAttribute("y",parseFloat(a.getAttribute("y"))+n.width):a.setAttribute("y",parseFloat(a.getAttribute("y"))-n.width);var r=this.graphics.rotateAroundCenter(a),o=r.x,l=r.y;a.setAttribute("transform","rotate(-90 ".concat(o," ").concat(l,")"))}}}},{key:"addBackgroundToAnno",value:function(t,e){var i=this.w;if(!e.label.text)return null;var s=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),a=t.getBoundingClientRect(),n=e.label.style.padding.left,r=e.label.style.padding.right,o=e.label.style.padding.top,l=e.label.style.padding.bottom;"vertical"===e.label.orientation&&(o=e.label.style.padding.left,l=e.label.style.padding.right,n=e.label.style.padding.top,r=e.label.style.padding.bottom);var h=a.left-s.left-n,c=a.top-s.top-o;return this.graphics.drawRect(h,c,a.width+n+r,a.height+o+l,0,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0)}},{key:"annotationsBackground",value:function(){var t=this,e=this.w,i=function(i,s,a){var n=e.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations .apexcharts-").concat(a,"-annotation-label[rel='").concat(s,"']"));if(n){var r=n.parentNode,o=t.addBackgroundToAnno(n,i);o&&r.insertBefore(o.node,n)}};e.config.annotations.xaxis.map(function(t,e){i(t,e,"xaxis")}),e.config.annotations.yaxis.map(function(t,e){i(t,e,"yaxis")}),e.config.annotations.points.map(function(t,e){i(t,e,"point")})}},{key:"addText",value:function(t,e,i){var s=t.x,a=t.y,n=t.text,r=t.textAnchor,o=t.appendTo,l=void 0===o?".apexcharts-inner":o,h=t.foreColor,c=t.fontSize,d=t.fontFamily,u=t.cssClass,g=t.backgroundColor,f=t.borderWidth,p=t.strokeDashArray,x=t.radius,b=t.borderColor,m=t.paddingLeft,v=void 0===m?4:m,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=i,z=L.w,P=z.globals.dom.baseEl.querySelector(l),M=this.graphics.drawText({x:s,y:a,text:n,textAnchor:r||"start",fontSize:c||"12px",fontFamily:d||z.config.chart.fontFamily,foreColor:h||z.config.chart.foreColor,cssClass:u});P.appendChild(M.node);var E=M.bbox();if(n){var T=this.graphics.drawRect(E.x-v,E.y-C,E.width+v+w,E.height+A+C,x,g,1,f,b,p);M.before(T)}return e&&z.globals.memory.methodsToExec.push({context:L,method:L.addText,params:{x:s,y:a,text:n,textAnchor:r,appendTo:l,foreColor:h,fontSize:c,cssClass:u,backgroundColor:g,borderWidth:f,strokeDashArray:p,radius:x,borderColor:b,paddingLeft:v,paddingRight:w,paddingBottom:A,paddingTop:C}}),i}},{key:"addPointAnnotationExternal",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addXaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addAnnotationExternal",value:function(t){var e=t.params,i=t.pushToMemory,s=t.context,a=t.type,n=t.contextMethod,r=s,o=r.w,l=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations")),h=l.childNodes.length+1,c=new x,u=Object.assign({},"xaxis"===a?c.xAxisAnnotation:"yaxis"===a?c.yAxisAnnotation:c.pointAnnotation),g=d.extend(u,e);switch(a){case"xaxis":this.addXaxisAnnotation(g,l,h);break;case"yaxis":this.addYaxisAnnotation(g,l,h);break;case"point":this.addPointAnnotation(g,l,h)}var f=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations .apexcharts-").concat(a,"-annotation-label[rel='").concat(h,"']")),p=this.addBackgroundToAnno(f,g);return p&&l.insertBefore(p.node,f),i&&o.globals.memory.methodsToExec.push({context:r,method:n,params:e}),s}}]),t}(),m=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return s(t,[{key:"isValidDate",value:function(t){return!isNaN(this.parseDate(t))}},{key:"getUTCTimeStamp",value:function(t){return Date.parse(t)?new Date(new Date(t).toISOString().substr(0,25)).getTime():t}},{key:"parseDate",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getUTCTimeStamp(t);var i=Date.parse(t.replace(/-/g,"/").replace(/[a-z]+/gi," "));return i=this.getUTCTimeStamp(i)}},{key:"treatAsUtc",value:function(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}},{key:"formatDate",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=this.w.globals.locale,n=["\0"].concat(c(a.months)),r=["\x01"].concat(c(a.shortMonths)),o=["\x02"].concat(c(a.days)),l=["\x03"].concat(c(a.shortDays));function h(t,e){var i=t+"";for(e=e||2;i.length12?f-12:0===f?12:f;e=(e=(e=(e=e.replace(/(^|[^\\])HH+/g,"$1"+h(f))).replace(/(^|[^\\])H/g,"$1"+f)).replace(/(^|[^\\])hh+/g,"$1"+h(p))).replace(/(^|[^\\])h/g,"$1"+p);var x=i?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\])mm+/g,"$1"+h(x))).replace(/(^|[^\\])m/g,"$1"+x);var b=i?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\])ss+/g,"$1"+h(b))).replace(/(^|[^\\])s/g,"$1"+b);var m=i?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\])fff+/g,"$1"+h(m,3)),m=Math.round(m/10),e=e.replace(/(^|[^\\])ff/g,"$1"+h(m)),m=Math.round(m/10);var v=f<12?"AM":"PM";e=(e=(e=e.replace(/(^|[^\\])f/g,"$1"+m)).replace(/(^|[^\\])TT+/g,"$1"+v)).replace(/(^|[^\\])T/g,"$1"+v.charAt(0));var y=v.toLowerCase();e=(e=e.replace(/(^|[^\\])tt+/g,"$1"+y)).replace(/(^|[^\\])t/g,"$1"+y.charAt(0));var w=-t.getTimezoneOffset(),k=i||!w?"Z":w>0?"+":"-";if(!i){var A=(w=Math.abs(w))%60;k+=h(Math.floor(w/60))+":"+h(A)}e=e.replace(/(^|[^\\])K/g,"$1"+k);var S=(i?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(o[0],"g"),o[S])).replace(new RegExp(l[0],"g"),l[S])).replace(new RegExp(n[0],"g"),n[u])).replace(new RegExp(r[0],"g"),r[u])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(t,e){var i=this.w;void 0!==i.config.xaxis.min&&(t=i.config.xaxis.min),void 0!==i.config.xaxis.max&&(e=i.config.xaxis.max);var s=new Date(t).getFullYear(),a=new Date(e).getFullYear(),n=new Date(t).getMonth(),r=new Date(e).getMonth(),o=new Date(t).getDate(),l=new Date(e).getDate(),h=new Date(t).getHours(),c=new Date(e).getHours();return{minMinute:new Date(t).getMinutes(),maxMinute:new Date(e).getMinutes(),minHour:h,maxHour:c,minDate:o,maxDate:l,minMonth:n,maxMonth:r,minYear:s,maxYear:a}}},{key:"isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"calculcateLastDaysOfMonth",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:"determineDaysOfYear",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:"determineRemainingDaysOfYear",value:function(t,e,i){var s=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&s++,s}},{key:"determineDaysOfMonths",value:function(t,e){var i=30;switch(t=d.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),v=function(){function t(i){e(this,t),this.opts=i}return s(t,[{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(t){this.opts.yaxis[0].labels.show=!1,this.opts.yaxis[0].floating=!0;return d.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]}},stroke:{width:0},fill:{opacity:.85},legend:{markers:{shape:"square",radius:2,size:8}},tooltip:{shared:!1},xaxis:{tooltip:{enabled:!1},crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"candlestick",value:function(){return{stroke:{width:1,colors:["#333"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var e=t.seriesIndex,i=t.dataPointIndex,s=t.w;return'
Open: '+s.globals.seriesCandleO[e][i]+'
High: '+s.globals.seriesCandleH[e][i]+'
Low: '+s.globals.seriesCandleL[e][i]+'
Close: '+s.globals.seriesCandleC[e][i]+"
"}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{stroke:{width:0},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,s=e.dataPointIndex,a=e.w,n=a.globals.seriesRangeStart[i][s];return a.globals.seriesRangeEnd[i][s]-n},style:{colors:["#fff"]}},tooltip:{shared:!1,followCursor:!0,custom:function(t){var e=t.ctx,i=t.seriesIndex,s=t.dataPointIndex,a=t.w,n=a.globals.seriesRangeStart[i][s],r=a.globals.seriesRangeEnd[i][s],o="",l="",h=a.globals.colors[i];if(void 0===a.config.tooltip.x.formatter)if("datetime"===a.config.xaxis.type){var c=new m(e);o=c.formatDate(new Date(n),a.config.tooltip.x.format,!0,!0),l=c.formatDate(new Date(r),a.config.tooltip.x.format,!0,!0)}else o=n,l=r;else o=a.config.tooltip.x.formatter(n),l=a.config.tooltip.x.formatter(r);var d=a.globals.labels[s];return'
'+(a.config.series[i].name?a.config.series[i].name:"")+'
'+d+': '+o+' - '+l+"
"}},xaxis:{tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"area",value:function(){return{stroke:{width:4},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"brush",value:function(t){return d.extend(t,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(){var t=this;this.opts.dataLabels=this.opts.dataLabels||{},this.opts.dataLabels.formatter=this.opts.dataLabels.formatter||void 0;var e=this.opts.dataLabels.formatter;this.opts.yaxis.forEach(function(e,i){t.opts.yaxis[i].min=0,t.opts.yaxis[i].max=100}),"bar"===this.opts.chart.type&&(this.opts.dataLabels.formatter=e||function(t){return"number"==typeof t&&t?t.toFixed(0)+"%":t})}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:2,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1,zoom:{enabled:!1}},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"dark",shadeIntensity:.35,inverseColors:!1,stops:[0,100,100]}},padding:{right:0,left:0},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"vertical",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},padding:{right:0,left:0},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.style.fontSize="13px",this.opts.yaxis[0].labels.offsetY=6,{dataLabels:{enabled:!0,style:{colors:["#a8a8a8"],fontSize:"11px"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},padding:{right:0,left:0},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}}],[{key:"convertCatToNumeric",value:function(t){t.xaxis.type="numeric",t.xaxis.convertedCatToNumeric=!0,t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return t},t.chart=t.chart||{},t.chart.zoom=t.chart.zoom||window.Apex.chart&&window.Apex.chart.zoom||{};var e=t.xaxis.labels.formatter,i=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(t.xaxis.labels.formatter=function(t){return e(i[t-1])}),t.xaxis.categories=[],t.labels=[],t.chart.zoom.enabled=t.chart.zoom.enabled||!1,t}}]),t}(),y=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getStackedSeriesTotals",value:function(){for(var t=this.w,e=[],i=0;i0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce(function(t,e){return t+e},0):this.w.globals.series[t].reduce(function(t,e){return t+e},0)}},{key:"isSeriesNull",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter(function(t){return null!==t}):this.w.globals.series[t].filter(function(t){return null!==t})).length}},{key:"seriesHaveSameValues",value:function(t){return this.w.globals.series[t].every(function(t,e,i){return t===i[0]})}},{key:"getLargestSeries",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map(function(t){return t.length}).indexOf(Math.max.apply(Math,t.globals.series.map(function(t){return t.length})))}},{key:"getLargestMarkerSize",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach(function(t){e=Math.max(e,t)}),t.globals.markers.largestSize=e,e}},{key:"getSeriesTotals",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map(function(t,e){var i=0;if(Array.isArray(t))for(var s=0;st&&i.globals.seriesX[a][r]1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return"bar"!==e.chart.type&&"rangeBar"!==e.chart.type||e.tooltip.shared&&("barWidth"===e.xaxis.crosshairs.width&&e.series.length>1&&(console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'),e.xaxis.crosshairs.width="tickWidth"),e.plotOptions.bar.horizontal&&(e.states.hover.type="none",e.tooltip.shared=!1),e.tooltip.followCursor||(console.warn("followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true","color: blue;"),e.tooltip.followCursor=!0)),"candlestick"===e.chart.type&&e.yaxis[0].reversed&&(console.warn("Reversed y-axis in candlestick chart is not supported."),e.yaxis[0].reversed=!1),e.chart.group&&0===e.yaxis[0].labels.minWidth&&console.warn("It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour."),Array.isArray(e.stroke.width)&&"line"!==e.chart.type&&"area"!==e.chart.type&&(console.warn("stroke.width option accepts array only for line and area charts. Reverted back to Number"),e.stroke.width=e.stroke.width[0]),e}}]),i}(),k=function(){function t(){e(this,t)}return s(t,[{key:"globalVars",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,initialConfig:null,lastXAxis:[],lastYAxis:[],series:[],seriesRangeStart:[],seriesRangeEnd:[],seriesPercent:[],seriesTotals:[],stackedSeriesTotals:[],seriesX:[],seriesZ:[],labels:[],timelineLabels:[],invertedTimelineLabels:[],seriesNames:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,selectedDataPoints:[],ignoreYAxisIndexes:[],padHorizontal:0,maxValsInArrayIndex:0,zoomEnabled:"zoom"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:"pan"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:"selection"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,minY:Number.MIN_VALUE,maxY:-Number.MAX_VALUE,minYArr:[],maxYArr:[],maxX:-Number.MAX_VALUE,initialmaxX:-Number.MAX_VALUE,minX:Number.MIN_VALUE,initialminX:Number.MIN_VALUE,minZ:Number.MIN_VALUE,maxZ:-Number.MAX_VALUE,minXDiff:Number.MAX_VALUE,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yRange:[],zRange:0,xRange:0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,delayedElements:[],axisCharts:!0,isXNumeric:!1,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,comboChartsHasBars:!1,dataChanged:!1,previousPaths:[],seriesXvalues:[],seriesYvalues:[],seriesCandleO:[],seriesCandleH:[],seriesCandleL:[],seriesCandleC:[],allSeriesHasEqualX:!0,dataPoints:0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,yAxisScale:[],xAxisScale:null,xAxisTicksPositions:[],timescaleTicks:[],rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yLabelsCoords:[],yTitleCoords:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null,tooltipOpts:null}}},{key:"init",value:function(t){var e=this.globalVars(t);return e.initialConfig=d.extend({},t),e.initialSeries=JSON.parse(JSON.stringify(e.initialConfig.series)),e.lastXAxis=JSON.parse(JSON.stringify(e.initialConfig.xaxis)),e.lastYAxis=JSON.parse(JSON.stringify(e.initialConfig.yaxis)),e}}]),t}(),A=function(){function t(i){e(this,t),this.opts=i}return s(t,[{key:"init",value:function(){var t=new w(this.opts).init();return{config:t,globals:(new k).init(t)}}}]),t}(),S=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.opts=null,this.seriesIndex=0}return s(t,[{key:"clippedImgArea",value:function(t){var e=this.w,i=e.config,s=parseInt(e.globals.gridWidth),a=parseInt(e.globals.gridHeight),n=s>a?s:a,r=t.image,o=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(o=i.fill.image.width+1,l=i.fill.image.height):(o=n+1,l=n):(o=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,"pattern");f.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:"userSpaceOnUse",width:o+"px",height:l+"px"});var c=document.createElementNS(e.globals.SVGNS,"image");h.appendChild(c),c.setAttributeNS("http://www.w3.org/1999/xlink","href",r),f.setAttrs(c,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:l+"px"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:"getSeriesIndex",value:function(t){var e=this.w;return"bar"===e.config.chart.type&&e.config.plotOptions.bar.distributed||"heatmap"===e.config.chart.type?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(t){var e=this.w;this.opts=t;var i,s,a,n=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var r=this.getFillColors(),o=r[this.seriesIndex];"function"==typeof o&&(o=o({seriesIndex:this.seriesIndex,value:t.value,w:e}));var l=this.getFillType(this.seriesIndex),h=Array.isArray(n.fill.opacity)?n.fill.opacity[this.seriesIndex]:n.fill.opacity,c=o;return t.color&&(o=t.color),-1===o.indexOf("rgb")?c=d.hexToRgba(o,h):o.indexOf("rgba")>-1&&(h="0."+d.getOpacityFromRGBA(r[this.seriesIndex])),"pattern"===l&&(s=this.handlePatternFill(s,o,h,c)),"gradient"===l&&(a=this.handleGradientFill(a,o,h,this.seriesIndex)),n.fill.image.src.length>0&&"image"===l?t.seriesNumber0){if(t.globals.markers.size.length0&&(l=h.group({class:"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),o.x instanceof Array)for(var c=function(t){var c=i;1===i&&0===t&&(c=0),1===i&&1===t&&(c=1);var g="apexcharts-marker";if("line"!==n.config.chart.type&&"area"!==n.config.chart.type||n.globals.comboCharts||n.config.tooltip.intersect||(g+=" no-pointer-events"),Array.isArray(n.config.markers.size)?n.globals.markers.size[e]>0:n.config.markers.size>0){d.isNumber(o.y[t])?g+=" w".concat((Math.random()+1).toString(36).substring(4)):g="apexcharts-nullpoint";var f=a.getMarkerConfig(g,e);n.config.markers.discrete.map(function(t){t.seriesIndex===e&&t.dataPointIndex===c&&(f.pointStrokeColor=t.strokeColor,f.pointFillColor=t.fillColor,f.pSize=t.size)}),n.config.series[r].data[i]&&(n.config.series[r].data[i].fillColor&&(f.pointFillColor=n.config.series[r].data[i].fillColor),n.config.series[r].data[i].strokeColor&&(f.pointStrokeColor=n.config.series[r].data[i].strokeColor)),(s=h.drawMarker(o.x[t],o.y[t],f)).attr("rel",c),s.attr("j",c),s.attr("index",e),s.node.setAttribute("default-marker-size",f.pSize),new u(a.ctx).setSelectionFilter(s,e,c),a.addEvents(s),l&&l.add(s)}else void 0===n.globals.pointsArray[e]&&(n.globals.pointsArray[e]=[]),n.globals.pointsArray[e].push([o.x[t],o.y[t]])},g=0;gp.x+p.width+2||e>p.y+p.height+2||t+c4&&void 0!==arguments[4]?arguments[4]:"top",a=this.w,n=new f(this.ctx),r=a.config.dataLabels,o=0,l=0,h=i,c=null;if(!r.enabled||t.x instanceof Array!=!0)return c;(c=n.group({class:"apexcharts-data-labels"})).attr("clip-path","url(#gridRectMarkerMask".concat(a.globals.cuid,")"));for(var d=0;d-1)){var p={x:s,y:a,drawnextLabel:!0};if(g&&(p=this.dataLabelsCorrection(s,a,o,n,r,d,parseInt(c.style.fontSize))),e.globals.zoomed||(s=p.x,a=p.y),p.drawnextLabel){var x=i.drawText({width:100,height:parseInt(c.style.fontSize),x:s,y:a,foreColor:e.globals.dataLabels.style.colors[n],textAnchor:l||c.textAnchor,text:o,fontSize:c.style.fontSize,fontFamily:c.style.fontFamily});if(x.attr({class:"apexcharts-datalabel",cx:s,cy:a}),c.dropShadow.enabled){var b=c.dropShadow;new u(this.ctx).dropShadow(x,b)}h.add(x),void 0===e.globals.lastDrawnDataLabelsIndexes[n]&&(e.globals.lastDrawnDataLabelsIndexes[n]=[]),e.globals.lastDrawnDataLabelsIndexes[n].push(r)}}}}]),t}(),P=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w;var a=this.w;this.barOptions=a.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=a.config.stroke.width,this.isNullValue=!1,this.xyRatios=s,null!==this.xyRatios&&(this.xRatio=s.xRatio,this.yRatio=s.yRatio,this.invertedXRatio=s.invertedXRatio,this.invertedYRatio=s.invertedYRatio,this.baseLineY=s.baseLineY,this.baseLineInvertedY=s.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0}return s(t,[{key:"draw",value:function(t,e){var i=this.w,s=new f(this.ctx),a=new y(this.ctx,i);t=a.getLogSeries(t),this.series=t,this.yRatio=a.getLogYRatios(this.yRatio),this.initVariables(t);var n=s.group({class:"apexcharts-bar-series apexcharts-plot-series"});i.config.dataLabels.enabled&&this.totalItems>i.config.plotOptions.bar.dataLabels.maxItems&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.");for(var r=0,o=0;r0&&(this.visibleI=this.visibleI+1);var A=0,S=0,C=0;this.yRatio.length>1&&(this.yaxisIndex=w),this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var L=this.initialPositions();b=L.y,S=L.barHeight,h=L.yDivision,u=L.zeroW,x=L.x,C=L.barWidth,l=L.xDivision,c=L.zeroH,this.horizontal||v.push(x+C/2);for(var z=s.group({class:"apexcharts-datalabels"}),P=0,M=i.globals.dataPoints;P0&&v.push(x+C/2),m.push(b);var T=this.getPathFillColor(t,r,P,w);k=this.renderSeries({realIndex:w,pathFill:T,j:P,i:r,pathFrom:p,pathTo:g,strokeWidth:A,elSeries:k,x:x,y:b,series:t,barHeight:S,barWidth:C,elDataLabelsWrap:z,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[w]=v,i.globals.seriesYvalues[w]=m,n.add(k)}return n}},{key:"getPathFillColor",value:function(t,e,i,s){var a=this.w,n=new S(this.ctx),r=null,o=this.barOptions.distributed?i:e;this.barOptions.colors.ranges.length>0&&this.barOptions.colors.ranges.map(function(s){t[e][i]>=s.from&&t[e][i]<=s.to&&(r=s.color)});return a.config.series[e].data[i]&&a.config.series[e].data[i].fillColor&&(r=a.config.series[e].data[i].fillColor),n.fillPath({seriesNumber:this.barOptions.distributed?o:s,color:r,value:t[e][i]})}},{key:"renderSeries",value:function(t){var e=t.realIndex,i=t.pathFill,s=t.lineFill,a=t.j,n=t.i,r=t.pathFrom,o=t.pathTo,l=t.strokeWidth,h=t.elSeries,c=t.x,d=t.y,g=t.series,p=t.barHeight,x=t.barWidth,b=t.elDataLabelsWrap,m=t.visibleSeries,v=t.type,y=this.w,w=new f(this.ctx);s||(s=this.barOptions.distributed?y.globals.stroke.colors[a]:y.globals.stroke.colors[e]),y.config.series[n].data[a]&&y.config.series[n].data[a].strokeColor&&(s=y.config.series[n].data[a].strokeColor),this.isNullValue&&(i="none");var k=a/y.config.chart.animations.animateGradually.delay*(y.config.chart.animations.speed/y.globals.dataPoints)/2.4,A=w.renderPaths({i:n,j:a,realIndex:e,pathFrom:r,pathTo:o,stroke:s,strokeWidth:l,strokeLineCap:y.config.stroke.lineCap,fill:i,animationDelay:k,initialSpeed:y.config.chart.animations.speed,dataChangeSpeed:y.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(v,"-area"),id:"apexcharts-".concat(v,"-area")});A.attr("clip-path","url(#gridRectMask".concat(y.globals.cuid,")")),new u(this.ctx).setSelectionFilter(A,e,a),h.add(A);var S=this.calculateDataLabelsPos({x:c,y:d,i:n,j:a,series:g,realIndex:e,barHeight:p,barWidth:x,renderedPath:A,visibleSeries:m});return null!==S&&b.add(S),h.add(b),h}},{key:"initVariables",value:function(t){var e=this.w;this.series=t,this.totalItems=0,this.seriesLen=0,this.visibleI=-1,this.visibleItems=1;for(var i=0;i0&&(this.seriesLen=this.seriesLen+1,this.totalItems+=t[i].length),e.globals.isXNumeric)for(var s=0;se.globals.minX&&e.globals.seriesX[i][s]0&&(n=this.getPathFrom(x,p));var v={barHeight:i,strokeWidth:s,barYPosition:m,x:o=void 0===this.series[g][p]||null===this.series[g][p]?r:r+this.series[g][p]/this.invertedYRatio-2*(this.isReversed?this.series[g][p]/this.invertedYRatio:0),zeroW:r},y=this.barEndingShape(d,v,this.series,g,p);if(a=a+u.line(y.newX,m)+y.path+u.line(r,m+i-s)+u.line(r,m),n=n+u.line(r,m)+y.ending_p_from+u.line(r,m+i-s)+u.line(r,m+i-s)+u.line(r,m),d.globals.isXNumeric||(l+=h),this.barOptions.colors.backgroundBarColors.length>0&&0===g){b>=this.barOptions.colors.backgroundBarColors.length&&(b=0);var w=this.barOptions.colors.backgroundBarColors[b],k=u.drawRect(0,m-i*this.visibleI,d.globals.gridWidth,i*this.seriesLen,0,w,this.barOptions.colors.backgroundBarOpacity);c.add(k),k.node.classList.add("apexcharts-backgroundBar")}return{pathTo:a,pathFrom:n,x:o,y:l,barYPosition:m}}},{key:"drawColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=t.y,a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=t.strokeWidth,c=t.elSeries,d=this.w,u=new f(this.ctx),g=e.i,p=e.j,x=e.realIndex,b=e.bc;d.globals.isXNumeric&&(i=(d.globals.seriesX[g][p]-d.globals.minX)/this.xRatio-o/2);var m=i+o*this.visibleI;n=u.move(m,l),r=u.move(m,l),d.globals.previousPaths.length>0&&(r=this.getPathFrom(x,p));var v={barWidth:o,strokeWidth:h,barXPosition:m,y:s=void 0===this.series[g][p]||null===this.series[g][p]?l:l-this.series[g][p]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[g][p]/this.yRatio[this.yaxisIndex]:0),zeroH:l},y=this.barEndingShape(d,v,this.series,g,p);if(n=n+u.line(m,y.newY)+y.path+u.line(m+o-h,l)+u.line(m-h/2,l),r=r+u.line(m,l)+y.ending_p_from+u.line(m+o-h,l)+u.line(m+o-h,l)+u.line(m-h/2,l),d.globals.isXNumeric||(i+=a),this.barOptions.colors.backgroundBarColors.length>0&&0===g){b>=this.barOptions.colors.backgroundBarColors.length&&(b=0);var w=this.barOptions.colors.backgroundBarColors[b],k=u.drawRect(m-o*this.visibleI,0,o*this.seriesLen,d.globals.gridHeight,0,w,this.barOptions.colors.backgroundBarOpacity);c.add(k),k.node.classList.add("apexcharts-backgroundBar")}return{pathTo:n,pathFrom:r,x:i,y:s,barXPosition:m}}},{key:"getPathFrom",value:function(t,e){for(var i,s=this.w,a=0;a0&&parseInt(n.realIndex)===parseInt(t)&&void 0!==s.globals.previousPaths[a].paths[e]&&(i=s.globals.previousPaths[a].paths[e].d)}return i}},{key:"calculateDataLabelsPos",value:function(t){var e=t.x,i=t.y,s=t.i,a=t.j,n=t.realIndex,r=t.series,o=t.barHeight,l=t.barWidth,h=t.visibleSeries,c=t.renderedPath,d=this.w,u=new f(this.ctx),g=Array.isArray(this.strokeWidth)?this.strokeWidth[n]:this.strokeWidth,p=e+parseFloat(l*h),x=i+parseFloat(o*h);d.globals.isXNumeric&&!d.globals.isBarHorizontal&&(p=e+parseFloat(l*(h+1))-g,x=i+parseFloat(o*(h+1))-g);var b=e,m=i,v={},y=d.config.dataLabels,w=this.barOptions.dataLabels,k=y.offsetX,A=y.offsetY,S={width:0,height:0};return d.config.dataLabels.enabled&&(S=u.getTextRects(d.globals.yLabelFormatters[0](d.globals.maxY),parseInt(y.style.fontSize))),v=this.isHorizontal?this.calculateBarsDataLabelsPosition({x:e,y:i,i:s,j:a,renderedPath:c,bcy:x,barHeight:o,barWidth:l,textRects:S,strokeWidth:g,dataLabelsX:b,dataLabelsY:m,barDataLabelsConfig:w,offX:k,offY:A}):this.calculateColumnsDataLabelsPosition({x:e,y:i,i:s,j:a,renderedPath:c,realIndex:n,bcx:p,bcy:x,barHeight:o,barWidth:l,textRects:S,strokeWidth:g,dataLabelsY:m,barDataLabelsConfig:w,offX:k,offY:A}),c.attr({cy:v.bcy,cx:v.bcx,j:a,val:r[s][a],barHeight:o,barWidth:l}),this.drawCalculatedDataLabels({x:v.dataLabelsX,y:v.dataLabelsY,val:r[s][a],i:n,j:a,barWidth:l,barHeight:o,textRects:S,dataLabelsConfig:y})}},{key:"calculateColumnsDataLabelsPosition",value:function(t){var e,i=this.w,s=t.i,a=t.j,n=t.y,r=t.bcx,o=t.barWidth,l=t.barHeight,h=t.textRects,c=t.dataLabelsY,d=t.barDataLabelsConfig,u=t.strokeWidth,g=t.offX,f=t.offY,p=i.globals.gridWidth/i.globals.dataPoints;r-=u/2,e=i.globals.isXNumeric?r-o/2+g:r-p+o/2+g;var x=this.series[s][a]<=0;switch(this.isReversed&&(n-=l),d.position){case"center":c=x?n+l/2+h.height/2+f:n+l/2+h.height/2-f;break;case"bottom":c=x?n+l+h.height+u+f:n+l-h.height/2+u-f;break;case"top":c=x?n-h.height/2-f:n+h.height+f}return i.config.chart.stacked||(c<0?c=0+u:c+h.height/3>i.globals.gridHeight&&(c=i.globals.gridHeight-u)),{bcx:r,bcy:n,dataLabelsX:e,dataLabelsY:c}}},{key:"calculateBarsDataLabelsPosition",value:function(t){var e=this.w,i=t.x,s=t.i,a=t.j,n=t.bcy,r=t.barHeight,o=t.barWidth,l=t.textRects,h=t.dataLabelsX,c=t.strokeWidth,d=t.barDataLabelsConfig,u=t.offX,g=t.offY,f=n-e.globals.gridHeight/e.globals.dataPoints+r/2+l.height/2+g-3,p=this.series[s][a]<=0;switch(this.isReversed&&(i+=o),d.position){case"center":h=p?i-o/2-u:i-o/2+u;break;case"bottom":h=p?i-o-c-Math.round(l.width/2)-u:i-o+c+Math.round(l.width/2)+u;break;case"top":h=p?i-c+Math.round(l.width/2)-u:i-c-Math.round(l.width/2)+u}return e.config.chart.stacked||(h<0?h=h+l.width+c:h+l.width/2>e.globals.gridWidth&&(h=e.globals.gridWidth-l.width-c)),{bcx:i,bcy:n,dataLabelsX:h,dataLabelsY:f}}},{key:"drawCalculatedDataLabels",value:function(t){var e=t.x,i=t.y,s=t.val,a=t.i,n=t.j,r=t.textRects,o=t.barHeight,l=t.barWidth,h=t.dataLabelsConfig,c=this.w,d=new z(this.ctx),u=new f(this.ctx),g=h.formatter,p=null,x=c.globals.collapsedSeriesIndices.indexOf(a)>-1;if(h.enabled&&!x){p=u.group({class:"apexcharts-data-labels"});var b="";null!=s&&(b=g(s,{seriesIndex:a,dataPointIndex:n,w:c})),0===s&&c.config.chart.stacked&&(b=""),c.config.chart.stacked&&this.barOptions.dataLabels.hideOverflowingLabels&&(this.isHorizontal?(l=this.series[a][n]/this.yRatio[this.yaxisIndex],r.width/1.6>l&&(b="")):(o=this.series[a][n]/this.yRatio[this.yaxisIndex],r.height/1.6>o&&(b=""))),d.plotDataLabelsText({x:e,y:i,text:b,i:a,j:n,parent:p,dataLabelsConfig:h,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return p}},{key:"barEndingShape",value:function(t,e,i,s,a){var n=new f(this.ctx);if(this.isHorizontal){var r=null,o=e.x;if(void 0!==i[s][a]||null!==i[s][a]){var l=i[s][a]<0,h=e.barHeight/2-e.strokeWidth;switch(l&&(h=-e.barHeight/2-e.strokeWidth),t.config.chart.stacked||"rounded"===this.barOptions.endingShape&&(o=e.x-h/2),this.barOptions.endingShape){case"flat":r=n.line(o,e.barYPosition+e.barHeight-e.strokeWidth);break;case"rounded":r=n.quadraticCurve(o+h,e.barYPosition+(e.barHeight-e.strokeWidth)/2,o,e.barYPosition+e.barHeight-e.strokeWidth)}}return{path:r,ending_p_from:"",newX:o}}var c=null,d=e.y;if(void 0!==i[s][a]||null!==i[s][a]){var u=i[s][a]<0,g=e.barWidth/2-e.strokeWidth;switch(u&&(g=-e.barWidth/2-e.strokeWidth),t.config.chart.stacked||"rounded"===this.barOptions.endingShape&&(d+=g/2),this.barOptions.endingShape){case"flat":c=n.line(e.barXPosition+e.barWidth-e.strokeWidth,d);break;case"rounded":c=n.quadraticCurve(e.barXPosition+(e.barWidth-e.strokeWidth)/2,d-g,e.barXPosition+e.barWidth-e.strokeWidth,d)}}return{path:c,ending_p_from:"",newY:d}}}]),t}(),M=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,P),s(i,[{key:"draw",value:function(t,e){var i=this.w;this.graphics=new f(this.ctx),this.fill=new S(this.ctx),this.bar=new P(this.ctx,this.xyRatios);var s=new y(this.ctx,i);t=s.getLogSeries(t),this.yRatio=s.getLogYRatios(this.yRatio),this.initVariables(t),"100%"===i.config.chart.stackType&&(t=i.globals.seriesPercent.slice()),this.series=t,this.totalItems=0,this.prevY=[],this.prevX=[],this.prevYF=[],this.prevXF=[],this.prevYVal=[],this.prevXVal=[],this.xArrj=[],this.xArrjF=[],this.xArrjVal=[],this.yArrj=[],this.yArrjF=[],this.yArrjVal=[];for(var a=0;a0&&(this.totalItems+=t[a].length);for(var n=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),r=0,o=0,l=0,h=0;l1&&(this.yaxisIndex=w),this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var k=this.graphics.group({class:"apexcharts-series",seriesName:d.escapeString(i.globals.seriesNames[w]),rel:l+1,"data:realIndex":w}),A=this.graphics.group({class:"apexcharts-datalabels"}),C=0,L=0,z=0,M=this.initialPositions(r,o,g,p,x,b);o=M.y,L=M.barHeight,p=M.yDivision,b=M.zeroW,r=M.x,z=M.barWidth,g=M.xDivision,x=M.zeroH,this.yArrj=[],this.yArrjF=[],this.yArrjVal=[],this.xArrj=[],this.xArrjF=[],this.xArrjVal=[];for(var E=0;E0){var y=o;this.prevXVal[f-1][p]<0?y=this.series[f][p]>=0?this.prevX[f-1][p]+m-2*(this.isReversed?m:0):this.prevX[f-1][p]:this.prevXVal[f-1][p]>=0&&(y=this.series[f][p]>=0?this.prevX[f-1][p]:this.prevX[f-1][p]-m+2*(this.isReversed?m:0)),e=y}else e=o;l=null===this.series[f][p]?e:e+this.series[f][p]/this.invertedYRatio-2*(this.isReversed?this.series[f][p]/this.invertedYRatio:0);var w={barHeight:s,strokeWidth:a,invertedYRatio:this.invertedYRatio,barYPosition:g,x:l},k=this.bar.barEndingShape(u,w,this.series,f,p);if(this.series.length>1&&f!==this.endingShapeOnSeriesNumber&&(k.path=this.graphics.line(k.newX,g+s-a)),this.xArrj.push(k.newX),this.xArrjF.push(Math.abs(e-k.newX)),this.xArrjVal.push(this.series[f][p]),n=this.graphics.move(e,g),r=this.graphics.move(e,g),u.globals.previousPaths.length>0&&(r=this.bar.getPathFrom(x,p,!1)),n=n+this.graphics.line(k.newX,g)+k.path+this.graphics.line(e,g+s-a)+this.graphics.line(e,g),r=r+this.graphics.line(e,g)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g),u.config.plotOptions.bar.colors.backgroundBarColors.length>0&&0===f){b>=u.config.plotOptions.bar.colors.backgroundBarColors.length&&(b=0);var A=u.config.plotOptions.bar.colors.backgroundBarColors[b],S=this.graphics.drawRect(0,g,u.globals.gridWidth,s,0,A,u.config.plotOptions.bar.colors.backgroundBarOpacity);d.add(S),S.node.classList.add("apexcharts-backgroundBar")}return{pathTo:n,pathFrom:r,x:l,y:h+=c}}},{key:"drawColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=t.y,a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=t.strokeWidth,c=t.elSeries,d=this.w,u=e.i,g=e.j,f=e.realIndex,p=e.bc;if(d.globals.isXNumeric){var x=d.globals.seriesX[u][g];x||(x=0),i=(x-d.globals.minX)/this.xRatio-o/2}for(var b,m=i,v=0,y=0;y0&&!d.globals.isXNumeric||u>0&&d.globals.isXNumeric&&d.globals.seriesX[u-1][g]===d.globals.seriesX[u][g]){var w=this.prevY[u-1][g];b=this.prevYVal[u-1][g]<0?this.series[u][g]>=0?w-v+2*(this.isReversed?v:0):w:this.series[u][g]>=0?w:w+v-2*(this.isReversed?v:0)}else b=d.globals.gridHeight-l;s=b-this.series[u][g]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[u][g]/this.yRatio[this.yaxisIndex]:0);var k={barWidth:o,strokeWidth:h,yRatio:this.yRatio[this.yaxisIndex],barXPosition:m,y:s},A=this.bar.barEndingShape(d,k,this.series,u,g);if(this.yArrj.push(A.newY),this.yArrjF.push(Math.abs(b-A.newY)),this.yArrjVal.push(this.series[u][g]),n=this.graphics.move(m,b),r=this.graphics.move(m,b),d.globals.previousPaths.length>0&&(r=this.bar.getPathFrom(f,g,!1)),n=n+this.graphics.line(m,A.newY)+A.path+this.graphics.line(m+o-h,b)+this.graphics.line(m-h/2,b),r=r+this.graphics.line(m,b)+this.graphics.line(m+o-h,b)+this.graphics.line(m+o-h,b)+this.graphics.line(m+o-h,b)+this.graphics.line(m-h/2,b),d.config.plotOptions.bar.colors.backgroundBarColors.length>0&&0===u){p>=d.config.plotOptions.bar.colors.backgroundBarColors.length&&(p=0);var S=d.config.plotOptions.bar.colors.backgroundBarColors[p],C=this.graphics.drawRect(m,0,o,d.globals.gridHeight,0,S,d.config.plotOptions.bar.colors.backgroundBarOpacity);c.add(C),C.node.classList.add("apexcharts-backgroundBar")}return i+=a,{pathTo:n,pathFrom:r,x:d.globals.isXNumeric?i-a:i,y:s}}},{key:"checkZeroSeries",value:function(t){for(var e=t.series,i=this.w,s=0;s=0;r--)this.zeroSerieses.indexOf(r)>-1&&r===this.endingShapeOnSeriesNumber&&(this.endingShapeOnSeriesNumber-=1)}}]),i}(),E=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,P),s(i,[{key:"draw",value:function(t,e){var i=this.w,s=new f(this.ctx),a=new S(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick;var n=new y(this.ctx,i);t=n.getLogSeries(t),this.series=t,this.yRatio=n.getLogYRatios(this.yRatio),this.initVariables(t);for(var r=s.group({class:"apexcharts-candlestick-series apexcharts-plot-series"}),o=0,l=0;o0&&(this.visibleI=this.visibleI+1);var k,A,C=0;this.yRatio.length>1&&(this.yaxisIndex=v);var L=this.initialPositions();x=L.y,k=L.barHeight,p=L.x,A=L.barWidth,h=L.xDivision,c=L.zeroH,m.push(p+A/2);for(var z=s.group({class:"apexcharts-datalabels"}),P=0,M=i.globals.dataPoints;P0&&m.push(p+A/2),b.push(x);var X=a.fillPath({seriesNumber:v,color:E,value:t[o][P]}),I=this.candlestickOptions.wick.useFillColor?E:void 0;w=this.renderSeries({realIndex:v,pathFill:X,lineFill:I,j:P,i:o,pathFrom:g,pathTo:u,strokeWidth:C,elSeries:w,x:p,y:x,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:z,visibleSeries:this.visibleI,type:"candlestick"})}i.globals.seriesXvalues[v]=m,i.globals.seriesYvalues[v]=b,r.add(w)}return r}},{key:"drawCandleStickPaths",value:function(t){var e=t.indexes,i=t.x,s=(t.y,t.xDivision),a=t.pathTo,n=t.pathFrom,r=t.barWidth,o=t.zeroH,l=t.strokeWidth,h=this.w,c=new f(this.ctx),d=e.i,u=e.j,g=!0,p=h.config.plotOptions.candlestick.colors.upward,x=h.config.plotOptions.candlestick.colors.downward,b=this.yRatio[this.yaxisIndex],m=e.realIndex,v=this.getOHLCValue(m,u),y=o,w=o;v.o>v.c&&(g=!1);var k=Math.min(v.o,v.c),A=Math.max(v.o,v.c);h.globals.isXNumeric&&(i=(h.globals.seriesX[d][u]-h.globals.minX)/this.xRatio-r/2);var S=i+r*this.visibleI;return void 0===this.series[d][u]||null===this.series[d][u]?k=o:(k=o-k/b,A=o-A/b,y=o-v.h/b,w=o-v.l/b),c.move(S,o),n=c.move(S,k),h.globals.previousPaths.length>0&&(n=this.getPathFrom(m,u,!0)),a=c.move(S,A)+c.line(S+r/2,A)+c.line(S+r/2,y)+c.line(S+r/2,A)+c.line(S+r,A)+c.line(S+r,k)+c.line(S+r/2,k)+c.line(S+r/2,w)+c.line(S+r/2,k)+c.line(S,k)+c.line(S,A-l/2),n+=c.move(S,k),h.globals.isXNumeric||(i+=s),{pathTo:a,pathFrom:n,x:i,y:A,barXPosition:S,color:g?p:x}}},{key:"getOHLCValue",value:function(t,e){var i=this.w;return{o:i.globals.seriesCandleO[t][e],h:i.globals.seriesCandleH[t][e],l:i.globals.seriesCandleL[t][e],c:i.globals.seriesCandleC[t][e]}}}]),i}(),T=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"drawXCrosshairs",value:function(){var t=this.w,e=new f(this.ctx),i=new u(this.ctx),s=t.config.xaxis.crosshairs.fill.gradient,a=t.config.xaxis.crosshairs.dropShadow,n=t.config.xaxis.crosshairs.fill.type,r=s.colorFrom,o=s.colorTo,l=s.opacityFrom,h=s.opacityTo,c=s.stops,g=a.enabled,p=a.left,x=a.top,b=a.blur,m=a.color,v=a.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){"gradient"===n&&(y=e.drawGradient("vertical",r,o,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine()),w.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:t.globals.gridHeight,width:d.isNumber(t.config.xaxis.crosshairs.width)?t.config.xaxis.crosshairs.width:0,height:t.globals.gridHeight,fill:y,filter:"none","fill-opacity":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,"stroke-width":t.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":t.config.xaxis.crosshairs.stroke.dashArray}),g&&(w=i.dropShadow(w,{left:p,top:x,blur:b,color:m,opacity:v})),t.globals.dom.elGraphical.add(w)}}},{key:"drawYCrosshairs",value:function(){var t=this.w,e=new f(this.ctx),i=t.config.yaxis[0].crosshairs;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(0,0,t.globals.gridWidth,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),t.globals.dom.elGraphical.add(s)}var a=e.drawLine(0,0,t.globals.gridWidth,0,i.stroke.color,0,0);a.attr({class:"apexcharts-ycrosshairs-hidden"}),t.globals.dom.elGraphical.add(a)}}]),t}(),X=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w,this.xRatio=s.xRatio,this.yRatio=s.yRatio,this.negRange=!1,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.width}return s(t,[{key:"draw",value:function(t){var e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-heatmap"});s.attr("clip-path","url(#gridRectMask".concat(e.globals.cuid,")"));var a=e.globals.gridWidth/e.globals.dataPoints,n=e.globals.gridHeight/e.globals.series.length,r=0,o=!1;this.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(o=!0,l.reverse());for(var h=o?0:l.length-1;o?h=0;o?h++:h--){var c=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:d.escapeString(e.globals.seriesNames[h]),rel:h+1,"data:realIndex":h});if(e.config.chart.dropShadow.enabled){var g=e.config.chart.dropShadow;new u(this.ctx).dropShadow(c,g,h)}for(var p=0,x=0;x0&&e.colorScale.ranges.map(function(e,i){e.from<0&&(t.negRange=!0)})}},{key:"determineHeatColor",value:function(t,e){var i=this.w,s=i.globals.series[t][e],a=i.config.plotOptions.heatmap,n=a.colorScale.inverse?e:t,r=i.globals.colors[n],o=Math.min.apply(Math,c(i.globals.series[t])),l=Math.max.apply(Math,c(i.globals.series[t]));a.distributed||(o=i.globals.minY,l=i.globals.maxY),void 0!==a.colorScale.min&&(o=a.colorScale.mini.globals.maxY?a.colorScale.max:i.globals.maxY);var h=Math.abs(l)+Math.abs(o),d=100*s/(0===h?h-1e-6:h);a.colorScale.ranges.length>0&&a.colorScale.ranges.map(function(t,e){if(s>=t.from&&s<=t.to){r=t.color,o=t.from,l=t.to;var i=Math.abs(l)+Math.abs(o);d=100*s/(0===i?i-1e-6:i)}});return{color:r,percent:d}}},{key:"calculateHeatmapDataLabels",value:function(t){var e=t.x,i=t.y,s=t.i,a=t.j,n=(t.series,t.rectHeight),r=t.rectWidth,o=this.w,l=o.config.dataLabels,h=new f(this.ctx),c=new z(this.ctx),d=l.formatter,u=null;if(l.enabled){u=h.group({class:"apexcharts-data-labels"});var g=l.offsetX,p=l.offsetY,x=e+r/2+g,b=i+n/2+parseInt(l.style.fontSize)/3+p,m=d(o.globals.series[s][a],{seriesIndex:s,dataPointIndex:a,w:o});c.plotDataLabelsText({x:x,y:b,text:m,i:s,j:a,parent:u,dataLabelsConfig:l})}return u}},{key:"animateHeatMap",value:function(t,e,i,s,a,n){var r=this;new g(this.ctx).animateRect(t,{x:e+s/2,y:i+a/2,width:0,height:0},{x:e,y:i,width:s,height:a},n,function(){r.w.globals.animationEnded=!0})}},{key:"animateHeatColor",value:function(t,e,i,s){t.attr({fill:e}).animate(s).attr({fill:i})}}]),t}(),I=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels;var s=this.w;this.lineColorArr=void 0!==s.globals.stroke.colors?s.globals.stroke.colors:s.globals.colors,this.defaultSize=s.globals.svgHeightthis.fullAngle?e.endAngle=e.endAngle-(s+r):s+r=360&&(l=359.99);var h=Math.PI*(l-90)/180,c=e.centerX+a*Math.cos(o),u=e.centerY+a*Math.sin(o),g=e.centerX+a*Math.cos(h),f=e.centerY+a*Math.sin(h),p=d.polarToCartesian(e.centerX,e.centerY,e.donutSize,l),x=d.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),b=s>180?1:0;return"donut"===n.config.chart.type?["M",c,u,"A",a,a,0,b,1,g,f,"L",p.x,p.y,"A",e.donutSize,e.donutSize,0,b,0,x.x,x.y,"L",c,u,"z"].join(" "):"pie"===n.config.chart.type?["M",c,u,"A",a,a,0,b,1,g,f,"L",e.centerX,e.centerY,"L",c,u].join(" "):["M",c,u,"A",a,a,0,b,1,g,f].join(" ")}},{key:"renderInnerDataLabels",value:function(t,e){var i=this.w,s=new f(this.ctx),a=s.group({class:"apexcharts-datalabels-group",transform:"translate(".concat(e.translateX?e.translateX:0,", ").concat(e.translateY?e.translateY:0,")")}),n=t.total.show;a.node.style.opacity=e.opacity;var r,o,l=e.centerX,h=e.centerY;r=void 0===t.name.color?i.globals.colors[0]:t.name.color,o=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var c=t.value.formatter,d="",u="";if(n?(r=t.total.color,u=t.total.label,d=t.total.formatter(i)):1===i.globals.series.length&&(d=c(i.globals.series[0],i),u=i.globals.seriesNames[0]),t.name.show){var g=s.drawText({x:l,y:h+parseInt(t.name.offsetY),text:u,textAnchor:"middle",foreColor:r,fontSize:t.name.fontSize,fontFamily:t.name.fontFamily});g.node.classList.add("apexcharts-datalabel-label"),a.add(g)}if(t.value.show){var p=t.name.show?parseInt(t.value.offsetY)+16:t.value.offsetY,x=s.drawText({x:l,y:h+p,text:d,textAnchor:"middle",foreColor:o,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});x.node.classList.add("apexcharts-datalabel-value"),a.add(x)}return a}},{key:"printInnerLabels",value:function(t,e,i,s){var a,n=this.w;s?a=void 0===t.name.color?n.globals.colors[parseInt(s.parentNode.getAttribute("rel"))-1]:t.name.color:n.globals.series.length>1&&t.total.show&&(a=t.total.color);var r=n.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=n.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,t.value.formatter)(i,n),s||"function"!=typeof t.total.formatter||(i=t.total.formatter(n)),null!==r&&(r.textContent=e),null!==o&&(o.textContent=i),null!==r&&(r.style.fill=a)}},{key:"printDataLabelsInner",value:function(t,e){var i=this.w,s=t.getAttribute("data:value"),a=i.globals.seriesNames[parseInt(t.parentNode.getAttribute("rel"))-1];i.globals.series.length>1&&this.printInnerLabels(e,a,s,t);var n=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");null!==n&&(n.style.opacity=1)}},{key:"revertDataLabelsInner",value:function(e,i,s){var a=this,n=this.w,r=n.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");if(i.total.show&&n.globals.series.length>1){new t(this.ctx).printInnerLabels(i,i.total.label,i.total.formatter(n))}else{var o=document.querySelectorAll(".apexcharts-pie-area"),l=!1;if(o.forEach(function(t){"true"===t.getAttribute("data:pieClicked")&&(l=!0,a.printDataLabelsInner(t,i))}),!l)if(n.globals.selectedDataPoints.length&&n.globals.series.length>1)if(n.globals.selectedDataPoints[0].length>0){var h=n.globals.selectedDataPoints[0],c=n.globals.dom.baseEl.querySelector("#apexcharts-".concat(n.config.chart.type.toLowerCase(),"-slice-").concat(h));this.printDataLabelsInner(c,i)}else r&&n.globals.selectedDataPoints.length&&0===n.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&n.globals.series.length>1&&(r.style.opacity=0)}}}]),t}(),Y=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var s=this.w;this.graphics=new f(this.ctx),this.lineColorArr=void 0!==s.globals.stroke.colors?s.globals.stroke.colors:s.globals.colors,this.defaultSize=s.globals.svgHeight0&&(f=e.getPathFrom(r));for(var p=0;p=10?n[h].x>0?(i="start",r+=10):n[h].x<0&&(i="end",r-=10):i="middle",Math.abs(n[h].y)>=t.size-10&&(n[h].y<0?o-=10:n[h].y>0&&(o+=10));var u=c(l,{seriesIndex:-1,dataPointIndex:h,w:e});d.plotDataLabelsText({x:r,y:o,text:u,textAnchor:i,i:h,j:h,parent:a,dataLabelsConfig:s,offsetCorrection:!1})}}),a}},{key:"createPaths",value:function(t,e){var i=this,s=[],a=[],n=[],r=[];if(t.length){a=[this.graphics.move(e.x,e.y)],r=[this.graphics.move(e.x,e.y)];var o=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach(function(e,s){o+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),s===t.length-1&&(o+="Z",l+="Z")}),s.push(o),n.push(l)}return{linePathsFrom:a,linePathsTo:s,areaPathsFrom:r,areaPathsTo:n}}},{key:"getPathFrom",value:function(t){for(var e=this.w,i=null,s=0;s0&&parseInt(a.realIndex)===parseInt(t)&&void 0!==e.globals.previousPaths[s].paths[0]&&(i=e.globals.previousPaths[s].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var s=[],a=0;a=360&&(g=360-Math.abs(this.startAngle)-.1);var p=i.drawPath({d:"",stroke:c,strokeWidth:r*parseInt(h.strokeWidth)/100,fill:"none",strokeOpacity:h.opacity,classes:"apexcharts-radialbar-area"});if(h.dropShadow.enabled){var x=h.dropShadow;a.dropShadow(p,x)}l.add(p),p.attr("id","apexcharts-radialbarTrack-"+o),new I(this.ctx).animatePaths(p,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:o,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return s}},{key:"drawArcs",value:function(t){var e=this.w,i=new f(this.ctx),s=new S(this.ctx),a=new u(this.ctx),n=i.group(),r=this.getStrokeWidth(t);t.size=t.size-r/2;var o=e.config.plotOptions.radialBar.hollow.background,l=t.size-r*t.series.length-this.margin*t.series.length-r*parseInt(e.config.plotOptions.radialBar.track.strokeWidth)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(o=this.drawHollowImage(t,n,l,o));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:o});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var g=e.config.plotOptions.radialBar.hollow.dropShadow;a.dropShadow(c,g)}var p=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(p=0);var x=new I(this.ctx),b=null;this.radialDataLabels.show&&(b=x.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:p})),"back"===e.config.plotOptions.radialBar.hollow.position&&(n.add(c),b&&n.add(b));var m=!1;e.config.plotOptions.radialBar.inverseOrder&&(m=!0);for(var v=m?t.series.length-1:0;m?v>=0:v100?100:t.series[v])/100,z=Math.round(C*L)+this.startAngle,P=void 0;e.globals.dataChanged&&(A=this.startAngle,P=Math.round(C*d.negToZero(e.globals.previousPaths[v])/100)+A),Math.abs(z)+Math.abs(k)>=360&&(z-=.01),Math.abs(P)+Math.abs(A)>=360&&(P-=.01);var M=z-k,E=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[v]:e.config.stroke.dashArray,T=i.drawPath({d:"",stroke:w,strokeWidth:r,fill:"none",fillOpacity:e.config.fill.opacity,classes:"apexcharts-radialbar-area",strokeDashArray:E});if(f.setAttrs(T.node,{"data:angle":M,"data:value":t.series[v]}),e.config.chart.dropShadow.enabled){var X=e.config.chart.dropShadow;a.dropShadow(T,X,v)}this.addListeners(T,this.radialDataLabels);var Y=new I(this.ctx);y.add(T),T.attr({id:"apexcharts-radialbar-slice-"+v,index:0,j:v});var F=0;!Y.initialAnim||e.globals.resized||e.globals.dataChanged||(F=(z-k)/360*e.config.chart.animations.speed,this.animDur=F/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),e.globals.dataChanged&&(F=(z-k)/360*e.config.chart.animations.dynamicAnimation.speed,this.animDur=F/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),Y.animatePaths(T,{centerX:t.centerX,centerY:t.centerY,endAngle:z,startAngle:k,prevEndAngle:P,prevStartAngle:A,size:t.size,i:v,totalItems:2,animBeginArr:this.animBeginArr,dur:F,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:n,elHollow:c,dataLabels:b}}},{key:"drawHollow",value:function(t){var e=new f(this.ctx).drawCircle(2*t.size);return e.attr({class:"apexcharts-radialbar-hollow",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:"drawHollowImage",value:function(t,e,i,s){var a=this.w,n=new S(this.ctx),r=(Math.random()+1).toString(36).substring(4),o=a.config.plotOptions.radialBar.hollow.image;if(a.config.plotOptions.radialBar.hollow.imageClipped)n.clippedImgArea({width:i,height:i,image:o,patternID:"pattern".concat(a.globals.cuid).concat(r)}),s="url(#pattern".concat(a.globals.cuid).concat(r,")");else{var l=a.config.plotOptions.radialBar.hollow.imageWidth,h=a.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=a.globals.dom.Paper.image(o).loaded(function(e){this.move(t.centerX-e.width/2+a.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+a.config.plotOptions.radialBar.hollow.imageOffsetY)});e.add(c)}else{var d=a.globals.dom.Paper.image(o).loaded(function(e){this.move(t.centerX-l/2+a.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+a.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)});e.add(d)}}return s}},{key:"getStrokeWidth",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size))/100/(t.series.length+1)-this.margin}}]),i}(),R=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,P),s(i,[{key:"draw",value:function(t,e){var i=this.w,s=new f(this.ctx),a=new S(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=i.globals.seriesRangeStart,this.seriesRangeEnd=i.globals.seriesRangeEnd,this.initVariables(t);for(var n=s.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),r=0,o=0;r0&&(this.visibleI=this.visibleI+1);var k=0,A=0,C=0;this.yRatio.length>1&&(this.yaxisIndex=y);var L=this.initialPositions();b=L.y,h=L.yDivision,A=L.barHeight,u=L.zeroW,x=L.x,C=L.barWidth,l=L.xDivision,c=L.zeroH,v.push(x+C/2);for(var z=s.group({class:"apexcharts-datalabels"}),P=0,M=i.globals.dataPoints;P0&&v.push(x+C/2),m.push(b);var T=a.fillPath({seriesNumber:y}),X=i.globals.stroke.colors[y];w=this.renderSeries({realIndex:y,pathFill:T,lineFill:X,j:P,i:r,pathFrom:p,pathTo:g,strokeWidth:k,elSeries:w,x:x,y:b,series:t,barHeight:A,barWidth:C,elDataLabelsWrap:z,visibleSeries:this.visibleI,type:"rangebar"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=m,n.add(w)}return n}},{key:"drawRangeColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=(t.y,t.strokeWidth),a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=this.w,c=new f(this.ctx),d=e.i,u=e.j,g=this.yRatio[this.yaxisIndex],p=e.realIndex,x=this.getRangeValue(p,u),b=Math.min(x.start,x.end),m=Math.max(x.start,x.end);h.globals.isXNumeric&&(i=(h.globals.seriesX[d][u]-h.globals.minX)/this.xRatio-o/2);var v=i+o*this.visibleI;void 0===this.series[d][u]||null===this.series[d][u]?b=l:(b=l-b/g,m=l-m/g);var y=Math.abs(m-b);return c.move(v,l),r=c.move(v,b),h.globals.previousPaths.length>0&&(r=this.getPathFrom(p,u,!0)),n=c.move(v,m)+c.line(v+o,m)+c.line(v+o,b)+c.line(v,b)+c.line(v,m-s/2),r=r+c.move(v,b)+c.line(v+o,b)+c.line(v+o,b)+c.line(v,b),h.globals.isXNumeric||(i+=a),{pathTo:n,pathFrom:r,barHeight:y,x:i,y:m,barXPosition:v}}},{key:"drawRangeBarPaths",value:function(t){var e=t.indexes,i=(t.x,t.y),s=t.yDivision,a=t.pathTo,n=t.pathFrom,r=t.barHeight,o=t.zeroW,l=this.w,h=new f(this.ctx),c=e.i,d=e.j,u=e.realIndex,g=o,p=o;l.globals.isXNumeric&&(i=(l.globals.seriesX[c][d]-l.globals.minX)/this.invertedXRatio-r);var x=i+r*this.visibleI;void 0!==this.series[c][d]&&null!==this.series[c][d]&&(g=o+this.seriesRangeStart[c][d]/this.invertedYRatio,p=o+this.seriesRangeEnd[c][d]/this.invertedYRatio),h.move(o,x),n=h.move(o,x),l.globals.previousPaths.length>0&&(n=this.getPathFrom(u,d));var b=Math.abs(p-g);return a=h.move(g,x)+h.line(p,x)+h.line(p,x+r)+h.line(g,x+r)+h.line(g,x),n=n+h.line(g,x)+h.line(g,x+r)+h.line(g,x+r)+h.line(g,x),l.globals.isXNumeric||(i+=s),{pathTo:a,pathFrom:n,barWidth:b,x:p,y:i,barYPosition:x}}},{key:"getRangeValue",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}}]),i}(),D=function(){function t(i,s,a){e(this,t),this.ctx=i,this.w=i.w,this.xyRatios=s,this.pointsChart=!("bubble"!==this.w.config.chart.type&&"scatter"!==this.w.config.chart.type)||a,this.scatter=new L(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.yaxisIndex=0}return s(t,[{key:"draw",value:function(t,e,i){var s=this.w,a=new f(this.ctx),r=new S(this.ctx),o=s.globals.comboCharts?e:s.config.chart.type,l=a.group({class:"apexcharts-".concat(o,"-series apexcharts-plot-series")}),h=new y(this.ctx,s);t=h.getLogSeries(t);var c=this.xyRatios.yRatio;c=h.getLogYRatios(c);for(var u=this.xyRatios.zRatio,g=this.xyRatios.xRatio,p=this.xyRatios.baseLineY,x=[],b=[],m=0,v=0;v1&&(this.yaxisIndex=A),this.isReversed=s.config.yaxis[this.yaxisIndex]&&s.config.yaxis[this.yaxisIndex].reversed;var L=[],P=[],M=s.globals.gridHeight-p[this.yaxisIndex]-(this.isReversed?s.globals.gridHeight:0)+(this.isReversed?2*p[this.yaxisIndex]:0),E=M;M>s.globals.gridHeight&&(E=s.globals.gridHeight),m=k/2;var T=s.globals.padHorizontal+m,X=1;s.globals.isXNumeric&&s.globals.seriesX.length>0&&(T=(s.globals.seriesX[A][0]-s.globals.minX)/g),P.push(T);var I=void 0,Y=void 0,F=void 0,R=void 0,D=[],N=[],O=a.group({class:"apexcharts-series",seriesName:d.escapeString(s.globals.seriesNames[A])}),H=a.group({class:"apexcharts-series-markers-wrap"}),W=a.group({class:"apexcharts-datalabels"});this.ctx.series.addCollapsedClassToSeries(O,A);var B=t[v].length===s.globals.dataPoints;O.attr({"data:longestSeries":B,rel:v+1,"data:realIndex":A}),this.appendPathFrom=!0;var V=T,G=void 0,_=V,j=M,U=0;if(j=this.determineFirstPrevY({i:v,series:t,yRatio:c[this.yaxisIndex],zeroY:M,prevY:j,prevSeriesY:b,lineYPosition:U}).prevY,L.push(j),G=j,null===t[v][0]){for(var q=0;q0){var Z=this.checkPreviousPaths({pathFromLine:F,pathFromArea:R,realIndex:A});F=Z.pathFromLine,R=Z.pathFromArea}for(var $=s.globals.dataPoints>1?s.globals.dataPoints-1:s.globals.dataPoints,J=0;J<$;J++){if(s.globals.isXNumeric){var Q=s.globals.seriesX[A][J+1];void 0===s.globals.seriesX[A][J+1]&&(Q=s.globals.seriesX[A][$-1]),T=(Q-s.globals.minX)/g}else T+=k;var K=d.isNumber(s.globals.minYArr[A])?s.globals.minYArr[A]:s.globals.minY;s.config.chart.stacked?(U=v>0&&s.globals.collapsedSeries.length1&&H.node.classList.add("hidden");var st=it.plotChartMarkers(et,A,J+1);null!==st&&H.add(st)}var at=!t[v][J+1]||t[v][J+1]>t[v][J]?"top":"bottom",nt=new z(this.ctx).drawDataLabel(et,A,J+1,null,at);null!==nt&&W.add(nt)}b.push(L),s.globals.seriesXvalues[A]=P,s.globals.seriesYvalues[A]=L,this.pointsChart||s.globals.delayedElements.push({el:H.node,index:A});var rt={i:v,realIndex:A,animationDelay:v,initialSpeed:s.config.chart.animations.speed,dataChangeSpeed:s.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(o),id:"apexcharts-".concat(o)};if("area"===o)for(var ot=r.fillPath({seriesNumber:A}),lt=0;lt0;gt--)l.add(x[gt-1]);return l}},{key:"createPaths",value:function(t){var e=t.series,i=t.i,s=t.j,a=t.x,n=t.y,r=t.pX,o=t.pY,l=t.xDivision,h=t.areaBottomY,c=t.linePath,d=t.areaPath,u=t.linePaths,g=t.areaPaths,p=t.seriesIndex,x=this.w,b=new f(this.ctx),m=x.config.stroke.curve;if(Array.isArray(x.config.stroke.curve)&&(m=Array.isArray(p)?x.config.stroke.curve[p[i]]:x.config.stroke.curve[i]),"smooth"===m){var v=.35*(a-r);x.globals.hasNullValues?(null!==e[i][s]&&(null!==e[i][s+1]?(c=b.move(r,o)+b.curve(r+v,o,a-v,n,a+1,n),d=b.move(r+1,o)+b.curve(r+v,o,a-v,n,a+1,n)+b.line(a,h)+b.line(r,h)+"z"):(c=b.move(r,o),d=b.move(r,o)+"z")),u.push(c),g.push(d)):(c+=b.curve(r+v,o,a-v,n,a,n),d+=b.curve(r+v,o,a-v,n,a,n)),r=a,o=n,s===e[i].length-2&&(d=d+b.curve(r,o,a,n,a,h)+b.move(a,n)+"z",x.globals.hasNullValues||(u.push(c),g.push(d)))}else null===e[i][s+1]&&(c+=b.move(a,n),d=d+b.line(a-l,h)+b.move(a,n)),null===e[i][s]&&(c+=b.move(a,n),d+=b.move(a,h)),"stepline"===m?(c=c+b.line(a,null,"H")+b.line(null,n,"V"),d=d+b.line(a,null,"H")+b.line(null,n,"V")):"straight"===m&&(c+=b.line(a,n),d+=b.line(a,n)),s===e[i].length-2&&(d=d+b.line(a,h)+b.move(a,n)+"z",u.push(c),g.push(d));return{linePaths:u,areaPaths:g,pX:r,pY:o,linePath:c,areaPath:d}}},{key:"calculatePoints",value:function(t){var e=t.series,i=t.realIndex,s=t.x,a=t.y,n=t.i,r=t.j,o=t.prevY,l=t.categoryAxisCorrection,h=t.xRatio,c=this.w,u=[],g=[];if(0===r){var f=l+c.config.markers.offsetX;c.globals.isXNumeric&&(f=(c.globals.seriesX[i][0]-c.globals.minX)/h+c.config.markers.offsetX),u.push(f),g.push(d.isNumber(e[n][0])?o+c.config.markers.offsetY:null),u.push(s+c.config.markers.offsetX),g.push(d.isNumber(e[n][r+1])?a+c.config.markers.offsetY:null)}else u.push(s+c.config.markers.offsetX),g.push(d.isNumber(e[n][r+1])?a+c.config.markers.offsetY:null);return{x:u,y:g}}},{key:"checkPreviousPaths",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,s=t.realIndex,a=this.w,n=0;n0&&parseInt(r.realIndex)===parseInt(s)&&("line"===r.type?(this.appendPathFrom=!1,e=a.globals.previousPaths[n].paths[0].d):"area"===r.type&&(this.appendPathFrom=!1,i=a.globals.previousPaths[n].paths[0].d,a.config.stroke.show&&(e=a.globals.previousPaths[n].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(t){var e=t.i,i=t.series,s=t.yRatio,a=t.zeroY,n=t.prevY,r=t.prevSeriesY,o=t.lineYPosition,l=this.w;if(void 0!==i[e][0])n=l.config.chart.stacked?(o=e>0?r[e-1][0]:a)-i[e][0]/s+2*(this.isReversed?i[e][0]/s:0):a-i[e][0]/s+2*(this.isReversed?i[e][0]/s:0);else if(l.config.chart.stacked&&e>0&&void 0===i[e][0])for(var h=e-1;h>=0;h--)if(null!==i[h][0]&&void 0!==i[h][0]){n=o=r[h][0];break}return{prevY:n,lineYPosition:o}}}]),t}(),N=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.tooltipKeyFormat="dd MMM"}return s(t,[{key:"xLabelFormat",value:function(t,e){var i=this.w;if("datetime"===i.config.xaxis.type&&void 0===i.config.tooltip.x.formatter)return new m(this.ctx).formatDate(new Date(e),i.config.tooltip.x.format,!0,!0);return t(e)}},{key:"setLabelFormatters",value:function(){var t=this.w;return t.globals.xLabelFormatter=function(t){return t},t.globals.xaxisTooltipFormatter=function(t){return t},t.globals.ttKeyFormatter=function(t){return t},t.globals.ttZFormatter=function(t){return t},t.globals.legendFormatter=function(t){return t},"function"==typeof t.config.tooltip.x.formatter&&(t.globals.ttKeyFormatter=t.config.tooltip.x.formatter),"function"==typeof t.config.xaxis.tooltip.formatter&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),Array.isArray(t.config.tooltip.y)?t.globals.ttVal=t.config.tooltip.y:void 0!==t.config.tooltip.y.formatter&&(t.globals.ttVal=t.config.tooltip.y),void 0!==t.config.tooltip.z.formatter&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),void 0!==t.config.legend.formatter&&(t.globals.legendFormatter=t.config.legend.formatter),void 0!==t.config.xaxis.labels.formatter?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(e){return d.isNumber(e)?"numeric"===t.config.xaxis.type&&t.globals.dataPoints<50?e.toFixed(1):e.toFixed(0):e},t.config.yaxis.forEach(function(e,i){void 0!==e.labels.formatter?t.globals.yLabelFormatters[i]=e.labels.formatter:t.globals.yLabelFormatters[i]=function(i){return d.isNumber(i)?0!==t.globals.yValueDecimal?i.toFixed(void 0!==e.decimalsInFloat?e.decimalsInFloat:t.globals.yValueDecimal):t.globals.maxY-t.globals.minY<5?i.toFixed(1):i.toFixed(0):i}}),t.globals}},{key:"heatmapLabelFormatters",value:function(){var t=this.w;if("heatmap"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce(function(t,e){return t.length>e.length?t:e},0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),O=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getLabel",value:function(t,e,i,s){var a,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],r=this.w,o=void 0===t[s]?"":t[s],l=r.globals.xLabelFormatter,h=r.config.xaxis.labels.formatter;return a=new N(this.ctx).xLabelFormat(l,o),void 0!==h&&(a=h(o,t[s],s)),e.length>0?(i=e[s].position,a=e[s].value):"datetime"===r.config.xaxis.type&&void 0===h&&(a=""),void 0===a&&(a=""),(0===(a=a.toString()).indexOf("NaN")||0===a.toLowerCase().indexOf("invalid")||a.toLowerCase().indexOf("infinity")>=0||n.indexOf(a)>=0&&!r.config.xaxis.labels.showDuplicates)&&(a=""),{x:i,text:a}}},{key:"drawYAxisTicks",value:function(t,e,i,s,a,n,r){var o=this.w,l=new f(this.ctx),h=o.globals.translateY;if(s.show){!0===o.config.yaxis[a].opposite&&(t+=s.width);for(var c=e;c>=0;c--){var d=h+e/10+o.config.yaxis[a].labels.offsetY-1;o.globals.isBarHorizontal&&(d=n*c);var u=l.drawLine(t+i.offsetX-s.width+s.offsetX,d+s.offsetY,t+i.offsetX+s.offsetX,d+s.offsetY,i.color);r.add(u),h+=n}}}}]),t}(),H=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var s=this.w;this.xaxisLabels=s.globals.labels.slice(),s.globals.timelineLabels.length>0&&(this.xaxisLabels=s.globals.timelineLabels.slice()),this.drawnLabels=[],"top"===s.config.xaxis.position?this.offY=0:this.offY=s.globals.gridHeight+1,this.offY=this.offY+s.config.xaxis.axisBorder.offsetY,this.xaxisFontSize=s.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=s.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=s.config.xaxis.labels.style.colors,this.xaxisBorderWidth=s.config.xaxis.axisBorder.width,this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=s.globals.gridWidth*parseInt(this.xaxisBorderWidth)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth),this.xaxisBorderHeight=s.config.xaxis.axisBorder.height,this.yaxis=s.config.yaxis[0],this.axesUtils=new O(i)}return s(t,[{key:"drawXaxis",value:function(){var t,e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),a=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});s.add(a);for(var n=e.globals.padHorizontal,r=[],o=0;oi.globals.gridWidth)){var a=this.offY+i.config.xaxis.axisTicks.offsetY,n=a+i.config.xaxis.axisTicks.height;if(i.config.xaxis.axisTicks.show){var r=new f(this.ctx).drawLine(t+i.config.xaxis.axisTicks.offsetX,a+i.config.xaxis.offsetY,s+i.config.xaxis.axisTicks.offsetX,n+i.config.xaxis.offsetY,i.config.xaxis.axisTicks.color);e.add(r),r.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,s=t.globals.padHorizontal;if(t.globals.timelineLabels.length>0)for(var a=0;a0){var u=a[a.length-1].getBBox(),g=a[0].getBBox();u.x<-20&&a[a.length-1].parentNode.removeChild(a[a.length-1]),g.x+g.width>t.globals.gridWidth&&a[0].parentNode.removeChild(a[0]);for(var p=0;p=0;u--){var g=d[u];g=c(g,u);var p=e.config.yaxis[t].labels.padding;e.config.yaxis[t].opposite&&0!==e.config.yaxis.length&&(p*=-1);var x=i.drawText({x:p,y:h+o/10+e.config.yaxis[t].labels.offsetY+1,text:g,textAnchor:e.config.yaxis[t].opposite?"start":"end",fontSize:s,fontFamily:a,foreColor:e.config.yaxis[t].labels.style.color,cssClass:"apexcharts-yaxis-label "+e.config.yaxis[t].labels.style.cssClass});r.add(x);var b=i.rotateAroundCenter(x.node);0!==e.config.yaxis[t].labels.rotate&&x.node.setAttribute("transform","rotate(".concat(e.config.yaxis[t].labels.rotate," ").concat(b.x," ").concat(b.y,")")),h+=l}if(void 0!==e.config.yaxis[t].title.text){var m=i.group({class:"apexcharts-yaxis-title"}),v=0;e.config.yaxis[t].opposite&&(v=e.globals.translateYAxisX[t]);var y=i.drawText({x:v,y:e.globals.gridHeight/2+e.globals.translateY,text:e.config.yaxis[t].title.text,textAnchor:"end",foreColor:e.config.yaxis[t].title.style.color,fontSize:e.config.yaxis[t].title.style.fontSize,fontFamily:e.config.yaxis[t].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+e.config.yaxis[t].title.style.cssClass});m.add(y),n.add(m)}var w=e.config.yaxis[t].axisBorder;if(w.show){var k=31+w.offsetX;e.config.yaxis[t].opposite&&(k=-31-w.offsetX);var A=i.drawLine(k,e.globals.translateY+w.offsetY-2,k,e.globals.gridHeight+e.globals.translateY+w.offsetY+2,w.color);n.add(A),this.axesUtils.drawYAxisTicks(k,o,w,e.config.yaxis[t].axisTicks,t,l,n)}return n}},{key:"drawYaxisInversed",value:function(t){var e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),a=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});s.add(a);var n=e.globals.yAxisScale[t].result.length-1,r=e.globals.gridWidth/n+.1,o=r+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice(),c=e.globals.invertedTimelineLabels;c.length>0&&(this.xaxisLabels=c.slice(),n=(h=c.slice()).length),e.config.yaxis[t]&&e.config.yaxis[t].reversed&&h.reverse();var d=c.length;if(e.config.xaxis.labels.show)for(var u=d?0:n;d?u=0;d?u++:u--){var g=h[u];g=l(g,u);var p=e.globals.gridWidth+e.globals.padHorizontal-(o-r+e.config.xaxis.labels.offsetX);if(c.length){var x=this.axesUtils.getLabel(h,c,p,u,this.drawnLabels);p=x.x,g=x.text,this.drawnLabels.push(x.text)}var b=i.drawText({x:p,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30,text:"",textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,cssClass:"apexcharts-xaxis-label "+e.config.xaxis.labels.style.cssClass});a.add(b),b.tspan(g);var m=document.createElementNS(e.globals.SVGNS,"title");m.textContent=g,b.node.appendChild(m),o+=r}if(void 0!==e.config.xaxis.title.text){var v=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),y=i.drawText({x:e.globals.gridWidth/2,y:this.xAxisoffX+parseInt(this.xaxisFontSize)+parseInt(e.config.xaxis.title.style.fontSize)+20,text:e.config.xaxis.title.text,textAnchor:"middle",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,cssClass:"apexcharts-xaxis-title-text "+e.config.xaxis.title.style.cssClass});v.add(y),s.add(v)}var w=e.config.yaxis[t].axisBorder;if(w.show){var k=i.drawLine(e.globals.padHorizontal+w.offsetX,1+w.offsetY,e.globals.padHorizontal+w.offsetX,e.globals.gridHeight+w.offsetY,w.color);s.add(k)}return s}},{key:"yAxisTitleRotate",value:function(t,e){var i=this.w,s=new f(this.ctx),a={width:0,height:0},n={width:0,height:0},r=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-texts-g"));null!==r&&(a=r.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-title text"));if(null!==o&&(n=o.getBoundingClientRect()),null!==o){var l=this.xPaddingForYAxisTitle(t,a,n,e);o.setAttribute("x",l.xPos-(e?10:0))}if(null!==o){var h=s.rotateAroundCenter(o);e?o.setAttribute("transform","rotate(".concat(i.config.yaxis[t].title.rotate," ").concat(h.x," ").concat(h.y,")")):o.setAttribute("transform","rotate(-".concat(i.config.yaxis[t].title.rotate," ").concat(h.x," ").concat(h.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(t,e,i,s){var a=this.w,n=0,r=0,o=10;return void 0===a.config.yaxis[t].title.text||t<0?{xPos:r,padd:0}:(s?(r=e.width+a.config.yaxis[t].title.offsetX+i.width/2+o/2,0===(n+=1)&&(r-=o/2)):(r=-1*e.width+a.config.yaxis[t].title.offsetX+o/2+i.width/2,a.globals.isBarHorizontal&&(o=25,r=-1*e.width-a.config.yaxis[t].title.offsetX-o)),{xPos:r,padd:o})}},{key:"setYAxisXPosition",value:function(t,e){var i=this.w,s=0,a=0,n=21,r=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map(function(o,l){var h=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!o.show||o.floating||0===t[l].width,c=t[l].width+e[l].width;o.opposite?i.globals.isBarHorizontal?(a=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=a-o.labels.offsetX):(a=i.globals.gridWidth+i.globals.translateX+r,h||(r=r+c+20),i.globals.translateYAxisX[l]=a-o.labels.offsetX+20):(s=i.globals.translateX-n,h||(n=n+c+20),i.globals.translateYAxisX[l]=s+o.labels.offsetX)})}},{key:"setYAxisTextAlignments",value:function(){var t=this.w,e=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis");(e=d.listToArray(e)).forEach(function(e,i){var s=t.config.yaxis[i];if(void 0!==s.labels.align){var a=t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-texts-g")),n=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-label"));n=d.listToArray(n);var r=a.getBoundingClientRect();"left"===s.labels.align?(n.forEach(function(t,e){t.setAttribute("text-anchor","start")}),s.opposite||a.setAttribute("transform","translate(-".concat(r.width,", 0)"))):"center"===s.labels.align?(n.forEach(function(t,e){t.setAttribute("text-anchor","middle")}),a.setAttribute("transform","translate(".concat(r.width/2*(s.opposite?1:-1),", 0)"))):"right"===s.labels.align&&(n.forEach(function(t,e){t.setAttribute("text-anchor","end")}),s.opposite&&a.setAttribute("transform","translate(".concat(r.width,", 0)")))}})}}]),t}(),B=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"niceScale",value:function(t,e,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:10,n=this.w,r=void 0===this.w.config.yaxis[s].max&&void 0===this.w.config.yaxis[s].min||this.w.config.yaxis[s].forceNiceScale;if(t===Number.MIN_VALUE&&0===e||!d.isNumber(t)&&!d.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE)return t=0,e=a,this.linearScale(t,e,a);t>e?(console.warn("yaxis.min cannot be greater than yaxis.max"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var o=[],l=Math.abs(e-t);l<1&&r&&("candlestick"===n.config.chart.type||"candlestick"===n.config.series[s].type||n.globals.isRangeData)&&(e*=1.01),l<1e-5&&r&&e<10?e*=1.05:i>.1&&i<3&&r&&(e+=i/3);var h=a+1;h<2?h=2:h>2&&(h-=2);for(var c=l/h,u=Math.floor(d.log10(c)),g=Math.pow(10,u),f=parseInt(c/g)*g,p=f*Math.floor(t/f),x=f*Math.ceil(e/f),b=p;o.push(b),!((b+=f)>x););if(r)return{result:o,niceMin:o[0],niceMax:o[o.length-1]};var m=t;(o=[]).push(m);for(var v=Math.abs(e-t)/a,y=0;y<=a-1;y++)m+=v,o.push(m);return{result:o,niceMin:o[0],niceMax:o[o.length-1]}}},{key:"linearScale",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,s=Math.abs(e-t)/i;i===Number.MAX_VALUE&&(i=10,s=1);for(var a=[],n=t;i>=0;)a.push(n),n+=s,i-=1;return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:"logarithmicScale",value:function(t,e,i,s){(e<0||e===Number.MIN_VALUE)&&(e=.01);for(var a=Math.log(e)/Math.log(10),n=Math.log(i)/Math.log(10),r=Math.abs(i-e)/s,o=[],l=e;s>=0;)o.push(l),l+=r,s-=1;var h=o.map(function(t,s){t<=0&&(t=.01);var r=(n-a)/(i-e),o=Math.pow(10,a+r*(t-a));return Math.round(o/d.roundToBase(o,10))*d.roundToBase(o,10)});return 0===h[0]&&(h[0]=1),{result:h,niceMin:h[0],niceMax:h[h.length-1]}}},{key:"setYScaleForIndex",value:function(t,e,i){var s=this.w.globals,a=this.w.config,n=s.isBarHorizontal?a.xaxis:a.yaxis[t];if(void 0===s.yAxisScale[t]&&(s.yAxisScale[t]=[]),n.logarithmic)s.allSeriesCollapsed=!1,s.yAxisScale[t]=this.logarithmicScale(t,e,i,n.tickAmount?n.tickAmount:Math.floor(Math.log10(i)));else if(i!==-Number.MAX_VALUE&&d.isNumber(i))if(s.allSeriesCollapsed=!1,void 0===n.min&&void 0===n.max||n.forceNiceScale){var r=Math.abs(i-e);s.yAxisScale[t]=this.niceScale(e,i,r,t,n.tickAmount?n.tickAmount:r<5&&r>1?r+1:5)}else s.yAxisScale[t]=this.linearScale(e,i,n.tickAmount);else s.yAxisScale[t]=this.linearScale(0,5,5)}},{key:"setMultipleYScales",value:function(){var t=this,e=this.w.globals,i=this.w.config,s=e.minYArr.concat([]),a=e.maxYArr.concat([]),n=[];i.yaxis.forEach(function(r,o){var l=o;i.series.forEach(function(t,i){t.name===r.seriesName&&-1===e.collapsedSeriesIndices.indexOf(i)&&(l=i,o!==i?n.push({index:i,similarIndex:o,alreadyExists:!0}):n.push({index:i}))});var h=s[l],c=a[l];t.setYScaleForIndex(o,h,c)}),this.sameScaleInMultipleAxes(s,a,n)}},{key:"sameScaleInMultipleAxes",value:function(t,e,i){var s=this,a=this.w.config,n=this.w.globals,r=[];i.forEach(function(t){t.alreadyExists&&(void 0===r[t.index]&&(r[t.index]=[]),r[t.index].push(t.index),r[t.index].push(t.similarIndex))}),r.forEach(function(t,e){r.forEach(function(i,s){var a,n;e!==s&&(a=t,n=i,a.filter(function(t){return-1!==n.indexOf(t)})).length>0&&(r[e]=r[e].concat(r[s]))})});var o=r.map(function(t){return t.filter(function(e,i){return t.indexOf(e)===i})}).map(function(t){return t.sort()});r=r.filter(function(t){return!!t});var l=o.slice(),h=l.map(function(t){return JSON.stringify(t)});l=l.filter(function(t,e){return h.indexOf(JSON.stringify(t))===e});var c=[],d=[];t.forEach(function(t,i){l.forEach(function(s,a){s.indexOf(i)>-1&&(void 0===c[a]&&(c[a]=[],d[a]=[]),c[a].push({key:i,value:t}),d[a].push({key:i,value:e[i]}))})});var u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach(function(t,e){t.forEach(function(t,i){u[e]=Math.min(t.value,u[e])})}),d.forEach(function(t,e){t.forEach(function(t,i){g[e]=Math.max(t.value,g[e])})}),t.forEach(function(t,e){d.forEach(function(t,i){var r=u[i],o=g[i];t.forEach(function(i,l){t[l].key===e&&(void 0!==a.yaxis[e].min&&(r="function"==typeof a.yaxis[e].min?a.yaxis[e].min(n.minY):a.yaxis[e].min),void 0!==a.yaxis[e].max&&(o="function"==typeof a.yaxis[e].max?a.yaxis[e].max(n.maxY):a.yaxis[e].max),s.setYScaleForIndex(e,r,o))})})})}},{key:"autoScaleY",value:function(t,e){t||(t=this);var i=[];return t.w.config.series.forEach(function(t){var s,a,n=t.data.find(function(t){return t[0]>=e.xaxis.min})[1];a=s=n,t.data.forEach(function(t){t[0]<=e.xaxis.max&&t[0]>=e.xaxis.min&&(t[1]>a&&null!==t[1]&&(a=t[1]),t[1]1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=this.w.globals,n=-Number.MAX_VALUE,r=Number.MIN_VALUE;null===s&&(s=t+1);var o=a.series,l=o,h=o;"candlestick"===this.w.config.chart.type?(l=a.seriesCandleL,h=a.seriesCandleH):a.isRangeData&&(l=a.seriesRangeStart,h=a.seriesRangeEnd);for(var c=t;cl[c][u]&&l[c][u]<0&&(r=l[c][u])):a.hasNullValues=!0}}return{minY:r,maxY:n,lowestY:e,highestY:i}}},{key:"setYRange",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var s=0;s0?h=h+parseFloat(t.series[u][l])+1e-4:c+=parseFloat(t.series[u][l])),u===t.series.length-1&&(r.push(h),o.push(c));for(var g=0;g=0&&i<=10&&(f=0),t.minY=i-5*f/100,t.maxY=t.maxY+5*f/100}return e.yaxis.map(function(e,i){void 0!==e.max&&("number"==typeof e.max?t.maxYArr[i]=e.max:"function"==typeof e.max&&(t.maxYArr[i]=e.max(t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&("number"==typeof e.min?t.minYArr[i]=e.min:"function"==typeof e.min&&(t.minYArr[i]=e.min(t.minY)),t.minY=t.minYArr[i])}),t.isBarHorizontal&&(void 0!==e.xaxis.min&&"number"==typeof e.xaxis.min&&(t.minY=e.xaxis.min),void 0!==e.xaxis.max&&"number"==typeof e.xaxis.max&&(t.maxY=e.xaxis.max)),t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach(function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax})):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr}}},{key:"setXRange",value:function(){var t,e=this.w.globals,i=this.w.config,s="numeric"===i.xaxis.type||"datetime"===i.xaxis.type||"category"===i.xaxis.type&&!e.noLabelsProvided||e.noLabelsProvided||e.isXNumeric;if(e.isXNumeric)for(var a=0;ae.dataPoints&&0!==e.dataPoints&&(t=e.dataPoints-1)):t="dataPoints"===i.xaxis.tickAmount?e.series[e.maxValsInArrayIndex].length-1:i.xaxis.tickAmount,void 0!==i.xaxis.max&&"number"==typeof i.xaxis.max&&(e.maxX=i.xaxis.max),void 0!==i.xaxis.min&&"number"==typeof i.xaxis.min&&(e.minX=i.xaxis.min),void 0!==i.xaxis.range&&(e.minX=e.maxX-i.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE?e.xAxisScale=this.scales.linearScale(e.minX,e.maxX,t):(e.xAxisScale=this.scales.linearScale(1,t,t),e.noLabelsProvided&&e.labels.length>0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,t-1),e.seriesX=e.labels.slice())),s&&(e.labels=e.xAxisScale.result.slice()));if(e.minX===e.maxX)if("datetime"===i.xaxis.type){var l=new Date(e.minX);l.setDate(l.getDate()-2),e.minX=new Date(l).getTime();var h=new Date(e.maxX);h.setDate(h.getDate()+2),e.maxX=new Date(h).getTime()}else("numeric"===i.xaxis.type||"category"===i.xaxis.type&&!e.noLabelsProvided)&&(e.minX=e.minX-2,e.maxX=e.maxX+2);return e.isXNumeric&&(e.seriesX.forEach(function(t,i){t.forEach(function(t,s){if(s>0){var a=t-e.seriesX[i][s-1];e.minXDiff=Math.min(a,e.minXDiff)}})}),this.calcMinXDiffForTinySeries()),{minX:e.minX,maxX:e.maxX}}},{key:"calcMinXDiffForTinySeries",value:function(){var t=this.w,e=t.globals.labels.length;return 1===t.globals.labels.length?t.globals.minXDiff=(t.globals.maxX-t.globals.minX)/e/3:t.globals.minXDiff===Number.MAX_VALUE&&(t.globals.timelineLabels.length>0&&(e=t.globals.timelineLabels.length),e<3&&(e=3),t.globals.minXDiff=(t.globals.maxX-t.globals.minX)/e),t.globals.minXDiff}},{key:"setZRange",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e=t.from&&i<=t.to&&s[e].classList.remove("legend-mouseover-inactive")}}(i.config.plotOptions.heatmap.colorScale.ranges[n])}else"mouseout"===t.type&&a()}},{key:"getActiveSeriesIndex",value:function(){var t=this.w,e=0;if(t.globals.series.length>1)for(var i=t.globals.series.map(function(e,i){return e.length>0&&"bar"!==t.config.series[i].type&&"column"!==t.config.series[i].type?i:-1}),s=0;s1)for(var i=t.config.series.map(function(t,e){return t.data&&t.data.length>0?e:-1}),s=0;s0)for(var s=i.length-1;s>=0;s--)e(i,s,"line");var a=t.globals.dom.baseEl.querySelectorAll(".apexcharts-area-series .apexcharts-series");if(a.length>0)for(var n=a.length-1;n>=0;n--)e(a,n,"area");var r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series .apexcharts-series");if(r.length>0)for(var o=0;o0)for(var h=0;h0)for(var d=0;d0)for(var g=0;g0)for(var m=0;m0)for(var A=0;A0?t:[]});return t}}]),t}(),_=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.lgRect={},this.yAxisWidth=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.xPadRight=0,this.xPadLeft=0}return s(t,[{key:"plotCoords",value:function(){var t=this.w,e=t.globals,i=this.getLegendsRect();e.axisCharts?this.setGridCoordsForAxisCharts(i):this.setGridCoordsForNonAxisCharts(i),this.titleSubtitleOffset(),e.gridHeight=e.gridHeight-t.config.grid.padding.top-t.config.grid.padding.bottom,e.gridWidth=e.gridWidth-t.config.grid.padding.left-t.config.grid.padding.right-this.xPadRight-this.xPadLeft,e.translateX=e.translateX+t.config.grid.padding.left+this.xPadLeft,e.translateY=e.translateY+t.config.grid.padding.top}},{key:"conditionalChecksForAxisCoords",value:function(t,e){var i=this.w;this.xAxisHeight=(t.height+e.height)*i.globals.LINE_HEIGHT_RATIO+15,this.xAxisWidth=t.width,this.xAxisHeight-e.height>i.config.xaxis.labels.maxHeight&&(this.xAxisHeight=i.config.xaxis.labels.maxHeight),i.config.xaxis.labels.minHeight&&this.xAxisHeighta&&(this.yAxisWidth=a)}},{key:"setGridCoordsForAxisCharts",value:function(t){var e=this.w,i=e.globals,s=this.getyAxisLabelsCoords(),a=this.getxAxisLabelsCoords(),n=this.getyAxisTitleCoords(),r=this.getxAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map(function(t,i){e.globals.yLabelsCoords.push({width:s[i].width,index:i}),e.globals.yTitleCoords.push({width:n[i].width,index:i})}),this.conditionalChecksForAxisCoords(a,r),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var o=this.yAxisWidth,l=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight,i.xAxisHeight=this.xAxisHeight;var h=10;switch(e.config.grid.show&&"radar"!==e.config.chart.type||(o=0,l=35),this.isSparkline&&(t={height:0,width:0},l=0,o=0,h=0),this.additionalPaddingXLabels(a),e.config.legend.position){case"bottom":i.translateY=h,i.translateX=o,i.gridHeight=i.svgHeight-t.height-l-(this.isSparkline?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-o;break;case"top":i.translateY=t.height+h,i.translateX=o,i.gridHeight=i.svgHeight-t.height-l-(this.isSparkline?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-o;break;case"left":i.translateY=h,i.translateX=t.width+o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-t.width-o;break;case"right":i.translateY=h,i.translateX=o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-t.width-o-5;break;default:throw new Error("Legend position not supported")}this.setGridXPosForDualYAxis(n,s),new W(this.ctx).setYAxisXPosition(s,n)}},{key:"setGridCoordsForNonAxisCharts",value:function(t){var e=this.w,i=e.globals,s=0;e.config.legend.show&&!e.config.legend.floating&&(s=20);var a=10,n=0;if("pie"===e.config.chart.type||"donut"===e.config.chart.type?(a+=e.config.plotOptions.pie.offsetY,n+=e.config.plotOptions.pie.offsetX):"radialBar"===e.config.chart.type&&(a+=e.config.plotOptions.radialBar.offsetY,n+=e.config.plotOptions.radialBar.offsetX),!e.config.legend.show)return i.gridHeight=i.svgHeight-35,i.gridWidth=i.gridHeight,i.translateY=a-10,void(i.translateX=n+(i.svgWidth-i.gridWidth)/2);switch(e.config.legend.position){case"bottom":i.gridHeight=i.svgHeight-t.height-35,i.gridWidth=i.gridHeight,i.translateY=a-20,i.translateX=n+(i.svgWidth-i.gridWidth)/2;break;case"top":i.gridHeight=i.svgHeight-t.height-35,i.gridWidth=i.gridHeight,i.translateY=t.height+a,i.translateX=n+(i.svgWidth-i.gridWidth)/2;break;case"left":i.gridWidth=i.svgWidth-t.width-s,i.gridHeight=i.gridWidth,i.translateY=a,i.translateX=n+t.width+s;break;case"right":i.gridWidth=i.svgWidth-t.width-s-5,i.gridHeight=i.gridWidth,i.translateY=a,i.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"setGridXPosForDualYAxis",value:function(t,e){var i=this.w;i.config.yaxis.map(function(s,a){-1===i.globals.ignoreYAxisIndexes.indexOf(a)&&!i.config.yaxis[a].floating&&i.config.yaxis[a].show&&s.opposite&&(i.globals.translateX=i.globals.translateX-(e[a].width+t[a].width)-parseInt(i.config.yaxis[a].labels.style.fontSize)/1.2-12)})}},{key:"additionalPaddingXLabels",value:function(t){var e=this,i=this.w;if("category"===i.config.xaxis.type&&i.globals.isBarHorizontal||"numeric"===i.config.xaxis.type||"datetime"===i.config.xaxis.type){var s=i.globals.isXNumeric;i.config.yaxis.forEach(function(a,n){var r;(!a.show||a.floating||-1!==i.globals.collapsedSeriesIndices.indexOf(n)||s||a.opposite&&i.globals.isBarHorizontal)&&((s&&i.globals.isMultipleYAxis&&-1!==i.globals.collapsedSeriesIndices.indexOf(n)||i.globals.isBarHorizontal&&a.opposite)&&(r=t,i.config.grid.padding.lefti.globals.gridWidth?i.globals.skipLastTimelinelabel=!0:i.globals.skipLastTimelinelabel=!1:"datetime"!==i.config.xaxis.type&&i.config.grid.padding.right1&&(i+=10);var s=this.getTitleSubtitleCoords("title"),a=this.getTitleSubtitleCoords("subtitle");e.gridHeight=e.gridHeight-s.height-a.height-i,e.translateY=e.translateY+s.height+a.height+i}},{key:"getTotalYAxisWidth",value:function(){var t=this.w,e=0,i=10,s=function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1};return t.globals.yLabelsCoords.map(function(a,n){var r=t.config.yaxis[n].floating;a.width>0&&!r?(e=e+a.width+i,s(n)&&(e=e-a.width-i)):e+=r||!t.config.yaxis[n].show?0:5}),t.globals.yTitleCoords.map(function(a,n){var r=t.config.yaxis[n].floating;i=parseInt(t.config.yaxis[n].title.style.fontSize),a.width>0&&!r?(e=e+a.width+i,s(n)&&(e=e-a.width-i)):e+=r||!t.config.yaxis[n].show?0:5}),e}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var t,e=this.w;this.timescaleLabels=e.globals.timelineLabels.slice(),e.globals.isBarHorizontal&&"datetime"===e.config.xaxis.type&&(this.timescaleLabels=e.globals.invertedTimelineLabels.slice());var i=this.timescaleLabels.map(function(t){return t.value}),s=i.reduce(function(t,e){return void 0===t?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):t.length>e.length?t:e},0);return 1.05*(t=new f(this.ctx).getTextRects(s,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:"getxAxisLabelsCoords",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.globals.timelineLabels.length>0){var s=this.getxAxisTimeScaleLabelsCoords();t={width:s.width,height:s.height}}else{var a="left"!==e.config.legend.position||"right"!==e.config.legend.position||e.config.legend.floating?0:this.lgRect.width,n=e.globals.xLabelFormatter,r=i.reduce(function(t,e){return t.length>e.length?t:e},0);e.globals.isBarHorizontal&&(r=e.globals.yAxisScale[0].result.reduce(function(t,e){return t.length>e.length?t:e},0)),r=new N(this.ctx).xLabelFormat(n,r);var o=new f(this.ctx),l=o.getTextRects(r,e.config.xaxis.labels.style.fontSize);(t={width:l.width,height:l.height}).width*i.length>e.globals.svgWidth-a-this.yAxisWidth&&0!==e.config.xaxis.labels.rotate?e.globals.isBarHorizontal||(e.globals.rotateXLabels=!0,l=o.getTextRects(r,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,"rotate(".concat(e.config.xaxis.labels.rotate," 0 0)"),!1),t.height=l.height/1.66):e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:"getyAxisLabelsCoords",value:function(){var t=this,e=this.w,i=[],s=10;return e.config.yaxis.map(function(a,n){if(a.show&&a.labels.show&&e.globals.yAxisScale[n].result.length){var r=e.globals.yLabelFormatters[n],o=r(e.globals.yAxisScale[n].niceMax,-1);if(void 0!==o&&0!==o.length||(o=e.globals.yAxisScale[n].niceMax),e.globals.isBarHorizontal)s=0,o=r(o=e.globals.labels.slice().reduce(function(t,e){return t.length>e.length?t:e},0),-1);var l=new f(t.ctx).getTextRects(o,a.labels.style.fontSize);i.push({width:l.width+s,height:l.height})}else i.push({width:0,height:0})}),i}},{key:"getxAxisTitleCoords",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var s=new f(this.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=s.width,i=s.height}return{width:e,height:i}}},{key:"getyAxisTitleCoords",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map(function(e,s){if(e.show&&void 0!==e.title.text){var a=new f(t.ctx).getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,"rotate(-90 0 0)",!1);i.push({width:a.width,height:a.height})}else i.push({width:0,height:0})}),i}},{key:"getTitleSubtitleCoords",value:function(t){var e=this.w,i=0,s=0,a="title"===t?e.config.title.floating:e.config.subtitle.floating,n=e.globals.dom.baseEl.querySelector(".apexcharts-".concat(t,"-text"));if(null!==n&&!a){var r=n.getBoundingClientRect();i=r.width,s=e.globals.axisCharts?r.height+5:r.height}return{width:i,height:s}}},{key:"getLegendsRect",value:function(){var t=this.w,e=t.globals.dom.baseEl.querySelector(".apexcharts-legend"),i=Object.assign({},d.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.lgRect={x:0,y:0,height:0,width:0},this.lgRect}}]),t}(),j=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.timeScaleArray=[]}return s(t,[{key:"calculateTimeScaleTicks",value:function(t,e){var i=this,s=this.w;if(s.globals.allSeriesCollapsed)return s.globals.labels=[],s.globals.timelineLabels=[],[];var a=new m(this.ctx),r=(e-t)/864e5;this.determineInterval(r),s.globals.disableZoomIn=!1,s.globals.disableZoomOut=!1,r<.005?s.globals.disableZoomIn=!0:r>5e4&&(s.globals.disableZoomOut=!0);var o=a.getTimeUnitsfromTimestamp(t,e),l=s.globals.gridWidth/r,h=l/24,c=h/60,d=Math.floor(24*r),u=Math.floor(24*r*60),g=Math.floor(r),f=Math.floor(r/30),p=Math.floor(r/365),x={minMinute:o.minMinute,minHour:o.minHour,minDate:o.minDate,minMonth:o.minMonth,minYear:o.minYear},b={firstVal:x,currentMinute:x.minMinute,currentHour:x.minHour,currentMonthDate:x.minDate,currentDate:x.minDate,currentMonth:x.minMonth,currentYear:x.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,numberOfMinutes:u,numberOfHours:d,numberOfDays:g,numberOfMonths:f,numberOfYears:p};switch(this.tickInterval){case"years":this.generateYearScale(b);break;case"months":case"half_year":this.generateMonthScale(b);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(b);break;case"hours":this.generateHourScale(b);break;case"minutes":this.generateMinuteScale(b)}var v=this.timeScaleArray.map(function(t){var e={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return"month"===t.unit?n({},e,{value:t.value+1}):"day"===t.unit||"hour"===t.unit?n({},e,{value:t.value}):"minute"===t.unit?n({},e,{value:t.value,minute:t.value}):t});return v.filter(function(t){var e=1,a=Math.ceil(s.globals.gridWidth/120),n=t.value;void 0!==s.config.xaxis.tickAmount&&(a=s.config.xaxis.tickAmount),v.length>a&&(e=Math.floor(v.length/a));var r=!1,o=!1;switch(i.tickInterval){case"half_year":e=7,"year"===t.unit&&(r=!0);break;case"months":e=1,"year"===t.unit&&(r=!0);break;case"months_fortnight":e=15,"year"!==t.unit&&"month"!==t.unit||(r=!0),30===n&&(o=!0);break;case"months_days":e=10,"month"===t.unit&&(r=!0),30===n&&(o=!0);break;case"week_days":e=8,"month"===t.unit&&(r=!0);break;case"days":e=1,"month"===t.unit&&(r=!0);break;case"hours":"day"===t.unit&&(r=!0);break;case"minutes":n%5!=0&&(o=!0)}if("minutes"===i.tickInterval||"hours"===i.tickInterval){if(!o)return!0}else if((n%e==0||r)&&!o)return!0})}},{key:"recalcDimensionsBasedOnFormat",value:function(t,e){var i=this.w,s=this.formatDates(t),a=this.removeOverlappingTS(s);e?i.globals.invertedTimelineLabels=a.slice():i.globals.timelineLabels=a.slice(),new _(this.ctx).plotCoords()}},{key:"determineInterval",value:function(t){switch(!0){case t>1825:this.tickInterval="years";break;case t>800&&t<=1825:this.tickInterval="half_year";break;case t>180&&t<=800:this.tickInterval="months";break;case t>90&&t<=180:this.tickInterval="months_fortnight";break;case t>60&&t<=90:this.tickInterval="months_days";break;case t>30&&t<=60:this.tickInterval="week_days";break;case t>2&&t<=30:this.tickInterval="days";break;case t>.1&&t<=2:this.tickInterval="hours";break;case t<.1:this.tickInterval="minutes";break;default:this.tickInterval="days"}}},{key:"generateYearScale",value:function(t){var e=t.firstVal,i=t.currentMonth,s=t.currentYear,a=t.daysWidthOnXAxis,n=t.numberOfYears,r=e.minYear,o=0,l=new m(this.ctx);if(e.minDate>1&&e.minMonth>0){var h=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);o=(l.determineDaysOfYear(e.minYear)-h+1)*a,r=e.minYear+1,this.timeScaleArray.push({position:o,value:r,unit:"year",year:r,month:d.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:o,value:r,unit:"year",year:s,month:d.monthMod(i+1)});for(var c=r,u=o,g=0;g1){l=(h.determineDaysOfMonths(s+1,e.minYear)-i+1)*n,o=d.monthMod(s+1);var g=a+u,f=d.monthMod(o),p=o;0===o&&(c="year",p=g,f=1,g+=u+=1),this.timeScaleArray.push({position:l,value:p,unit:c,year:g,month:f})}else this.timeScaleArray.push({position:l,value:o,unit:c,year:a,month:d.monthMod(s)});for(var x=o+1,b=l,v=0,y=1;vr.determineDaysOfMonths(e+1,i)?(g=1,o="month",c=e+=1,e):e},g=h,f=u(g,i,s);this.timeScaleArray.push({position:l,value:c,unit:o,year:s,month:d.monthMod(f),day:g});for(var p=l,x=0;xo.determineDaysOfMonths(e+1,a)&&(x=1,e+=1),{month:e,date:x}},c=function(t,e){return t>o.determineDaysOfMonths(e+1,a)?e+=1:e},u=60-e.minMinute,g=u*n,f=e.minHour+1,p=f+1;60===u&&(g=0,p=(f=e.minHour)+1);var x=i,b=c(x,s);this.timeScaleArray.push({position:g,value:f,unit:l,day:x,hour:p,year:a,month:d.monthMod(b)});for(var v=g,y=0;y=24)p=0,l="day",b=h(x+=1,b).month,b=c(x,b);var w=a+Math.floor(b/12)+0;v=0===p&&0===y?u*n:60*n+v;var k=0===p?x:p;this.timeScaleArray.push({position:v,value:k,unit:l,hour:p,day:x,year:w,month:d.monthMod(b)}),p++}}},{key:"generateMinuteScale",value:function(t){var e=t.firstVal,i=t.currentMinute,s=t.currentHour,a=t.currentDate,n=t.currentMonth,r=t.currentYear,o=t.minutesWidthOnXAxis,l=t.numberOfMinutes,h=o-(i-e.minMinute),c=e.minMinute+1,u=c+1,g=a,f=n,p=r,x=s;this.timeScaleArray.push({position:h,value:c,unit:"minute",day:g,hour:x,minute:u,year:p,month:d.monthMod(f)});for(var b=h,m=0;m=60&&(u=0,24===(x+=1)&&(x=0));var v=r+Math.floor(f/12)+0;b=o+b;var y=u;this.timeScaleArray.push({position:b,value:y,unit:"minute",hour:x,minute:u,day:g,year:v,month:d.monthMod(f)}),u++}}},{key:"createRawDateString",value:function(t,e){var i=t.year;return i+="-"+("0"+t.month.toString()).slice(-2),"day"===t.unit?i+="day"===t.unit?"-"+("0"+e).slice(-2):"-01":i+="-"+("0"+(t.day?t.day:"1")).slice(-2),"hour"===t.unit?i+="hour"===t.unit?"T"+("0"+e).slice(-2):"T00":i+="T"+("0"+(t.hour?t.hour:"0")).slice(-2),i+="minute"===t.unit?":"+("0"+e).slice(-2)+":00.000Z":":00:00.000Z"}},{key:"formatDates",value:function(t){var e=this,i=this.w;return t.map(function(t){var s=t.value.toString(),a=new m(e.ctx),n=e.createRawDateString(t,s),r=new Date(Date.parse(n));if(void 0===i.config.xaxis.labels.format){var o="dd MMM",l=i.config.xaxis.labels.datetimeFormatter;"year"===t.unit&&(o=l.year),"month"===t.unit&&(o=l.month),"day"===t.unit&&(o=l.day),"hour"===t.unit&&(o=l.hour),"minute"===t.unit&&(o=l.minute),s=a.formatDate(r,o,!0,!1)}else s=a.formatDate(r,i.config.xaxis.labels.format);return{dateString:n,position:t.position,value:s,unit:t.unit,year:t.year,month:t.month}})}},{key:"removeOverlappingTS",value:function(t){var e=this,i=new f(this.ctx),s=0,a=t.map(function(a,n){if(n>0&&e.w.config.xaxis.labels.hideOverlappingLabels){var r=i.getTextRects(t[s].value).width,o=t[s].position;return a.position>o+r+10?(s=n,a):null}return a});return a=a.filter(function(t){return null!==t})}}]),t}(),U=function(){function t(i,s){e(this,t),this.ctx=s,this.w=s.w,this.el=i,this.coreUtils=new y(this.ctx),this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[]}return s(t,[{key:"setupElements",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=["line","area","bar","rangeBar","candlestick","radar","scatter","bubble","heatmap"].indexOf(i)>-1,t.xyCharts=["line","area","bar","rangeBar","candlestick","scatter","bubble"].indexOf(i)>-1,t.isBarHorizontal=("bar"===e.chart.type||"rangeBar"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=".apexcharts"+t.cuid,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement("div"),f.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:"apexcharts-canvas "+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(e.chart.offsetX,", ").concat(e.chart.offsetY,")")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elGraphical=t.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.elLegendWrap=document.createElement("div"),t.dom.elLegendWrap.classList.add("apexcharts-legend"),t.dom.elWrap.appendChild(t.dom.elLegendWrap),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:"plotChartType",value:function(t,e){var i=this.w,s=i.config,a=i.globals,n={series:[],i:[]},r={series:[],i:[]},o={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]};a.series.map(function(e,s){void 0!==t[s].type?("column"===t[s].type||"bar"===t[s].type?(i.config.plotOptions.bar.horizontal=!1,l.series.push(e),l.i.push(s)):"area"===t[s].type?(r.series.push(e),r.i.push(s)):"line"===t[s].type?(n.series.push(e),n.i.push(s)):"scatter"===t[s].type?(o.series.push(e),o.i.push(s)):"bubble"===t[s].type||("candlestick"===t[s].type?(h.series.push(e),h.i.push(s)):console.warn("You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble")),a.comboCharts=!0):(n.series.push(e),n.i.push(s))});var c=new D(this.ctx,e),d=new E(this.ctx,e),u=new I(this.ctx),g=new F(this.ctx),f=new R(this.ctx,e),p=new Y(this.ctx),x=[];if(a.comboCharts){if(r.series.length>0&&x.push(c.draw(r.series,"area",r.i)),l.series.length>0)if(i.config.chart.stacked){var b=new M(this.ctx,e);x.push(b.draw(l.series,l.i))}else{var m=new P(this.ctx,e);x.push(m.draw(l.series,l.i))}if(n.series.length>0&&x.push(c.draw(n.series,"line",n.i)),h.series.length>0&&x.push(d.draw(h.series,h.i)),o.series.length>0){var v=new D(this.ctx,e,!0);x.push(v.draw(o.series,"scatter",o.i))}}else switch(s.chart.type){case"line":x=c.draw(a.series,"line");break;case"area":x=c.draw(a.series,"area");break;case"bar":if(s.chart.stacked)x=new M(this.ctx,e).draw(a.series);else x=new P(this.ctx,e).draw(a.series);break;case"candlestick":x=new E(this.ctx,e).draw(a.series);break;case"rangeBar":x=f.draw(a.series);break;case"heatmap":x=new X(this.ctx,e).draw(a.series);break;case"pie":case"donut":x=u.draw(a.series);break;case"radialBar":x=g.draw(a.series);break;case"radar":x=p.draw(a.series);break;default:x=c.draw(a.series)}return x}},{key:"setSVGDimensions",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=d.getDimensions(this.el),s=e.chart.width.toString().split(/[0-9]+/g).pop();if("%"===s?d.isNumber(i[0])&&(0===i[0].width&&(i=d.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width)/100):"px"!==s&&""!==s||(t.svgWidth=parseInt(e.chart.width)),"auto"!==t.svgHeight&&""!==t.svgHeight)if("%"===e.chart.height.toString().split(/[0-9]+/g).pop()){var a=d.getDimensions(this.el.parentNode);t.svgHeight=a[1]*parseInt(e.chart.height)/100}else t.svgHeight=parseInt(e.chart.height);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth;f.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight});var n=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+n+"px",t.dom.elWrap.style.width=t.svgWidth+"px",t.dom.elWrap.style.height=t.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var t=this.w.globals,e=t.translateY,i={transform:"translate("+t.translateX+", "+e+")"};f.setAttrs(t.dom.elGraphical.node,i)}},{key:"coreCalculations",value:function(){new V(this.ctx).init()}},{key:"resetGlobals",value:function(){var t=this,e=this.w.globals;e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesRangeStart=[],e.seriesRangeEnd=[],e.seriesPercent=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.stackedSeriesTotals=[],e.labels=[],e.timelineLabels=[],e.noLabelsProvided=!1,e.timescaleTicks=[],e.resizeTimer=null,e.selectionResizeTimer=null,e.seriesXvalues=t.w.config.series.map(function(t){return[]}),e.seriesYvalues=t.w.config.series.map(function(t){return[]}),e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.isDataXYZ=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialmaxX=-Number.MAX_VALUE,e.initialminX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.minXDiff=Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.config.chart.stacked=!1,this.w.globals.isMultipleYAxis=!0,!0}},{key:"excludeCollapsedSeriesInYAxis",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map(function(e,i){if(t.w.globals.isMultipleYAxis)return e.index})}},{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var t=this.w.config.series.slice(),e=new G(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:"isFormat2DArray",value:function(){var t=this.w.config.series.slice(),e=new G(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(t,e){for(var i=this.w.config,s=this.w.globals,a=0;a-1&&(n=this.activeSeriesIndex);for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:this.ctx,i=this.w.config,s=this.w.globals,a=new m(e),n=0;n0?i.labels.slice():i.xaxis.categories.slice(),o=0;o0?i.labels.slice():i.xaxis.categories.slice();l.length>0&&(this.twoDSeriesX=l,s.seriesX.push(this.twoDSeriesX))}s.labels.push(this.twoDSeriesX);var h=t[n].data.map(function(t){return d.parseNumber(t)});s.series.push(h)}s.seriesZ.push(this.threeDSeries),void 0!==t[n].name?s.seriesNames.push(t[n].name):s.seriesNames.push("series-"+parseInt(n+1))}return this.w}},{key:"parseDataNonAxisCharts",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var s=0;s0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory)i.labels=i.labels[0];else{var s=[];if(i.axisCharts){for(var a=0;a0&&(this.xaxisLabels=s.globals.timelineLabels.slice())}return s(t,[{key:"drawGridArea",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new f(this.ctx);null===t&&(t=i.group({class:"apexcharts-grid"}));var s=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,"transparent"),a=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,"transparent");return t.add(a),t.add(s),t}},{key:"drawGrid",value:function(){var t=this.w,e=new H(this.ctx),i=new W(this.ctx),s=this.w.globals,a=null;if(s.axisCharts){if(t.config.grid.show)a=this.renderGrid(),s.dom.elGraphical.add(a.el),this.drawGridArea(a.el);else{var n=this.drawGridArea();s.dom.elGraphical.add(n)}null!==a&&e.xAxisLabelCorrections(a.xAxisTickWidth),i.setYAxisTextAlignments()}}},{key:"createGridMask",value:function(){var t=this.w,e=t.globals,i=new f(this.ctx),s=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var a=0;t.config.stroke.width.forEach(function(t){a=Math.max(a,t)}),s=a}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(e.cuid)),e.dom.elGridRect=i.drawRect(-s/2,-s/2,e.gridWidth+s,e.gridHeight+s,0,"#fff"),new y(this).getLargestMarkerSize();var n=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(-n,-n,e.gridWidth+2*n,e.gridHeight+2*n,0,"#fff"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var r=e.dom.baseEl.querySelector("defs");r.appendChild(e.dom.elGridRectMask),r.appendChild(e.dom.elGridRectMarkerMask)}},{key:"renderGrid",value:function(){var t=this.w,e=new f(this.ctx),i=t.config.grid.strokeDashArray,s=e.group({class:"apexcharts-grid"}),a=e.group({class:"apexcharts-gridlines-horizontal"}),n=e.group({class:"apexcharts-gridlines-vertical"});s.add(a),s.add(n);for(var r,o=8,l=0;l2));l++);if(t.globals.isBarHorizontal){if(r=o,t.config.grid.xaxis.lines.show||t.config.xaxis.axisTicks.show)for(var h,c=t.globals.padHorizontal,d=t.globals.gridHeight,u=0;u0)for(var A=0;A0&&w0)for(var n=0,r=s.globals.gridHeight/i,o=s.globals.gridWidth,l=0,h=0;l=s.config.grid.row.colors.length&&(h=0);var c=s.config.grid.row.colors[h],d=a.drawRect(0,n,o,r,0,c,s.config.grid.row.opacity);t.add(d),d.node.classList.add("apexcharts-gridRow"),n+=s.globals.gridHeight/i}if(void 0!==s.config.grid.column.colors&&s.config.grid.column.colors.length>0)for(var u=s.globals.padHorizontal,g=s.globals.padHorizontal+s.globals.gridWidth/e,p=s.globals.gridHeight,x=0,b=0;x=s.config.grid.column.colors.length&&(b=0);var m=s.config.grid.column.colors[b],v=a.drawRect(u,0,g,p,0,m,s.config.grid.column.opacity);v.node.classList.add("apexcharts-gridColumn"),t.add(v),u+=s.globals.gridWidth/e}}},{key:"animateLine",value:function(t,e,i){var s=this.w,a=s.config.chart.animations;if(a&&!s.globals.resized&&!s.globals.dataChanged){var n=a.speed;this.anim.animateLine(t,e,i,n)}}}]),t}(),ot=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this)}return s(t,[{key:"init",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),d.isIE11()?document.getElementsByTagName("head")[0].appendChild(this.getLegendStyles()):this.appendToForeignObject(),"bottom"===i.legend.position||"top"===i.legend.position?this.legendAlignHorizontal():"right"!==i.legend.position&&"left"!==i.legend.position||this.legendAlignVertical()}}},{key:"appendToForeignObject",value:function(){var t=this.w.globals,e=document.createElementNS(t.SVGNS,"foreignObject");e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("width",t.svgWidth),e.setAttribute("height",t.svgHeight),t.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.appendChild(t.dom.elLegendWrap),e.appendChild(this.getLegendStyles()),t.dom.Paper.node.insertBefore(e,t.dom.elGraphical.node)}},{key:"drawLegends",value:function(){var t=this.w,e=t.config.legend.fontFamily,i=t.globals.seriesNames,s=t.globals.colors.slice();if("heatmap"===t.config.chart.type){var a=t.config.plotOptions.heatmap.colorScale.ranges;i=a.map(function(t){return t.name?t.name:t.from+" - "+t.to}),s=a.map(function(t){return t.color})}for(var n=t.globals.legendFormatter,r=0;r<=i.length-1;r++){var o=n(i[r],{seriesIndex:r,w:t}),l=!1,h=!1;if(t.globals.collapsedSeries.length>0)for(var c=0;c0)for(var d=0;d0?l-10:0)+(h>0?h-10:0)}s.style.position="absolute",n=n+t+i.config.legend.offsetX,r=r+e+i.config.legend.offsetY,s.style.left=n+"px",s.style.top=r+"px","bottom"===i.config.legend.position?(s.style.top="auto",s.style.bottom=10+i.config.legend.offsetY+"px"):"right"===i.config.legend.position&&(s.style.left="auto",s.style.right=25+i.config.legend.offsetX+"px"),s.style.width&&(s.style.width=parseInt(i.config.legend.width)+"px"),s.style.height&&(s.style.height=parseInt(i.config.legend.height)+"px")}},{key:"legendAlignHorizontal",value:function(){var t=this.w;t.globals.dom.baseEl.querySelector(".apexcharts-legend").style.right=0;var e=this.getLegendBBox(),i=new _(this.ctx),s=i.getTitleSubtitleCoords("title"),a=i.getTitleSubtitleCoords("subtitle"),n=0;"bottom"===t.config.legend.position?n=-e.clwh/1.8:"top"===t.config.legend.position&&(n=s.height+a.height+t.config.title.margin+t.config.subtitle.margin-15),this.setLegendWrapXY(20,n)}},{key:"legendAlignVertical",value:function(){var t=this.w,e=this.getLegendBBox(),i=0;"left"===t.config.legend.position&&(i=20),"right"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(t){var e=this.w,i=t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker");if("heatmap"!==e.config.chart.type)!t.target.classList.contains("inactive-legend")&&i&&new G(this.ctx).toggleSeriesOnHover(t,t.target);else if(i){var s=parseInt(t.target.getAttribute("rel"))-1;this.ctx.fireEvent("legendHover",[this.ctx,s,this.w]),new G(this.ctx).highlightRangeInSeries(t,t.target)}}},{key:"onLegendClick",value:function(t){if(t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker")){var e=parseInt(t.target.getAttribute("rel"))-1,i="true"===t.target.getAttribute("data:collapsed"),s=this.w.config.chart.events.legendClick;"function"==typeof s&&s(this.ctx,e,this.w),this.ctx.fireEvent("legendClick",[this.ctx,e,this.w]);var a=this.w.config.legend.markers.onClick;"function"==typeof a&&t.target.classList.contains("apexcharts-legend-marker")&&(a(this.ctx,e,this.w),this.ctx.fireEvent("legendMarkerClick",[this.ctx,e,this.w])),this.toggleDataSeries(e,i)}}},{key:"getLegendStyles",value:function(){var t=document.createElement("style");t.setAttribute("type","text/css");var e=document.createTextNode("\n \n .apexcharts-legend {\n display: flex;\n overflow: auto;\n padding: 0 10px;\n }\n\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\n flex-wrap: wrap\n }\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n flex-direction: column;\n bottom: 0;\n }\n\n .apexcharts-legend.position-bottom.left, .apexcharts-legend.position-top.left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n justify-content: flex-start;\n }\n\n .apexcharts-legend.position-bottom.center, .apexcharts-legend.position-top.center {\n justify-content: center; \n }\n\n .apexcharts-legend.position-bottom.right, .apexcharts-legend.position-top.right {\n justify-content: flex-end;\n }\n\n .apexcharts-legend-series {\n cursor: pointer;\n line-height: normal;\n }\n\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\n display: flex;\n align-items: center;\n }\n\n .apexcharts-legend-text {\n position: relative;\n font-size: 14px;\n }\n\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\n pointer-events: none;\n }\n\n .apexcharts-legend-marker {\n position: relative;\n display: inline-block;\n cursor: pointer;\n margin-right: 3px;\n }\n \n .apexcharts-legend.right .apexcharts-legend-series, .apexcharts-legend.left .apexcharts-legend-series{\n display: inline-block;\n }\n\n .apexcharts-legend-series.no-click {\n cursor: auto;\n }\n\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\n display: none !important;\n }\n\n .inactive-legend {\n opacity: 0.45;\n }");return t.appendChild(e),t}},{key:"resetToggleDataSeries",value:function(){var t=this.w,e=null,i=[];if(t.globals.axisCharts?(e=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"),(e=d.listToArray(e)).forEach(function(t){i.push(parseInt(t.getAttribute("data:realIndex")))})):(e=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"),(e=d.listToArray(e)).forEach(function(t){i.push(parseInt(t.getAttribute("rel"))-1)})),i.sort(),t.globals.collapsedSeries.length>0){for(var s=t.globals.risingSeries.slice(),a=t.config.series.slice(),n=0;n0)for(var a=0;ae.breakpoint?1:e.breakpoint>t.breakpoint?-1:0}).reverse();var n=new w({}),r=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=a[0].breakpoint,r=window.innerWidth>0?window.innerWidth:screen.width;if(r>s){var o=y.extendArrayProps(n,i.globals.initialConfig);t=d.extend(o,t),t=d.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l2&&void 0!==arguments[2]?arguments[2]:null,s=this.w,a=e||s.globals.series.length;if(null===i&&(i="bar"===s.config.chart.type&&s.config.plotOptions.bar.distributed||"heatmap"===s.config.chart.type&&s.config.plotOptions.heatmap.colorScale.inverse),i&&(a=s.globals.series[0].length*s.globals.series.length),t.lengthr.globals.gridWidth||d>r.globals.gridHeight?(e.classList.remove("hovering-zoom"),e.classList.remove("hovering-pan")):r.globals.zoomEnabled?(e.classList.remove("hovering-pan"),e.classList.add("hovering-zoom")):r.globals.panEnabled&&(e.classList.remove("hovering-zoom"),e.classList.add("hovering-pan"));var u=Math.round(c/l);n&&(u=Math.ceil(c/l),u-=1);for(var g,f=null,p=null,x=[],b=0;b1?n=this.getFirstActiveXArray(i):r=0;var l=s[n][0],h=i[n][0],c=Math.abs(t-h),d=Math.abs(e-l),u=d+c;return s.map(function(a,n){a.map(function(a,l){var h=Math.abs(e-s[n][l]),g=Math.abs(t-i[n][l]),f=g+h;f0?e:-1}),a=0;a0)for(var s=0;s-1?g[0].parentNode.style.display="none":g[0].parentNode.style.display=o.config.tooltip.items.display)}},{key:"toggleActiveInactiveSeries",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var i=e.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group");i&&(i.classList.add("active"),i.style.display=e.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(t){var e=t.i,i=t.j,s=this.w,a=this.ctx.series.filteredSeriesX(),n="",r=null,o=null,l={series:s.globals.series,seriesIndex:e,dataPointIndex:i,w:s},h=s.globals.ttZFormatter;null===i?o=s.globals.series[e]:s.globals.isXNumeric?(n=a[e][i],0===a[e].length&&(n=a[this.tooltipUtil.getFirstActiveXArray(a)][i])):n=void 0!==s.globals.labels[i]?s.globals.labels[i]:"";var c=n;s.globals.isXNumeric&&"datetime"===s.config.xaxis.type?n=new N(this.ctx).xLabelFormat(s.globals.ttKeyFormatter,c):n=s.globals.xLabelFormatter(c,l);return void 0!==s.config.tooltip.x.formatter&&(n=s.globals.ttKeyFormatter(c,l)),s.globals.seriesZ.length>0&&s.globals.seriesZ[0].length>0&&(r=h(s.globals.seriesZ[e][i],s)),{val:o,xVal:n,xAxisTTVal:"function"==typeof s.config.xaxis.tooltip.formatter?s.globals.xaxisTooltipFormatter(c,l):n,zVal:r}}},{key:"handleCustomTooltip",value:function(t){var e=t.i,i=t.j,s=this.w;this.ttCtx.getElTooltip().innerHTML=s.config.tooltip.custom({ctx:this.ctx,series:s.globals.series,seriesIndex:e,dataPointIndex:i,w:s})}}]),t}(),ut=function(){function t(i){e(this,t),this.ttCtx=i,this.ctx=i.ctx,this.w=i.w}return s(t,[{key:"moveXCrosshairs",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,s=this.w,a=i.getElXCrosshairs(),n=t-i.xcrosshairsWidth/2,r=s.globals.labels.slice().length;if(null!==e&&(n=s.globals.gridWidth/r*e),"tickWidth"===s.config.xaxis.crosshairs.width||"barWidth"===s.config.xaxis.crosshairs.width?n+i.xcrosshairsWidth>s.globals.gridWidth&&(n=s.globals.gridWidth-i.xcrosshairsWidth):null!==e&&(n+=s.globals.gridWidth/r/2),n<0&&(n=0),n>s.globals.gridWidth&&(n=s.globals.gridWidth),null!==a&&(a.setAttribute("x",n),a.setAttribute("x1",n),a.setAttribute("x2",n),a.setAttribute("y2",s.globals.gridHeight),a.classList.add("active")),i.blxaxisTooltip){var o=n;"tickWidth"!==s.config.xaxis.crosshairs.width&&"barWidth"!==s.config.xaxis.crosshairs.width||(o=n+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&(f.setAttrs(e.ycrosshairs,{y1:t,y2:t}),f.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t}))}},{key:"moveXAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip){i.xaxisTooltip.classList.add("active");var s=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var a;a=new f(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=a.width+"px",i.xaxisTooltip.style.left=t+"px",i.xaxisTooltip.style.top=s+"px"}}}},{key:"moveYAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var s=parseInt(i.ycrosshairsHidden.getAttribute("y1")),a=e.globals.translateY+s,n=i.yaxisTTEls[t].getBoundingClientRect().height,r=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(r-=26),a-=n/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add("active"),i.yaxisTTEls[t].style.top=a+"px",i.yaxisTTEls[t].style.left=r+e.config.yaxis[t].tooltip.offsetX+"px"):i.yaxisTTEls[t].classList.remove("active")}},{key:"moveTooltip",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=this.w,a=this.ttCtx,n=a.getElTooltip(),r=a.tooltipRect,o=null!==i?parseInt(i):1,l=parseInt(t)+o+5,h=parseInt(e)+o/2;if(l>s.globals.gridWidth/2&&(l=l-r.ttWidth-o-15),l>s.globals.gridWidth-r.ttWidth-10&&(l=s.globals.gridWidth-r.ttWidth),l<-20&&(l=-20),s.config.tooltip.followCursor){var c=a.getElGrid().getBoundingClientRect();h=a.e.clientY+s.globals.translateY-c.top-r.ttHeight/2}var d=this.positionChecks(r,l,h);l=d.x,h=d.y,isNaN(l)||(l+=s.globals.translateX,n.style.left=l+"px",n.style.top=h+"px")}},{key:"positionChecks",value:function(t,e,i){var s=this.w;return t.ttHeight+i>s.globals.gridHeight&&(i=s.globals.gridHeight-t.ttHeight+s.globals.translateY),i<0&&(i=0),{x:e,y:i}}},{key:"moveMarkers",value:function(t,e){var i=this.w,s=this.ttCtx;if(i.globals.markers.size[t]>0)for(var a=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(t,"'] .apexcharts-marker")),n=0;n2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=this.w;"bubble"!==a.config.chart.type&&this.newPointSize(t,e);var n=e.getAttribute("cx"),r=e.getAttribute("cy");if(null!==i&&null!==s&&(n=i,r=s),this.tooltipPosition.moveXCrosshairs(n),!this.fixedTooltip){if("radar"===a.config.chart.type){var o=this.ttCtx.getElGrid().getBoundingClientRect();n=this.ttCtx.e.clientX-o.left}this.tooltipPosition.moveTooltip(n,r,a.config.markers.hover.size)}}},{key:"enlargePoints",value:function(t){for(var e=this.w,i=this.ttCtx,s=t,a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),n=e.config.markers.hover.size,r=0;rr.globals.gridWidth/2&&(s=h-n.tooltipRect.ttWidth/2+d),n.w.config.tooltip.followCursor){var g=n.getElGrid().getBoundingClientRect();a=n.e.clientY-g.top+r.globals.translateY/2-10}}return{x:s,y:a}}},{key:"handleMarkerTooltip",value:function(t){var e,i,s=t.e,a=t.opt,n=t.x,r=t.y,o=this.w,l=this.ttCtx;if(s.target.classList.contains("apexcharts-marker")){var h=parseInt(a.paths.getAttribute("cx")),c=parseInt(a.paths.getAttribute("cy")),u=parseFloat(a.paths.getAttribute("val"));if(i=parseInt(a.paths.getAttribute("rel")),e=parseInt(a.paths.parentNode.parentNode.parentNode.getAttribute("rel"))-1,l.intersect){var g=d.findAncestor(a.paths,"apexcharts-series");g&&(e=parseInt(g.getAttribute("data:realIndex")))}if(l.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:e,j:i,shared:!l.showOnIntersect&&o.config.tooltip.shared}),"mouseup"===s.type&&l.markerClick(s,e,i),n=h,r=c+o.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var f=l.getElGrid().getBoundingClientRect();r=l.e.clientY+o.globals.translateY-f.top}u<0&&(r=c),l.marker.enlargeCurrentPoint(i,a.paths,n,r)}return{x:n,y:r}}},{key:"handleBarTooltip",value:function(t){var e,i,s=t.e,a=t.opt,n=this.w,r=this.ttCtx,o=r.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:s,opt:a});e=d.i;var u=d.barHeight,g=d.j;if(n.globals.isBarHorizontal&&r.hasBars()||!n.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(n.config.stroke.width)?n.config.stroke.width[e]:n.config.stroke.width,l=h):n.globals.comboCharts||n.config.tooltip.shared||(l/=2),isNaN(c)&&(c=n.globals.svgHeight-r.tooltipRect.ttHeight),h+r.tooltipRect.ttWidth>n.globals.gridWidth?h-=r.tooltipRect.ttWidth:h<0&&(h+=r.tooltipRect.ttWidth),r.w.config.tooltip.followCursor){var f=r.getElGrid().getBoundingClientRect();c=r.e.clientY-f.top}if(null===r.tooltip&&(r.tooltip=n.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),n.config.tooltip.shared||(n.globals.comboChartsHasBars?r.tooltipPosition.moveXCrosshairs(l+i/2):r.tooltipPosition.moveXCrosshairs(l)),!r.fixedTooltip&&(!n.config.tooltip.shared||n.globals.isBarHorizontal&&r.hasBars())){x&&(h=n.globals.gridWidth-h),o.style.left=h+n.globals.translateX+"px";var p=parseInt(a.paths.parentNode.getAttribute("data:realIndex")),x=n.globals.isMultipleYAxis?n.config.yaxis[p]&&n.config.yaxis[p].reversed:n.config.yaxis[0].reversed;!x||n.globals.isBarHorizontal&&r.hasBars()||(c=c+u-2*(n.globals.series[e][g]<0?u:0)),r.tooltipRect.ttHeight+c>n.globals.gridHeight?(c=n.globals.gridHeight-r.tooltipRect.ttHeight+n.globals.translateY,o.style.top=c+"px"):o.style.top=c+n.globals.translateY-r.tooltipRect.ttHeight/2+"px"}}},{key:"getBarTooltipXY",value:function(t){var e=t.e,i=t.opt,s=this.w,a=null,n=this.ttCtx,r=0,o=0,l=0,h=0,c=0,d=e.target.classList;if(d.contains("apexcharts-bar-area")||d.contains("apexcharts-candlestick-area")||d.contains("apexcharts-rangebar-area")){var u=e.target,g=u.getBoundingClientRect(),f=i.elGrid.getBoundingClientRect(),p=g.height;c=g.height;var x=g.width,b=parseInt(u.getAttribute("cx")),m=parseInt(u.getAttribute("cy"));h=parseFloat(u.getAttribute("barWidth"));var v="touchmove"===e.type?e.touches[0].clientX:e.clientX;a=parseInt(u.getAttribute("j")),r=parseInt(u.parentNode.getAttribute("rel"))-1,s.globals.comboCharts&&(r=parseInt(u.parentNode.getAttribute("data:realIndex"))),n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:r,j:a,shared:!n.showOnIntersect&&s.config.tooltip.shared}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(o=v-f.left+15,l=m-n.dataPointsDividedHeight+p/2-n.tooltipRect.ttHeight/2):(o=s.globals.isXNumeric?b-x/2:b-n.dataPointsDividedWidth+x/2,l=e.clientY-f.top-n.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((o=b)0&&i.setAttribute("width",e.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(t,e,i){var s=this.ttCtx,a=this.w,n=a.globals.yLabelFormatters[t];if(s.blyaxisTooltip){var r=s.getElGrid().getBoundingClientRect(),o=(e-r.top)*i.yRatio[t],l=a.globals.maxYArr[t]-a.globals.minYArr[t],h=a.globals.minYArr[t]+(l-o);s.tooltipPosition.moveYCrosshairs(e-r.top),s.yaxisTooltipText[t].innerHTML=n(h),s.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),xt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var s=this.w;this.tConfig=s.config.tooltip,this.tooltipUtil=new ct(this),this.tooltipLabels=new dt(this),this.tooltipPosition=new ut(this),this.marker=new gt(this),this.intersect=new ft(this),this.axesTooltip=new pt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!s.globals.isBarHorizontal&&this.tConfig.shared}return s(t,[{key:"getElTooltip",value:function(t){return t||(t=this),t.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip")}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(t){var e=this.w;this.xyRatios=t,this.blxaxisTooltip=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.blyaxisTooltip=e.config.yaxis[0].tooltip.enabled&&e.globals.axisCharts,this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),i.classList.add(this.tConfig.theme),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var s=new H(this.ctx);this.xAxisTicksPositions=s.getXAxisTicksPositions()}if((e.globals.comboCharts&&!this.tConfig.shared||this.tConfig.intersect&&!this.tConfig.shared||("bar"===e.config.chart.type||"rangeBar"===e.config.chart.type)&&!this.tConfig.shared)&&(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var a=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(a=this.showOnIntersect?1:e.globals.series.length),this.ttItems=this.createTTElements(a),this.addSVGEvents()}}},{key:"createTTElements",value:function(t){for(var e=this.w,i=[],s=this.getElTooltip(),a=0;a0&&this.addPathsEventListeners(u,h);var g=t.globals.dom.baseEl.querySelectorAll(".apexcharts-area-series .apexcharts-marker");g.length>0&&this.addPathsEventListeners(g,h),this.hasBars()&&!this.tConfig.shared&&this.addBarsEventListeners(h)}}},{key:"drawFixedTooltipRect",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),s=i.width+10,a=i.height+10,n=this.tConfig.fixed.offsetX,r=this.tConfig.fixed.offsetY;return this.tConfig.fixed.position.toLowerCase().indexOf("right")>-1&&(n=n+t.globals.svgWidth-s+10),this.tConfig.fixed.position.toLowerCase().indexOf("bottom")>-1&&(r=r+t.globals.svgHeight-a-10),e.style.left=n+"px",e.style.top=r+"px",{x:n,y:r,ttWidth:s,ttHeight:a}}},{key:"addPointsEventsListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker");this.addPathsEventListeners(e,t)}},{key:"addBarsEventListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area");this.addPathsEventListeners(e,t)}},{key:"addPathsEventListeners",value:function(t,e){for(var i=this,s=this,a=function(a){var n={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};i.w.globals.tooltipOpts=n;["mousemove","mouseup","touchmove","mouseout","touchend"].map(function(e){return t[a].addEventListener(e,s.seriesHover.bind(s,n),{capture:!1,passive:!0})})},n=0;nl.top+l.height)this.handleMouseOut(n);else{if(Array.isArray(this.tConfig.enabledOnSeries)){var d=parseInt(n.paths.getAttribute("index"));if(this.tConfig.enabledOnSeries.indexOf(d)<0)return void this.handleMouseOut(n)}var u=this.getElTooltip(),g=this.getElXCrosshairs(),f=r.globals.xyCharts||"bar"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.hasBars;if(r.globals.isBarHorizontal&&this.hasBars()&&(f=!1),"mousemove"===a.type||"touchmove"===a.type||"mouseup"===a.type){if(null!==g&&g.classList.add("active"),null!==this.ycrosshairs&&this.blyaxisTooltip&&this.ycrosshairs.classList.add("active"),f&&!this.showOnIntersect){e=(o=this.tooltipUtil.getNearestValues({context:this,hoverArea:n.hoverArea,elGrid:n.elGrid,clientX:h,clientY:c,hasBars:this.hasBars})).j;var p=o.capturedSeries;if(o.hoverX<0||o.hoverX>r.globals.gridWidth)return void this.handleMouseOut(n);if(null!==p){if(null===r.globals.series[p][e])return void n.tooltipEl.classList.remove("active");void 0!==r.globals.series[p][e]?this.tConfig.shared&&this.tooltipUtil.isXoverlap(e)&&this.tooltipUtil.isinitialSeriesSameLen()?this.create(a,this,p,e,n.ttItems):this.create(a,this,p,e,n.ttItems,!1):this.tooltipUtil.isXoverlap(e)&&this.create(a,this,0,e,n.ttItems)}else this.tooltipUtil.isXoverlap(e)&&this.create(a,this,0,e,n.ttItems)}else if("heatmap"===r.config.chart.type){var x=this.intersect.handleHeatTooltip({e:a,opt:n,x:i,y:s});i=x.x,s=x.y,u.style.left=i+"px",u.style.top=s+"px"}else this.hasBars&&this.intersect.handleBarTooltip({e:a,opt:n}),this.hasMarkers&&this.intersect.handleMarkerTooltip({e:a,opt:n,x:i,y:s});if(this.blyaxisTooltip)for(var b=0;b0}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"markerClick",value:function(t,e,i){var s=this.w;"function"==typeof s.config.chart.events.markerClick&&s.config.chart.events.markerClick(t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:s}),this.ctx.fireEvent("markerClick",[t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:s}])}},{key:"create",value:function(t,e,i,s,a){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,r=this.w,o=e;"mouseup"===t.type&&this.markerClick(t,i,s),null===n&&(n=this.tConfig.shared);var l=this.hasMarkers(),h=this.getElBars();if(n){if(o.tooltipLabels.drawSeriesTexts({ttItems:a,i:i,j:s,shared:!this.showOnIntersect&&this.tConfig.shared}),l&&(r.globals.markers.largestSize>0?o.marker.enlargePoints(s):o.tooltipPosition.moveDynamicPointsOnHover(s)),this.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(h),this.barSeriesHeight>0)){var c=new f(this.ctx),d=r.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(s,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(s);for(var u=0;u\n \n \n\n',title:this.localeValues.zoomIn,class:"apexcharts-zoom-in-icon"}),this.t.zoomout&&t.config.chart.zoom.enabled&&s.push({el:this.elZoomOut,icon:"string"==typeof this.t.zoomout?this.t.zoomout:'\n \n \n\n',title:this.localeValues.zoomOut,class:"apexcharts-zoom-out-icon"}),this.t.zoom&&t.config.chart.zoom.enabled&&s.push({el:this.elZoom,icon:"string"==typeof this.t.zoom?this.t.zoom:'\n \n \n \n',title:this.localeValues.selectionZoom,class:t.globals.isTouchDevice?"hidden":"apexcharts-zoom-icon"}),this.t.selection&&t.config.chart.selection.enabled&&s.push({el:this.elSelection,icon:"string"==typeof this.t.selection?this.t.selection:'\n \n \n',title:this.localeValues.selection,class:t.globals.isTouchDevice?"hidden":"apexcharts-selection-icon"}),this.t.pan&&t.config.chart.zoom.enabled&&s.push({el:this.elPan,icon:"string"==typeof this.t.pan?this.t.pan:'\n \n \n \n \n \n \n \n',title:this.localeValues.pan,class:t.globals.isTouchDevice?"hidden":"apexcharts-pan-icon"}),this.t.reset&&t.config.chart.zoom.enabled&&s.push({el:this.elZoomReset,icon:"string"==typeof this.t.reset?this.t.reset:'\n \n \n',title:this.localeValues.reset,class:"apexcharts-reset-zoom-icon"}),this.t.download&&s.push({el:this.elMenuIcon,icon:"string"==typeof this.t.download?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var a=0;a0&&e.height>0&&this.slDraggableRect.selectize().resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,s={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(s),this.makeSelectionRectDraggable(),"function"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:"drawSelectionRect",value:function(t){var e=t.x,i=t.y,s=t.width,a=t.height,n=t.translateX,r=t.translateY,o=this.w,l=this.zoomRect,h=this.selectionRect;if(this.dragged||null!==o.globals.selection){var c={transform:"translate("+n+", "+r+")"};o.globals.zoomEnabled&&this.dragged&&(l.attr({x:e,y:i,width:s,height:a,fill:o.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":o.config.chart.zoom.zoomedArea.fill.opacity,stroke:o.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":o.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":o.config.chart.zoom.zoomedArea.stroke.opacity}),f.setAttrs(l.node,c)),o.globals.selectionEnabled&&(h.attr({x:e,y:i,width:s>0?s:0,height:a>0?a:0,fill:o.config.chart.selection.fill.color,"fill-opacity":o.config.chart.selection.fill.opacity,stroke:o.config.chart.selection.stroke.color,"stroke-width":o.config.chart.selection.stroke.width,"stroke-dasharray":o.config.chart.selection.stroke.dashArray,"stroke-opacity":o.config.chart.selection.stroke.opacity}),f.setAttrs(h.node,c))}}},{key:"hideSelectionRect",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(t){var e=t.context,i=t.zoomtype,s=this.w,a=e,n=this.gridRect.getBoundingClientRect(),r=a.startX-1,o=a.startY,l=a.clientX-n.left-r,h=a.clientY-n.top-o,c=0,d=0,u={};return(Math.abs(l+r)>s.globals.gridWidth||a.clientX-n.left<0)&&(a.hideSelectionRect(this.zoomRect),a.dragged=!1,a.w.globals.mousedown=!1),r>a.clientX-n.left&&(c=-(l=Math.abs(l))),o>a.clientY-n.top&&(d=-(h=Math.abs(h))),u="x"===i?{x:r,y:0,width:l,height:s.globals.gridHeight,translateX:c,translateY:0}:"y"===i?{x:0,y:o,width:s.globals.gridWidth,height:h,translateX:0,translateY:d}:{x:r,y:o,width:l,height:h,translateX:c,translateY:d},a.drawSelectionRect(u),a.selectionDragging("resizing"),u}},{key:"selectionDragging",value:function(t,e){var i=this,s=this.w,a=this.xyRatios,n=this.selectionRect,r=0;"resizing"===t&&(r=30),"function"==typeof s.config.chart.events.selection&&s.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout(function(){var t=i.gridRect.getBoundingClientRect(),e=n.node.getBoundingClientRect(),r=s.globals.xAxisScale.niceMin+(e.left-t.left)*a.xRatio,o=s.globals.xAxisScale.niceMin+(e.right-t.left)*a.xRatio,l=s.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*a.yRatio[0],h=s.globals.yAxisScale[0].niceMax-(e.top-t.top)*a.yRatio[0];s.config.chart.events.selection(i.ctx,{xaxis:{min:r,max:o},yaxis:{min:l,max:h}})},r))}},{key:"selectionDrawn",value:function(t){var e=t.context,i=t.zoomtype,s=this.w,a=e,n=this.xyRatios,r=this.ctx.toolbar;if(a.startX>a.endX){var o=a.startX;a.startX=a.endX,a.endX=o}if(a.startY>a.endY){var l=a.startY;a.startY=a.endY,a.endY=l}var h=s.globals.xAxisScale.niceMin+a.startX*n.xRatio,c=s.globals.xAxisScale.niceMin+a.endX*n.xRatio,u=[],g=[];if(s.config.yaxis.forEach(function(t,e){u.push(Math.floor(s.globals.yAxisScale[e].niceMax-n.yRatio[e]*a.startY)),g.push(Math.floor(s.globals.yAxisScale[e].niceMax-n.yRatio[e]*a.endY))}),a.dragged&&(a.dragX>10||a.dragY>10)&&h!==c)if(s.globals.zoomEnabled){var f=d.clone(s.config.yaxis);s.globals.zoomed||(s.globals.lastXAxis=d.clone(s.config.xaxis),s.globals.lastYAxis=d.clone(s.config.yaxis));var p={min:h,max:c};if("xy"!==i&&"y"!==i||f.forEach(function(t,e){f[e].min=g[e],f[e].max=u[e]}),s.config.chart.zoom.autoScaleYaxis){var x=new B(a.ctx);f=x.autoScaleY(a.ctx,{xaxis:p})}if(r){var b=r.getBeforeZoomRange(p,f);b&&(p=b.xaxis?b.xaxis:p,f=b.yaxis?b.yaxe:f)}a.ctx._updateOptions({xaxis:p,yaxis:f},!1,a.w.config.chart.animations.dynamicAnimation.enabled),"function"==typeof s.config.chart.events.zoomed&&r.zoomCallback(p,f),s.globals.zoomed=!0}else if(s.globals.selectionEnabled){var m,v=null;m={min:h,max:c},"xy"!==i&&"y"!==i||(v=d.clone(s.config.yaxis)).forEach(function(t,e){v[e].min=g[e],v[e].max=u[e]}),s.globals.selection=a.selection,"function"==typeof s.config.chart.events.selection&&s.config.chart.events.selection(a.ctx,{xaxis:m,yaxis:v})}}},{key:"panDragging",value:function(t){var e,i=t.context,s=(t.zoomtype,this.w),a=i;if(void 0!==s.globals.lastClientPosition.x){var n=s.globals.lastClientPosition.x-a.clientX,r=s.globals.lastClientPosition.y-a.clientY;Math.abs(n)>Math.abs(r)&&n>0?e="left":Math.abs(n)>Math.abs(r)&&n<0?e="right":Math.abs(r)>Math.abs(n)&&r>0?e="up":Math.abs(r)>Math.abs(n)&&r<0&&(e="down")}s.globals.lastClientPosition={x:a.clientX,y:a.clientY};var o=s.globals.minX,l=s.globals.maxX;this.panScrolled(e,o,l)}},{key:"panScrolled",value:function(t,e,i){var s=this.w,a=this.xyRatios,n=d.clone(s.config.yaxis);"left"===t?(e=s.globals.minX+s.globals.gridWidth/15*a.xRatio,i=s.globals.maxX+s.globals.gridWidth/15*a.xRatio):"right"===t&&(e=s.globals.minX-s.globals.gridWidth/15*a.xRatio,i=s.globals.maxX-s.globals.gridWidth/15*a.xRatio),(es.globals.initialmaxX)&&(e=s.globals.minX,i=s.globals.maxX);var r={min:e,max:i};s.config.chart.zoom.autoScaleYaxis&&(n=new B(me.ctx).autoScaleY(me.ctx,{xaxis:r}));this.ctx._updateOptions({xaxis:{min:e,max:i},yaxis:n},!1,!1),"function"==typeof s.config.chart.events.scrolled&&s.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(),vt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"draw",value:function(){this.drawTitleSubtitle("title"),this.drawTitleSubtitle("subtitle")}},{key:"drawTitleSubtitle",value:function(t){var e=this.w,i="title"===t?e.config.title:e.config.subtitle,s=e.globals.svgWidth/2,a=i.offsetY,n="middle";if("left"===i.align?(s=10,n="start"):"right"===i.align&&(s=e.globals.svgWidth-10,n="end"),s+=i.offsetX,a=a+parseInt(i.style.fontSize)+2,void 0!==i.text){var r=new f(this.ctx).drawText({x:s,y:a,text:i.text,textAnchor:n,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,foreColor:i.style.color,opacity:1});r.node.setAttribute("class","apexcharts-".concat(t,"-text")),e.globals.dom.Paper.add(r)}}}]),t}();st="undefined"!=typeof window?window:void 0,at=function(e,i){var s=(void 0!==this?this:e).SVG=function(t){if(s.supported)return t=new s.Doc(t),s.parser.draw||s.prepare(),t};if(s.ns="http://www.w3.org/2000/svg",s.xmlns="http://www.w3.org/2000/xmlns/",s.xlink="http://www.w3.org/1999/xlink",s.svgjs="http://svgjs.com/svgjs",s.supported=!0,!s.supported)return!1;s.did=1e3,s.eid=function(t){return"Svgjs"+d(t)+s.did++},s.create=function(t){var e=i.createElementNS(this.ns,t);return e.setAttribute("id",this.eid(t)),e},s.extend=function(){var t,e,i,a;for(e=(t=[].slice.call(arguments)).pop(),a=t.length-1;a>=0;a--)if(t[a])for(i in e)t[a].prototype[i]=e[i];s.Set&&s.Set.inherit&&s.Set.inherit()},s.invent=function(t){var e="function"==typeof t.create?t.create:function(){this.constructor.call(this,s.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&s.extend(e,t.extend),t.construct&&s.extend(t.parent||s.Container,t.construct),e},s.adopt=function(t){return t?t.instance?t.instance:((i="svg"==t.nodeName?t.parentNode instanceof e.SVGElement?new s.Nested:new s.Doc:"linearGradient"==t.nodeName?new s.Gradient("linear"):"radialGradient"==t.nodeName?new s.Gradient("radial"):s[d(t.nodeName)]?new(s[d(t.nodeName)]):new s.Element(t)).type=t.nodeName,i.node=t,t.instance=i,i instanceof s.Doc&&i.namespace().defs(),i.setData(JSON.parse(t.getAttribute("svgjs:data"))||{}),i):null;var i},s.prepare=function(){var t=i.getElementsByTagName("body")[0],e=(t?new s.Doc(t):s.adopt(i.documentElement).nested()).size(2,0);s.parser={body:t||i.documentElement,draw:e.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:e.polyline().node,path:e.path().node,native:s.create("svg")}},s.parser={native:s.create("svg")},i.addEventListener("DOMContentLoaded",function(){s.parser.draw||s.prepare()},!1),s.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},s.utils={map:function(t,e){var i,s=t.length,a=[];for(i=0;i1?1:t,new s.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),s.Color.test=function(t){return t+="",s.regex.isHex.test(t)||s.regex.isRgb.test(t)},s.Color.isRgb=function(t){return t&&"number"==typeof t.r&&"number"==typeof t.g&&"number"==typeof t.b},s.Color.isColor=function(t){return s.Color.isRgb(t)||s.Color.test(t)},s.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},s.extend(s.Array,{morph:function(t){if(this.destination=this.parse(t),this.value.length!=this.destination.length){for(var e=this.value[this.value.length-1],i=this.destination[this.destination.length-1];this.value.length>this.destination.length;)this.destination.push(i);for(;this.value.length=0;s--)this.value[s]=[this.value[s][0]+t,this.value[s][1]+e];return this},size:function(t,e){var i,s=this.bbox();for(i=this.value.length-1;i>=0;i--)s.width&&(this.value[i][0]=(this.value[i][0]-s.x)*t/s.width+s.x),s.height&&(this.value[i][1]=(this.value[i][1]-s.y)*e/s.height+s.y);return this},bbox:function(){return s.parser.draw||s.prepare(),s.parser.poly.setAttribute("points",this.toString()),s.parser.poly.getBBox()}});for(var a={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],["M",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],["L",t[0],t[1]]},H:function(t,e){return e.x=t[0],["H",t[0]]},V:function(t,e){return e.y=t[0],["V",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],["C",t[0],t[1],t[2],t[3],t[4],t[5]]},S:function(t,e){return e.x=t[2],e.y=t[3],["S",t[0],t[1],t[2],t[3]]},Q:function(t,e){return e.x=t[2],e.y=t[3],["Q",t[0],t[1],t[2],t[3]]},T:function(t,e){return e.x=t[0],e.y=t[1],["T",t[0],t[1]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,["Z"]},A:function(t,e){return e.x=t[5],e.y=t[6],["A",t[0],t[1],t[2],t[3],t[4],t[5],t[6]]}},n="mlhvqtcsaz".split(""),r=0,o=n.length;r=0;a--)"M"==(s=this.value[a][0])||"L"==s||"T"==s?(this.value[a][1]+=t,this.value[a][2]+=e):"H"==s?this.value[a][1]+=t:"V"==s?this.value[a][1]+=e:"C"==s||"S"==s||"Q"==s?(this.value[a][1]+=t,this.value[a][2]+=e,this.value[a][3]+=t,this.value[a][4]+=e,"C"==s&&(this.value[a][5]+=t,this.value[a][6]+=e)):"A"==s&&(this.value[a][6]+=t,this.value[a][7]+=e);return this},size:function(t,e){var i,s,a=this.bbox();for(i=this.value.length-1;i>=0;i--)"M"==(s=this.value[i][0])||"L"==s||"T"==s?(this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x,this.value[i][2]=(this.value[i][2]-a.y)*e/a.height+a.y):"H"==s?this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x:"V"==s?this.value[i][1]=(this.value[i][1]-a.y)*e/a.height+a.y:"C"==s||"S"==s||"Q"==s?(this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x,this.value[i][2]=(this.value[i][2]-a.y)*e/a.height+a.y,this.value[i][3]=(this.value[i][3]-a.x)*t/a.width+a.x,this.value[i][4]=(this.value[i][4]-a.y)*e/a.height+a.y,"C"==s&&(this.value[i][5]=(this.value[i][5]-a.x)*t/a.width+a.x,this.value[i][6]=(this.value[i][6]-a.y)*e/a.height+a.y)):"A"==s&&(this.value[i][1]=this.value[i][1]*t/a.width,this.value[i][2]=this.value[i][2]*e/a.height,this.value[i][6]=(this.value[i][6]-a.x)*t/a.width+a.x,this.value[i][7]=(this.value[i][7]-a.y)*e/a.height+a.y);return this},equalCommands:function(t){var e,i,a;for(t=new s.PathArray(t),a=this.value.length===t.value.length,e=0,i=this.value.length;a&&el);return n},bbox:function(){return s.parser.draw||s.prepare(),s.parser.path.setAttribute("d",this.toString()),s.parser.path.getBBox()}}),s.Number=s.invent({create:function(t,e){this.value=0,this.unit=e||"","number"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-3.4e38:3.4e38:"string"==typeof t?(e=t.match(s.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),"%"==e[5]?this.value/=100:"s"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof s.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return("%"==this.unit?~~(1e8*this.value)/1e6:"s"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new s.Number(t),new s.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new s.Number(t),new s.Number(this-t,this.unit||t.unit)},times:function(t){return t=new s.Number(t),new s.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new s.Number(t),new s.Number(this/t,this.unit||t.unit)},to:function(t){var e=new s.Number(this);return"string"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new s.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new s.Number(this.destination).minus(this).times(t).plus(this):this}}}),s.Element=s.invent({create:function(t){this._stroke=s.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute("stroke")||this._stroke)},extend:{x:function(t){return this.attr("x",t)},y:function(t){return this.attr("y",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr("width",t)},height:function(t){return this.attr("height",t)},size:function(t,e){var i=g(this,t,e);return this.width(new s.Number(i.width)).height(new s.Number(i.height))},clone:function(t){this.writeDataToDom();var e=b(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr("id",t)},inside:function(t,e){var i=this.bbox();return t>i.x&&e>i.y&&t/,"").replace(/<\/svg>$/,"");e.innerHTML=""+t.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var a=0,n=e.firstChild.childNodes.length;a":function(t){return-Math.cos(t*Math.PI)/2+.5},">":function(t){return Math.sin(t*Math.PI/2)},"<":function(t){return 1-Math.cos(t*Math.PI/2)}},s.morph=function(t){return function(e,i){return new s.MorphObj(e,i).at(t)}},s.Situation=s.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new s.Number(t.duration).valueOf(),this.delay=new s.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),s.FX=s.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(e,i,a){"object"===t(e)&&(i=e.ease,a=e.delay,e=e.duration);var n=new s.Situation({duration:e||1e3,delay:a||0,ease:s.easing[i||"-"]||i});return this.queue(n),this},delay:function(t){var e=new s.Situation({duration:t,delay:0,ease:s.easing["-"]});return this.queue(e)},target:function(t){return t&&t instanceof s.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=e.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){e.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return("function"==typeof t||t instanceof s.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof s.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e,i,a=this.situation;if(a.init)return this;for(t in a.animations)for(i=this.target()[t](),Array.isArray(i)||(i=[i]),Array.isArray(a.animations[t])||(a.animations[t]=[a.animations[t]]),e=i.length;e--;)a.animations[t][e]instanceof s.Number&&(i[e]=new s.Number(i[e])),a.animations[t][e]=i[e].morph(a.animations[t][e]);for(t in a.attrs)a.attrs[t]=new s.MorphObj(this.target().attr(t),a.attrs[t]);for(t in a.styles)a.styles[t]=new s.MorphObj(this.target().style(t),a.styles[t]);return a.initialTransformation=this.target().matrixify(),a.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},reset:function(){if(this.situation){var t=this.situation;this.stop(),this.situation=t,this.atStart()}return this},finish:function(){for(this.stop(!0,!1);this.dequeue().situation&&this.stop(!0,!1););return this.clearQueue().clearCurrent(),this},atStart:function(){return this.at(0,!0)},atEnd:function(){return!0===this.situation.loops&&(this.situation.loops=this.situation.loop+1),"number"==typeof this.situation.loops?this.at(this.situation.loops,!0):this.at(1,!0)},at:function(t,e){var i=this.situation.duration/this._speed;return this.absPos=t,e||(this.situation.reversed&&(this.absPos=1-this.absPos),this.absPos+=this.situation.loop),this.situation.start=+new Date-this.absPos*i,this.situation.finish=this.situation.start+i,this.step(!0)},speed:function(t){return 0===t?this.pause():t?(this._speed=t,this.at(this.absPos,!0)):this._speed},loop:function(t,e){var i=this.last();return i.loops=null==t||t,i.loop=0,e&&(i.reversing=!0),this},pause:function(){return this.paused=!0,this.stopAnimFrame(),this},play:function(){return this.paused?(this.paused=!1,this.at(this.absPos,!0)):this},reverse:function(t){var e=this.last();return e.reversed=void 0===t?!e.reversed:t,this},progress:function(t){return t?this.situation.ease(this.pos):this.pos},after:function(t){var e=this.last();return this.target().on("finished.fx",function i(s){s.detail.situation==e&&(t.call(this,e),this.off("finished.fx",i))}),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,s.morph(i.detail.pos),i.detail.eased,e)};return this.target().off("during.fx",i).on("during.fx",i),this.after(function(){this.off("during.fx",i)}),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off("allfinished.fx",e)};return this.target().off("allfinished.fx",e).on("allfinished.fx",e),this._callStart()},duringAll:function(t){var e=function(e){t.call(this,e.detail.pos,s.morph(e.detail.pos),e.detail.eased,e.detail.situation)};return this.target().off("during.fx",e).on("during.fx",e),this.afterAll(function(){this.off("during.fx",e)}),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||"animations"][t]=e,this._callStart()},step:function(t){var e,i,s;(t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops)?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||ithis.lastPos&&n<=a&&(this.situation.once[n].call(this.target(),this.pos,a),delete this.situation.once[n]);return this.active&&this.target().fire("during",{pos:this.pos,eased:a,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=a,this):this},eachAt:function(){var t,e,i,a=this,n=this.target(),r=this.situation;for(t in r.animations)i=[].concat(r.animations[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n[t].apply(n,i);for(t in r.attrs)i=[t].concat(r.attrs[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n.attr.apply(n,i);for(t in r.styles)i=[t].concat(r.styles[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n.style.apply(n,i);if(r.transforms.length){for(i=r.initialTransformation,t=0,e=r.transforms.length;t=0;--i)this[y[i]]=null!=e[y[i]]?e[y[i]]:a[y[i]]},extend:{extract:function(){var t=f(this,0,1),e=f(this,1,0),i=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(i*Math.PI/180)+this.f*Math.sin(i*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(i*Math.PI/180)+this.e*Math.sin(-i*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),skewX:-i,skewY:180/Math.PI*Math.atan2(e.y,e.x),scaleX:Math.sqrt(this.a*this.a+this.b*this.b),scaleY:Math.sqrt(this.c*this.c+this.d*this.d),rotation:i,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new s.Matrix(this)}},clone:function(){return new s.Matrix(this)},morph:function(t){return this.destination=new s.Matrix(t),this},at:function(t){return this.destination?new s.Matrix({a:this.a+(this.destination.a-this.a)*t,b:this.b+(this.destination.b-this.b)*t,c:this.c+(this.destination.c-this.c)*t,d:this.d+(this.destination.d-this.d)*t,e:this.e+(this.destination.e-this.e)*t,f:this.f+(this.destination.f-this.f)*t}):this},multiply:function(t){return new s.Matrix(this.native().multiply(function(t){t instanceof s.Matrix||(t=new s.Matrix(t));return t}(t).native()))},inverse:function(){return new s.Matrix(this.native().inverse())},translate:function(t,e){return new s.Matrix(this.native().translate(t||0,e||0))},scale:function(t,e,i,a){return 1==arguments.length?e=t:3==arguments.length&&(a=i,i=e,e=t),this.around(i,a,new s.Matrix(t,0,0,e,0,0))},rotate:function(t,e,i){return t=s.utils.radians(t),this.around(e,i,new s.Matrix(Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0))},flip:function(t,e){return"x"==t?this.scale(-1,1,e,0):"y"==t?this.scale(1,-1,0,e):this.scale(-1,-1,t,null!=e?e:t)},skew:function(t,e,i,a){return 1==arguments.length?e=t:3==arguments.length&&(a=i,i=e,e=t),t=s.utils.radians(t),e=s.utils.radians(e),this.around(i,a,new s.Matrix(1,Math.tan(e),Math.tan(t),1,0,0))},skewX:function(t,e,i){return this.skew(t,0,e,i)},skewY:function(t,e,i){return this.skew(0,t,e,i)},around:function(t,e,i){return this.multiply(new s.Matrix(1,0,0,1,t||0,e||0)).multiply(i).multiply(new s.Matrix(1,0,0,1,-t||0,-e||0))},native:function(){for(var t=s.parser.native.createSVGMatrix(),e=y.length-1;e>=0;e--)t[y[e]]=this[y[e]];return t},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:s.Element,construct:{ctm:function(){return new s.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof s.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new s.Matrix(e)}return new s.Matrix(this.node.getScreenCTM())}}}),s.Point=s.invent({create:function(e,i){var s;s=Array.isArray(e)?{x:e[0],y:e[1]}:"object"===t(e)?{x:e.x,y:e.y}:null!=e?{x:e,y:null!=i?i:e}:{x:0,y:0},this.x=s.x,this.y=s.y},extend:{clone:function(){return new s.Point(this)},morph:function(t,e){return this.destination=new s.Point(t,e),this},at:function(t){return this.destination?new s.Point({x:this.x+(this.destination.x-this.x)*t,y:this.y+(this.destination.y-this.y)*t}):this},native:function(){var t=s.parser.native.createSVGPoint();return t.x=this.x,t.y=this.y,t},transform:function(t){return new s.Point(this.native().matrixTransform(t.native()))}}}),s.extend(s.Element,{point:function(t,e){return new s.Point(t,e).transform(this.screenCTM().inverse())}}),s.extend(s.Element,{attr:function(e,i,a){if(null==e){for(e={},a=(i=this.node.attributes).length-1;a>=0;a--)e[i[a].nodeName]=s.regex.isNumber.test(i[a].nodeValue)?parseFloat(i[a].nodeValue):i[a].nodeValue;return e}if("object"===t(e))for(i in e)this.attr(i,e[i]);else if(null===i)this.node.removeAttribute(e);else{if(null==i)return null==(i=this.node.getAttribute(e))?s.defaults.attrs[e]:s.regex.isNumber.test(i)?parseFloat(i):i;"stroke-width"==e?this.attr("stroke",parseFloat(i)>0?this._stroke:null):"stroke"==e&&(this._stroke=i),"fill"!=e&&"stroke"!=e||(s.regex.isImage.test(i)&&(i=this.doc().defs().image(i,0,0)),i instanceof s.Image&&(i=this.doc().defs().pattern(0,0,function(){this.add(i)}))),"number"==typeof i?i=new s.Number(i):s.Color.isColor(i)?i=new s.Color(i):Array.isArray(i)&&(i=new s.Array(i)),"leading"==e?this.leading&&this.leading(i):"string"==typeof a?this.node.setAttributeNS(a,e,i.toString()):this.node.setAttribute(e,i.toString()),!this.rebuild||"font-size"!=e&&"x"!=e||this.rebuild(e,i)}return this}}),s.extend(s.Element,{transform:function(e,i){var a,n;if("object"!==t(e))return a=new s.Matrix(this).extract(),"string"==typeof e?a[e]:a;if(a=new s.Matrix(this),i=!!i||!!e.relative,null!=e.a)a=i?a.multiply(new s.Matrix(e)):new s.Matrix(e);else if(null!=e.rotation)x(e,this),a=i?a.rotate(e.rotation,e.cx,e.cy):a.rotate(e.rotation-a.extract().rotation,e.cx,e.cy);else if(null!=e.scale||null!=e.scaleX||null!=e.scaleY){if(x(e,this),e.scaleX=null!=e.scale?e.scale:null!=e.scaleX?e.scaleX:1,e.scaleY=null!=e.scale?e.scale:null!=e.scaleY?e.scaleY:1,!i){var r=a.extract();e.scaleX=1*e.scaleX/r.scaleX,e.scaleY=1*e.scaleY/r.scaleY}a=a.scale(e.scaleX,e.scaleY,e.cx,e.cy)}else if(null!=e.skew||null!=e.skewX||null!=e.skewY){if(x(e,this),e.skewX=null!=e.skew?e.skew:null!=e.skewX?e.skewX:0,e.skewY=null!=e.skew?e.skew:null!=e.skewY?e.skewY:0,!i){r=a.extract();a=a.multiply((new s.Matrix).skew(r.skewX,r.skewY,e.cx,e.cy).inverse())}a=a.skew(e.skewX,e.skewY,e.cx,e.cy)}else e.flip?("x"==e.flip||"y"==e.flip?e.offset=null==e.offset?this.bbox()["c"+e.flip]:e.offset:null==e.offset?(n=this.bbox(),e.flip=n.cx,e.offset=n.cy):e.flip=e.offset,a=(new s.Matrix).flip(e.flip,e.offset)):null==e.x&&null==e.y||(i?a=a.translate(e.x,e.y):(null!=e.x&&(a.e=e.x),null!=e.y&&(a.f=e.y)));return this.attr("transform",a)}}),s.extend(s.FX,{transform:function(e,i){var a,n,r=this.target();return"object"!==t(e)?(a=new s.Matrix(r).extract(),"string"==typeof e?a[e]:a):(i=!!i||!!e.relative,null!=e.a?a=new s.Matrix(e):null!=e.rotation?(x(e,r),a=new s.Rotate(e.rotation,e.cx,e.cy)):null!=e.scale||null!=e.scaleX||null!=e.scaleY?(x(e,r),e.scaleX=null!=e.scale?e.scale:null!=e.scaleX?e.scaleX:1,e.scaleY=null!=e.scale?e.scale:null!=e.scaleY?e.scaleY:1,a=new s.Scale(e.scaleX,e.scaleY,e.cx,e.cy)):null!=e.skewX||null!=e.skewY?(x(e,r),e.skewX=null!=e.skewX?e.skewX:0,e.skewY=null!=e.skewY?e.skewY:0,a=new s.Skew(e.skewX,e.skewY,e.cx,e.cy)):e.flip?("x"==e.flip||"y"==e.flip?e.offset=null==e.offset?r.bbox()["c"+e.flip]:e.offset:null==e.offset?(n=r.bbox(),e.flip=n.cx,e.offset=n.cy):e.flip=e.offset,a=(new s.Matrix).flip(e.flip,e.offset)):null==e.x&&null==e.y||(a=new s.Translate(e.x,e.y)),a?(a.relative=i,this.last().transforms.push(a),this._callStart()):this)}}),s.extend(s.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(s.regex.transforms).slice(0,-1).map(function(t){var e=t.trim().split("(");return[e[0],e[1].split(s.regex.delimiter).map(function(t){return parseFloat(t)})]}).reduce(function(t,e){return"matrix"==e[0]?t.multiply(p(e[1])):t[e[0]].apply(t,e[1])},new s.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),s.Transformation=s.invent({create:function(e,i){if(arguments.length>1&&"boolean"!=typeof i)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(e))for(var s=0,a=this.arguments.length;s=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return s.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){var i,a,n=this.children();for(i=0,a=n.length;in/r?this.height/r:this.width/n,this.x=i,this.y=a,this.width=n,this.height=r)}else e="string"==typeof e?e.match(u).map(function(t){return parseFloat(t)}):Array.isArray(e)?e:"object"===t(e)?[e.x,e.y,e.width,e.height]:4==arguments.length?[].slice.call(arguments):[0,0,0,0],this.x=e[0],this.y=e[1],this.width=e[2],this.height=e[3]},extend:{toString:function(){return this.x+" "+this.y+" "+this.width+" "+this.height},morph:function(t,e,i,a){return this.destination=new s.ViewBox(t,e,i,a),this},at:function(t){return this.destination?new s.ViewBox([this.x+(this.destination.x-this.x)*t,this.y+(this.destination.y-this.y)*t,this.width+(this.destination.width-this.width)*t,this.height+(this.destination.height-this.height)*t]):this}},parent:s.Container,construct:{viewbox:function(t,e,i,a){return 0==arguments.length?new s.ViewBox(this):this.attr("viewBox",new s.ViewBox(t,e,i,a))}}}),["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","touchstart","touchmove","touchleave","touchend","touchcancel"].forEach(function(t){s.Element.prototype[t]=function(e){return s.on(this.node,t,e),this}}),s.listeners=[],s.handlerMap=[],s.listenerId=0,s.on=function(t,e,i,a,n){var r=i.bind(a||t.instance||t),o=(s.handlerMap.indexOf(t)+1||s.handlerMap.push(t))-1,l=e.split(".")[0],h=e.split(".")[1]||"*";s.listeners[o]=s.listeners[o]||{},s.listeners[o][l]=s.listeners[o][l]||{},s.listeners[o][l][h]=s.listeners[o][l][h]||{},i._svgjsListenerId||(i._svgjsListenerId=++s.listenerId),s.listeners[o][l][h][i._svgjsListenerId]=r,t.addEventListener(l,r,n||!1)},s.off=function(t,e,i){var a=s.handlerMap.indexOf(t),n=e&&e.split(".")[0],r=e&&e.split(".")[1],o="";if(-1!=a)if(i){if("function"==typeof i&&(i=i._svgjsListenerId),!i)return;s.listeners[a][n]&&s.listeners[a][n][r||"*"]&&(t.removeEventListener(n,s.listeners[a][n][r||"*"][i],!1),delete s.listeners[a][n][r||"*"][i])}else if(r&&n){if(s.listeners[a][n]&&s.listeners[a][n][r]){for(i in s.listeners[a][n][r])s.off(t,[n,r].join("."),i);delete s.listeners[a][n][r]}}else if(r)for(e in s.listeners[a])for(o in s.listeners[a][e])r===o&&s.off(t,[e,r].join("."));else if(n){if(s.listeners[a][n]){for(o in s.listeners[a][n])s.off(t,[n,o].join("."));delete s.listeners[a][n]}}else{for(e in s.listeners[a])s.off(t,e);delete s.listeners[a],delete s.handlerMap[a]}},s.extend(s.Element,{on:function(t,e,i,a){return s.on(this.node,t,e,i,a),this},off:function(t,e){return s.off(this.node,t,e),this},fire:function(t,i){return t instanceof e.Event?this.node.dispatchEvent(t):this.node.dispatchEvent(t=new s.CustomEvent(t,{detail:i,cancelable:!0})),this._event=t,this},event:function(){return this._event}}),s.Defs=s.invent({create:"defs",inherit:s.Container}),s.G=s.invent({create:"g",inherit:s.Container,extend:{x:function(t){return null==t?this.transform("x"):this.transform({x:t-this.x()},!0)},y:function(t){return null==t?this.transform("y"):this.transform({y:t-this.y()},!0)},cx:function(t){return null==t?this.gbox().cx:this.x(t-this.gbox().width/2)},cy:function(t){return null==t?this.gbox().cy:this.y(t-this.gbox().height/2)},gbox:function(){var t=this.bbox(),e=this.transform();return t.x+=e.x,t.x2+=e.x,t.cx+=e.x,t.y+=e.y,t.y2+=e.y,t.cy+=e.y,t}},construct:{group:function(){return this.put(new s.G)}}}),s.Doc=s.invent({create:function(t){t&&("svg"==(t="string"==typeof t?i.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,s.create("svg")),t.appendChild(this.node),this.size("100%","100%")),this.namespace().defs())},inherit:s.Container,extend:{namespace:function(){return this.attr({xmlns:s.ns,version:"1.1"}).attr("xmlns:xlink",s.xlink,s.xmlns).attr("xmlns:svgjs",s.svgjs,s.xmlns)},defs:function(){var t;this._defs||((t=this.node.getElementsByTagName("defs")[0])?this._defs=s.adopt(t):this._defs=new s.Defs,this.node.appendChild(this._defs.node));return this._defs},parent:function(){return this.node.parentNode&&"#document"!=this.node.parentNode.nodeName?this.node.parentNode:null},spof:function(){var t=this.node.getScreenCTM();return t&&this.style("left",-t.e%1+"px").style("top",-t.f%1+"px"),this},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,s.parser.draw&&!s.parser.draw.parentNode&&this.node.appendChild(s.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=b(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),s.extend(s.Element,{siblings:function(){return this.parent().children()},position:function(){return this.parent().index(this)},next:function(){return this.siblings()[this.position()+1]},previous:function(){return this.siblings()[this.position()-1]},forward:function(){var t=this.position()+1,e=this.parent();return e.removeElement(this).add(this,t),e instanceof s.Doc&&e.node.appendChild(e.defs().node),this},backward:function(){var t=this.position();return t>0&&this.parent().removeElement(this).add(this,t-1),this},front:function(){var t=this.parent();return t.node.appendChild(this.node),t instanceof s.Doc&&t.node.appendChild(t.defs().node),this},back:function(){return this.position()>0&&this.parent().removeElement(this).add(this,0),this},before:function(t){t.remove();var e=this.position();return this.parent().add(t,e),this},after:function(t){t.remove();var e=this.position();return this.parent().add(t,e+1),this}}),s.Mask=s.invent({create:function(){this.constructor.call(this,s.create("mask")),this.targets=[]},inherit:s.Container,extend:{remove:function(){for(var t=this.targets.length-1;t>=0;t--)this.targets[t]&&this.targets[t].unmask();return this.targets=[],s.Element.prototype.remove.call(this),this}},construct:{mask:function(){return this.defs().put(new s.Mask)}}}),s.extend(s.Element,{maskWith:function(t){return this.masker=t instanceof s.Mask?t:this.parent().mask().add(t),this.masker.targets.push(this),this.attr("mask",'url("#'+this.masker.attr("id")+'")')},unmask:function(){return delete this.masker,this.attr("mask",null)}}),s.ClipPath=s.invent({create:function(){this.constructor.call(this,s.create("clipPath")),this.targets=[]},inherit:s.Container,extend:{remove:function(){for(var t=this.targets.length-1;t>=0;t--)this.targets[t]&&this.targets[t].unclip();return this.targets=[],this.parent().removeElement(this),this}},construct:{clip:function(){return this.defs().put(new s.ClipPath)}}}),s.extend(s.Element,{clipWith:function(t){return this.clipper=t instanceof s.ClipPath?t:this.parent().clip().add(t),this.clipper.targets.push(this),this.attr("clip-path",'url("#'+this.clipper.attr("id")+'")')},unclip:function(){return delete this.clipper,this.attr("clip-path",null)}}),s.Gradient=s.invent({create:function(t){this.constructor.call(this,s.create(t+"Gradient")),this.type=t},inherit:s.Container,extend:{at:function(t,e,i){return this.put(new s.Stop).update(t,e,i)},update:function(t){return this.clear(),"function"==typeof t&&t.call(this,this),this},fill:function(){return"url(#"+this.id()+")"},toString:function(){return this.fill()},attr:function(t,e,i){return"transform"==t&&(t="gradientTransform"),s.Container.prototype.attr.call(this,t,e,i)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),s.extend(s.Gradient,s.FX,{from:function(t,e){return"radial"==(this._target||this).type?this.attr({fx:new s.Number(t),fy:new s.Number(e)}):this.attr({x1:new s.Number(t),y1:new s.Number(e)})},to:function(t,e){return"radial"==(this._target||this).type?this.attr({cx:new s.Number(t),cy:new s.Number(e)}):this.attr({x2:new s.Number(t),y2:new s.Number(e)})}}),s.extend(s.Defs,{gradient:function(t,e){return this.put(new s.Gradient(t)).update(e)}}),s.Stop=s.invent({create:"stop",inherit:s.Element,extend:{update:function(t){return("number"==typeof t||t instanceof s.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr("stop-opacity",t.opacity),null!=t.color&&this.attr("stop-color",t.color),null!=t.offset&&this.attr("offset",new s.Number(t.offset)),this}}}),s.Pattern=s.invent({create:"pattern",inherit:s.Container,extend:{fill:function(){return"url(#"+this.id()+")"},update:function(t){return this.clear(),"function"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,i){return"transform"==t&&(t="patternTransform"),s.Container.prototype.attr.call(this,t,e,i)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),s.extend(s.Defs,{pattern:function(t,e,i){return this.put(new s.Pattern).update(i).attr({x:0,y:0,width:t,height:e,patternUnits:"userSpaceOnUse"})}}),s.Shape=s.invent({create:function(t){this.constructor.call(this,t)},inherit:s.Element}),s.Bare=s.invent({create:function(t,e){if(this.constructor.call(this,s.create(t)),e)for(var i in e.prototype)"function"==typeof e.prototype[i]&&(this[i]=e.prototype[i])},inherit:s.Element,extend:{words:function(t){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return this.node.appendChild(i.createTextNode(t)),this}}}),s.extend(s.Parent,{element:function(t,e){return this.put(new s.Bare(t,e))}}),s.Symbol=s.invent({create:"symbol",inherit:s.Container,construct:{symbol:function(){return this.put(new s.Symbol)}}}),s.Use=s.invent({create:"use",inherit:s.Shape,extend:{element:function(t,e){return this.attr("href",(e||"")+"#"+t,s.xlink)}},construct:{use:function(t,e){return this.put(new s.Use).element(t,e)}}}),s.Rect=s.invent({create:"rect",inherit:s.Shape,construct:{rect:function(t,e){return this.put(new s.Rect).size(t,e)}}}),s.Circle=s.invent({create:"circle",inherit:s.Shape,construct:{circle:function(t){return this.put(new s.Circle).rx(new s.Number(t).divide(2)).move(0,0)}}}),s.extend(s.Circle,s.FX,{rx:function(t){return this.attr("r",t)},ry:function(t){return this.rx(t)}}),s.Ellipse=s.invent({create:"ellipse",inherit:s.Shape,construct:{ellipse:function(t,e){return this.put(new s.Ellipse).size(t,e).move(0,0)}}}),s.extend(s.Ellipse,s.Rect,s.FX,{rx:function(t){return this.attr("rx",t)},ry:function(t){return this.attr("ry",t)}}),s.extend(s.Circle,s.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr("cx"):this.attr("cx",t)},cy:function(t){return null==t?this.attr("cy"):this.attr("cy",t)},width:function(t){return null==t?2*this.rx():this.rx(new s.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new s.Number(t).divide(2))},size:function(t,e){var i=g(this,t,e);return this.rx(new s.Number(i.width).divide(2)).ry(new s.Number(i.height).divide(2))}}),s.Line=s.invent({create:"line",inherit:s.Shape,extend:{array:function(){return new s.PointArray([[this.attr("x1"),this.attr("y1")],[this.attr("x2"),this.attr("y2")]])},plot:function(t,e,i,a){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:i,y2:a}:new s.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=g(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,i,a){return s.Line.prototype.plot.apply(this.put(new s.Line),null!=t?[t,e,i,a]:[0,0,0,0])}}}),s.Polyline=s.invent({create:"polyline",inherit:s.Shape,construct:{polyline:function(t){return this.put(new s.Polyline).plot(t||new s.PointArray)}}}),s.Polygon=s.invent({create:"polygon",inherit:s.Shape,construct:{polygon:function(t){return this.put(new s.Polygon).plot(t||new s.PointArray)}}}),s.extend(s.Polyline,s.Polygon,{array:function(){return this._array||(this._array=new s.PointArray(this.attr("points")))},plot:function(t){return null==t?this.array():this.clear().attr("points","string"==typeof t?t:this._array=new s.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr("points",this.array().move(t,e))},size:function(t,e){var i=g(this,t,e);return this.attr("points",this.array().size(i.width,i.height))}}),s.extend(s.Line,s.Polyline,s.Polygon,{morphArray:s.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),s.Path=s.invent({create:"path",inherit:s.Shape,extend:{morphArray:s.PathArray,array:function(){return this._array||(this._array=new s.PathArray(this.attr("d")))},plot:function(t){return null==t?this.array():this.clear().attr("d","string"==typeof t?t:this._array=new s.PathArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr("d",this.array().move(t,e))},x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},size:function(t,e){var i=g(this,t,e);return this.attr("d",this.array().size(i.width,i.height))},width:function(t){return null==t?this.bbox().width:this.size(t,this.bbox().height)},height:function(t){return null==t?this.bbox().height:this.size(this.bbox().width,t)}},construct:{path:function(t){return this.put(new s.Path).plot(t||new s.PathArray)}}}),s.Image=s.invent({create:"image",inherit:s.Shape,extend:{load:function(t){if(!t)return this;var i=this,a=new e.Image;return s.on(a,"load",function(){s.off(a);var e=i.parent(s.Pattern);null!==e&&(0==i.width()&&0==i.height()&&i.size(a.width,a.height),e&&0==e.width()&&0==e.height()&&e.size(i.width(),i.height()),"function"==typeof i._loaded&&i._loaded.call(i,{width:a.width,height:a.height,ratio:a.width/a.height,url:t}))}),s.on(a,"error",function(t){s.off(a),"function"==typeof i._error&&i._error.call(i,t)}),this.attr("href",a.src=this.src=t,s.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,i){return this.put(new s.Image).load(t).size(e||0,i||e||0)}}}),s.Text=s.invent({create:function(){this.constructor.call(this,s.create("text")),this.dom.leading=new s.Number(1.3),this._rebuild=!0,this._build=!1,this.attr("font-family",s.defaults.attrs["font-family"])},inherit:s.Shape,extend:{x:function(t){return null==t?this.attr("x"):this.attr("x",t)},y:function(t){var e=this.attr("y"),i="number"==typeof e?e-this.bbox().y:0;return null==t?"number"==typeof e?e-i:e:this.attr("y","number"==typeof t.valueOf()?t+i:t)},cx:function(t){return null==t?this.bbox().cx:this.x(t-this.bbox().width/2)},cy:function(t){return null==t?this.bbox().cy:this.y(t-this.bbox().height/2)},text:function(t){if(void 0===t){t="";for(var e=this.node.childNodes,i=0,a=e.length;i=0;i--)t.childNodes[i]instanceof e.SVGElement&&b(t.childNodes[i]);return s.adopt(t).id(s.eid(t.nodeName))}function m(t){return null==t.x&&(t.x=0,t.y=0,t.width=0,t.height=0),t.w=t.width,t.h=t.height,t.x2=t.x+t.width,t.y2=t.y+t.height,t.cx=t.x+t.width/2,t.cy=t.y+t.height/2,t}function v(t){return Math.abs(t)>1e-37?t:0}["fill","stroke"].forEach(function(t){var e,i={};i[t]=function(i){if(void 0===i)return this;if("string"==typeof i||s.Color.isRgb(i)||i&&"function"==typeof i.fill)this.attr(t,i);else for(e=l[t].length-1;e>=0;e--)null!=i[l[t][e]]&&this.attr(l.prefix(t,l[t][e]),i[l[t][e]]);return this},s.extend(s.Element,s.FX,i)}),s.extend(s.Element,s.FX,{rotate:function(t,e,i){return this.transform({rotation:t,cx:e,cy:i})},skew:function(t,e,i,s){return 1==arguments.length||3==arguments.length?this.transform({skew:t,cx:e,cy:i}):this.transform({skewX:t,skewY:e,cx:i,cy:s})},scale:function(t,e,i,s){return 1==arguments.length||3==arguments.length?this.transform({scale:t,cx:e,cy:i}):this.transform({scaleX:t,scaleY:e,cx:i,cy:s})},translate:function(t,e){return this.transform({x:t,y:e})},flip:function(t,e){return e="number"==typeof t?t:e,this.transform({flip:t||"both",offset:e})},matrix:function(t){return this.attr("transform",new s.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr("opacity",t)},dx:function(t){return this.x(new s.Number(t).plus(this instanceof s.FX?0:this.x()),!0)},dy:function(t){return this.y(new s.Number(t).plus(this instanceof s.FX?0:this.y()),!0)},dmove:function(t,e){return this.dx(t).dy(e)}}),s.extend(s.Rect,s.Ellipse,s.Circle,s.Gradient,s.FX,{radius:function(t,e){var i=(this._target||this).type;return"radial"==i||"circle"==i?this.attr("r",new s.Number(t)):this.rx(t).ry(null==e?t:e)}}),s.extend(s.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),s.extend(s.Parent,s.Text,s.Tspan,s.FX,{font:function(e,i){if("object"===t(e))for(i in e)this.font(i,e[i]);return"leading"==e?this.leading(i):"anchor"==e?this.attr("text-anchor",i):"size"==e||"family"==e||"weight"==e||"stretch"==e||"variant"==e||"style"==e?this.attr("font-"+e,i):this.attr(e,i)}}),s.Set=s.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){var t,e,i=[].slice.call(arguments);for(t=0,e=i.length;t-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members},bbox:function(){if(0==this.members.length)return new s.RBox;var t=this.members[0].rbox(this.members[0].doc());return this.each(function(){t=t.merge(this.rbox(this.doc()))}),t}},construct:{set:function(t){return new s.Set(t)}}}),s.FX.Set=s.invent({create:function(t){this.set=t}}),s.Set.inherit=function(){var t=[];for(var e in s.Shape.prototype)"function"==typeof s.Shape.prototype[e]&&"function"!=typeof s.Set.prototype[e]&&t.push(e);for(var e in t.forEach(function(t){s.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),s.get=function(t){var e=i.getElementById(function(t){var e=(t||"").toString().match(s.regex.reference);if(e)return e[1]}(t)||t);return s.adopt(e)},s.select=function(t,e){return new s.Set(s.utils.map((e||i).querySelectorAll(t),function(t){return s.adopt(t)}))},s.extend(s.Parent,{select:function(t){return s.select(t,this.node)}});var y="abcdef".split("");if("function"!=typeof e.CustomEvent){var w=function(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var s=i.createEvent("CustomEvent");return s.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),s};w.prototype=e.Event.prototype,s.CustomEvent=w}else s.CustomEvent=e.CustomEvent;return function(t){for(var i=0,s=["moz","webkit"],a=0;a1&&(s=Math.sqrt(s),P*=s,M*=s);a=(new SVG.Matrix).rotate(E).scale(1/P,1/M).rotate(-E),F=F.transform(a),R=R.transform(a),n=[R.x-F.x,R.y-F.y],o=n[0]*n[0]+n[1]*n[1],r=Math.sqrt(o),n[0]/=r,n[1]/=r,l=o<4?Math.sqrt(1-o/4):0,T===X&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-n[1],(R.y+F.y)/2+l*n[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),u=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(u*=-1);g=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(g*=-1);X&&u>g&&(g+=2*Math.PI);!X&&un.maxX-e.width&&(s=n.maxX-e.width),null!=n.minY&&an.maxY-e.height&&(a=n.maxY-e.height),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:r,y:o},!0):this.el.move(s,a));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire("dragend",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,i){"function"!=typeof e&&"object"!=typeof e||(i=e,e=!0);var s=this.remember("_draggable")||new t(this);return(e=void 0===e||e)?s.init(i||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1}}t.prototype.init=function(t,e){var i=this.el.bbox();for(var s in this.options={},this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==["line","polyline","polygon"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set?this:(this.pointSelection.set=this.parent.set(),this.drawCircles(),this)},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map(function(e){return[e[0]-t.x,e[1]-t.y]})},t.prototype.drawCircles=function(){for(var t=this,e=this.getPointArray(),i=0,s=e.length;i0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case"rt":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case"rb":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case"lb":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case"t":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case"r":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case"b":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case"l":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case"rot":this.calc=function(t,e){var i=t+this.parameters.p.x,s=e+this.parameters.p.y,a=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),n=180*(Math.atan2(s-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2)-a)/Math.PI;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(this.parameters.rotation+n-n%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),s=this.el.array().valueOf();s[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],s[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(s)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,"touchmove.resize",function(t){e.update(t||window.event)}),SVG.on(window,"touchend.resize",function(){e.done()}),SVG.on(window,"mousemove.resize",function(t){e.update(t||window.event)}),SVG.on(window,"mouseup.resize",function(){e.done()})},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),s=i.x-this.parameters.p.x,a=i.y-this.parameters.p.y;this.lastUpdateCall=[s,a],this.calc(s,a),this.el.fire("resizing",{dx:s,dy:a,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},t.prototype.snapToGrid=function(t,e,i,s){var a;return void 0!==s?a=[(i+t)%this.options.snapToGrid,(s+e)%this.options.snapToGrid]:(i=null==i?3:i,a=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t-=Math.abs(a[0])r.maxX&&(t=r.maxX-a),void 0!==r.minY&&n+er.maxY&&(e=r.maxY-n),[t,e]},t.prototype.checkAspectRatio=function(t){if(!this.options.saveAspectRatio)return t;var e=t.slice(),i=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],a=this.parameters.box.height-t[1],n=s/a;return ni&&(e[0]=this.parameters.box.width-a*i),e},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}();return function(t,e){void 0===e&&(e={});var i=e.insertAt;if(t&&"undefined"!=typeof document){var s=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css","top"===i&&s.firstChild?s.insertBefore(a,s.firstChild):s.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}}('.apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: " ";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: " ";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}'),"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||function(t){if("Element"in t){var e=t.Element.prototype,i=Object,s=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")},a=Array.prototype.indexOf||function(t){for(var e=0,i=this.length;e div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',i=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e)),i.appendChild(s),t=!0}}(),s.__resizeLast__={},s.__resizeListeners__=[],(s.__resizeTriggers__=document.createElement("div")).className="resize-triggers",s.__resizeTriggers__.innerHTML='
',s.appendChild(s.__resizeTriggers__),e(s),s.addEventListener("scroll",i,!0),h&&s.__resizeTriggers__.addEventListener(h,function(t){"resizeanim"==t.animationName&&e(s)})),s.__resizeListeners__.push(a)},window.removeResizeListener=function(t,e){t&&(t.__resizeListeners__.splice(t.__resizeListeners__.indexOf(e),1),t.__resizeListeners__.length||(t.removeEventListener("scroll",i),t.__resizeTriggers__=!t.removeChild(t.__resizeTriggers__)))}}(),window.Apex={},function(){function i(t,s){e(this,i),this.opts=s,this.ctx=this,this.w=new A(s).init(),this.el=t,this.w.globals.cuid=(Math.random()+1).toString(36).substring(4),this.w.globals.chartID=this.w.config.chart.id?this.w.config.chart.id:this.w.globals.cuid,this.initModules(),this.create=d.bind(this.create,this),this.windowResizeHandler=this.windowResize.bind(this)}return s(i,[{key:"render",value:function(){var t=this;return new $(function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var s=t.w.config.chart.events.beforeMount;"function"==typeof s&&s(t,t.w),t.fireEvent("beforeMount",[t,t.w]),window.addEventListener("resize",t.windowResizeHandler),window.addResizeListener(t.el.parentNode,t.parentResizeCallback.bind(t));var a=t.create(t.w.config.series,{});if(!a)return e(t);t.mount(a).then(function(){e(a),"function"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.fireEvent("mounted",[t,t.w])}).catch(function(t){i(t)})}else i(new Error("Element not found"))})}},{key:"initModules",value:function(){this.animations=new g(this),this.core=new U(this.el,this),this.grid=new rt(this),this.coreUtils=new y(this),this.config=new w({}),this.crosshairs=new T(this),this.options=new x,this.responsive=new lt(this),this.series=new G(this),this.theme=new ht(this),this.formatters=new N(this),this.titleSubtitle=new vt(this),this.legend=new ot(this),this.toolbar=new bt(this),this.dimensions=new _(this),this.zoomPanSelection=new mt(this),this.w.globals.tooltip=new xt(this)}},{key:"addEventListener",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:"removeEventListener",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var s=i.globals.events[t].indexOf(e);-1!==s&&i.globals.events[t].splice(s,1)}}},{key:"fireEvent",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var s=i.globals.events[t],a=s.length,n=0;n0&&void 0!==arguments[0]?arguments[0]:null,e=this,i=e.w;return new $(function(s,a){if(null===e.el)return a(new Error("Not enough data to display or target element not found"));if((null===t||i.globals.allSeriesCollapsed)&&e.series.handleNoData(),e.annotations=new b(e),e.core.drawAxis(i.config.chart.type,t.xyRatios),e.grid=new rt(e),"back"===i.config.grid.position&&e.grid.drawGrid(),"back"===i.config.annotations.position&&e.annotations.drawAnnotations(),t.elGraph instanceof Array)for(var n=0;n0&&i.globals.memory.methodsToExec.forEach(function(t){t.method(t.params,!1,t.context)}),s(e)})}},{key:"clearPreviousPaths",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1,t.globals.collapsedSeries=[],t.globals.collapsedSeriesIndices=[]}},{key:"updateOptions",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=this.w;return t.series&&(t.series[0].data&&(t.series=t.series.map(function(t,e){return n({},a.config.series[e],{name:t.name?t.name:a.config.series[e]&&a.config.series[e].name,type:t.type?t.type:a.config.series[e]&&a.config.series[e].type,data:t.data?t.data:a.config.series[e]&&a.config.series[e].data})})),this.revertDefaultAxisMinMax()),t.xaxis&&((t.xaxis.min||t.xaxis.max)&&this.forceXAxisUpdate(t),t.xaxis.categories&&t.xaxis.categories.length&&a.config.xaxis.convertedCatToNumeric&&(t=v.convertCatToNumeric(t))),a.globals.collapsedSeriesIndices.length>0&&this.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this._updateOptions(t,e,i,s)}},{key:"_updateOptions",value:function(e){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.getSyncedCharts().forEach(function(n){var r=n.w;return r.globals.shouldAnimate=s,i||(r.globals.resized=!0,r.globals.dataChanged=!0,s&&n.series.getPreviousPaths()),e&&"object"===t(e)&&(n.config=new w(e),e=y.extendArrayProps(n.config,e),r.config=d.extend(r.config,e),a&&(r.globals.lastXAxis=[],r.globals.lastYAxis=[],r.globals.initialConfig=d.extend({},r.config),r.globals.initialSeries=JSON.parse(JSON.stringify(r.config.series)))),n.update(e)})}},{key:"updateSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.revertDefaultAxisMinMax(),this._updateSeries(t,e,i)}},{key:"appendSeries",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=this.w.config.series.slice();return s.push(t),this.revertDefaultAxisMinMax(),this._updateSeries(s,e,i)}},{key:"_updateSeries",value:function(t,e){var i,s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=this.w;return this.w.globals.shouldAnimate=e,a.globals.dataChanged=!0,a.globals.allSeriesCollapsed&&(a.globals.allSeriesCollapsed=!1),e&&this.series.getPreviousPaths(),a.globals.axisCharts?(0===(i=t.map(function(t,e){return n({},a.config.series[e],{name:t.name?t.name:a.config.series[e]&&a.config.series[e].name,type:t.type?t.type:a.config.series[e]&&a.config.series[e].type,data:t.data?t.data:a.config.series[e]&&a.config.series[e].data})})).length&&(i=[{data:[]}]),a.config.series=i):a.config.series=t.slice(),s&&(a.globals.initialConfig.series=JSON.parse(JSON.stringify(a.config.series)),a.globals.initialSeries=JSON.parse(JSON.stringify(a.config.series))),this.update()}},{key:"getSyncedCharts",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach(function(t){e.push(t)})),e}},{key:"getGroupedCharts",value:function(){var t=this;return Apex._chartInstances.filter(function(t){if(t.group)return!0}).map(function(e){return t.w.config.chart.group===e.group?e.chart:t})}},{key:"appendData",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var s=i.w.config.series.slice(),a=0;a1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addXaxisAnnotationExternal(t,e,s)}},{key:"addYaxisAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addYaxisAnnotationExternal(t,e,s)}},{key:"addPointAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addPointAnnotationExternal(t,e,s)}},{key:"clearAnnotations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:"addText",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addText(t,e,s)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:"getHighestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new V(this.ctx).getMinYMaxY(t).highestY}},{key:"getLowestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new V(this.ctx).getMinYMaxY(t).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"setLocale",value:function(t){this.setCurrentLocaleValues(t)}},{key:"setCurrentLocaleValues",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter(function(e){return e.name===t})[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var s=d.extend(p,i);this.w.globals.locale=s.options}},{key:"dataURI",value:function(){return new nt(this.ctx).dataURI()}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.windowResize()}},{key:"windowResize",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout(function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.update()},150)}}],[{key:"initOnLoad",value:function(){for(var t=document.querySelectorAll("[data-apexcharts]"),e=0;e2?s-2:0),n=2;n