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 %}
+
+ {% include cards/charts/card.html name="temperature" title="A" height=12 %}
+
+
+ {% include cards/charts/card.html name="donut" title="B" height=12 %}
+
+
{% 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 '
';
+ }
+ },
+ 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 '
';
+ }
+ },
+ 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 '
';
+ }
+ },
+ 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'"}},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',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:'',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:'',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:'',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:'',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="";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'"}},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'"}},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',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:'',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:'',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:'',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:'',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="";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