From 9b5595735025cbc9ebb7f8f66962a2d5006d3b25 Mon Sep 17 00:00:00 2001 From: pratu16x7 Date: Tue, 21 Nov 2017 04:42:31 +0530 Subject: [PATCH] animate x axis --- dist/frappe-charts.esm.js | 568 ++++++++++++++-------------- dist/frappe-charts.min.cjs.js | 2 +- dist/frappe-charts.min.esm.js | 2 +- dist/frappe-charts.min.iife.js | 2 +- docs/assets/js/frappe-charts.min.js | 2 +- docs/assets/js/index.js | 4 +- docs/index.html | 2 +- src/js/charts/AxisChart.js | 517 ++++++++++++------------- src/js/utils/animate.js | 85 ----- src/js/utils/draw-utils.js | 42 +- 10 files changed, 556 insertions(+), 670 deletions(-) diff --git a/dist/frappe-charts.esm.js b/dist/frappe-charts.esm.js index 642c6ba..4b7f06e 100644 --- a/dist/frappe-charts.esm.js +++ b/dist/frappe-charts.esm.js @@ -115,14 +115,7 @@ function floatTwo(d) { * @param {Array} arr1 First array * @param {Array} arr2 Second array */ -function arraysEqual(arr1, arr2) { - if(arr1.length !== arr2.length) return false; - let areEqual = true; - arr1.map((d, i) => { - if(arr2[i] !== d) areEqual = false; - }); - return areEqual; -} + /** * Shuffles array in place. ES6 version @@ -179,15 +172,47 @@ function getBarHeightAndYAttr(yTop, zeroLine, totalHeight) { return [height, y]; } -function equilizeNoOfPositions(oldPos, newPos, - extra_count=newPos.length - oldPos.length) { +function equilizeNoOfElements(array1, array2, + extra_count=array2.length - array1.length) { if(extra_count > 0) { - oldPos = fillArray(oldPos, extra_count); + array1 = fillArray(array1, extra_count); } else { - newPos = fillArray(newPos, extra_count); + array2 = fillArray(array2, extra_count); } - return [oldPos, newPos]; + return [array1, array2]; +} + +function getXLineProps(total_height, mode) { + let start_at, height, text_start_at, axis_line_class = ''; + if(mode === 'span') { // long spanning lines + start_at = -7; + height = total_height + 15; + text_start_at = total_height + 25; + } else if(mode === 'tick'){ // short label lines + start_at = total_height; + height = 6; + text_start_at = 9; + axis_line_class = 'x-axis-label'; + } + + return [start_at, height, text_start_at, axis_line_class]; +} + +function getYLineProps(total_width, mode, specific=false) { + if(specific) { + return[total_width, total_width + 5, 'specific-value', 0]; + } + let width, text_end_at = -9, axis_line_class = '', start_at = 0; + if(mode === 'span') { // long spanning lines + width = total_width + 6; + start_at = -6; + } else if(mode === 'tick'){ // short label lines + width = -6; + axis_line_class = 'y-axis-label'; + } + + return [width, text_end_at, axis_line_class, start_at]; } function $$2(expr, con) { @@ -323,7 +348,7 @@ function makeText(className, x, y, content) { }); } -function makeXLine$1(height, textStartAt, point, labelClass, axisLineClass, xPos) { +function makeXLine(height, textStartAt, point, labelClass, axisLineClass, xPos) { let line = createSVG('line', { x1: 0, x2: 0, @@ -1296,6 +1321,10 @@ class AxisChart extends BaseChart { if(this.zero_line) this.old_zero_line = this.zero_line; this.zero_line = this.height - (zero_index * interval_height); if(!this.old_zero_line) this.old_zero_line = this.zero_line; + + // Make positions arrays for y elements + this.y_axis_positions = this.y_axis_values.map(d => this.zero_line - d * this.multiplier); + this.yAnnotationPositions = this.specific_values.map(d => this.zero_line - d * this.multiplier); } setup_components() { @@ -1325,40 +1354,25 @@ class AxisChart extends BaseChart { } make_graph_components(init=false) { - this.make_y_axis(); - this.make_x_axis(); + this.makeYLines(this.y_axis_positions, this.y_axis_values); + this.makeXLines(this.x_axis_positions, this.x); this.draw_graph(init); - this.make_y_specifics(); + this.make_y_specifics(this.yAnnotationPositions, this.specific_values); } // make VERTICAL lines for x values - make_x_axis(animate=false) { - let char_width = 8; - let start_at, height, text_start_at, axis_line_class = ''; - if(this.x_axis_mode === 'span') { // long spanning lines - start_at = -7; - height = this.height + 15; - text_start_at = this.height + 25; - } else if(this.x_axis_mode === 'tick'){ // short label lines - start_at = this.height; - height = 6; - text_start_at = 9; - axis_line_class = 'x-axis-label'; - } - + makeXLines(positions, values) { + let [start_at, height, text_start_at, axis_line_class] = getXLineProps(this.height, this.x_axis_mode); this.x_axis_group.setAttribute('transform', `translate(0,${start_at})`); - if(animate) { - this.make_anim_x_axis(height, text_start_at, axis_line_class); - return; - } - + let char_width = 8; let allowed_space = this.avg_unit_width * 1.5; let allowed_letters = allowed_space / 8; + this.xAxisLines = []; this.x_axis_group.textContent = ''; - this.x.map((point, i) => { - let space_taken = getStringWidth(point, char_width) + 2; + values.map((value, i) => { + let space_taken = getStringWidth(value, char_width) + 2; if(space_taken > allowed_space) { if(this.is_series) { // Skip some axis lines if X axis is a series @@ -1370,34 +1384,32 @@ class AxisChart extends BaseChart { return; } } else { - point = point.slice(0, allowed_letters-3) + " ..."; + value = value.slice(0, allowed_letters-3) + " ..."; } } - this.x_axis_group.appendChild( - makeXLine$1( - height, - text_start_at, - point, - 'x-value-text', - axis_line_class, - this.x_axis_positions[i] - ) + + let xLine = makeXLine( + height, + text_start_at, + value, + 'x-value-text', + axis_line_class, + positions[i] ); + this.xAxisLines.push(xLine); + this.x_axis_group.appendChild(xLine); }); } // make HORIZONTAL lines for y values - make_y_axis(animate=false) { - if(animate) { - this.make_anim_y_axis(); - this.make_anim_y_specifics(); - return; - } + makeYLines(positions, values) { - let [width, text_end_at, axis_line_class, start_at] = this.get_y_axis_line_props(); + let [width, text_end_at, axis_line_class, start_at] = getYLineProps( + this.width, this.y_axis_mode); + this.yAxisLines = []; this.y_axis_group.textContent = ''; - this.y_axis_values.map((value, i) => { + values.map((value, i) => { this.y_axis_group.appendChild( makeYLine( start_at, @@ -1406,27 +1418,30 @@ class AxisChart extends BaseChart { value, 'y-value-text', axis_line_class, - this.zero_line - value * this.multiplier, + positions[i], (value === 0 && i !== 0) // Non-first Zero line ) ); }); } - get_y_axis_line_props(specific=false) { - if(specific) { - return[this.width, this.width + 5, 'specific-value', 0]; - } - let width, text_end_at = -9, axis_line_class = '', start_at = 0; - if(this.y_axis_mode === 'span') { // long spanning lines - width = this.width + 6; - start_at = -6; - } else if(this.y_axis_mode === 'tick'){ // short label lines - width = -6; - axis_line_class = 'y-axis-label'; - } - - return [width, text_end_at, axis_line_class, start_at]; + make_y_specifics(positions, value_objs) { + this.specific_y_group.textContent = ''; + value_objs.map((d, i) => { + this.specific_y_group.appendChild( + makeYLine( + 0, + this.width, + this.width + 5, + d.title.toUpperCase(), + 'specific-value', + 'specific-value', + positions[i], + false, + d.line_type + ) + ); + }); } draw_graph(init=false) { @@ -1463,13 +1478,13 @@ class AxisChart extends BaseChart { }); setTimeout(() => { - this.update_values(data); + this.updateData(data); }, 350); } setup_navigation(init) { if(init) { - // Hack: defer nav till initial update_values + // Hack: defer nav till initial updateData setTimeout(() => { super.setup_navigation(init); }, 500); @@ -1519,25 +1534,6 @@ class AxisChart extends BaseChart { } } - make_y_specifics() { - this.specific_y_group.textContent = ''; - this.specific_values.map(d => { - this.specific_y_group.appendChild( - makeYLine( - 0, - this.width, - this.width + 5, - d.title.toUpperCase(), - 'specific-value', - 'specific-value', - this.zero_line - d.value * this.multiplier, - false, - d.line_type - ) - ); - }); - } - bind_tooltip() { // TODO: could be in tooltip itself, as it is a given functionality for its parent this.chart_wrapper.addEventListener('mousemove', (e) => { @@ -1598,7 +1594,7 @@ class AxisChart extends BaseChart { }); // Remake y axis, animate - this.update_values(); + this.updateData(); // Then make sum units, don't animate this.sum_units = []; @@ -1623,7 +1619,7 @@ class AxisChart extends BaseChart { this.y_sums = []; this.sum_group.textContent = ''; this.sum_units = []; - this.update_values(); + this.updateData(); } show_averages() { @@ -1641,7 +1637,7 @@ class AxisChart extends BaseChart { }); }); - this.update_values(); + this.updateData(); } hide_averages() { @@ -1656,10 +1652,10 @@ class AxisChart extends BaseChart { this.specific_values.splice(index, 1); }); - this.update_values(); + this.updateData(); } - update_values(new_y, new_x) { + updateData(new_y, new_x) { if(!new_x) { new_x = this.x; } @@ -1684,27 +1680,6 @@ class AxisChart extends BaseChart { // Got the values? Now begin drawing this.animator = new Animator(this.height, this.width, this.zero_line, this.avg_unit_width); - // Animate only if positions have changed - if(!arraysEqual(this.x_old_axis_positions, this.x_axis_positions)) { - this.make_x_axis(true); - setTimeout(() => { - if(!this.updating) this.make_x_axis(); - }, 350); - } - - if(!arraysEqual(this.y_old_axis_values, this.y_axis_values) || - (this.old_specific_values && - !arraysEqual(this.old_specific_values, this.specific_values))) { - - this.make_y_axis(true); - setTimeout(() => { - if(!this.updating) { - this.make_y_axis(); - this.make_y_specifics(); - } - }, 350); - } - this.animate_graphs(); // Trigger animation with the animatable elements in this.elements_to_animate @@ -1713,26 +1688,6 @@ class AxisChart extends BaseChart { this.updating = false; } - add_data_point(y_point, x_point, index=this.x.length) { - let new_y = this.y.map(data_set => { return {values:data_set.values}; }); - new_y.map((d, i) => { d.values.splice(index, 0, y_point[i]); }); - let new_x = this.x.slice(); - new_x.splice(index, 0, x_point); - - this.update_values(new_y, new_x); - } - - remove_data_point(index = this.x.length-1) { - if(this.x.length < 3) return; - - let new_y = this.y.map(data_set => { return {values:data_set.values}; }); - new_y.map((d) => { d.values.splice(index, 1); }); - let new_x = this.x.slice(); - new_x.splice(index, 1); - - this.update_values(new_y, new_x); - } - run_animation() { let anim_svg = runSVGAnimation(this.svg, this.elements_to_animate); @@ -1754,28 +1709,51 @@ class AxisChart extends BaseChart { animate_graphs() { this.y.map(d => { // Pre-prep, equilize no of positions between old and new - let [old_x, new_x] = equilizeNoOfPositions( + let [old_x, new_x] = equilizeNoOfElements( this.x_old_axis_positions.slice(), this.x_axis_positions.slice() ); - let [old_y, new_y] = equilizeNoOfPositions( + let [old_y, new_y] = equilizeNoOfElements( this.old_y_axis_tops[d.index].slice(), d.y_tops.slice() ); - if(new_x.length - old_x.length > 0) { + let newYValues = this.y_old_axis_values.slice(); + + let [oldYAxis, newYAxis] = equilizeNoOfElements( + this.y_old_axis_values.slice(), + this.y_axis_values.slice() + ); + + let newXValues = this.x.slice(); + + let extra_points = this.x_axis_positions.slice().length - this.x_old_axis_positions.slice().length; + + if(extra_points > 0) { this.make_path && this.make_path(d, old_x, old_y, this.colors[d.index]); this.make_new_units_for_dataset(old_x, old_y, this.colors[d.index], d.index, this.y.length); + this.makeXLines(old_x, newXValues); } + // No Y extra check? + this.makeYLines(oldYAxis, newYValues); + + if(extra_points !== 0) { + this.animateXLines(old_x, new_x); + } + d.path && this.animate_path(d, new_x, new_y); - this.animate_units(d, old_x, old_y, new_x, new_y); + this.animate_units(d, new_x, new_y); + this.animateYLines(oldYAxis, newYAxis); }); - // TODO: replace with real units setTimeout(() => { this.y.map(d => { this.make_path && this.make_path(d, this.x_axis_positions, d.y_tops, this.colors[d.index]); this.make_new_units(d); + + this.makeYLines(this.y_axis_positions, this.y_axis_values); + this.makeXLines(this.x_axis_positions, this.x); + // this.make_y_specifics(this.yAnnotationPositions, this.specific_values); }); }, 400); } @@ -1786,7 +1764,7 @@ class AxisChart extends BaseChart { .concat(this.animator['path'](d, newPointsList.join("L"))); } - animate_units(d, old_x, old_y, new_x, new_y) { + animate_units(d, new_x, new_y) { let type = this.unit_args.type; d.svg_units.map((unit, i) => { @@ -1801,169 +1779,173 @@ class AxisChart extends BaseChart { }); } - make_anim_x_axis(height, text_start_at, axis_line_class) { - // Animate X AXIS to account for more or less axis lines - - const old_pos = this.x_old_axis_positions; - const new_pos = this.x_axis_positions; - - const old_vals = this.old_x_values; - const new_vals = this.x; - - const last_line_pos = old_pos[old_pos.length - 1]; - - let add_and_animate_line = (value, old_pos, new_pos) => { - if(typeof new_pos === 'string') { - new_pos = parseInt(new_pos.substring(0, new_pos.length-1)); - } - const x_line = makeXLine$1( - height, - text_start_at, - value, // new value - 'x-value-text', - axis_line_class, - old_pos // old position - ); - this.x_axis_group.appendChild(x_line); - - this.elements_to_animate && this.elements_to_animate.push([ - {unit: x_line, array: [0], index: 0}, - {transform: `${ new_pos }, 0`}, + animateXLines(oldX, newX) { + this.xAxisLines.map((xLine, i) => { + this.elements_to_animate.push([ + {unit: xLine, array: [0], index: 0}, + {transform: `${ newX[i] }, 0`}, 350, "easein", "translate", - {transform: `${ old_pos }, 0`} + {transform: `${ oldX[i] }, 0`} ]); - }; - - this.x_axis_group.textContent = ''; - - this.make_new_axis_anim_lines( - old_pos, - new_pos, - old_vals, - new_vals, - last_line_pos, - add_and_animate_line - ); - } - - make_anim_y_axis() { - // Animate Y AXIS to account for more or less axis lines - - const old_pos = this.y_old_axis_values.map(value => - this.zero_line - value * this.multiplier); - const new_pos = this.y_axis_values.map(value => - this.zero_line - value * this.multiplier); - - const old_vals = this.y_old_axis_values; - const new_vals = this.y_axis_values; - - const last_line_pos = old_pos[old_pos.length - 1]; - - this.y_axis_group.textContent = ''; - - this.make_new_axis_anim_lines( - old_pos, - new_pos, - old_vals, - new_vals, - last_line_pos, - this.add_and_animate_y_line.bind(this), - this.y_axis_group - ); - } - - make_anim_y_specifics() { - this.specific_y_group.textContent = ''; - this.specific_values.map((d) => { - this.add_and_animate_y_line( - d.title, - this.old_zero_line - d.value * this.old_multiplier, - this.zero_line - d.value * this.multiplier, - 0, - this.specific_y_group, - d.line_type, - true - ); }); } - make_new_axis_anim_lines(old_pos, new_pos, old_vals, new_vals, last_line_pos, add_and_animate_line, group) { - let superimposed_positions, superimposed_values; - let no_of_extras = new_vals.length - old_vals.length; - if(no_of_extras > 0) { - // More axis are needed - // First make only the superimposed (same position) ones - // Add in the extras at the end later - superimposed_positions = new_pos.slice(0, old_pos.length); - superimposed_values = new_vals.slice(0, old_vals.length); - } else { - // Axis have to be reduced - // Fake it by moving all current extra axis to the last position - // You'll need filler positions and values in the new arrays - const filler_vals = new Array(Math.abs(no_of_extras)).fill(""); - superimposed_values = new_vals.concat(filler_vals); - - const filler_pos = new Array(Math.abs(no_of_extras)).fill(last_line_pos + "F"); - superimposed_positions = new_pos.concat(filler_pos); - } - - superimposed_values.map((value, i) => { - add_and_animate_line(value, old_pos[i], superimposed_positions[i], i, group); + animateYLines(oldY, newY) { + this.yAxisLines.map((yLine, i) => { + this.elements_to_animate.push([ + {unit: yLine, array: [0], index: 0}, + {transform: `0, ${ newY[i] }`}, + 350, + "easein", + "translate", + {transform: `0, ${ oldY[i] }`} + ]); }); - - if(no_of_extras > 0) { - // Add in extra axis in the end - // and then animate to new positions - const extra_values = new_vals.slice(old_vals.length); - const extra_positions = new_pos.slice(old_pos.length); - - extra_values.map((value, i) => { - add_and_animate_line(value, last_line_pos, extra_positions[i], i, group); - }); - } } - add_and_animate_y_line(value, old_pos, new_pos, i, group, type, specific=false) { - let filler = false; - if(typeof new_pos === 'string') { - new_pos = parseInt(new_pos.substring(0, new_pos.length-1)); - filler = true; - } - let new_props = {transform: `0, ${ new_pos }`}; - let old_props = {transform: `0, ${ old_pos }`}; + animateYAnnotations() { - if(filler) { - new_props['stroke-opacity'] = 0; - // old_props['stroke-opacity'] = 1; - } + } - let [width, text_end_at, axis_line_class, start_at] = this.get_y_axis_line_props(specific); - let axis_label_class = !specific ? 'y-value-text' : 'specific-value'; - value = !specific ? value : (value+"").toUpperCase(); - const y_line = makeYLine( - start_at, - width, - text_end_at, - value, - axis_label_class, - axis_line_class, - old_pos, // old position - (value === 0 && i !== 0), // Non-first Zero line - type - ); + // make_anim_y_axis() { + // // Animate Y AXIS to account for more or less axis lines - group.appendChild(y_line); + // const old_pos = this.y_old_axis_values.map(value => + // this.zero_line - value * this.multiplier); + // const new_pos = this.y_axis_values.map(value => + // this.zero_line - value * this.multiplier); - this.elements_to_animate && this.elements_to_animate.push([ - {unit: y_line, array: [0], index: 0}, - new_props, - 350, - "easein", - "translate", - old_props - ]); + // const old_vals = this.y_old_axis_values; + // const new_vals = this.y_axis_values; + + // const last_line_pos = old_pos[old_pos.length - 1]; + + // this.y_axis_group.textContent = ''; + + // this.make_new_axis_anim_lines( + // old_pos, + // new_pos, + // old_vals, + // new_vals, + // last_line_pos, + // this.add_and_animate_y_line.bind(this), + // this.y_axis_group + // ); + // } + + // make_anim_y_specifics() { + // this.specific_y_group.textContent = ''; + // this.specific_values.map((d) => { + // this.add_and_animate_y_line( + // d.title, + // this.old_zero_line - d.value * this.old_multiplier, + // this.zero_line - d.value * this.multiplier, + // 0, + // this.specific_y_group, + // d.line_type, + // true + // ); + // }); + // } + + // make_new_axis_anim_lines(old_pos, new_pos, old_vals, new_vals, last_line_pos, add_and_animate_line, group) { + // let superimposed_positions, superimposed_values; + // let no_of_extras = new_vals.length - old_vals.length; + // if(no_of_extras > 0) { + // // More axis are needed + // // First make only the superimposed (same position) ones + // // Add in the extras at the end later + // superimposed_positions = new_pos.slice(0, old_pos.length); + // superimposed_values = new_vals.slice(0, old_vals.length); + // } else { + // // Axis have to be reduced + // // Fake it by moving all current extra axis to the last position + // // You'll need filler positions and values in the new arrays + // const filler_vals = new Array(Math.abs(no_of_extras)).fill(""); + // superimposed_values = new_vals.concat(filler_vals); + + // const filler_pos = new Array(Math.abs(no_of_extras)).fill(last_line_pos + "F"); + // superimposed_positions = new_pos.concat(filler_pos); + // } + + // superimposed_values.map((value, i) => { + // add_and_animate_line(value, old_pos[i], superimposed_positions[i], i, group); + // }); + + // if(no_of_extras > 0) { + // // Add in extra axis in the end + // // and then animate to new positions + // const extra_values = new_vals.slice(old_vals.length); + // const extra_positions = new_pos.slice(old_pos.length); + + // extra_values.map((value, i) => { + // add_and_animate_line(value, last_line_pos, extra_positions[i], i, group); + // }); + // } + // } + + // add_and_animate_y_line(value, old_pos, new_pos, i, group, type, specific=false) { + // let filler = false; + // if(typeof new_pos === 'string') { + // new_pos = parseInt(new_pos.substring(0, new_pos.length-1)); + // filler = true; + // } + // let new_props = {transform: `0, ${ new_pos }`}; + // let old_props = {transform: `0, ${ old_pos }`}; + + // if(filler) { + // new_props['stroke-opacity'] = 0; + // // old_props['stroke-opacity'] = 1; + // } + + // let [width, text_end_at, axis_line_class, start_at] = getYLineProps( + // this.width, this.y_axis_mode, specific); + // let axis_label_class = !specific ? 'y-value-text' : 'specific-value'; + // value = !specific ? value : (value+"").toUpperCase(); + // const y_line = makeYLine( + // start_at, + // width, + // text_end_at, + // value, + // axis_label_class, + // axis_line_class, + // old_pos, // old position + // (value === 0 && i !== 0), // Non-first Zero line + // type + // ); + + // group.appendChild(y_line); + + // this.elements_to_animate && this.elements_to_animate.push([ + // {unit: y_line, array: [0], index: 0}, + // new_props, + // 350, + // "easein", + // "translate", + // old_props + // ]); + // } + + add_data_point(y_point, x_point, index=this.x.length) { + let new_y = this.y.map(data_set => { return {values:data_set.values}; }); + new_y.map((d, i) => { d.values.splice(index, 0, y_point[i]); }); + let new_x = this.x.slice(); + new_x.splice(index, 0, x_point); + + this.updateData(new_y, new_x); + } + + remove_data_point(index = this.x.length-1) { + if(this.x.length < 3) return; + + let new_y = this.y.map(data_set => { return {values:data_set.values}; }); + new_y.map((d) => { d.values.splice(index, 1); }); + let new_x = this.x.slice(); + new_x.splice(index, 1); + + this.updateData(new_y, new_x); } getDataPoint(index=this.current_index) { diff --git a/dist/frappe-charts.min.cjs.js b/dist/frappe-charts.min.cjs.js index bff0840..d482a3e 100644 --- a/dist/frappe-charts.min.cjs.js +++ b/dist/frappe-charts.min.cjs.js @@ -1 +1 @@ -"use strict";function __$styleInject(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");return a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t)),e}function $$1(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function offset(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function isElementInViewport(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function getElementContentWidth(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function floatTwo(t){return parseFloat(t.toFixed(2))}function arraysEqual(t,e){if(t.length!==e.length)return!1;var i=!0;return t.map(function(t,a){e[a]!==t&&(i=!1)}),i}function fillArray(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function getStringWidth(t,e){return(t+"").length*e}function getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function equilizeNoOfPositions(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=fillArray(t,i):e=fillArray(e,i),[t,e]}function $$2(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function createSVG(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)$$2(n).appendChild(i);else if("around"===a){var s=$$2(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":_typeof(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function renderVerticalGradient(t,e){return createSVG("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function setGradientStop(t,e,i,a){return createSVG("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function makeSVGContainer(t,e,i,a){return createSVG("svg",{className:e,inside:t,width:i,height:a})}function makeSVGDefs(t){return createSVG("defs",{inside:t})}function makeSVGGroup(t,e){return createSVG("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function makePath(t){return createSVG("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function makeGradient(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=renderVerticalGradient(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),setGradientStop(n,"0%",e,s[0]),setGradientStop(n,"50%",e,s[1]),setGradientStop(n,"100%",e,s[2]),a}function makeHeatSquare(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),createSVG("rect",r)}function makeText(t,e,i,a){return createSVG("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function makeXLine$1(t,e,i,a,n,s){var r=createSVG("line",{x1:0,x2:0,y1:0,y2:t}),o=createSVG("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=createSVG("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function makeYLine(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=createSVG("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=createSVG("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=createSVG("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function animateSVG(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function transform(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function runSVGAnimation(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=animateSVG.apply(void 0,toConsumableArray(t)),l=slicedToArray(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function normalize(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function getRangeIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function getIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=normalize(t),a=slicedToArray(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=getRangeIntervals(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function calcIntervals(t){function e(t,e){for(var i=getIntervals(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,toConsumableArray(t)),n=Math.min.apply(Math,toConsumableArray(t)),s=[];if(a>=0&&n>=0)normalize(a)[1],s=i?getIntervals(a,n):getIntervals(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(normalize(a)[1],s=e(a,r)):(normalize(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);normalize(o)[1],s=(s=i?getIntervals(o,l):getIntervals(o)).reverse().map(function(t){return-1*t})}return s}function calcDistribution(t,e){for(var i=Math.max.apply(Math,toConsumableArray(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function lightenDarkenColor(t,e){var i=getColor(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=limitColor((n>>16)+e),r=limitColor((n>>8&255)+e),o=limitColor((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function isValidColor(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function treatAsUtc(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function getDdMmYyyy(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function getWeeksBetween(t,e){return Math.ceil(getDaysBetween(t,e)/7)}function getDaysBetween(t,e){return(treatAsUtc(e)-treatAsUtc(t))/864e5}function addDays(t,e){t.setDate(t.getDate()+e)}function getChartByType(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return chartTypes[t]?new chartTypes[t](e):new LineChart(e)}__$styleInject('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var _typeof="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},asyncGenerator=function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},createClass=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
    \n\t\t\t\t
    '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){t.hide_tip()})}},{key:"fill",value:function(){var t=this,e=void 0;e=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=e,this.data_point_list.innerHTML="",this.list_values.map(function(e,i){var a=t.colors[i]||"black",n=$$1.create("li",{styles:{"border-top":"3px solid "+a},innerHTML:''+(0===e.value||e.value?e.value:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});t.data_point_list.appendChild(n)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),t}(),PRESET_COLOR_MAP={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},DEFAULT_COLORS=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],getColor=function(t){return PRESET_COLOR_MAP[t]||t},ALL_CHART_TYPES=["line","scatter","bar","percentage","heatmap","pie"],COMPATIBLE_CHARTS={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},COLOR_COMPATIBLE_CHARTS={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},BaseChart=function(){function t(e){var i=e.height,a=void 0===i?240:i,n=e.title,s=void 0===n?"":n,r=e.subtitle,o=void 0===r?"":r,l=e.colors,h=void 0===l?[]:l,u=e.summary,c=void 0===u?[]:u,p=e.is_navigable,_=void 0===p?0:p,d=e.has_legend,f=void 0===d?0:d,v=e.type,m=void 0===v?"":v,g=e.parent,y=e.data;classCallCheck(this,t),this.raw_chart_args=arguments[0],this.parent="string"==typeof g?document.querySelector(g):g,this.title=s,this.subtitle=o,this.data=y,this.oldData=Object.assign({},y),this.specific_values=y.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=f,this.setColors(h,m),this.set_margins(a)}return createClass(t,[{key:"get_different_chart",value:function(t){if(t!==this.type){ALL_CHART_TYPES.includes(t)||console.error("'"+t+"' is not a valid chart type."),COMPATIBLE_CHARTS[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=COLOR_COMPATIBLE_CHARTS[this.type].includes(t);return new Chart({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=getStringWidth(e.title+"",8);i>t&&(t=i-40)}),this.base_width=getElementContentWidth(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=$$1.create("div",{className:"chart-container",innerHTML:'
    '+this.title+'
    \n\t\t\t\t
    '+this.subtitle+'
    \n\t\t\t\t
    \n\t\t\t\t
    '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=makeSVGContainer(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=makeSVGDefs(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new SvgTip({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var t=this;this.summary.map(function(e){var i=$$1.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+e.title+": "+e.value+"\n\t\t\t\t"});t.stats_wrapper.appendChild(i)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){isElementInViewport(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.draw_area,t,e)}}]),t}(),AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.x=i.data.labels||[],i.y=i.data.datasets||[],i.is_series=t.is_series,i.format_tooltip_y=t.format_tooltip_y,i.format_tooltip_x=t.format_tooltip_x,i.zero_line=i.height,i}return inherits(e,t),createClass(e,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return floatTwo(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var t=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(t=t.concat(this.y_sums)),this.y_axis_values=calcIntervals(t,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var e=this.y_axis_values,i=e[e.length-1]-e[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/i,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=e[1]-e[0],n=a*this.multiplier,s=void 0;s=e.indexOf(0)>=0?e.indexOf(0):e[0]>0?-1*e[0]/a:-1*e[e.length-1]/a+(e.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-s*n,this.old_zero_line||(this.old_zero_line=this.zero_line)}},{key:"setup_components",value:function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_y_axis(),this.make_x_axis(),this.draw_graph(t),this.make_y_specifics()}},{key:"make_x_axis",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=void 0,a=void 0,n=void 0,s="";if("span"===this.x_axis_mode?(i=-7,a=this.height+15,n=this.height+25):"tick"===this.x_axis_mode&&(i=this.height,a=6,n=9,s="x-axis-label"),this.x_axis_group.setAttribute("transform","translate(0,"+i+")"),e)return void this.make_anim_x_axis(a,n,s);var r=1.5*this.avg_unit_width,o=r/8;this.x_axis_group.textContent="",this.x.map(function(e,i){var l=getStringWidth(e,8)+2;if(l>r)if(t.is_series){for(var h=1;l/h*2>r;)h++;if(i%h!=0)return}else e=e.slice(0,o-3)+" ...";t.x_axis_group.appendChild(makeXLine$1(a,n,e,"x-value-text",s,t.x_axis_positions[i]))})}},{key:"make_y_axis",value:function(){var t=this;if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return this.make_anim_y_axis(),void this.make_anim_y_specifics();var e=this.get_y_axis_line_props(),i=slicedToArray(e,4),a=i[0],n=i[1],s=i[2],r=i[3];this.y_axis_group.textContent="",this.y_axis_values.map(function(e,i){t.y_axis_group.appendChild(makeYLine(r,a,n,e,"y-value-text",s,t.zero_line-e*t.multiplier,0===e&&0!==i))})}},{key:"get_y_axis_line_props",value:function(){if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return[this.width,this.width+5,"specific-value",0];var t=void 0,e="",i=0;return"span"===this.y_axis_mode?(t=this.width+6,i=-6):"tick"===this.y_axis_mode&&(t=-6,e="y-axis-label"),[t,-9,e,i]}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.update_values(e)},350)}},{key:"setup_navigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new UnitRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"make_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.specific_y_group.appendChild(makeYLine(0,t.width,t.width+5,e.title.toUpperCase(),"specific-value","specific-value",t.zero_line-e.value*t.multiplier,!1,e.line_type))})}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(e){var i=offset(t.chart_wrapper),a=e.pageX-i.left-t.translate_x;e.pageY-i.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.update_values(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.update_values())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.update_values()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.update_values()}},{key:"update_values",value:function(t,e){var i=this;e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),arraysEqual(this.x_old_axis_positions,this.x_axis_positions)||(this.make_x_axis(!0),setTimeout(function(){i.updating||i.make_x_axis()},350)),(!arraysEqual(this.y_old_axis_values,this.y_axis_values)||this.old_specific_values&&!arraysEqual(this.old_specific_values,this.specific_values))&&(this.make_y_axis(!0),setTimeout(function(){i.updating||(i.make_y_axis(),i.make_y_specifics())},350)),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.update_values(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.update_values(e,i)}}},{key:"run_animation",value:function(){var t=this,e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=equilizeNoOfPositions(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=slicedToArray(i,2),n=a[0],s=a[1],r=equilizeNoOfPositions(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=slicedToArray(r,2),l=o[0],h=o[1];s.length-n.length>0&&(t.make_path&&t.make_path(e,n,l,t.colors[e.index]),t.make_new_units_for_dataset(n,l,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,s,h),t.animate_units(e,n,l,s,h)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i,a,n){var s=this,r=this.unit_args.type;t.svg_units.map(function(e,i){void 0!==a[i]&&void 0!==n[i]&&s.elements_to_animate.push(s.animator[r]({unit:e,array:t.svg_units,index:i},a[i],n[i],t.index,s.y.length))})}},{key:"make_anim_x_axis",value:function(t,e,i){var a=this,n=this.x_old_axis_positions,s=this.x_axis_positions,r=this.old_x_values,o=this.x,l=n[n.length-1],h=function(n,s,r){"string"==typeof r&&(r=parseInt(r.substring(0,r.length-1)));var o=makeXLine$1(t,e,n,"x-value-text",i,s);a.x_axis_group.appendChild(o),a.elements_to_animate&&a.elements_to_animate.push([{unit:o,array:[0],index:0},{transform:r+", 0"},350,"easein","translate",{transform:s+", 0"}])};this.x_axis_group.textContent="",this.make_new_axis_anim_lines(n,s,r,o,l,h)}},{key:"make_anim_y_axis",value:function(){var t=this,e=this.y_old_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),i=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),a=this.y_old_axis_values,n=this.y_axis_values,s=e[e.length-1];this.y_axis_group.textContent="",this.make_new_axis_anim_lines(e,i,a,n,s,this.add_and_animate_y_line.bind(this),this.y_axis_group)}},{key:"make_anim_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.add_and_animate_y_line(e.title,t.old_zero_line-e.value*t.old_multiplier,t.zero_line-e.value*t.multiplier,0,t.specific_y_group,e.line_type,!0)})}},{key:"make_new_axis_anim_lines",value:function(t,e,i,a,n,s,r){var o=void 0,l=void 0,h=a.length-i.length;if(h>0)o=e.slice(0,t.length),l=a.slice(0,i.length);else{var u=new Array(Math.abs(h)).fill("");l=a.concat(u);var c=new Array(Math.abs(h)).fill(n+"F");o=e.concat(c)}if(l.map(function(e,i){s(e,t[i],o[i],i,r)}),h>0){var p=a.slice(i.length),_=e.slice(t.length);p.map(function(t,e){s(t,n,_[e],e,r)})}}},{key:"add_and_animate_y_line",value:function(t,e,i,a,n,s){var r=arguments.length>6&&void 0!==arguments[6]&&arguments[6],o=!1;"string"==typeof i&&(i=parseInt(i.substring(0,i.length-1)),o=!0);var l={transform:"0, "+i},h={transform:"0, "+e};o&&(l["stroke-opacity"]=0);var u=this.get_y_axis_line_props(r),c=slicedToArray(u,4),p=c[0],_=c[1],d=c[2],f=c[3],v=r?"specific-value":"y-value-text",m=makeYLine(f,p,_,t=r?(t+"").toUpperCase():t,v,d,e,0===t&&0!==a,s);n.appendChild(m),this.elements_to_animate&&this.elements_to_animate.push([{unit:m,array:[0],index:0},l,350,"easein","translate",h])}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var t=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(e,i){var a=$$1.create("div",{className:"progress-bar",inside:t.percentage_bar,styles:{background:t.colors[i],width:100*e/t.grand_total+"%"}});t.slices.push(a)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(e,i){e.addEventListener("mouseenter",function(){var a=offset(t.chart_wrapper),n=offset(e),s=n.left-a.left+e.offsetWidth/2,r=n.top-a.top-6,o=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[i]:t.labels[i])+": ",l=(100*t.slice_totals[i]/t.grand_total).toFixed(1);t.tip.set_values(s,r,o,l+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var t=this,e=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}]),e}(BaseChart),ANGLE_RATIO=Math.PI/180,FULL_ANGLE=360,PieChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.type="pie",i.elements_to_animate=null,i.hoverRadio=t.hoverRadio||.1,i.max_slices=10,i.max_legend_points=6,i.isAnimate=!1,i.startAngle=t.startAngle||0,i.clockWise=t.clockWise||!1,i.mouseMove=i.mouseMove.bind(i),i.mouseLeave=i.mouseLeave.bind(i),i.setup(),i}return inherits(e,t),createClass(e,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var i=this,a=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/i.grand_total*FULL_ANGLE,c=n?-u:u,p=r+=c,_=e.getPositionByAngle(h,a),d=e.getPositionByAngle(p,a),f=t&&s[l],v=void 0,m=void 0;t?(v=f?f.startPosition:_,m=f?f.endPosition:_):(v=_,m=d);var g=i.makeArcPath(v,m),y=makePath(g,"pie-path","none",i.colors[l]);y.style.transition="transform .3s;",i.draw_area.appendChild(y),i.slices.push(y),i.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:c}),t&&i.elements_to_animate.push([{unit:y,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(_,d)},650,"easein",null,{d:g}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var i=this.radius,a=this.hoverRadio,n=e.getPositionByAngle(t.startAngle+t.angle/2,i);return"translate3d("+n.x*a+"px,"+n.y*a+"px,0)"}},{key:"hoverSlice",value:function(t,e,i,a){if(t){var n=this.colors[e];if(i){transform(t,this.calTranslateByAngle(this.slicesProperties[e])),t.style.fill=lightenDarkenColor(n,50);var s=offset(this.svg),r=a.pageX-s.left+10,o=a.pageY-s.top-10,l=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[e]:this.labels[e])+": ",h=(100*this.slice_totals[e]/this.grand_total).toFixed(1);this.tip.set_values(r,o,l,h+"%"),this.tip.show_tip()}else transform(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=n}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){var n=t.colors[a];i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*ANGLE_RATIO)*e,y:Math.cos(t*ANGLE_RATIO)*e}}}]),e}(BaseChart),Heatmap=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,f=void 0===d?[]:d;classCallCheck(this,e);var v=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));v.type="heatmap",v.domain=s,v.subdomain=o,v.data=h,v.discrete_domains=c,v.count_label=_;var m=new Date;return v.start=a||addDays(m,365),f=f.slice(0,5),v.legend_colors=v.validate_colors(f)?f:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],v.distribution_size=5,v.translate_x=0,v.setup(),v}return inherits(e,t),createClass(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){isValidColor(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&addDays(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&addDays(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=getWeeksBetween(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=calcDistribution(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;f.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=f}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=makeText("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(BaseChart),chartTypes={line:LineChart,bar:BarChart,scatter:ScatterChart,percentage:PercentageChart,heatmap:Heatmap,pie:PieChart},Chart=function t(e){return classCallCheck(this,t),getChartByType(e.type,arguments[0])};module.exports=Chart; +"use strict";function __$styleInject(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");return a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t)),e}function $$1(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function offset(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function isElementInViewport(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function getElementContentWidth(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function floatTwo(t){return parseFloat(t.toFixed(2))}function fillArray(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function getStringWidth(t,e){return(t+"").length*e}function getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function equilizeNoOfElements(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=fillArray(t,i):e=fillArray(e,i),[t,e]}function getXLineProps(t,e){var i=void 0,a=void 0,n=void 0,s="";return"span"===e?(i=-7,a=t+15,n=t+25):"tick"===e&&(i=t,a=6,n=9,s="x-axis-label"),[i,a,n,s]}function getYLineProps(t,e){if(arguments.length>2&&void 0!==arguments[2]&&arguments[2])return[t,t+5,"specific-value",0];var i=void 0,a="",n=0;return"span"===e?(i=t+6,n=-6):"tick"===e&&(i=-6,a="y-axis-label"),[i,-9,a,n]}function $$2(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function createSVG(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)$$2(n).appendChild(i);else if("around"===a){var s=$$2(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":_typeof(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function renderVerticalGradient(t,e){return createSVG("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function setGradientStop(t,e,i,a){return createSVG("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function makeSVGContainer(t,e,i,a){return createSVG("svg",{className:e,inside:t,width:i,height:a})}function makeSVGDefs(t){return createSVG("defs",{inside:t})}function makeSVGGroup(t,e){return createSVG("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function makePath(t){return createSVG("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function makeGradient(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=renderVerticalGradient(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),setGradientStop(n,"0%",e,s[0]),setGradientStop(n,"50%",e,s[1]),setGradientStop(n,"100%",e,s[2]),a}function makeHeatSquare(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),createSVG("rect",r)}function makeText(t,e,i,a){return createSVG("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function makeXLine(t,e,i,a,n,s){var r=createSVG("line",{x1:0,x2:0,y1:0,y2:t}),o=createSVG("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=createSVG("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function makeYLine(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=createSVG("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=createSVG("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=createSVG("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function animateSVG(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function transform(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function runSVGAnimation(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=animateSVG.apply(void 0,toConsumableArray(t)),l=slicedToArray(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function normalize(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function getRangeIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function getIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=normalize(t),a=slicedToArray(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=getRangeIntervals(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function calcIntervals(t){function e(t,e){for(var i=getIntervals(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,toConsumableArray(t)),n=Math.min.apply(Math,toConsumableArray(t)),s=[];if(a>=0&&n>=0)normalize(a)[1],s=i?getIntervals(a,n):getIntervals(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(normalize(a)[1],s=e(a,r)):(normalize(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);normalize(o)[1],s=(s=i?getIntervals(o,l):getIntervals(o)).reverse().map(function(t){return-1*t})}return s}function calcDistribution(t,e){for(var i=Math.max.apply(Math,toConsumableArray(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function lightenDarkenColor(t,e){var i=getColor(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=limitColor((n>>16)+e),r=limitColor((n>>8&255)+e),o=limitColor((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function isValidColor(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function treatAsUtc(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function getDdMmYyyy(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function getWeeksBetween(t,e){return Math.ceil(getDaysBetween(t,e)/7)}function getDaysBetween(t,e){return(treatAsUtc(e)-treatAsUtc(t))/864e5}function addDays(t,e){t.setDate(t.getDate()+e)}function getChartByType(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return chartTypes[t]?new chartTypes[t](e):new LineChart(e)}__$styleInject('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var _typeof="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},asyncGenerator=function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},createClass=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
      \n\t\t\t\t
      '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){t.hide_tip()})}},{key:"fill",value:function(){var t=this,e=void 0;e=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=e,this.data_point_list.innerHTML="",this.list_values.map(function(e,i){var a=t.colors[i]||"black",n=$$1.create("li",{styles:{"border-top":"3px solid "+a},innerHTML:''+(0===e.value||e.value?e.value:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});t.data_point_list.appendChild(n)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),t}(),PRESET_COLOR_MAP={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},DEFAULT_COLORS=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],getColor=function(t){return PRESET_COLOR_MAP[t]||t},ALL_CHART_TYPES=["line","scatter","bar","percentage","heatmap","pie"],COMPATIBLE_CHARTS={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},COLOR_COMPATIBLE_CHARTS={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},BaseChart=function(){function t(e){var i=e.height,a=void 0===i?240:i,n=e.title,s=void 0===n?"":n,r=e.subtitle,o=void 0===r?"":r,l=e.colors,h=void 0===l?[]:l,u=e.summary,c=void 0===u?[]:u,p=e.is_navigable,_=void 0===p?0:p,d=e.has_legend,f=void 0===d?0:d,v=e.type,m=void 0===v?"":v,g=e.parent,y=e.data;classCallCheck(this,t),this.raw_chart_args=arguments[0],this.parent="string"==typeof g?document.querySelector(g):g,this.title=s,this.subtitle=o,this.data=y,this.oldData=Object.assign({},y),this.specific_values=y.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=f,this.setColors(h,m),this.set_margins(a)}return createClass(t,[{key:"get_different_chart",value:function(t){if(t!==this.type){ALL_CHART_TYPES.includes(t)||console.error("'"+t+"' is not a valid chart type."),COMPATIBLE_CHARTS[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=COLOR_COMPATIBLE_CHARTS[this.type].includes(t);return new Chart({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=getStringWidth(e.title+"",8);i>t&&(t=i-40)}),this.base_width=getElementContentWidth(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=$$1.create("div",{className:"chart-container",innerHTML:'
      '+this.title+'
      \n\t\t\t\t
      '+this.subtitle+'
      \n\t\t\t\t
      \n\t\t\t\t
      '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=makeSVGContainer(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=makeSVGDefs(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new SvgTip({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var t=this;this.summary.map(function(e){var i=$$1.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+e.title+": "+e.value+"\n\t\t\t\t"});t.stats_wrapper.appendChild(i)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){isElementInViewport(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.draw_area,t,e)}}]),t}(),AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.x=i.data.labels||[],i.y=i.data.datasets||[],i.is_series=t.is_series,i.format_tooltip_y=t.format_tooltip_y,i.format_tooltip_x=t.format_tooltip_x,i.zero_line=i.height,i}return inherits(e,t),createClass(e,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return floatTwo(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){var t=this;this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.y_axis_values=calcIntervals(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var i=this.y_axis_values,a=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/a,this.old_multiplier||(this.old_multiplier=this.multiplier);var n=i[1]-i[0],s=n*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/n:-1*i[i.length-1]/n+(i.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-r*s,this.old_zero_line||(this.old_zero_line=this.zero_line),this.y_axis_positions=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),this.yAnnotationPositions=this.specific_values.map(function(e){return t.zero_line-e*t.multiplier})}},{key:"setup_components",value:function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.makeYLines(this.y_axis_positions,this.y_axis_values),this.makeXLines(this.x_axis_positions,this.x),this.draw_graph(t),this.make_y_specifics(this.yAnnotationPositions,this.specific_values)}},{key:"makeXLines",value:function(t,e){var i=this,a=getXLineProps(this.height,this.x_axis_mode),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3];this.x_axis_group.setAttribute("transform","translate(0,"+s+")");var h=1.5*this.avg_unit_width,u=h/8;this.xAxisLines=[],this.x_axis_group.textContent="",e.map(function(e,a){var n=getStringWidth(e,8)+2;if(n>h)if(i.is_series){for(var s=1;n/s*2>h;)s++;if(a%s!=0)return}else e=e.slice(0,u-3)+" ...";var c=makeXLine(r,o,e,"x-value-text",l,t[a]);i.xAxisLines.push(c),i.x_axis_group.appendChild(c)})}},{key:"makeYLines",value:function(t,e){var i=this,a=getYLineProps(this.width,this.y_axis_mode),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3];this.yAxisLines=[],this.y_axis_group.textContent="",e.map(function(e,a){i.y_axis_group.appendChild(makeYLine(l,s,r,e,"y-value-text",o,t[a],0===e&&0!==a))})}},{key:"make_y_specifics",value:function(t,e){var i=this;this.specific_y_group.textContent="",e.map(function(e,a){i.specific_y_group.appendChild(makeYLine(0,i.width,i.width+5,e.title.toUpperCase(),"specific-value","specific-value",t[a],!1,e.line_type))})}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setup_navigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new UnitRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(e){var i=offset(t.chart_wrapper),a=e.pageX-i.left-t.translate_x;e.pageY-i.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.updateData(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.updateData())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.updateData()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.updateData()}},{key:"updateData",value:function(t,e){e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"run_animation",value:function(){var t=this,e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=equilizeNoOfElements(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=slicedToArray(i,2),n=a[0],s=a[1],r=equilizeNoOfElements(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=slicedToArray(r,2),l=o[0],h=o[1],u=t.y_old_axis_values.slice(),c=equilizeNoOfElements(t.y_old_axis_values.slice(),t.y_axis_values.slice()),p=slicedToArray(c,2),_=p[0],d=p[1],f=t.x.slice(),v=t.x_axis_positions.slice().length-t.x_old_axis_positions.slice().length;v>0&&(t.make_path&&t.make_path(e,n,l,t.colors[e.index]),t.make_new_units_for_dataset(n,l,t.colors[e.index],e.index,t.y.length),t.makeXLines(n,f)),t.makeYLines(_,u),0!==v&&t.animateXLines(n,s),e.path&&t.animate_path(e,s,h),t.animate_units(e,s,h),t.animateYLines(_,d)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e),t.makeYLines(t.y_axis_positions,t.y_axis_values),t.makeXLines(t.x_axis_positions,t.x)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i){var a=this,n=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&a.elements_to_animate.push(a.animator[n]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,a.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:e[n]+", 0"},350,"easein","translate",{transform:t[n]+", 0"}])})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:"0, "+e[n]},350,"easein","translate",{transform:"0, "+t[n]}])})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.updateData(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.updateData(e,i)}}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var t=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(e,i){var a=$$1.create("div",{className:"progress-bar",inside:t.percentage_bar,styles:{background:t.colors[i],width:100*e/t.grand_total+"%"}});t.slices.push(a)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(e,i){e.addEventListener("mouseenter",function(){var a=offset(t.chart_wrapper),n=offset(e),s=n.left-a.left+e.offsetWidth/2,r=n.top-a.top-6,o=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[i]:t.labels[i])+": ",l=(100*t.slice_totals[i]/t.grand_total).toFixed(1);t.tip.set_values(s,r,o,l+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var t=this,e=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}]),e}(BaseChart),ANGLE_RATIO=Math.PI/180,FULL_ANGLE=360,PieChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.type="pie",i.elements_to_animate=null,i.hoverRadio=t.hoverRadio||.1,i.max_slices=10,i.max_legend_points=6,i.isAnimate=!1,i.startAngle=t.startAngle||0,i.clockWise=t.clockWise||!1,i.mouseMove=i.mouseMove.bind(i),i.mouseLeave=i.mouseLeave.bind(i),i.setup(),i}return inherits(e,t),createClass(e,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var i=this,a=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/i.grand_total*FULL_ANGLE,c=n?-u:u,p=r+=c,_=e.getPositionByAngle(h,a),d=e.getPositionByAngle(p,a),f=t&&s[l],v=void 0,m=void 0;t?(v=f?f.startPosition:_,m=f?f.endPosition:_):(v=_,m=d);var g=i.makeArcPath(v,m),y=makePath(g,"pie-path","none",i.colors[l]);y.style.transition="transform .3s;",i.draw_area.appendChild(y),i.slices.push(y),i.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:c}),t&&i.elements_to_animate.push([{unit:y,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(_,d)},650,"easein",null,{d:g}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var i=this.radius,a=this.hoverRadio,n=e.getPositionByAngle(t.startAngle+t.angle/2,i);return"translate3d("+n.x*a+"px,"+n.y*a+"px,0)"}},{key:"hoverSlice",value:function(t,e,i,a){if(t){var n=this.colors[e];if(i){transform(t,this.calTranslateByAngle(this.slicesProperties[e])),t.style.fill=lightenDarkenColor(n,50);var s=offset(this.svg),r=a.pageX-s.left+10,o=a.pageY-s.top-10,l=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[e]:this.labels[e])+": ",h=(100*this.slice_totals[e]/this.grand_total).toFixed(1);this.tip.set_values(r,o,l,h+"%"),this.tip.show_tip()}else transform(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=n}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){var n=t.colors[a];i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*ANGLE_RATIO)*e,y:Math.cos(t*ANGLE_RATIO)*e}}}]),e}(BaseChart),Heatmap=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,f=void 0===d?[]:d;classCallCheck(this,e);var v=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));v.type="heatmap",v.domain=s,v.subdomain=o,v.data=h,v.discrete_domains=c,v.count_label=_;var m=new Date;return v.start=a||addDays(m,365),f=f.slice(0,5),v.legend_colors=v.validate_colors(f)?f:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],v.distribution_size=5,v.translate_x=0,v.setup(),v}return inherits(e,t),createClass(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){isValidColor(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&addDays(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&addDays(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=getWeeksBetween(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=calcDistribution(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;f.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=f}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=makeText("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(BaseChart),chartTypes={line:LineChart,bar:BarChart,scatter:ScatterChart,percentage:PercentageChart,heatmap:Heatmap,pie:PieChart},Chart=function t(e){return classCallCheck(this,t),getChartByType(e.type,arguments[0])};module.exports=Chart; diff --git a/dist/frappe-charts.min.esm.js b/dist/frappe-charts.min.esm.js index d9bb7c7..d2f660a 100644 --- a/dist/frappe-charts.min.esm.js +++ b/dist/frappe-charts.min.esm.js @@ -1 +1 @@ -function __$styleInject(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");return a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t)),e}function $$1(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function offset(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function isElementInViewport(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function getElementContentWidth(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function floatTwo(t){return parseFloat(t.toFixed(2))}function arraysEqual(t,e){if(t.length!==e.length)return!1;var i=!0;return t.map(function(t,a){e[a]!==t&&(i=!1)}),i}function fillArray(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function getStringWidth(t,e){return(t+"").length*e}function getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function equilizeNoOfPositions(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=fillArray(t,i):e=fillArray(e,i),[t,e]}function $$2(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function createSVG(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)$$2(n).appendChild(i);else if("around"===a){var s=$$2(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":_typeof(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function renderVerticalGradient(t,e){return createSVG("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function setGradientStop(t,e,i,a){return createSVG("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function makeSVGContainer(t,e,i,a){return createSVG("svg",{className:e,inside:t,width:i,height:a})}function makeSVGDefs(t){return createSVG("defs",{inside:t})}function makeSVGGroup(t,e){return createSVG("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function makePath(t){return createSVG("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function makeGradient(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=renderVerticalGradient(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),setGradientStop(n,"0%",e,s[0]),setGradientStop(n,"50%",e,s[1]),setGradientStop(n,"100%",e,s[2]),a}function makeHeatSquare(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),createSVG("rect",r)}function makeText(t,e,i,a){return createSVG("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function makeXLine$1(t,e,i,a,n,s){var r=createSVG("line",{x1:0,x2:0,y1:0,y2:t}),o=createSVG("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=createSVG("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function makeYLine(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=createSVG("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=createSVG("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=createSVG("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function animateSVG(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function transform(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function runSVGAnimation(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=animateSVG.apply(void 0,toConsumableArray(t)),l=slicedToArray(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function normalize(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function getRangeIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function getIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=normalize(t),a=slicedToArray(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=getRangeIntervals(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function calcIntervals(t){function e(t,e){for(var i=getIntervals(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,toConsumableArray(t)),n=Math.min.apply(Math,toConsumableArray(t)),s=[];if(a>=0&&n>=0)normalize(a)[1],s=i?getIntervals(a,n):getIntervals(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(normalize(a)[1],s=e(a,r)):(normalize(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);normalize(o)[1],s=(s=i?getIntervals(o,l):getIntervals(o)).reverse().map(function(t){return-1*t})}return s}function calcDistribution(t,e){for(var i=Math.max.apply(Math,toConsumableArray(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function lightenDarkenColor(t,e){var i=getColor(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=limitColor((n>>16)+e),r=limitColor((n>>8&255)+e),o=limitColor((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function isValidColor(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function treatAsUtc(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function getDdMmYyyy(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function getWeeksBetween(t,e){return Math.ceil(getDaysBetween(t,e)/7)}function getDaysBetween(t,e){return(treatAsUtc(e)-treatAsUtc(t))/864e5}function addDays(t,e){t.setDate(t.getDate()+e)}function getChartByType(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return chartTypes[t]?new chartTypes[t](e):new LineChart(e)}__$styleInject('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var _typeof="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},asyncGenerator=function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},createClass=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
        \n\t\t\t\t
        '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){t.hide_tip()})}},{key:"fill",value:function(){var t=this,e=void 0;e=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=e,this.data_point_list.innerHTML="",this.list_values.map(function(e,i){var a=t.colors[i]||"black",n=$$1.create("li",{styles:{"border-top":"3px solid "+a},innerHTML:''+(0===e.value||e.value?e.value:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});t.data_point_list.appendChild(n)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),t}(),PRESET_COLOR_MAP={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},DEFAULT_COLORS=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],getColor=function(t){return PRESET_COLOR_MAP[t]||t},ALL_CHART_TYPES=["line","scatter","bar","percentage","heatmap","pie"],COMPATIBLE_CHARTS={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},COLOR_COMPATIBLE_CHARTS={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},BaseChart=function(){function t(e){var i=e.height,a=void 0===i?240:i,n=e.title,s=void 0===n?"":n,r=e.subtitle,o=void 0===r?"":r,l=e.colors,h=void 0===l?[]:l,u=e.summary,c=void 0===u?[]:u,p=e.is_navigable,_=void 0===p?0:p,d=e.has_legend,f=void 0===d?0:d,v=e.type,m=void 0===v?"":v,g=e.parent,y=e.data;classCallCheck(this,t),this.raw_chart_args=arguments[0],this.parent="string"==typeof g?document.querySelector(g):g,this.title=s,this.subtitle=o,this.data=y,this.oldData=Object.assign({},y),this.specific_values=y.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=f,this.setColors(h,m),this.set_margins(a)}return createClass(t,[{key:"get_different_chart",value:function(t){if(t!==this.type){ALL_CHART_TYPES.includes(t)||console.error("'"+t+"' is not a valid chart type."),COMPATIBLE_CHARTS[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=COLOR_COMPATIBLE_CHARTS[this.type].includes(t);return new Chart({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=getStringWidth(e.title+"",8);i>t&&(t=i-40)}),this.base_width=getElementContentWidth(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=$$1.create("div",{className:"chart-container",innerHTML:'
        '+this.title+'
        \n\t\t\t\t
        '+this.subtitle+'
        \n\t\t\t\t
        \n\t\t\t\t
        '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=makeSVGContainer(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=makeSVGDefs(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new SvgTip({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var t=this;this.summary.map(function(e){var i=$$1.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+e.title+": "+e.value+"\n\t\t\t\t"});t.stats_wrapper.appendChild(i)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){isElementInViewport(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.draw_area,t,e)}}]),t}(),AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.x=i.data.labels||[],i.y=i.data.datasets||[],i.is_series=t.is_series,i.format_tooltip_y=t.format_tooltip_y,i.format_tooltip_x=t.format_tooltip_x,i.zero_line=i.height,i}return inherits(e,t),createClass(e,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return floatTwo(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var t=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(t=t.concat(this.y_sums)),this.y_axis_values=calcIntervals(t,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var e=this.y_axis_values,i=e[e.length-1]-e[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/i,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=e[1]-e[0],n=a*this.multiplier,s=void 0;s=e.indexOf(0)>=0?e.indexOf(0):e[0]>0?-1*e[0]/a:-1*e[e.length-1]/a+(e.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-s*n,this.old_zero_line||(this.old_zero_line=this.zero_line)}},{key:"setup_components",value:function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_y_axis(),this.make_x_axis(),this.draw_graph(t),this.make_y_specifics()}},{key:"make_x_axis",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=void 0,a=void 0,n=void 0,s="";if("span"===this.x_axis_mode?(i=-7,a=this.height+15,n=this.height+25):"tick"===this.x_axis_mode&&(i=this.height,a=6,n=9,s="x-axis-label"),this.x_axis_group.setAttribute("transform","translate(0,"+i+")"),e)return void this.make_anim_x_axis(a,n,s);var r=1.5*this.avg_unit_width,o=r/8;this.x_axis_group.textContent="",this.x.map(function(e,i){var l=getStringWidth(e,8)+2;if(l>r)if(t.is_series){for(var h=1;l/h*2>r;)h++;if(i%h!=0)return}else e=e.slice(0,o-3)+" ...";t.x_axis_group.appendChild(makeXLine$1(a,n,e,"x-value-text",s,t.x_axis_positions[i]))})}},{key:"make_y_axis",value:function(){var t=this;if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return this.make_anim_y_axis(),void this.make_anim_y_specifics();var e=this.get_y_axis_line_props(),i=slicedToArray(e,4),a=i[0],n=i[1],s=i[2],r=i[3];this.y_axis_group.textContent="",this.y_axis_values.map(function(e,i){t.y_axis_group.appendChild(makeYLine(r,a,n,e,"y-value-text",s,t.zero_line-e*t.multiplier,0===e&&0!==i))})}},{key:"get_y_axis_line_props",value:function(){if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return[this.width,this.width+5,"specific-value",0];var t=void 0,e="",i=0;return"span"===this.y_axis_mode?(t=this.width+6,i=-6):"tick"===this.y_axis_mode&&(t=-6,e="y-axis-label"),[t,-9,e,i]}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.update_values(e)},350)}},{key:"setup_navigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new UnitRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"make_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.specific_y_group.appendChild(makeYLine(0,t.width,t.width+5,e.title.toUpperCase(),"specific-value","specific-value",t.zero_line-e.value*t.multiplier,!1,e.line_type))})}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(e){var i=offset(t.chart_wrapper),a=e.pageX-i.left-t.translate_x;e.pageY-i.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.update_values(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.update_values())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.update_values()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.update_values()}},{key:"update_values",value:function(t,e){var i=this;e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),arraysEqual(this.x_old_axis_positions,this.x_axis_positions)||(this.make_x_axis(!0),setTimeout(function(){i.updating||i.make_x_axis()},350)),(!arraysEqual(this.y_old_axis_values,this.y_axis_values)||this.old_specific_values&&!arraysEqual(this.old_specific_values,this.specific_values))&&(this.make_y_axis(!0),setTimeout(function(){i.updating||(i.make_y_axis(),i.make_y_specifics())},350)),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.update_values(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.update_values(e,i)}}},{key:"run_animation",value:function(){var t=this,e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=equilizeNoOfPositions(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=slicedToArray(i,2),n=a[0],s=a[1],r=equilizeNoOfPositions(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=slicedToArray(r,2),l=o[0],h=o[1];s.length-n.length>0&&(t.make_path&&t.make_path(e,n,l,t.colors[e.index]),t.make_new_units_for_dataset(n,l,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,s,h),t.animate_units(e,n,l,s,h)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i,a,n){var s=this,r=this.unit_args.type;t.svg_units.map(function(e,i){void 0!==a[i]&&void 0!==n[i]&&s.elements_to_animate.push(s.animator[r]({unit:e,array:t.svg_units,index:i},a[i],n[i],t.index,s.y.length))})}},{key:"make_anim_x_axis",value:function(t,e,i){var a=this,n=this.x_old_axis_positions,s=this.x_axis_positions,r=this.old_x_values,o=this.x,l=n[n.length-1],h=function(n,s,r){"string"==typeof r&&(r=parseInt(r.substring(0,r.length-1)));var o=makeXLine$1(t,e,n,"x-value-text",i,s);a.x_axis_group.appendChild(o),a.elements_to_animate&&a.elements_to_animate.push([{unit:o,array:[0],index:0},{transform:r+", 0"},350,"easein","translate",{transform:s+", 0"}])};this.x_axis_group.textContent="",this.make_new_axis_anim_lines(n,s,r,o,l,h)}},{key:"make_anim_y_axis",value:function(){var t=this,e=this.y_old_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),i=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),a=this.y_old_axis_values,n=this.y_axis_values,s=e[e.length-1];this.y_axis_group.textContent="",this.make_new_axis_anim_lines(e,i,a,n,s,this.add_and_animate_y_line.bind(this),this.y_axis_group)}},{key:"make_anim_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.add_and_animate_y_line(e.title,t.old_zero_line-e.value*t.old_multiplier,t.zero_line-e.value*t.multiplier,0,t.specific_y_group,e.line_type,!0)})}},{key:"make_new_axis_anim_lines",value:function(t,e,i,a,n,s,r){var o=void 0,l=void 0,h=a.length-i.length;if(h>0)o=e.slice(0,t.length),l=a.slice(0,i.length);else{var u=new Array(Math.abs(h)).fill("");l=a.concat(u);var c=new Array(Math.abs(h)).fill(n+"F");o=e.concat(c)}if(l.map(function(e,i){s(e,t[i],o[i],i,r)}),h>0){var p=a.slice(i.length),_=e.slice(t.length);p.map(function(t,e){s(t,n,_[e],e,r)})}}},{key:"add_and_animate_y_line",value:function(t,e,i,a,n,s){var r=arguments.length>6&&void 0!==arguments[6]&&arguments[6],o=!1;"string"==typeof i&&(i=parseInt(i.substring(0,i.length-1)),o=!0);var l={transform:"0, "+i},h={transform:"0, "+e};o&&(l["stroke-opacity"]=0);var u=this.get_y_axis_line_props(r),c=slicedToArray(u,4),p=c[0],_=c[1],d=c[2],f=c[3],v=r?"specific-value":"y-value-text",m=makeYLine(f,p,_,t=r?(t+"").toUpperCase():t,v,d,e,0===t&&0!==a,s);n.appendChild(m),this.elements_to_animate&&this.elements_to_animate.push([{unit:m,array:[0],index:0},l,350,"easein","translate",h])}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var t=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(e,i){var a=$$1.create("div",{className:"progress-bar",inside:t.percentage_bar,styles:{background:t.colors[i],width:100*e/t.grand_total+"%"}});t.slices.push(a)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(e,i){e.addEventListener("mouseenter",function(){var a=offset(t.chart_wrapper),n=offset(e),s=n.left-a.left+e.offsetWidth/2,r=n.top-a.top-6,o=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[i]:t.labels[i])+": ",l=(100*t.slice_totals[i]/t.grand_total).toFixed(1);t.tip.set_values(s,r,o,l+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var t=this,e=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}]),e}(BaseChart),ANGLE_RATIO=Math.PI/180,FULL_ANGLE=360,PieChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.type="pie",i.elements_to_animate=null,i.hoverRadio=t.hoverRadio||.1,i.max_slices=10,i.max_legend_points=6,i.isAnimate=!1,i.startAngle=t.startAngle||0,i.clockWise=t.clockWise||!1,i.mouseMove=i.mouseMove.bind(i),i.mouseLeave=i.mouseLeave.bind(i),i.setup(),i}return inherits(e,t),createClass(e,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var i=this,a=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/i.grand_total*FULL_ANGLE,c=n?-u:u,p=r+=c,_=e.getPositionByAngle(h,a),d=e.getPositionByAngle(p,a),f=t&&s[l],v=void 0,m=void 0;t?(v=f?f.startPosition:_,m=f?f.endPosition:_):(v=_,m=d);var g=i.makeArcPath(v,m),y=makePath(g,"pie-path","none",i.colors[l]);y.style.transition="transform .3s;",i.draw_area.appendChild(y),i.slices.push(y),i.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:c}),t&&i.elements_to_animate.push([{unit:y,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(_,d)},650,"easein",null,{d:g}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var i=this.radius,a=this.hoverRadio,n=e.getPositionByAngle(t.startAngle+t.angle/2,i);return"translate3d("+n.x*a+"px,"+n.y*a+"px,0)"}},{key:"hoverSlice",value:function(t,e,i,a){if(t){var n=this.colors[e];if(i){transform(t,this.calTranslateByAngle(this.slicesProperties[e])),t.style.fill=lightenDarkenColor(n,50);var s=offset(this.svg),r=a.pageX-s.left+10,o=a.pageY-s.top-10,l=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[e]:this.labels[e])+": ",h=(100*this.slice_totals[e]/this.grand_total).toFixed(1);this.tip.set_values(r,o,l,h+"%"),this.tip.show_tip()}else transform(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=n}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){var n=t.colors[a];i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*ANGLE_RATIO)*e,y:Math.cos(t*ANGLE_RATIO)*e}}}]),e}(BaseChart),Heatmap=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,f=void 0===d?[]:d;classCallCheck(this,e);var v=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));v.type="heatmap",v.domain=s,v.subdomain=o,v.data=h,v.discrete_domains=c,v.count_label=_;var m=new Date;return v.start=a||addDays(m,365),f=f.slice(0,5),v.legend_colors=v.validate_colors(f)?f:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],v.distribution_size=5,v.translate_x=0,v.setup(),v}return inherits(e,t),createClass(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){isValidColor(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&addDays(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&addDays(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=getWeeksBetween(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=calcDistribution(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;f.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=f}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=makeText("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(BaseChart),chartTypes={line:LineChart,bar:BarChart,scatter:ScatterChart,percentage:PercentageChart,heatmap:Heatmap,pie:PieChart},Chart=function t(e){return classCallCheck(this,t),getChartByType(e.type,arguments[0])};export default Chart; +function __$styleInject(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");return a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t)),e}function $$1(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function offset(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function isElementInViewport(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function getElementContentWidth(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function floatTwo(t){return parseFloat(t.toFixed(2))}function fillArray(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function getStringWidth(t,e){return(t+"").length*e}function getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function equilizeNoOfElements(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=fillArray(t,i):e=fillArray(e,i),[t,e]}function getXLineProps(t,e){var i=void 0,a=void 0,n=void 0,s="";return"span"===e?(i=-7,a=t+15,n=t+25):"tick"===e&&(i=t,a=6,n=9,s="x-axis-label"),[i,a,n,s]}function getYLineProps(t,e){if(arguments.length>2&&void 0!==arguments[2]&&arguments[2])return[t,t+5,"specific-value",0];var i=void 0,a="",n=0;return"span"===e?(i=t+6,n=-6):"tick"===e&&(i=-6,a="y-axis-label"),[i,-9,a,n]}function $$2(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function createSVG(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)$$2(n).appendChild(i);else if("around"===a){var s=$$2(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":_typeof(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function renderVerticalGradient(t,e){return createSVG("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function setGradientStop(t,e,i,a){return createSVG("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function makeSVGContainer(t,e,i,a){return createSVG("svg",{className:e,inside:t,width:i,height:a})}function makeSVGDefs(t){return createSVG("defs",{inside:t})}function makeSVGGroup(t,e){return createSVG("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function makePath(t){return createSVG("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function makeGradient(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=renderVerticalGradient(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),setGradientStop(n,"0%",e,s[0]),setGradientStop(n,"50%",e,s[1]),setGradientStop(n,"100%",e,s[2]),a}function makeHeatSquare(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),createSVG("rect",r)}function makeText(t,e,i,a){return createSVG("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function makeXLine(t,e,i,a,n,s){var r=createSVG("line",{x1:0,x2:0,y1:0,y2:t}),o=createSVG("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=createSVG("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function makeYLine(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=createSVG("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=createSVG("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=createSVG("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function animateSVG(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function transform(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function runSVGAnimation(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=animateSVG.apply(void 0,toConsumableArray(t)),l=slicedToArray(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function normalize(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function getRangeIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function getIntervals(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=normalize(t),a=slicedToArray(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=getRangeIntervals(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function calcIntervals(t){function e(t,e){for(var i=getIntervals(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,toConsumableArray(t)),n=Math.min.apply(Math,toConsumableArray(t)),s=[];if(a>=0&&n>=0)normalize(a)[1],s=i?getIntervals(a,n):getIntervals(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(normalize(a)[1],s=e(a,r)):(normalize(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);normalize(o)[1],s=(s=i?getIntervals(o,l):getIntervals(o)).reverse().map(function(t){return-1*t})}return s}function calcDistribution(t,e){for(var i=Math.max.apply(Math,toConsumableArray(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function lightenDarkenColor(t,e){var i=getColor(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=limitColor((n>>16)+e),r=limitColor((n>>8&255)+e),o=limitColor((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function isValidColor(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function treatAsUtc(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function getDdMmYyyy(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function getWeeksBetween(t,e){return Math.ceil(getDaysBetween(t,e)/7)}function getDaysBetween(t,e){return(treatAsUtc(e)-treatAsUtc(t))/864e5}function addDays(t,e){t.setDate(t.getDate()+e)}function getChartByType(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return chartTypes[t]?new chartTypes[t](e):new LineChart(e)}__$styleInject('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var _typeof="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},asyncGenerator=function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},createClass=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
          \n\t\t\t\t
          '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){t.hide_tip()})}},{key:"fill",value:function(){var t=this,e=void 0;e=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=e,this.data_point_list.innerHTML="",this.list_values.map(function(e,i){var a=t.colors[i]||"black",n=$$1.create("li",{styles:{"border-top":"3px solid "+a},innerHTML:''+(0===e.value||e.value?e.value:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});t.data_point_list.appendChild(n)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),t}(),PRESET_COLOR_MAP={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},DEFAULT_COLORS=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],getColor=function(t){return PRESET_COLOR_MAP[t]||t},ALL_CHART_TYPES=["line","scatter","bar","percentage","heatmap","pie"],COMPATIBLE_CHARTS={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},COLOR_COMPATIBLE_CHARTS={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},BaseChart=function(){function t(e){var i=e.height,a=void 0===i?240:i,n=e.title,s=void 0===n?"":n,r=e.subtitle,o=void 0===r?"":r,l=e.colors,h=void 0===l?[]:l,u=e.summary,c=void 0===u?[]:u,p=e.is_navigable,_=void 0===p?0:p,d=e.has_legend,f=void 0===d?0:d,v=e.type,m=void 0===v?"":v,g=e.parent,y=e.data;classCallCheck(this,t),this.raw_chart_args=arguments[0],this.parent="string"==typeof g?document.querySelector(g):g,this.title=s,this.subtitle=o,this.data=y,this.oldData=Object.assign({},y),this.specific_values=y.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=f,this.setColors(h,m),this.set_margins(a)}return createClass(t,[{key:"get_different_chart",value:function(t){if(t!==this.type){ALL_CHART_TYPES.includes(t)||console.error("'"+t+"' is not a valid chart type."),COMPATIBLE_CHARTS[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=COLOR_COMPATIBLE_CHARTS[this.type].includes(t);return new Chart({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=getStringWidth(e.title+"",8);i>t&&(t=i-40)}),this.base_width=getElementContentWidth(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=$$1.create("div",{className:"chart-container",innerHTML:'
          '+this.title+'
          \n\t\t\t\t
          '+this.subtitle+'
          \n\t\t\t\t
          \n\t\t\t\t
          '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=makeSVGContainer(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=makeSVGDefs(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new SvgTip({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var t=this;this.summary.map(function(e){var i=$$1.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+e.title+": "+e.value+"\n\t\t\t\t"});t.stats_wrapper.appendChild(i)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){isElementInViewport(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.draw_area,t,e)}}]),t}(),AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.x=i.data.labels||[],i.y=i.data.datasets||[],i.is_series=t.is_series,i.format_tooltip_y=t.format_tooltip_y,i.format_tooltip_x=t.format_tooltip_x,i.zero_line=i.height,i}return inherits(e,t),createClass(e,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return floatTwo(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){var t=this;this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.y_axis_values=calcIntervals(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var i=this.y_axis_values,a=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/a,this.old_multiplier||(this.old_multiplier=this.multiplier);var n=i[1]-i[0],s=n*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/n:-1*i[i.length-1]/n+(i.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-r*s,this.old_zero_line||(this.old_zero_line=this.zero_line),this.y_axis_positions=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),this.yAnnotationPositions=this.specific_values.map(function(e){return t.zero_line-e*t.multiplier})}},{key:"setup_components",value:function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.makeYLines(this.y_axis_positions,this.y_axis_values),this.makeXLines(this.x_axis_positions,this.x),this.draw_graph(t),this.make_y_specifics(this.yAnnotationPositions,this.specific_values)}},{key:"makeXLines",value:function(t,e){var i=this,a=getXLineProps(this.height,this.x_axis_mode),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3];this.x_axis_group.setAttribute("transform","translate(0,"+s+")");var h=1.5*this.avg_unit_width,u=h/8;this.xAxisLines=[],this.x_axis_group.textContent="",e.map(function(e,a){var n=getStringWidth(e,8)+2;if(n>h)if(i.is_series){for(var s=1;n/s*2>h;)s++;if(a%s!=0)return}else e=e.slice(0,u-3)+" ...";var c=makeXLine(r,o,e,"x-value-text",l,t[a]);i.xAxisLines.push(c),i.x_axis_group.appendChild(c)})}},{key:"makeYLines",value:function(t,e){var i=this,a=getYLineProps(this.width,this.y_axis_mode),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3];this.yAxisLines=[],this.y_axis_group.textContent="",e.map(function(e,a){i.y_axis_group.appendChild(makeYLine(l,s,r,e,"y-value-text",o,t[a],0===e&&0!==a))})}},{key:"make_y_specifics",value:function(t,e){var i=this;this.specific_y_group.textContent="",e.map(function(e,a){i.specific_y_group.appendChild(makeYLine(0,i.width,i.width+5,e.title.toUpperCase(),"specific-value","specific-value",t[a],!1,e.line_type))})}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setup_navigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new UnitRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(e){var i=offset(t.chart_wrapper),a=e.pageX-i.left-t.translate_x;e.pageY-i.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.updateData(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.updateData())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.updateData()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.updateData()}},{key:"updateData",value:function(t,e){e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"run_animation",value:function(){var t=this,e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=equilizeNoOfElements(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=slicedToArray(i,2),n=a[0],s=a[1],r=equilizeNoOfElements(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=slicedToArray(r,2),l=o[0],h=o[1],u=t.y_old_axis_values.slice(),c=equilizeNoOfElements(t.y_old_axis_values.slice(),t.y_axis_values.slice()),p=slicedToArray(c,2),_=p[0],d=p[1],f=t.x.slice(),v=t.x_axis_positions.slice().length-t.x_old_axis_positions.slice().length;v>0&&(t.make_path&&t.make_path(e,n,l,t.colors[e.index]),t.make_new_units_for_dataset(n,l,t.colors[e.index],e.index,t.y.length),t.makeXLines(n,f)),t.makeYLines(_,u),0!==v&&t.animateXLines(n,s),e.path&&t.animate_path(e,s,h),t.animate_units(e,s,h),t.animateYLines(_,d)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e),t.makeYLines(t.y_axis_positions,t.y_axis_values),t.makeXLines(t.x_axis_positions,t.x)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i){var a=this,n=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&a.elements_to_animate.push(a.animator[n]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,a.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:e[n]+", 0"},350,"easein","translate",{transform:t[n]+", 0"}])})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:"0, "+e[n]},350,"easein","translate",{transform:"0, "+t[n]}])})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.updateData(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.updateData(e,i)}}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var t=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(e,i){var a=$$1.create("div",{className:"progress-bar",inside:t.percentage_bar,styles:{background:t.colors[i],width:100*e/t.grand_total+"%"}});t.slices.push(a)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(e,i){e.addEventListener("mouseenter",function(){var a=offset(t.chart_wrapper),n=offset(e),s=n.left-a.left+e.offsetWidth/2,r=n.top-a.top-6,o=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[i]:t.labels[i])+": ",l=(100*t.slice_totals[i]/t.grand_total).toFixed(1);t.tip.set_values(s,r,o,l+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var t=this,e=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}]),e}(BaseChart),ANGLE_RATIO=Math.PI/180,FULL_ANGLE=360,PieChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.type="pie",i.elements_to_animate=null,i.hoverRadio=t.hoverRadio||.1,i.max_slices=10,i.max_legend_points=6,i.isAnimate=!1,i.startAngle=t.startAngle||0,i.clockWise=t.clockWise||!1,i.mouseMove=i.mouseMove.bind(i),i.mouseLeave=i.mouseLeave.bind(i),i.setup(),i}return inherits(e,t),createClass(e,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var i=this,a=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/i.grand_total*FULL_ANGLE,c=n?-u:u,p=r+=c,_=e.getPositionByAngle(h,a),d=e.getPositionByAngle(p,a),f=t&&s[l],v=void 0,m=void 0;t?(v=f?f.startPosition:_,m=f?f.endPosition:_):(v=_,m=d);var g=i.makeArcPath(v,m),y=makePath(g,"pie-path","none",i.colors[l]);y.style.transition="transform .3s;",i.draw_area.appendChild(y),i.slices.push(y),i.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:c}),t&&i.elements_to_animate.push([{unit:y,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(_,d)},650,"easein",null,{d:g}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=runSVGAnimation(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var i=this.radius,a=this.hoverRadio,n=e.getPositionByAngle(t.startAngle+t.angle/2,i);return"translate3d("+n.x*a+"px,"+n.y*a+"px,0)"}},{key:"hoverSlice",value:function(t,e,i,a){if(t){var n=this.colors[e];if(i){transform(t,this.calTranslateByAngle(this.slicesProperties[e])),t.style.fill=lightenDarkenColor(n,50);var s=offset(this.svg),r=a.pageX-s.left+10,o=a.pageY-s.top-10,l=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[e]:this.labels[e])+": ",h=(100*this.slice_totals[e]/this.grand_total).toFixed(1);this.tip.set_values(r,o,l,h+"%"),this.tip.show_tip()}else transform(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=n}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(i,a){var n=t.colors[a];i&&($$1.create("div",{className:"stats",inside:t.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+e[a]+":\n\t\t\t\t\t"+i+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*ANGLE_RATIO)*e,y:Math.cos(t*ANGLE_RATIO)*e}}}]),e}(BaseChart),Heatmap=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,f=void 0===d?[]:d;classCallCheck(this,e);var v=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));v.type="heatmap",v.domain=s,v.subdomain=o,v.data=h,v.discrete_domains=c,v.count_label=_;var m=new Date;return v.start=a||addDays(m,365),f=f.slice(0,5),v.legend_colors=v.validate_colors(f)?f:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],v.distribution_size=5,v.translate_x=0,v.setup(),v}return inherits(e,t),createClass(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){isValidColor(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&addDays(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&addDays(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=getWeeksBetween(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=calcDistribution(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;f.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=f}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=makeText("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(BaseChart),chartTypes={line:LineChart,bar:BarChart,scatter:ScatterChart,percentage:PercentageChart,heatmap:Heatmap,pie:PieChart},Chart=function t(e){return classCallCheck(this,t),getChartByType(e.type,arguments[0])};export default Chart; diff --git a/dist/frappe-charts.min.iife.js b/dist/frappe-charts.min.iife.js index fcb7f70..8e9006b 100644 --- a/dist/frappe-charts.min.iife.js +++ b/dist/frappe-charts.min.iife.js @@ -1 +1 @@ -var Chart=function(){"use strict";function t(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function e(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function i(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function a(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function n(t){return parseFloat(t.toFixed(2))}function s(t,e){if(t.length!==e.length)return!1;var i=!0;return t.map(function(t,a){e[a]!==t&&(i=!1)}),i}function r(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function o(t,e){return(t+"").length*e}function l(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function h(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=r(t,i):e=r(e,i),[t,e]}function u(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function c(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)u(n).appendChild(i);else if("around"===a){var s=u(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":I(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function p(t,e){return c("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function _(t,e,i,a){return c("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function d(t,e,i,a){return c("svg",{className:e,inside:t,width:i,height:a})}function v(t){return c("defs",{inside:t})}function f(t,e){return c("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function m(t){return c("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function g(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=p(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),_(n,"0%",e,s[0]),_(n,"50%",e,s[1]),_(n,"100%",e,s[2]),a}function y(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),c("rect",r)}function x(t,e,i,a){return c("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function k(t,e,i,a,n,s){var r=c("line",{x1:0,x2:0,y1:0,y2:t}),o=c("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=c("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function w(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=c("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=c("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=c("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function b(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:Q[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function C(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function A(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=b.apply(void 0,G(t)),l=J(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function M(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function P(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=M(t),a=J(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=O(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function N(t){function e(t,e){for(var i=P(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,G(t)),n=Math.min.apply(Math,G(t)),s=[];if(a>=0&&n>=0)M(a)[1],s=i?P(a,n):P(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(M(a)[1],s=e(a,r)):(M(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);M(o)[1],s=(s=i?P(o,l):P(o)).reverse().map(function(t){return-1*t})}return s}function L(t,e){for(var i=Math.max.apply(Math,G(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function j(t,e){var i=it(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=T((n>>16)+e),r=T((n>>8&255)+e),o=T((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function z(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function D(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function E(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function H(t,e){return Math.ceil(F(t,e)/7)}function F(t,e){return(D(e)-D(t))/864e5}function W(t,e){t.setDate(t.getDate()+e)}function B(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return vt[t]?new vt[t](e):new ht(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var I="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},q=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)}}(),function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}),R=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
            \n\t\t\t\t
            '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){e.hide_tip()})}},{key:"fill",value:function(){var e=this,i=void 0;i=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=i,this.data_point_list.innerHTML="",this.list_values.map(function(i,a){var n=e.colors[a]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+n},innerHTML:''+(0===i.value||i.value?i.value:"")+"\n\t\t\t\t\t"+(i.title?i.title:"")});e.data_point_list.appendChild(s)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),tt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},et=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],it=function(t){return tt[t]||t},at=["line","scatter","bar","percentage","heatmap","pie"],nt={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},st={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},rt=function(){function e(t){var i=t.height,a=void 0===i?240:i,n=t.title,s=void 0===n?"":n,r=t.subtitle,o=void 0===r?"":r,l=t.colors,h=void 0===l?[]:l,u=t.summary,c=void 0===u?[]:u,p=t.is_navigable,_=void 0===p?0:p,d=t.has_legend,v=void 0===d?0:d,f=t.type,m=void 0===f?"":f,g=t.parent,y=t.data;q(this,e),this.raw_chart_args=arguments[0],this.parent="string"==typeof g?document.querySelector(g):g,this.title=s,this.subtitle=o,this.data=y,this.oldData=Object.assign({},y),this.specific_values=y.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=v,this.setColors(h,m),this.set_margins(a)}return R(e,[{key:"get_different_chart",value:function(t){if(t!==this.type){at.includes(t)||console.error("'"+t+"' is not a valid chart type."),nt[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=st[this.type].includes(t);return new ft({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=o(e.title+"",8);i>t&&(t=i-40)}),this.base_width=a(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=t.create("div",{className:"chart-container",innerHTML:'
            '+this.title+'
            \n\t\t\t\t
            '+this.subtitle+'
            \n\t\t\t\t
            \n\t\t\t\t
            '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=d(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=v(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=f(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new Z({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var e=this;this.summary.map(function(i){var a=t.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+i.title+": "+i.value+"\n\t\t\t\t"});e.stats_wrapper.appendChild(a)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){i(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return f(this.draw_area,t,e)}}]),e}(),ot=function(t){function i(t){q(this,i);var e=X(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return e.x=e.data.labels||[],e.y=e.data.datasets||[],e.is_series=t.is_series,e.format_tooltip_y=t.format_tooltip_y,e.format_tooltip_x=t.format_tooltip_x,e.zero_line=e.height,e}return Y(i,t),R(i,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return n(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var t=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(t=t.concat(this.y_sums)),this.y_axis_values=N(t,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var e=this.y_axis_values,i=e[e.length-1]-e[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/i,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=e[1]-e[0],n=a*this.multiplier,s=void 0;s=e.indexOf(0)>=0?e.indexOf(0):e[0]>0?-1*e[0]/a:-1*e[e.length-1]/a+(e.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-s*n,this.old_zero_line||(this.old_zero_line=this.zero_line)}},{key:"setup_components",value:function(){U(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_y_axis(),this.make_x_axis(),this.draw_graph(t),this.make_y_specifics()}},{key:"make_x_axis",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=void 0,a=void 0,n=void 0,s="";if("span"===this.x_axis_mode?(i=-7,a=this.height+15,n=this.height+25):"tick"===this.x_axis_mode&&(i=this.height,a=6,n=9,s="x-axis-label"),this.x_axis_group.setAttribute("transform","translate(0,"+i+")"),e)return void this.make_anim_x_axis(a,n,s);var r=1.5*this.avg_unit_width,l=r/8;this.x_axis_group.textContent="",this.x.map(function(e,i){var h=o(e,8)+2;if(h>r)if(t.is_series){for(var u=1;h/u*2>r;)u++;if(i%u!=0)return}else e=e.slice(0,l-3)+" ...";t.x_axis_group.appendChild(k(a,n,e,"x-value-text",s,t.x_axis_positions[i]))})}},{key:"make_y_axis",value:function(){var t=this;if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return this.make_anim_y_axis(),void this.make_anim_y_specifics();var e=this.get_y_axis_line_props(),i=J(e,4),a=i[0],n=i[1],s=i[2],r=i[3];this.y_axis_group.textContent="",this.y_axis_values.map(function(e,i){t.y_axis_group.appendChild(w(r,a,n,e,"y-value-text",s,t.zero_line-e*t.multiplier,0===e&&0!==i))})}},{key:"get_y_axis_line_props",value:function(){if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return[this.width,this.width+5,"specific-value",0];var t=void 0,e="",i=0;return"span"===this.y_axis_mode?(t=this.width+6,i=-6):"tick"===this.y_axis_mode&&(t=-6,e="y-axis-label"),[t,-9,e,i]}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.update_values(e)},350)}},{key:"setup_navigation",value:function(t){var e=this;t?setTimeout(function(){U(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",e).call(e,t)},500):U(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new V(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"make_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.specific_y_group.appendChild(w(0,t.width,t.width+5,e.title.toUpperCase(),"specific-value","specific-value",t.zero_line-e.value*t.multiplier,!1,e.line_type))})}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(i){var a=e(t.chart_wrapper),n=i.pageX-a.left-t.translate_x;i.pageY-a.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.update_values(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return n(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.update_values())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.update_values()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.update_values()}},{key:"update_values",value:function(t,e){var i=this;e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new K(this.height,this.width,this.zero_line,this.avg_unit_width),s(this.x_old_axis_positions,this.x_axis_positions)||(this.make_x_axis(!0),setTimeout(function(){i.updating||i.make_x_axis()},350)),(!s(this.y_old_axis_values,this.y_axis_values)||this.old_specific_values&&!s(this.old_specific_values,this.specific_values))&&(this.make_y_axis(!0),setTimeout(function(){i.updating||(i.make_y_axis(),i.make_y_specifics())},350)),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.update_values(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.update_values(e,i)}}},{key:"run_animation",value:function(){var t=this,e=A(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=h(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=J(i,2),n=a[0],s=a[1],r=h(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=J(r,2),l=o[0],u=o[1];s.length-n.length>0&&(t.make_path&&t.make_path(e,n,l,t.colors[e.index]),t.make_new_units_for_dataset(n,l,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,s,u),t.animate_units(e,n,l,s,u)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i,a,n){var s=this,r=this.unit_args.type;t.svg_units.map(function(e,i){void 0!==a[i]&&void 0!==n[i]&&s.elements_to_animate.push(s.animator[r]({unit:e,array:t.svg_units,index:i},a[i],n[i],t.index,s.y.length))})}},{key:"make_anim_x_axis",value:function(t,e,i){var a=this,n=this.x_old_axis_positions,s=this.x_axis_positions,r=this.old_x_values,o=this.x,l=n[n.length-1],h=function(n,s,r){"string"==typeof r&&(r=parseInt(r.substring(0,r.length-1)));var o=k(t,e,n,"x-value-text",i,s);a.x_axis_group.appendChild(o),a.elements_to_animate&&a.elements_to_animate.push([{unit:o,array:[0],index:0},{transform:r+", 0"},350,"easein","translate",{transform:s+", 0"}])};this.x_axis_group.textContent="",this.make_new_axis_anim_lines(n,s,r,o,l,h)}},{key:"make_anim_y_axis",value:function(){var t=this,e=this.y_old_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),i=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),a=this.y_old_axis_values,n=this.y_axis_values,s=e[e.length-1];this.y_axis_group.textContent="",this.make_new_axis_anim_lines(e,i,a,n,s,this.add_and_animate_y_line.bind(this),this.y_axis_group)}},{key:"make_anim_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.add_and_animate_y_line(e.title,t.old_zero_line-e.value*t.old_multiplier,t.zero_line-e.value*t.multiplier,0,t.specific_y_group,e.line_type,!0)})}},{key:"make_new_axis_anim_lines",value:function(t,e,i,a,n,s,r){var o=void 0,l=void 0,h=a.length-i.length;if(h>0)o=e.slice(0,t.length),l=a.slice(0,i.length);else{var u=new Array(Math.abs(h)).fill("");l=a.concat(u);var c=new Array(Math.abs(h)).fill(n+"F");o=e.concat(c)}if(l.map(function(e,i){s(e,t[i],o[i],i,r)}),h>0){var p=a.slice(i.length),_=e.slice(t.length);p.map(function(t,e){s(t,n,_[e],e,r)})}}},{key:"add_and_animate_y_line",value:function(t,e,i,a,n,s){var r=arguments.length>6&&void 0!==arguments[6]&&arguments[6],o=!1;"string"==typeof i&&(i=parseInt(i.substring(0,i.length-1)),o=!0);var l={transform:"0, "+i},h={transform:"0, "+e};o&&(l["stroke-opacity"]=0);var u=this.get_y_axis_line_props(r),c=J(u,4),p=c[0],_=c[1],d=c[2],v=c[3],f=r?"specific-value":"y-value-text",m=w(v,p,_,t=r?(t+"").toUpperCase():t,f,d,e,0===t&&0!==a,s);n.appendChild(m),this.elements_to_animate&&this.elements_to_animate.push([{unit:m,array:[0],index:0},l,350,"easein","translate",h])}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return n(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var e=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(i,a){var n=t.create("div",{className:"progress-bar",inside:e.percentage_bar,styles:{background:e.colors[a],width:100*i/e.grand_total+"%"}});e.slices.push(n)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(i,a){i.addEventListener("mouseenter",function(){var n=e(t.chart_wrapper),s=e(i),r=s.left-n.left+i.offsetWidth/2,o=s.top-n.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[a]:t.labels[a])+": ",h=(100*t.slice_totals[a]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}]),a}(rt),pt=Math.PI/180,_t=function(i){function a(t){q(this,a);var e=X(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,t));return e.type="pie",e.elements_to_animate=null,e.hoverRadio=t.hoverRadio||.1,e.max_slices=10,e.max_legend_points=6,e.isAnimate=!1,e.startAngle=t.startAngle||0,e.clockWise=t.clockWise||!1,e.mouseMove=e.mouseMove.bind(e),e.mouseLeave=e.mouseLeave.bind(e),e.setup(),e}return Y(a,i),R(a,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var e=this,i=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/e.grand_total*360,c=n?-u:u,p=r+=c,_=a.getPositionByAngle(h,i),d=a.getPositionByAngle(p,i),v=t&&s[l],f=void 0,g=void 0;t?(f=v?v.startPosition:_,g=v?v.endPosition:_):(f=_,g=d);var y=e.makeArcPath(f,g),x=m(y,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.draw_area.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:e.grand_total,startAngle:h,endAngle:p,angle:c}),t&&e.elements_to_animate.push([{unit:x,array:e.slices,index:e.slices.length-1},{d:e.makeArcPath(_,d)},650,"easein",null,{d:y}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=A(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=a.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,a,n){if(t){var s=this.colors[i];if(a){C(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=j(s,50);var r=e(this.svg),o=n.pageX-r.left+10,l=n.pageY-r.top-10,h=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.labels[i])+": ",u=(100*this.slice_totals[i]/this.grand_total).toFixed(1);this.tip.set_values(o,l,h,u+"%"),this.tip.show_tip()}else C(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=s}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){var s=e.colors[n];a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*pt)*e,y:Math.cos(t*pt)*e}}}]),a}(rt),dt=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,v=void 0===d?[]:d;q(this,e);var f=X(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));f.type="heatmap",f.domain=s,f.subdomain=o,f.data=h,f.discrete_domains=c,f.count_label=_;var m=new Date;return f.start=a||W(m,365),v=v.slice(0,5),f.legend_colors=f.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],f.distribution_size=5,f.translate_x=0,f.setup(),f}return Y(e,t),R(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){z(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&W(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&W(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=H(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=L(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;v.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=v}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=x("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(rt),vt={line:ht,bar:lt,scatter:ut,percentage:ct,heatmap:dt,pie:_t},ft=function t(e){return q(this,t),B(e.type,arguments[0])};return ft}(); +var Chart=function(){"use strict";function t(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function e(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function i(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function a(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function n(t){return parseFloat(t.toFixed(2))}function s(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function r(t,e){return(t+"").length*e}function o(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function l(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=s(t,i):e=s(e,i),[t,e]}function h(t,e){var i=void 0,a=void 0,n=void 0,s="";return"span"===e?(i=-7,a=t+15,n=t+25):"tick"===e&&(i=t,a=6,n=9,s="x-axis-label"),[i,a,n,s]}function u(t,e){if(arguments.length>2&&void 0!==arguments[2]&&arguments[2])return[t,t+5,"specific-value",0];var i=void 0,a="",n=0;return"span"===e?(i=t+6,n=-6):"tick"===e&&(i=-6,a="y-axis-label"),[i,-9,a,n]}function c(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function p(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)c(n).appendChild(i);else if("around"===a){var s=c(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":I(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function _(t,e){return p("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function d(t,e,i,a){return p("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function f(t,e,i,a){return p("svg",{className:e,inside:t,width:i,height:a})}function v(t){return p("defs",{inside:t})}function m(t,e){return p("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function y(t){return p("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function g(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=_(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),d(n,"0%",e,s[0]),d(n,"50%",e,s[1]),d(n,"100%",e,s[2]),a}function x(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),p("rect",r)}function k(t,e,i,a){return p("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function b(t,e,i,a,n,s){var r=p("line",{x1:0,x2:0,y1:0,y2:t}),o=p("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=p("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function w(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=p("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=p("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=p("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function C(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:Z[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function A(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function L(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=C.apply(void 0,V(t)),l=G(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function M(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function P(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=M(t),a=G(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=O(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function D(t){function e(t,e){for(var i=P(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,V(t)),n=Math.min.apply(Math,V(t)),s=[];if(a>=0&&n>=0)M(a)[1],s=i?P(a,n):P(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(M(a)[1],s=e(a,r)):(M(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);M(o)[1],s=(s=i?P(o,l):P(o)).reverse().map(function(t){return-1*t})}return s}function N(t,e){for(var i=Math.max.apply(Math,V(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function j(t,e){var i=at(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=T((n>>16)+e),r=T((n>>8&255)+e),o=T((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function z(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function E(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function H(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function W(t,e){return Math.ceil(F(t,e)/7)}function F(t,e){return(E(e)-E(t))/864e5}function B(t,e){t.setDate(t.getDate()+e)}function Y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return vt[t]?new vt[t](e):new ut(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var I="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},q=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)}}(),function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}),R=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
              \n\t\t\t\t
              '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){e.hide_tip()})}},{key:"fill",value:function(){var e=this,i=void 0;i=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=i,this.data_point_list.innerHTML="",this.list_values.map(function(i,a){var n=e.colors[a]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+n},innerHTML:''+(0===i.value||i.value?i.value:"")+"\n\t\t\t\t\t"+(i.title?i.title:"")});e.data_point_list.appendChild(s)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),et={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},it=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],at=function(t){return et[t]||t},nt=["line","scatter","bar","percentage","heatmap","pie"],st={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},rt={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},ot=function(){function e(t){var i=t.height,a=void 0===i?240:i,n=t.title,s=void 0===n?"":n,r=t.subtitle,o=void 0===r?"":r,l=t.colors,h=void 0===l?[]:l,u=t.summary,c=void 0===u?[]:u,p=t.is_navigable,_=void 0===p?0:p,d=t.has_legend,f=void 0===d?0:d,v=t.type,m=void 0===v?"":v,y=t.parent,g=t.data;q(this,e),this.raw_chart_args=arguments[0],this.parent="string"==typeof y?document.querySelector(y):y,this.title=s,this.subtitle=o,this.data=g,this.oldData=Object.assign({},g),this.specific_values=g.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=f,this.setColors(h,m),this.set_margins(a)}return R(e,[{key:"get_different_chart",value:function(t){if(t!==this.type){nt.includes(t)||console.error("'"+t+"' is not a valid chart type."),st[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=rt[this.type].includes(t);return new mt({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=r(e.title+"",8);i>t&&(t=i-40)}),this.base_width=a(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=t.create("div",{className:"chart-container",innerHTML:'
              '+this.title+'
              \n\t\t\t\t
              '+this.subtitle+'
              \n\t\t\t\t
              \n\t\t\t\t
              '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=f(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=v(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=m(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new tt({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var e=this;this.summary.map(function(i){var a=t.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+i.title+": "+i.value+"\n\t\t\t\t"});e.stats_wrapper.appendChild(a)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){i(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return m(this.draw_area,t,e)}}]),e}(),lt=function(t){function i(t){q(this,i);var e=J(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return e.x=e.data.labels||[],e.y=e.data.datasets||[],e.is_series=t.is_series,e.format_tooltip_y=t.format_tooltip_y,e.format_tooltip_x=t.format_tooltip_x,e.zero_line=e.height,e}return U(i,t),R(i,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return n(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){var t=this;this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.y_axis_values=D(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var i=this.y_axis_values,a=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/a,this.old_multiplier||(this.old_multiplier=this.multiplier);var n=i[1]-i[0],s=n*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/n:-1*i[i.length-1]/n+(i.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-r*s,this.old_zero_line||(this.old_zero_line=this.zero_line),this.y_axis_positions=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),this.yAnnotationPositions=this.specific_values.map(function(e){return t.zero_line-e*t.multiplier})}},{key:"setup_components",value:function(){X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.makeYLines(this.y_axis_positions,this.y_axis_values),this.makeXLines(this.x_axis_positions,this.x),this.draw_graph(t),this.make_y_specifics(this.yAnnotationPositions,this.specific_values)}},{key:"makeXLines",value:function(t,e){var i=this,a=h(this.height,this.x_axis_mode),n=G(a,4),s=n[0],o=n[1],l=n[2],u=n[3];this.x_axis_group.setAttribute("transform","translate(0,"+s+")");var c=1.5*this.avg_unit_width,p=c/8;this.xAxisLines=[],this.x_axis_group.textContent="",e.map(function(e,a){var n=r(e,8)+2;if(n>c)if(i.is_series){for(var s=1;n/s*2>c;)s++;if(a%s!=0)return}else e=e.slice(0,p-3)+" ...";var h=b(o,l,e,"x-value-text",u,t[a]);i.xAxisLines.push(h),i.x_axis_group.appendChild(h)})}},{key:"makeYLines",value:function(t,e){var i=this,a=u(this.width,this.y_axis_mode),n=G(a,4),s=n[0],r=n[1],o=n[2],l=n[3];this.yAxisLines=[],this.y_axis_group.textContent="",e.map(function(e,a){i.y_axis_group.appendChild(w(l,s,r,e,"y-value-text",o,t[a],0===e&&0!==a))})}},{key:"make_y_specifics",value:function(t,e){var i=this;this.specific_y_group.textContent="",e.map(function(e,a){i.specific_y_group.appendChild(w(0,i.width,i.width+5,e.title.toUpperCase(),"specific-value","specific-value",t[a],!1,e.line_type))})}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setup_navigation",value:function(t){var e=this;t?setTimeout(function(){X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",e).call(e,t)},500):X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new K(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(i){var a=e(t.chart_wrapper),n=i.pageX-a.left-t.translate_x;i.pageY-a.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.updateData(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return n(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.updateData())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.updateData()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.updateData()}},{key:"updateData",value:function(t,e){e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new Q(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"run_animation",value:function(){var t=this,e=L(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=l(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=G(i,2),n=a[0],s=a[1],r=l(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=G(r,2),h=o[0],u=o[1],c=t.y_old_axis_values.slice(),p=l(t.y_old_axis_values.slice(),t.y_axis_values.slice()),_=G(p,2),d=_[0],f=_[1],v=t.x.slice(),m=t.x_axis_positions.slice().length-t.x_old_axis_positions.slice().length;m>0&&(t.make_path&&t.make_path(e,n,h,t.colors[e.index]),t.make_new_units_for_dataset(n,h,t.colors[e.index],e.index,t.y.length),t.makeXLines(n,v)),t.makeYLines(d,c),0!==m&&t.animateXLines(n,s),e.path&&t.animate_path(e,s,u),t.animate_units(e,s,u),t.animateYLines(d,f)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e),t.makeYLines(t.y_axis_positions,t.y_axis_values),t.makeXLines(t.x_axis_positions,t.x)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i){var a=this,n=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&a.elements_to_animate.push(a.animator[n]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,a.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:e[n]+", 0"},350,"easein","translate",{transform:t[n]+", 0"}])})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:"0, "+e[n]},350,"easein","translate",{transform:"0, "+t[n]}])})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.updateData(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.updateData(e,i)}}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return n(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var e=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(i,a){var n=t.create("div",{className:"progress-bar",inside:e.percentage_bar,styles:{background:e.colors[a],width:100*i/e.grand_total+"%"}});e.slices.push(n)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(i,a){i.addEventListener("mouseenter",function(){var n=e(t.chart_wrapper),s=e(i),r=s.left-n.left+i.offsetWidth/2,o=s.top-n.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[a]:t.labels[a])+": ",h=(100*t.slice_totals[a]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}]),a}(ot),_t=Math.PI/180,dt=function(i){function a(t){q(this,a);var e=J(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,t));return e.type="pie",e.elements_to_animate=null,e.hoverRadio=t.hoverRadio||.1,e.max_slices=10,e.max_legend_points=6,e.isAnimate=!1,e.startAngle=t.startAngle||0,e.clockWise=t.clockWise||!1,e.mouseMove=e.mouseMove.bind(e),e.mouseLeave=e.mouseLeave.bind(e),e.setup(),e}return U(a,i),R(a,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var e=this,i=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/e.grand_total*360,c=n?-u:u,p=r+=c,_=a.getPositionByAngle(h,i),d=a.getPositionByAngle(p,i),f=t&&s[l],v=void 0,m=void 0;t?(v=f?f.startPosition:_,m=f?f.endPosition:_):(v=_,m=d);var g=e.makeArcPath(v,m),x=y(g,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.draw_area.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:e.grand_total,startAngle:h,endAngle:p,angle:c}),t&&e.elements_to_animate.push([{unit:x,array:e.slices,index:e.slices.length-1},{d:e.makeArcPath(_,d)},650,"easein",null,{d:g}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=L(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=a.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,a,n){if(t){var s=this.colors[i];if(a){A(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=j(s,50);var r=e(this.svg),o=n.pageX-r.left+10,l=n.pageY-r.top-10,h=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.labels[i])+": ",u=(100*this.slice_totals[i]/this.grand_total).toFixed(1);this.tip.set_values(o,l,h,u+"%"),this.tip.show_tip()}else A(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=s}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){var s=e.colors[n];a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*_t)*e,y:Math.cos(t*_t)*e}}}]),a}(ot),ft=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,f=void 0===d?[]:d;q(this,e);var v=J(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));v.type="heatmap",v.domain=s,v.subdomain=o,v.data=h,v.discrete_domains=c,v.count_label=_;var m=new Date;return v.start=a||B(m,365),f=f.slice(0,5),v.legend_colors=v.validate_colors(f)?f:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],v.distribution_size=5,v.translate_x=0,v.setup(),v}return U(e,t),R(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){z(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&B(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&B(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=W(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=N(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;f.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=f}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=k("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(ot),vt={line:ut,bar:ht,scatter:ct,percentage:pt,heatmap:ft,pie:dt},mt=function t(e){return q(this,t),Y(e.type,arguments[0])};return mt}(); diff --git a/docs/assets/js/frappe-charts.min.js b/docs/assets/js/frappe-charts.min.js index fcb7f70..8e9006b 100644 --- a/docs/assets/js/frappe-charts.min.js +++ b/docs/assets/js/frappe-charts.min.js @@ -1 +1 @@ -var Chart=function(){"use strict";function t(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function e(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function i(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function a(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function n(t){return parseFloat(t.toFixed(2))}function s(t,e){if(t.length!==e.length)return!1;var i=!0;return t.map(function(t,a){e[a]!==t&&(i=!1)}),i}function r(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function o(t,e){return(t+"").length*e}function l(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function h(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=r(t,i):e=r(e,i),[t,e]}function u(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function c(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)u(n).appendChild(i);else if("around"===a){var s=u(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":I(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function p(t,e){return c("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function _(t,e,i,a){return c("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function d(t,e,i,a){return c("svg",{className:e,inside:t,width:i,height:a})}function v(t){return c("defs",{inside:t})}function f(t,e){return c("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function m(t){return c("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function g(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=p(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),_(n,"0%",e,s[0]),_(n,"50%",e,s[1]),_(n,"100%",e,s[2]),a}function y(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),c("rect",r)}function x(t,e,i,a){return c("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function k(t,e,i,a,n,s){var r=c("line",{x1:0,x2:0,y1:0,y2:t}),o=c("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=c("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function w(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=c("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=c("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=c("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function b(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:Q[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function C(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function A(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=b.apply(void 0,G(t)),l=J(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function M(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function P(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=M(t),a=J(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=O(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function N(t){function e(t,e){for(var i=P(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,G(t)),n=Math.min.apply(Math,G(t)),s=[];if(a>=0&&n>=0)M(a)[1],s=i?P(a,n):P(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(M(a)[1],s=e(a,r)):(M(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);M(o)[1],s=(s=i?P(o,l):P(o)).reverse().map(function(t){return-1*t})}return s}function L(t,e){for(var i=Math.max.apply(Math,G(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function j(t,e){var i=it(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=T((n>>16)+e),r=T((n>>8&255)+e),o=T((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function z(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function D(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function E(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function H(t,e){return Math.ceil(F(t,e)/7)}function F(t,e){return(D(e)-D(t))/864e5}function W(t,e){t.setDate(t.getDate()+e)}function B(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return vt[t]?new vt[t](e):new ht(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var I="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},q=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)}}(),function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}),R=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
                \n\t\t\t\t
                '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){e.hide_tip()})}},{key:"fill",value:function(){var e=this,i=void 0;i=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=i,this.data_point_list.innerHTML="",this.list_values.map(function(i,a){var n=e.colors[a]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+n},innerHTML:''+(0===i.value||i.value?i.value:"")+"\n\t\t\t\t\t"+(i.title?i.title:"")});e.data_point_list.appendChild(s)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),tt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},et=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],it=function(t){return tt[t]||t},at=["line","scatter","bar","percentage","heatmap","pie"],nt={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},st={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},rt=function(){function e(t){var i=t.height,a=void 0===i?240:i,n=t.title,s=void 0===n?"":n,r=t.subtitle,o=void 0===r?"":r,l=t.colors,h=void 0===l?[]:l,u=t.summary,c=void 0===u?[]:u,p=t.is_navigable,_=void 0===p?0:p,d=t.has_legend,v=void 0===d?0:d,f=t.type,m=void 0===f?"":f,g=t.parent,y=t.data;q(this,e),this.raw_chart_args=arguments[0],this.parent="string"==typeof g?document.querySelector(g):g,this.title=s,this.subtitle=o,this.data=y,this.oldData=Object.assign({},y),this.specific_values=y.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=v,this.setColors(h,m),this.set_margins(a)}return R(e,[{key:"get_different_chart",value:function(t){if(t!==this.type){at.includes(t)||console.error("'"+t+"' is not a valid chart type."),nt[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=st[this.type].includes(t);return new ft({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=o(e.title+"",8);i>t&&(t=i-40)}),this.base_width=a(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=t.create("div",{className:"chart-container",innerHTML:'
                '+this.title+'
                \n\t\t\t\t
                '+this.subtitle+'
                \n\t\t\t\t
                \n\t\t\t\t
                '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=d(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=v(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=f(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new Z({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var e=this;this.summary.map(function(i){var a=t.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+i.title+": "+i.value+"\n\t\t\t\t"});e.stats_wrapper.appendChild(a)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){i(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return f(this.draw_area,t,e)}}]),e}(),ot=function(t){function i(t){q(this,i);var e=X(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return e.x=e.data.labels||[],e.y=e.data.datasets||[],e.is_series=t.is_series,e.format_tooltip_y=t.format_tooltip_y,e.format_tooltip_x=t.format_tooltip_x,e.zero_line=e.height,e}return Y(i,t),R(i,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return n(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var t=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(t=t.concat(this.y_sums)),this.y_axis_values=N(t,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var e=this.y_axis_values,i=e[e.length-1]-e[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/i,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=e[1]-e[0],n=a*this.multiplier,s=void 0;s=e.indexOf(0)>=0?e.indexOf(0):e[0]>0?-1*e[0]/a:-1*e[e.length-1]/a+(e.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-s*n,this.old_zero_line||(this.old_zero_line=this.zero_line)}},{key:"setup_components",value:function(){U(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_y_axis(),this.make_x_axis(),this.draw_graph(t),this.make_y_specifics()}},{key:"make_x_axis",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=void 0,a=void 0,n=void 0,s="";if("span"===this.x_axis_mode?(i=-7,a=this.height+15,n=this.height+25):"tick"===this.x_axis_mode&&(i=this.height,a=6,n=9,s="x-axis-label"),this.x_axis_group.setAttribute("transform","translate(0,"+i+")"),e)return void this.make_anim_x_axis(a,n,s);var r=1.5*this.avg_unit_width,l=r/8;this.x_axis_group.textContent="",this.x.map(function(e,i){var h=o(e,8)+2;if(h>r)if(t.is_series){for(var u=1;h/u*2>r;)u++;if(i%u!=0)return}else e=e.slice(0,l-3)+" ...";t.x_axis_group.appendChild(k(a,n,e,"x-value-text",s,t.x_axis_positions[i]))})}},{key:"make_y_axis",value:function(){var t=this;if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return this.make_anim_y_axis(),void this.make_anim_y_specifics();var e=this.get_y_axis_line_props(),i=J(e,4),a=i[0],n=i[1],s=i[2],r=i[3];this.y_axis_group.textContent="",this.y_axis_values.map(function(e,i){t.y_axis_group.appendChild(w(r,a,n,e,"y-value-text",s,t.zero_line-e*t.multiplier,0===e&&0!==i))})}},{key:"get_y_axis_line_props",value:function(){if(arguments.length>0&&void 0!==arguments[0]&&arguments[0])return[this.width,this.width+5,"specific-value",0];var t=void 0,e="",i=0;return"span"===this.y_axis_mode?(t=this.width+6,i=-6):"tick"===this.y_axis_mode&&(t=-6,e="y-axis-label"),[t,-9,e,i]}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.update_values(e)},350)}},{key:"setup_navigation",value:function(t){var e=this;t?setTimeout(function(){U(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",e).call(e,t)},500):U(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new V(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"make_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.specific_y_group.appendChild(w(0,t.width,t.width+5,e.title.toUpperCase(),"specific-value","specific-value",t.zero_line-e.value*t.multiplier,!1,e.line_type))})}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(i){var a=e(t.chart_wrapper),n=i.pageX-a.left-t.translate_x;i.pageY-a.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.update_values(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return n(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.update_values())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.update_values()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.update_values()}},{key:"update_values",value:function(t,e){var i=this;e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new K(this.height,this.width,this.zero_line,this.avg_unit_width),s(this.x_old_axis_positions,this.x_axis_positions)||(this.make_x_axis(!0),setTimeout(function(){i.updating||i.make_x_axis()},350)),(!s(this.y_old_axis_values,this.y_axis_values)||this.old_specific_values&&!s(this.old_specific_values,this.specific_values))&&(this.make_y_axis(!0),setTimeout(function(){i.updating||(i.make_y_axis(),i.make_y_specifics())},350)),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.update_values(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.update_values(e,i)}}},{key:"run_animation",value:function(){var t=this,e=A(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=h(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=J(i,2),n=a[0],s=a[1],r=h(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=J(r,2),l=o[0],u=o[1];s.length-n.length>0&&(t.make_path&&t.make_path(e,n,l,t.colors[e.index]),t.make_new_units_for_dataset(n,l,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,s,u),t.animate_units(e,n,l,s,u)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i,a,n){var s=this,r=this.unit_args.type;t.svg_units.map(function(e,i){void 0!==a[i]&&void 0!==n[i]&&s.elements_to_animate.push(s.animator[r]({unit:e,array:t.svg_units,index:i},a[i],n[i],t.index,s.y.length))})}},{key:"make_anim_x_axis",value:function(t,e,i){var a=this,n=this.x_old_axis_positions,s=this.x_axis_positions,r=this.old_x_values,o=this.x,l=n[n.length-1],h=function(n,s,r){"string"==typeof r&&(r=parseInt(r.substring(0,r.length-1)));var o=k(t,e,n,"x-value-text",i,s);a.x_axis_group.appendChild(o),a.elements_to_animate&&a.elements_to_animate.push([{unit:o,array:[0],index:0},{transform:r+", 0"},350,"easein","translate",{transform:s+", 0"}])};this.x_axis_group.textContent="",this.make_new_axis_anim_lines(n,s,r,o,l,h)}},{key:"make_anim_y_axis",value:function(){var t=this,e=this.y_old_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),i=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),a=this.y_old_axis_values,n=this.y_axis_values,s=e[e.length-1];this.y_axis_group.textContent="",this.make_new_axis_anim_lines(e,i,a,n,s,this.add_and_animate_y_line.bind(this),this.y_axis_group)}},{key:"make_anim_y_specifics",value:function(){var t=this;this.specific_y_group.textContent="",this.specific_values.map(function(e){t.add_and_animate_y_line(e.title,t.old_zero_line-e.value*t.old_multiplier,t.zero_line-e.value*t.multiplier,0,t.specific_y_group,e.line_type,!0)})}},{key:"make_new_axis_anim_lines",value:function(t,e,i,a,n,s,r){var o=void 0,l=void 0,h=a.length-i.length;if(h>0)o=e.slice(0,t.length),l=a.slice(0,i.length);else{var u=new Array(Math.abs(h)).fill("");l=a.concat(u);var c=new Array(Math.abs(h)).fill(n+"F");o=e.concat(c)}if(l.map(function(e,i){s(e,t[i],o[i],i,r)}),h>0){var p=a.slice(i.length),_=e.slice(t.length);p.map(function(t,e){s(t,n,_[e],e,r)})}}},{key:"add_and_animate_y_line",value:function(t,e,i,a,n,s){var r=arguments.length>6&&void 0!==arguments[6]&&arguments[6],o=!1;"string"==typeof i&&(i=parseInt(i.substring(0,i.length-1)),o=!0);var l={transform:"0, "+i},h={transform:"0, "+e};o&&(l["stroke-opacity"]=0);var u=this.get_y_axis_line_props(r),c=J(u,4),p=c[0],_=c[1],d=c[2],v=c[3],f=r?"specific-value":"y-value-text",m=w(v,p,_,t=r?(t+"").toUpperCase():t,f,d,e,0===t&&0!==a,s);n.appendChild(m),this.elements_to_animate&&this.elements_to_animate.push([{unit:m,array:[0],index:0},l,350,"easein","translate",h])}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return n(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var e=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(i,a){var n=t.create("div",{className:"progress-bar",inside:e.percentage_bar,styles:{background:e.colors[a],width:100*i/e.grand_total+"%"}});e.slices.push(n)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(i,a){i.addEventListener("mouseenter",function(){var n=e(t.chart_wrapper),s=e(i),r=s.left-n.left+i.offsetWidth/2,o=s.top-n.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[a]:t.labels[a])+": ",h=(100*t.slice_totals[a]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}]),a}(rt),pt=Math.PI/180,_t=function(i){function a(t){q(this,a);var e=X(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,t));return e.type="pie",e.elements_to_animate=null,e.hoverRadio=t.hoverRadio||.1,e.max_slices=10,e.max_legend_points=6,e.isAnimate=!1,e.startAngle=t.startAngle||0,e.clockWise=t.clockWise||!1,e.mouseMove=e.mouseMove.bind(e),e.mouseLeave=e.mouseLeave.bind(e),e.setup(),e}return Y(a,i),R(a,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var e=this,i=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/e.grand_total*360,c=n?-u:u,p=r+=c,_=a.getPositionByAngle(h,i),d=a.getPositionByAngle(p,i),v=t&&s[l],f=void 0,g=void 0;t?(f=v?v.startPosition:_,g=v?v.endPosition:_):(f=_,g=d);var y=e.makeArcPath(f,g),x=m(y,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.draw_area.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:e.grand_total,startAngle:h,endAngle:p,angle:c}),t&&e.elements_to_animate.push([{unit:x,array:e.slices,index:e.slices.length-1},{d:e.makeArcPath(_,d)},650,"easein",null,{d:y}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=A(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=a.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,a,n){if(t){var s=this.colors[i];if(a){C(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=j(s,50);var r=e(this.svg),o=n.pageX-r.left+10,l=n.pageY-r.top-10,h=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.labels[i])+": ",u=(100*this.slice_totals[i]/this.grand_total).toFixed(1);this.tip.set_values(o,l,h,u+"%"),this.tip.show_tip()}else C(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=s}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){var s=e.colors[n];a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*pt)*e,y:Math.cos(t*pt)*e}}}]),a}(rt),dt=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,v=void 0===d?[]:d;q(this,e);var f=X(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));f.type="heatmap",f.domain=s,f.subdomain=o,f.data=h,f.discrete_domains=c,f.count_label=_;var m=new Date;return f.start=a||W(m,365),v=v.slice(0,5),f.legend_colors=f.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],f.distribution_size=5,f.translate_x=0,f.setup(),f}return Y(e,t),R(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){z(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&W(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&W(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=H(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=L(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;v.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=v}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=x("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(rt),vt={line:ht,bar:lt,scatter:ut,percentage:ct,heatmap:dt,pie:_t},ft=function t(e){return q(this,t),B(e.type,arguments[0])};return ft}(); +var Chart=function(){"use strict";function t(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function e(t){var e=t.getBoundingClientRect();return{top:e.top+(document.documentElement.scrollTop||document.body.scrollTop),left:e.left+(document.documentElement.scrollLeft||document.body.scrollLeft)}}function i(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function a(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function n(t){return parseFloat(t.toFixed(2))}function s(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=a?t[0]:t[t.length-1]);var n=new Array(Math.abs(e)).fill(i);return t=a?n.concat(t):t.concat(n)}function r(t,e){return(t+"").length*e}function o(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=.01*i)):(n=e,0===(a=t-e)&&(a=.01*i)),[a,n]}function l(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=s(t,i):e=s(e,i),[t,e]}function h(t,e){var i=void 0,a=void 0,n=void 0,s="";return"span"===e?(i=-7,a=t+15,n=t+25):"tick"===e&&(i=t,a=6,n=9,s="x-axis-label"),[i,a,n,s]}function u(t,e){if(arguments.length>2&&void 0!==arguments[2]&&arguments[2])return[t,t+5,"specific-value",0];var i=void 0,a="",n=0;return"span"===e?(i=t+6,n=-6):"tick"===e&&(i=-6,a="y-axis-label"),[i,-9,a,n]}function c(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function p(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var a in e){var n=e[a];if("inside"===a)c(n).appendChild(i);else if("around"===a){var s=c(n);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===a?"object"===(void 0===n?"undefined":I(n))&&Object.keys(n).map(function(t){i.style[t]=n[t]}):("className"===a&&(a="class"),"innerHTML"===a?i.textContent=n:i.setAttribute(a,n))}return i}function _(t,e){return p("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function d(t,e,i,a){return p("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":a})}function f(t,e,i,a){return p("svg",{className:e,inside:t,width:i,height:a})}function v(t){return p("defs",{inside:t})}function m(t,e){return p("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function y(t){return p("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none"}})}function g(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a="path-fill-gradient-"+e,n=_(t,a),s=[1,.6,.2];return i&&(s=[.4,.2,0]),d(n,"0%",e,s[0]),d(n,"50%",e,s[1]),d(n,"100%",e,s[2]),a}function x(t,e,i,a){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"none",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r={className:t,x:e,y:i,width:a,height:a,fill:n};return Object.keys(s).map(function(t){r[t]=s[t]}),p("rect",r)}function k(t,e,i,a){return p("text",{className:t,x:e,y:i,dy:".32em",innerHTML:a})}function b(t,e,i,a,n,s){var r=p("line",{x1:0,x2:0,y1:0,y2:t}),o=p("text",{className:a,x:0,y:e,dy:".71em",innerHTML:i}),l=p("g",{className:"tick "+n,transform:"translate("+s+", 0)"});return l.appendChild(r),l.appendChild(o),l}function w(t,e,i,a,n,s,r){var o=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=p("line",{className:"dashed"===(arguments.length>8&&void 0!==arguments[8]?arguments[8]:"")?"dashed":"",x1:t,x2:e,y1:0,y2:0}),h=p("text",{className:n,x:i,y:0,dy:".32em",innerHTML:a+""}),u=p("g",{className:"tick "+s,transform:"translate(0, "+r+")","stroke-opacity":1});return o&&(l.style.stroke="rgba(27, 31, 35, 0.6)"),u.appendChild(l),u.appendChild(h),u}function C(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var h=void 0;h="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var u=s[l]||t.getAttribute(l),c=e[l],p={attributeName:l,from:u,to:c,begin:"0s",dur:i/1e3+"s",values:u+";"+c,keySplines:Z[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var _ in p)h.setAttribute(_,p[_]);r.appendChild(h),n?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function A(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function L(t,e){var i=[],a=[];e.map(function(t){var e=t[0],n=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=C.apply(void 0,V(t)),l=G(o,2);s=l[0],r=l[1],i.push(r),a.push([s,n]),n.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var n=t.cloneNode(!0);return a.map(function(t,a){t[1].replaceChild(i[a],t[0]),e[a][0]=i[a]}),n}function M(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),a=Math.floor(e),n=i-a,s=n,r=1;n>5&&(n%2!=0&&(n=++i-a),s=n/2,r=2),n<=2&&(r=n/(s=4)),0===n&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(a+r*l);return o}function P(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=M(t),a=G(i,2),n=a[0],s=a[1],r=e?e/Math.pow(10,s):0,o=O(n=n.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function D(t){function e(t,e){for(var i=P(t),a=i[1]-i[0],n=0,s=1;n1&&void 0!==arguments[1]&&arguments[1],a=Math.max.apply(Math,V(t)),n=Math.min.apply(Math,V(t)),s=[];if(a>=0&&n>=0)M(a)[1],s=i?P(a,n):P(a);else if(a>0&&n<0){var r=Math.abs(n);a>=r?(M(a)[1],s=e(a,r)):(M(r)[1],s=e(r,a).map(function(t){return-1*t}))}else if(a<=0&&n<=0){var o=Math.abs(n),l=Math.abs(a);M(o)[1],s=(s=i?P(o,l):P(o)).reverse().map(function(t){return-1*t})}return s}function N(t,e){for(var i=Math.max.apply(Math,V(t)),a=1/(e-1),n=[],s=0;s255?255:t<0?0:t}function j(t,e){var i=at(t),a=!1;"#"==i[0]&&(i=i.slice(1),a=!0);var n=parseInt(i,16),s=T((n>>16)+e),r=T((n>>8&255)+e),o=T((255&n)+e);return(a?"#":"")+(o|r<<8|s<<16).toString(16)}function z(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function E(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function H(t){var e=t.getDate(),i=t.getMonth()+1;return[(e>9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function W(t,e){return Math.ceil(F(t,e)/7)}function F(t,e){return(E(e)-E(t))/864e5}function B(t,e){t.setDate(t.getDate()+e)}function Y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return vt[t]?new vt[t](e):new ut(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}('.chart-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chart-container .graph-focus-margin{margin:0 5%}.chart-container>.title{margin-top:25px;margin-left:25px;text-align:left;font-weight:400;font-size:12px;color:#6c7680}.chart-container .graphics{margin-top:10px;padding-top:10px;padding-bottom:10px;position:relative}.chart-container .graph-stats-group{-ms-flex-pack:distribute;-webkit-box-flex:1;-ms-flex:1;flex:1}.chart-container .graph-stats-container,.chart-container .graph-stats-group{display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-around}.chart-container .graph-stats-container{-ms-flex-pack:distribute;padding-top:10px}.chart-container .graph-stats-container .stats{padding-bottom:15px}.chart-container .graph-stats-container .stats-title{color:#8d99a6}.chart-container .graph-stats-container .stats-value{font-size:20px;font-weight:300}.chart-container .graph-stats-container .stats-description{font-size:12px;color:#8d99a6}.chart-container .graph-stats-container .graph-data .stats-value{color:#98d85b}.chart-container .axis,.chart-container .chart-label{font-size:11px;fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .percentage-graph .progress{margin-bottom:0}.chart-container .data-points circle{stroke:#fff;stroke-width:2}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .tick.x-axis-label{display:block}.chart-container .tick .specific-value{text-anchor:start}.chart-container .tick .y-value-text{text-anchor:end}.chart-container .tick .x-value-text{text-anchor:middle}.chart-container .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.chart-container .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#36414c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.chart-container .graph-svg-tip{position:absolute;z-index:1;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.chart-container .graph-svg-tip ol,.chart-container .graph-svg-tip ul{padding-left:0;display:-webkit-box;display:-ms-flexbox;display:flex}.chart-container .graph-svg-tip ul.data-point-list li{min-width:90px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:600}.chart-container .graph-svg-tip strong{color:#dfe2e5;font-weight:600}.chart-container .graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.chart-container .graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.chart-container .graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.chart-container .graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.chart-container .graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}.chart-container .indicator,.chart-container .indicator-right{background:none;font-size:12px;vertical-align:middle;font-weight:700;color:#6c7680}.chart-container .indicator i{content:"";display:inline-block;height:8px;width:8px;border-radius:8px}.chart-container .indicator:before,.chart-container .indicator i{margin:0 4px 0 0}.chart-container .indicator-right:after{margin:0 0 0 4px}',void 0);var I="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},q=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,n){var o={key:t,arg:e,resolve:i,reject:n,next:null};r?r=r.next=o:(s=r=o,a(t,e))})}function a(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){a("next",t)},function(t){a("throw",t)}):n(r.done?"return":"normal",r.value)}catch(t){n("throw",t)}}function n(t,e){switch(t){case"return":s.resolve({value:e,done:!0});break;case"throw":s.reject(e);break;default:s.resolve({value:e,done:!1})}(s=s.next)?a(s.key,s.arg):r=null}var s,r;this._invoke=i,"function"!=typeof e.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype.throw=function(t){return this._invoke("throw",t)},e.prototype.return=function(t){return this._invoke("return",t)}}(),function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}),R=function(){function t(t,e){for(var i=0;i\n\t\t\t\t
                  \n\t\t\t\t
                  '}),this.hide_tip(),this.title=this.container.querySelector(".title"),this.data_point_list=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",function(){e.hide_tip()})}},{key:"fill",value:function(){var e=this,i=void 0;i=this.title_value_first?""+this.title_value+""+this.title_name:this.title_name+""+this.title_value+"",this.title.innerHTML=i,this.data_point_list.innerHTML="",this.list_values.map(function(i,a){var n=e.colors[a]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+n},innerHTML:''+(0===i.value||i.value?i.value:"")+"\n\t\t\t\t\t"+(i.title?i.title:"")});e.data_point_list.appendChild(s)})}},{key:"calc_position",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var a="calc(50% + "+(this.left-e)+"px)";i.style.left=a,this.left=e}else i.style.left="50%"}},{key:"set_values",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;this.title_name=i,this.title_value=a,this.list_values=n,this.x=t,this.y=e,this.title_value_first=s,this.refresh()}},{key:"hide_tip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"show_tip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),et={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},it=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],at=function(t){return et[t]||t},nt=["line","scatter","bar","percentage","heatmap","pie"],st={bar:["line","scatter","percentage","pie"],line:["scatter","bar","percentage","pie"],pie:["line","scatter","percentage","bar"],scatter:["line","bar","percentage","pie"],percentage:["bar","line","scatter","pie"],heatmap:[]},rt={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},ot=function(){function e(t){var i=t.height,a=void 0===i?240:i,n=t.title,s=void 0===n?"":n,r=t.subtitle,o=void 0===r?"":r,l=t.colors,h=void 0===l?[]:l,u=t.summary,c=void 0===u?[]:u,p=t.is_navigable,_=void 0===p?0:p,d=t.has_legend,f=void 0===d?0:d,v=t.type,m=void 0===v?"":v,y=t.parent,g=t.data;q(this,e),this.raw_chart_args=arguments[0],this.parent="string"==typeof y?document.querySelector(y):y,this.title=s,this.subtitle=o,this.data=g,this.oldData=Object.assign({},g),this.specific_values=g.specific_values||[],this.summary=c,this.is_navigable=_,this.is_navigable&&(this.current_index=0),this.has_legend=f,this.setColors(h,m),this.set_margins(a)}return R(e,[{key:"get_different_chart",value:function(t){if(t!==this.type){nt.includes(t)||console.error("'"+t+"' is not a valid chart type."),st[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=rt[this.type].includes(t);return new mt({parent:this.raw_chart_args.parent,title:this.title,data:this.raw_chart_args.data,type:t,height:this.raw_chart_args.height,colors:e?this.colors:void 0})}}},{key:"setColors",value:function(t,e){this.colors=t;var i="percentage"===e||"pie"===e?this.data.labels:this.data.datasets;(!this.colors||i&&this.colors.length0&&void 0!==arguments[0]&&arguments[0];this.setup_base_values(),this.set_width(),this.setup_container(),this.setup_components(),this.setup_values(),this.setup_utils(),this.make_graph_components(t),this.make_tooltip(),this.summary.length>0?this.show_custom_summary():this.show_summary(),this.is_navigable&&this.setup_navigation(t)}},{key:"set_width",value:function(){var t=0;this.specific_values.map(function(e){var i=r(e.title+"",8);i>t&&(t=i-40)}),this.base_width=a(this.parent)-t,this.width=this.base_width-2*this.translate_x}},{key:"setup_base_values",value:function(){}},{key:"setup_container",value:function(){this.container=t.create("div",{className:"chart-container",innerHTML:'
                  '+this.title+'
                  \n\t\t\t\t
                  '+this.subtitle+'
                  \n\t\t\t\t
                  \n\t\t\t\t
                  '}),this.parent.innerHTML="",this.parent.appendChild(this.container),this.chart_wrapper=this.container.querySelector(".frappe-chart"),this.stats_wrapper=this.container.querySelector(".graph-stats-container"),this.make_chart_area(),this.make_draw_area()}},{key:"make_chart_area",value:function(){return this.svg=f(this.chart_wrapper,"chart",this.base_width,this.base_height),this.svg_defs=v(this.svg),this.svg}},{key:"make_draw_area",value:function(){this.draw_area=m(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"setup_components",value:function(){}},{key:"setup_values",value:function(){}},{key:"setup_utils",value:function(){}},{key:"make_tooltip",value:function(){this.tip=new tt({parent:this.chart_wrapper,colors:this.colors}),this.bind_tooltip()}},{key:"show_summary",value:function(){}},{key:"show_custom_summary",value:function(){var e=this;this.summary.map(function(i){var a=t.create("div",{className:"stats",innerHTML:'\n\t\t\t\t\t\n\t\t\t\t\t'+i.title+": "+i.value+"\n\t\t\t\t"});e.stats_wrapper.appendChild(a)})}},{key:"setup_navigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.make_overlay(),e&&(this.bind_overlay(),document.addEventListener("keydown",function(e){i(t.chart_wrapper)&&("37"==(e=e||window.event).keyCode?t.on_left_arrow():"39"==e.keyCode?t.on_right_arrow():"38"==e.keyCode?t.on_up_arrow():"40"==e.keyCode?t.on_down_arrow():"13"==e.keyCode&&t.on_enter_key())}))}},{key:"make_overlay",value:function(){}},{key:"bind_overlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"on_left_arrow",value:function(){}},{key:"on_right_arrow",value:function(){}},{key:"on_up_arrow",value:function(){}},{key:"on_down_arrow",value:function(){}},{key:"on_enter_key",value:function(){}},{key:"updateData",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeDrawAreaComponent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return m(this.draw_area,t,e)}}]),e}(),lt=function(t){function i(t){q(this,i);var e=J(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return e.x=e.data.labels||[],e.y=e.data.datasets||[],e.is_series=t.is_series,e.format_tooltip_y=t.format_tooltip_y,e.format_tooltip_x=t.format_tooltip_x,e.zero_line=e.height,e}return U(i,t),R(i,[{key:"validate_and_prepare_data",value:function(){return this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setup_values",value:function(){this.data.datasets.map(function(t){t.values=t.values.map(function(t){return isNaN(t)?0:t})}),this.setup_x(),this.setup_y()}},{key:"setup_x",value:function(){var t=this;this.set_avg_unit_width_and_x_offset(),this.x_axis_positions&&(this.x_old_axis_positions=this.x_axis_positions.slice()),this.x_axis_positions=this.x.map(function(e,i){return n(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.x_axis_positions.slice())}},{key:"setup_y",value:function(){var t=this;this.y_axis_values&&(this.y_old_axis_values=this.y_axis_values.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.y_axis_values=D(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.y_axis_values.slice());var i=this.y_axis_values,a=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/a,this.old_multiplier||(this.old_multiplier=this.multiplier);var n=i[1]-i[0],s=n*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/n:-1*i[i.length-1]/n+(i.length-1),this.zero_line&&(this.old_zero_line=this.zero_line),this.zero_line=this.height-r*s,this.old_zero_line||(this.old_zero_line=this.zero_line),this.y_axis_positions=this.y_axis_values.map(function(e){return t.zero_line-e*t.multiplier}),this.yAnnotationPositions=this.specific_values.map(function(e){return t.zero_line-e*t.multiplier})}},{key:"setup_components",value:function(){X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_components",this).call(this),this.setup_marker_components(),this.setup_aggregation_components(),this.setup_graph_components()}},{key:"setup_marker_components",value:function(){this.y_axis_group=this.makeDrawAreaComponent("y axis"),this.x_axis_group=this.makeDrawAreaComponent("x axis"),this.specific_y_group=this.makeDrawAreaComponent("specific axis")}},{key:"setup_aggregation_components",value:function(){this.sum_group=this.makeDrawAreaComponent("data-points"),this.average_group=this.makeDrawAreaComponent("chart-area")}},{key:"setup_graph_components",value:function(){var t=this;this.svg_units_groups=[],this.y.map(function(e,i){t.svg_units_groups[i]=t.makeDrawAreaComponent("data-points data-points-"+i)})}},{key:"make_graph_components",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.makeYLines(this.y_axis_positions,this.y_axis_values),this.makeXLines(this.x_axis_positions,this.x),this.draw_graph(t),this.make_y_specifics(this.yAnnotationPositions,this.specific_values)}},{key:"makeXLines",value:function(t,e){var i=this,a=h(this.height,this.x_axis_mode),n=G(a,4),s=n[0],o=n[1],l=n[2],u=n[3];this.x_axis_group.setAttribute("transform","translate(0,"+s+")");var c=1.5*this.avg_unit_width,p=c/8;this.xAxisLines=[],this.x_axis_group.textContent="",e.map(function(e,a){var n=r(e,8)+2;if(n>c)if(i.is_series){for(var s=1;n/s*2>c;)s++;if(a%s!=0)return}else e=e.slice(0,p-3)+" ...";var h=b(o,l,e,"x-value-text",u,t[a]);i.xAxisLines.push(h),i.x_axis_group.appendChild(h)})}},{key:"makeYLines",value:function(t,e){var i=this,a=u(this.width,this.y_axis_mode),n=G(a,4),s=n[0],r=n[1],o=n[2],l=n[3];this.yAxisLines=[],this.y_axis_group.textContent="",e.map(function(e,a){i.y_axis_group.appendChild(w(l,s,r,e,"y-value-text",o,t[a],0===e&&0!==a))})}},{key:"make_y_specifics",value:function(t,e){var i=this;this.specific_y_group.textContent="",e.map(function(e,a){i.specific_y_group.appendChild(w(0,i.width,i.width+5,e.title.toUpperCase(),"specific-value","specific-value",t[a],!1,e.line_type))})}},{key:"draw_graph",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.raw_chart_args.hasOwnProperty("init")&&!this.raw_chart_args.init?void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e),t.calc_y_dependencies()}):e?void this.draw_new_graph_and_animate():void this.y.map(function(e,i){e.svg_units=[],t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[i]),t.make_new_units(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.y_tops=new Array(i.values.length).fill(t.zero_line),e.push({values:i.values}),i.svg_units=[],t.make_path&&t.make_path(i,t.x_axis_positions,i.y_tops,t.colors[a]),t.make_new_units(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setup_navigation",value:function(t){var e=this;t?setTimeout(function(){X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",e).call(e,t)},500):X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setup_navigation",this).call(this,t)}},{key:"make_new_units",value:function(t){this.make_new_units_for_dataset(this.x_axis_positions,t.y_tops,this.colors[t.index],t.index,this.y.length)}},{key:"make_new_units_for_dataset",value:function(t,e,i,a,n,s,r,o){s||(s=this.svg_units_groups[a]),r||(r=this.y[a].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new K(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var u=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(u),r.push(u)}),this.is_navigable&&this.bind_units(r)}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(i){var a=e(t.chart_wrapper),n=i.pageX-a.left-t.translate_x;i.pageY-a.top-t.translate_y=0;n--){var s=this.x_axis_positions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[n]+this.translate_y,l=i[n],h=this.y.map(function(t,i){return{title:t.title,value:a?e.format_tooltip_y(t.values[n]):t.values[n],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"show_sums",value:function(){var t=this;this.updating=!0,this.y_sums=new Array(this.x_axis_positions.length).fill(0),this.y.map(function(e){e.values.map(function(e,i){t.y_sums[i]+=e})}),this.updateData(),this.sum_units=[],this.make_new_units_for_dataset(this.x_axis_positions,this.y_sums.map(function(e){return n(t.zero_line-e*t.multiplier)}),"#f0f4f7",0,1,this.sum_group,this.sum_units),this.updating=!1}},{key:"hide_sums",value:function(){this.updating||(this.y_sums=[],this.sum_group.textContent="",this.sum_units=[],this.updateData())}},{key:"show_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice(),this.y.map(function(e){var i=0;e.values.map(function(t){i+=t});var a=i/e.values.length;t.specific_values.push({title:"AVG "+(e.index+1),line_type:"dashed",value:a,auto:1})}),this.updateData()}},{key:"hide_averages",value:function(){var t=this;this.old_specific_values=this.specific_values.slice();var e=[];this.specific_values.map(function(t,i){t.auto&&e.unshift(i)}),e.map(function(e){t.specific_values.splice(e,1)}),this.updateData()}},{key:"updateData",value:function(t,e){e||(e=this.x),this.elements_to_animate=[],this.updating=!0,this.old_x_values=this.x.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.y_tops.slice()}),this.old_y_values=this.y.map(function(t){return t.values}),t&&this.y.map(function(e){e.values=t[e.index].values}),e&&(this.x=e),this.setup_x(),this.setup_y(),this.calc_y_dependencies(),this.animator=new Q(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.run_animation(),this.updating=!1}},{key:"run_animation",value:function(){var t=this,e=L(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},250)}},{key:"animate_graphs",value:function(){var t=this;this.y.map(function(e){var i=l(t.x_old_axis_positions.slice(),t.x_axis_positions.slice()),a=G(i,2),n=a[0],s=a[1],r=l(t.old_y_axis_tops[e.index].slice(),e.y_tops.slice()),o=G(r,2),h=o[0],u=o[1],c=t.y_old_axis_values.slice(),p=l(t.y_old_axis_values.slice(),t.y_axis_values.slice()),_=G(p,2),d=_[0],f=_[1],v=t.x.slice(),m=t.x_axis_positions.slice().length-t.x_old_axis_positions.slice().length;m>0&&(t.make_path&&t.make_path(e,n,h,t.colors[e.index]),t.make_new_units_for_dataset(n,h,t.colors[e.index],e.index,t.y.length),t.makeXLines(n,v)),t.makeYLines(d,c),0!==m&&t.animateXLines(n,s),e.path&&t.animate_path(e,s,u),t.animate_units(e,s,u),t.animateYLines(d,f)}),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.x_axis_positions,e.y_tops,t.colors[e.index]),t.make_new_units(e),t.makeYLines(t.y_axis_positions,t.y_axis_values),t.makeXLines(t.x_axis_positions,t.x)})},400)}},{key:"animate_path",value:function(t,e,i){var a=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,a.join("L")))}},{key:"animate_units",value:function(t,e,i){var a=this,n=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&a.elements_to_animate.push(a.animator[n]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,a.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:e[n]+", 0"},350,"easein","translate",{transform:t[n]+", 0"}])})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push([{unit:a,array:[0],index:0},{transform:"0, "+e[n]},350,"easein","translate",{transform:"0, "+t[n]}])})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.x.length,a=this.y.map(function(t){return{values:t.values}});a.map(function(e,a){e.values.splice(i,0,t[a])});var n=this.x.slice();n.splice(i,0,e),this.updateData(a,n)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.x.length-1;if(!(this.x.length<3)){var e=this.y.map(function(t){return{values:t.values}});e.map(function(e){e.values.splice(t,1)});var i=this.x.slice();i.splice(t,1),this.updateData(e,i)}}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.current_index,e={index:t},i=this.y[0];return["svg_units","y_tops","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.x[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.x.length&&(t=this.x.length-1),t!==this.current_index&&(this.current_index=t,$.fire(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.x.length-1),this.x_offset=0}},{key:"get_all_y_values",value:function(){var t=[];return this.y.map(function(e){t=t.concat(e.values)}),t.concat(this.specific_values.map(function(t){return t.value}))}},{key:"calc_y_dependencies",value:function(){var t=this;this.y_min_tops=new Array(this.x.length).fill(9999),this.y.map(function(e){e.y_tops=e.values.map(function(e){return n(t.zero_line-e*t.multiplier)}),e.y_tops.map(function(e,i){e0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"make_graph_components",value:function(){var e=this;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0),this.slices=[],this.slice_totals.map(function(i,a){var n=t.create("div",{className:"progress-bar",inside:e.percentage_bar,styles:{background:e.colors[a],width:100*i/e.grand_total+"%"}});e.slices.push(n)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(i,a){i.addEventListener("mouseenter",function(){var n=e(t.chart_wrapper),s=e(i),r=s.left-n.left+i.offsetWidth/2,o=s.top-n.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[a]:t.labels[a])+": ",h=(100*t.slice_totals[a]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"show_summary",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}]),a}(ot),_t=Math.PI/180,dt=function(i){function a(t){q(this,a);var e=J(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,t));return e.type="pie",e.elements_to_animate=null,e.hoverRadio=t.hoverRadio||.1,e.max_slices=10,e.max_legend_points=6,e.isAnimate=!1,e.startAngle=t.startAngle||0,e.clockWise=t.clockWise||!1,e.mouseMove=e.mouseMove.bind(e),e.mouseLeave=e.mouseLeave.bind(e),e.setup(),e}return U(a,i),R(a,[{key:"setup_values",value:function(){var t=this;this.centerX=this.width/2,this.centerY=this.height/2,this.radius=this.height>this.width?this.centerX:this.centerY,this.slice_totals=[];var e=this.data.labels.map(function(e,i){var a=0;return t.data.datasets.map(function(t){a+=t.values[i]}),[a,e]}).filter(function(t){return t[0]>0}),i=e;if(e.length>this.max_slices){e.sort(function(t,e){return e[0]-t[0]}),i=e.slice(0,this.max_slices-1);var a=0;e.slice(this.max_slices-1).map(function(t){a+=t[0]}),i.push([a,"Rest"]),this.colors[this.max_slices-1]="grey"}this.labels=[],i.map(function(e){t.slice_totals.push(e[0]),t.labels.push(e[1])}),this.legend_totals=this.slice_totals.slice(0,this.max_legend_points)}},{key:"makeArcPath",value:function(t,e){var i=this.centerX,a=this.centerY,n=this.radius,s=this.clockWise;return"M"+i+" "+a+" L"+(i+t.x)+" "+(a+t.y)+" A "+n+" "+n+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(a+e.y)+" z"}},{key:"make_graph_components",value:function(t){var e=this,i=this.radius,n=this.clockWise;this.grand_total=this.slice_totals.reduce(function(t,e){return t+e},0);var s=this.slicesProperties||[];this.slices=[],this.elements_to_animate=[],this.slicesProperties=[];var r=180-this.startAngle;this.slice_totals.map(function(o,l){var h=r,u=o/e.grand_total*360,c=n?-u:u,p=r+=c,_=a.getPositionByAngle(h,i),d=a.getPositionByAngle(p,i),f=t&&s[l],v=void 0,m=void 0;t?(v=f?f.startPosition:_,m=f?f.endPosition:_):(v=_,m=d);var g=e.makeArcPath(v,m),x=y(g,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.draw_area.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:_,endPosition:d,value:o,total:e.grand_total,startAngle:h,endAngle:p,angle:c}),t&&e.elements_to_animate.push([{unit:x,array:e.slices,index:e.slices.length-1},{d:e.makeArcPath(_,d)},650,"easein",null,{d:g}])}),t&&this.run_animation()}},{key:"run_animation",value:function(){var t=this;if(this.elements_to_animate&&0!==this.elements_to_animate.length){var e=L(this.svg,this.elements_to_animate);this.svg.parentNode==this.chart_wrapper&&(this.chart_wrapper.removeChild(this.svg),this.chart_wrapper.appendChild(e)),setTimeout(function(){e.parentNode==t.chart_wrapper&&(t.chart_wrapper.removeChild(e),t.chart_wrapper.appendChild(t.svg))},650)}}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=a.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,a,n){if(t){var s=this.colors[i];if(a){A(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=j(s,50);var r=e(this.svg),o=n.pageX-r.left+10,l=n.pageY-r.top-10,h=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.labels[i])+": ",u=(100*this.slice_totals[i]/this.grand_total).toFixed(1);this.tip.set_values(o,l,h,u+"%"),this.tip.show_tip()}else A(t,"translate3d(0,0,0)"),this.tip.hide_tip(),t.style.fill=s}}},{key:"mouseMove",value:function(t){for(var e=t.target,i=this.curActiveSliceIndex,a=this.curActiveSlice,n=0;n0?this.formatted_labels:this.labels;this.legend_totals.map(function(a,n){var s=e.colors[n];a&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[n]+":\n\t\t\t\t\t"+a+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*_t)*e,y:Math.cos(t*_t)*e}}}]),a}(ot),ft=function(t){function e(t){var i=t.start,a=void 0===i?"":i,n=t.domain,s=void 0===n?"":n,r=t.subdomain,o=void 0===r?"":r,l=t.data,h=void 0===l?{}:l,u=t.discrete_domains,c=void 0===u?0:u,p=t.count_label,_=void 0===p?"":p,d=t.legend_colors,f=void 0===d?[]:d;q(this,e);var v=J(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));v.type="heatmap",v.domain=s,v.subdomain=o,v.data=h,v.discrete_domains=c,v.count_label=_;var m=new Date;return v.start=a||B(m,365),f=f.slice(0,5),v.legend_colors=v.validate_colors(f)?f:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],v.distribution_size=5,v.translate_x=0,v.setup(),v}return U(e,t),R(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){z(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setup_base_values",value:function(){this.today=new Date,this.start||(this.start=new Date,this.start.setFullYear(this.start.getFullYear()-1)),this.first_week_start=new Date(this.start.toDateString()),this.last_week_start=new Date(this.today.toDateString()),7!==this.first_week_start.getDay()&&B(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&B(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=W(this.first_week_start+"",this.last_week_start+"")+1}},{key:"set_width",value:function(){this.base_width=12*(this.no_of_cols+3),this.discrete_domains&&(this.base_width+=144)}},{key:"setup_components",value:function(){this.domain_label_group=this.makeDrawAreaComponent("domain-label-group chart-label"),this.data_groups=this.makeDrawAreaComponent("data-groups","translate(0, 20)")}},{key:"setup_values",value:function(){var t=this;this.domain_label_group.textContent="",this.data_groups.textContent="";var e=Object.keys(this.data).map(function(e){return t.data[e]});this.distribution=N(e,this.distribution_size),this.month_names=["January","February","March","April","May","June","July","August","September","October","November","December"],this.render_all_weeks_and_store_x_values(this.no_of_cols)}},{key:"render_all_weeks_and_store_x_values",value:function(t){var e=new Date(this.first_week_start);this.week_col=0,this.current_month=e.getMonth(),this.months=[this.current_month+""],this.month_weeks={},this.month_start_points=[],this.month_weeks[this.current_month]=0,this.month_start_points.push(13);for(var i=0;ii)break;f.getMonth()-t.getMonth()&&(a=1,this.discrete_domains&&(n=1),this.month_start_points.push(13+12*(e+n))),t=f}return[s,a]}},{key:"render_month_labels",value:function(){var t=this;this.months.shift(),this.month_start_points.shift(),this.months.pop(),this.month_start_points.pop(),this.month_start_points.map(function(e,i){var a=k("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"make_graph_components",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chart_wrapper.style.marginTop="0px",this.chart_wrapper.style.paddingTop="0px"}},{key:"bind_tooltip",value:function(){var t=this;Array.prototype.slice.call(document.querySelectorAll(".data-group .day")).map(function(e){e.addEventListener("mouseenter",function(e){var i=e.target.getAttribute("data-value"),a=e.target.getAttribute("data-date").split("-"),n=t.month_names[parseInt(a[1])-1].substring(0,3),s=t.chart_wrapper.getBoundingClientRect(),r=e.target.getBoundingClientRect(),o=parseInt(e.target.getAttribute("width")),l=r.left-s.left+(o+2)/2,h=r.top-s.top-(o+2)/2,u=i+" "+t.count_label,c=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,c,u,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bind_tooltip()}}]),e}(ot),vt={line:ut,bar:ht,scatter:ct,percentage:pt,heatmap:ft,pie:dt},mt=function t(e){return q(this,t),Y(e.type,arguments[0])};return mt}(); diff --git a/docs/assets/js/index.js b/docs/assets/js/index.js index 5834a79..aceb50b 100755 --- a/docs/assets/js/index.js +++ b/docs/assets/js/index.js @@ -65,7 +65,7 @@ let line_composite_chart = new Chart ({ }); bar_composite_chart.parent.addEventListener('data-select', (e) => { - line_composite_chart.update_values([more_line_data[e.index]]); + line_composite_chart.updateData([more_line_data[e.index]]); }); @@ -233,7 +233,7 @@ let chart_update_buttons = document.querySelector('.chart-update-buttons'); chart_update_buttons.querySelector('[data-update="random"]').addEventListener("click", (e) => { shuffle(update_data_all_indices); - update_chart.update_values( + update_chart.updateData( [{values: get_update_data(update_data_all_values)}], update_data_all_labels.slice(0, 10) ); diff --git a/docs/index.html b/docs/index.html index 4181d1d..9a39190 100644 --- a/docs/index.html +++ b/docs/index.html @@ -115,7 +115,7 @@ Update Values
                    // Update entire datasets
                  -  chart.update_values(
                  +  chart.updateData(
                       [
                         {values: new_dataset_1_values},
                         {values: new_dataset_2_values}
                  diff --git a/src/js/charts/AxisChart.js b/src/js/charts/AxisChart.js
                  index fc5e70f..e4422ea 100644
                  --- a/src/js/charts/AxisChart.js
                  +++ b/src/js/charts/AxisChart.js
                  @@ -1,6 +1,6 @@
                   import { offset } from '../utils/dom';
                   import { UnitRenderer, makeXLine, makeYLine } from '../utils/draw';
                  -import { equilizeNoOfPositions } from '../utils/draw-utils';
                  +import { equilizeNoOfElements, getXLineProps, getYLineProps } from '../utils/draw-utils';
                   import { Animator } from '../utils/animate';
                   import { runSVGAnimation } from '../utils/animation';
                   import { calcIntervals } from '../utils/intervals';
                  @@ -99,6 +99,10 @@ export default class AxisChart extends BaseChart {
                   		if(this.zero_line) this.old_zero_line = this.zero_line;
                   		this.zero_line = this.height - (zero_index * interval_height);
                   		if(!this.old_zero_line) this.old_zero_line = this.zero_line;
                  +
                  +		// Make positions arrays for y elements
                  +		this.y_axis_positions = this.y_axis_values.map(d => this.zero_line - d * this.multiplier);
                  +		this.yAnnotationPositions = this.specific_values.map(d => this.zero_line - d * this.multiplier);
                   	}
                   
                   	setup_components() {
                  @@ -128,40 +132,25 @@ export default class AxisChart extends BaseChart {
                   	}
                   
                   	make_graph_components(init=false) {
                  -		this.make_y_axis();
                  -		this.make_x_axis();
                  +		this.makeYLines(this.y_axis_positions, this.y_axis_values);
                  +		this.makeXLines(this.x_axis_positions, this.x);
                   		this.draw_graph(init);
                  -		this.make_y_specifics();
                  +		this.make_y_specifics(this.yAnnotationPositions, this.specific_values);
                   	}
                   
                   	// make VERTICAL lines for x values
                  -	make_x_axis(animate=false) {
                  -		let char_width = 8;
                  -		let start_at, height, text_start_at, axis_line_class = '';
                  -		if(this.x_axis_mode === 'span') {		// long spanning lines
                  -			start_at = -7;
                  -			height = this.height + 15;
                  -			text_start_at = this.height + 25;
                  -		} else if(this.x_axis_mode === 'tick'){	// short label lines
                  -			start_at = this.height;
                  -			height = 6;
                  -			text_start_at = 9;
                  -			axis_line_class = 'x-axis-label';
                  -		}
                  -
                  +	makeXLines(positions, values) {
                  +		let [start_at, height, text_start_at, axis_line_class] = getXLineProps(this.height, this.x_axis_mode);
                   		this.x_axis_group.setAttribute('transform', `translate(0,${start_at})`);
                   
                  -		if(animate) {
                  -			this.make_anim_x_axis(height, text_start_at, axis_line_class);
                  -			return;
                  -		}
                  -
                  +		let char_width = 8;
                   		let allowed_space = this.avg_unit_width * 1.5;
                   		let allowed_letters = allowed_space / 8;
                   
                  +		this.xAxisLines = [];
                   		this.x_axis_group.textContent = '';
                  -		this.x.map((point, i) => {
                  -			let space_taken = getStringWidth(point, char_width) + 2;
                  +		values.map((value, i) => {
                  +			let space_taken = getStringWidth(value, char_width) + 2;
                   			if(space_taken > allowed_space) {
                   				if(this.is_series) {
                   					// Skip some axis lines if X axis is a series
                  @@ -173,34 +162,32 @@ export default class AxisChart extends BaseChart {
                   						return;
                   					}
                   				} else {
                  -					point = point.slice(0, allowed_letters-3) + " ...";
                  +					value = value.slice(0, allowed_letters-3) + " ...";
                   				}
                   			}
                  -			this.x_axis_group.appendChild(
                  -				makeXLine(
                  -					height,
                  -					text_start_at,
                  -					point,
                  -					'x-value-text',
                  -					axis_line_class,
                  -					this.x_axis_positions[i]
                  -				)
                  +
                  +			let xLine = makeXLine(
                  +				height,
                  +				text_start_at,
                  +				value,
                  +				'x-value-text',
                  +				axis_line_class,
                  +				positions[i]
                   			);
                  +			this.xAxisLines.push(xLine);
                  +			this.x_axis_group.appendChild(xLine);
                   		});
                   	}
                   
                   	// make HORIZONTAL lines for y values
                  -	make_y_axis(animate=false) {
                  -		if(animate) {
                  -			this.make_anim_y_axis();
                  -			this.make_anim_y_specifics();
                  -			return;
                  -		}
                  +	makeYLines(positions, values) {
                   
                  -		let [width, text_end_at, axis_line_class, start_at] = this.get_y_axis_line_props();
                  +		let [width, text_end_at, axis_line_class, start_at] = getYLineProps(
                  +			this.width, this.y_axis_mode);
                   
                  +		this.yAxisLines = [];
                   		this.y_axis_group.textContent = '';
                  -		this.y_axis_values.map((value, i) => {
                  +		values.map((value, i) => {
                   			this.y_axis_group.appendChild(
                   				makeYLine(
                   					start_at,
                  @@ -209,27 +196,30 @@ export default class AxisChart extends BaseChart {
                   					value,
                   					'y-value-text',
                   					axis_line_class,
                  -					this.zero_line - value * this.multiplier,
                  +					positions[i],
                   					(value === 0 && i !== 0) // Non-first Zero line
                   				)
                   			);
                   		});
                   	}
                   
                  -	get_y_axis_line_props(specific=false) {
                  -		if(specific) {
                  -			return[this.width, this.width + 5, 'specific-value', 0];
                  -		}
                  -		let width, text_end_at = -9, axis_line_class = '', start_at = 0;
                  -		if(this.y_axis_mode === 'span') {		// long spanning lines
                  -			width = this.width + 6;
                  -			start_at = -6;
                  -		} else if(this.y_axis_mode === 'tick'){	// short label lines
                  -			width = -6;
                  -			axis_line_class = 'y-axis-label';
                  -		}
                  -
                  -		return [width, text_end_at, axis_line_class, start_at];
                  +	make_y_specifics(positions, value_objs) {
                  +		this.specific_y_group.textContent = '';
                  +		value_objs.map((d, i) => {
                  +			this.specific_y_group.appendChild(
                  +				makeYLine(
                  +					0,
                  +					this.width,
                  +					this.width + 5,
                  +					d.title.toUpperCase(),
                  +					'specific-value',
                  +					'specific-value',
                  +					positions[i],
                  +					false,
                  +					d.line_type
                  +				)
                  +			);
                  +		});
                   	}
                   
                   	draw_graph(init=false) {
                  @@ -266,13 +256,13 @@ export default class AxisChart extends BaseChart {
                   		});
                   
                   		setTimeout(() => {
                  -			this.update_values(data);
                  +			this.updateData(data);
                   		}, 350);
                   	}
                   
                   	setup_navigation(init) {
                   		if(init) {
                  -			// Hack: defer nav till initial update_values
                  +			// Hack: defer nav till initial updateData
                   			setTimeout(() => {
                   				super.setup_navigation(init);
                   			}, 500);
                  @@ -322,25 +312,6 @@ export default class AxisChart extends BaseChart {
                   		}
                   	}
                   
                  -	make_y_specifics() {
                  -		this.specific_y_group.textContent = '';
                  -		this.specific_values.map(d => {
                  -			this.specific_y_group.appendChild(
                  -				makeYLine(
                  -					0,
                  -					this.width,
                  -					this.width + 5,
                  -					d.title.toUpperCase(),
                  -					'specific-value',
                  -					'specific-value',
                  -					this.zero_line - d.value * this.multiplier,
                  -					false,
                  -					d.line_type
                  -				)
                  -			);
                  -		});
                  -	}
                  -
                   	bind_tooltip() {
                   		// TODO: could be in tooltip itself, as it is a given functionality for its parent
                   		this.chart_wrapper.addEventListener('mousemove', (e) => {
                  @@ -401,7 +372,7 @@ export default class AxisChart extends BaseChart {
                   		});
                   
                   		// Remake y axis, animate
                  -		this.update_values();
                  +		this.updateData();
                   
                   		// Then make sum units, don't animate
                   		this.sum_units = [];
                  @@ -426,7 +397,7 @@ export default class AxisChart extends BaseChart {
                   		this.y_sums = [];
                   		this.sum_group.textContent = '';
                   		this.sum_units = [];
                  -		this.update_values();
                  +		this.updateData();
                   	}
                   
                   	show_averages() {
                  @@ -444,7 +415,7 @@ export default class AxisChart extends BaseChart {
                   			});
                   		});
                   
                  -		this.update_values();
                  +		this.updateData();
                   	}
                   
                   	hide_averages() {
                  @@ -459,10 +430,10 @@ export default class AxisChart extends BaseChart {
                   			this.specific_values.splice(index, 1);
                   		});
                   
                  -		this.update_values();
                  +		this.updateData();
                   	}
                   
                  -	update_values(new_y, new_x) {
                  +	updateData(new_y, new_x) {
                   		if(!new_x) {
                   			new_x = this.x;
                   		}
                  @@ -487,27 +458,6 @@ export default class AxisChart extends BaseChart {
                   		// Got the values? Now begin drawing
                   		this.animator = new Animator(this.height, this.width, this.zero_line, this.avg_unit_width);
                   
                  -		// Animate only if positions have changed
                  -		if(!arraysEqual(this.x_old_axis_positions, this.x_axis_positions)) {
                  -			this.make_x_axis(true);
                  -			setTimeout(() => {
                  -				if(!this.updating) this.make_x_axis();
                  -			}, 350);
                  -		}
                  -
                  -		if(!arraysEqual(this.y_old_axis_values, this.y_axis_values) ||
                  -			(this.old_specific_values &&
                  -			!arraysEqual(this.old_specific_values, this.specific_values))) {
                  -
                  -			this.make_y_axis(true);
                  -			setTimeout(() => {
                  -				if(!this.updating) {
                  -					this.make_y_axis();
                  -					this.make_y_specifics();
                  -				}
                  -			}, 350);
                  -		}
                  -
                   		this.animate_graphs();
                   
                   		// Trigger animation with the animatable elements in this.elements_to_animate
                  @@ -516,26 +466,6 @@ export default class AxisChart extends BaseChart {
                   		this.updating = false;
                   	}
                   
                  -	add_data_point(y_point, x_point, index=this.x.length) {
                  -		let new_y = this.y.map(data_set => { return {values:data_set.values}; });
                  -		new_y.map((d, i) => { d.values.splice(index, 0, y_point[i]); });
                  -		let new_x = this.x.slice();
                  -		new_x.splice(index, 0, x_point);
                  -
                  -		this.update_values(new_y, new_x);
                  -	}
                  -
                  -	remove_data_point(index = this.x.length-1) {
                  -		if(this.x.length < 3) return;
                  -
                  -		let new_y = this.y.map(data_set => { return {values:data_set.values}; });
                  -		new_y.map((d) => { d.values.splice(index, 1); });
                  -		let new_x = this.x.slice();
                  -		new_x.splice(index, 1);
                  -
                  -		this.update_values(new_y, new_x);
                  -	}
                  -
                   	run_animation() {
                   		let anim_svg = runSVGAnimation(this.svg, this.elements_to_animate);
                   
                  @@ -557,28 +487,51 @@ export default class AxisChart extends BaseChart {
                   	animate_graphs() {
                   		this.y.map(d => {
                   			// Pre-prep, equilize no of positions between old and new
                  -			let [old_x, new_x] = equilizeNoOfPositions(
                  +			let [old_x, new_x] = equilizeNoOfElements(
                   				this.x_old_axis_positions.slice(),
                   				this.x_axis_positions.slice()
                   			);
                  -			let [old_y, new_y] = equilizeNoOfPositions(
                  +			let [old_y, new_y] = equilizeNoOfElements(
                   				this.old_y_axis_tops[d.index].slice(),
                   				d.y_tops.slice()
                   			);
                   
                  -			if(new_x.length - old_x.length > 0) {
                  +			let newYValues = this.y_old_axis_values.slice();
                  +
                  +			let [oldYAxis, newYAxis] = equilizeNoOfElements(
                  +				this.y_old_axis_values.slice(),
                  +				this.y_axis_values.slice()
                  +			);
                  +
                  +			let newXValues = this.x.slice();
                  +
                  +			let extra_points = this.x_axis_positions.slice().length - this.x_old_axis_positions.slice().length;
                  +
                  +			if(extra_points > 0) {
                   				this.make_path && this.make_path(d, old_x, old_y, this.colors[d.index]);
                   				this.make_new_units_for_dataset(old_x, old_y, this.colors[d.index], d.index, this.y.length);
                  +				this.makeXLines(old_x, newXValues);
                   			}
                  +			// No Y extra check?
                  +			this.makeYLines(oldYAxis, newYValues);
                  +
                  +			if(extra_points !== 0) {
                  +				this.animateXLines(old_x, new_x);
                  +			}
                  +
                   			d.path && this.animate_path(d, new_x, new_y);
                  -			this.animate_units(d, old_x, old_y, new_x, new_y);
                  +			this.animate_units(d, new_x, new_y);
                  +			this.animateYLines(oldYAxis, newYAxis);
                   		});
                   
                  -		// TODO: replace with real units
                   		setTimeout(() => {
                   			this.y.map(d => {
                   				this.make_path && this.make_path(d, this.x_axis_positions, d.y_tops, this.colors[d.index]);
                   				this.make_new_units(d);
                  +
                  +				this.makeYLines(this.y_axis_positions, this.y_axis_values);
                  +				this.makeXLines(this.x_axis_positions, this.x);
                  +				// this.make_y_specifics(this.yAnnotationPositions, this.specific_values);
                   			});
                   		}, 400);
                   	}
                  @@ -589,7 +542,7 @@ export default class AxisChart extends BaseChart {
                   			.concat(this.animator['path'](d, newPointsList.join("L")));
                   	}
                   
                  -	animate_units(d, old_x, old_y, new_x, new_y) {
                  +	animate_units(d, new_x, new_y) {
                   		let type = this.unit_args.type;
                   
                   		d.svg_units.map((unit, i) => {
                  @@ -604,169 +557,173 @@ export default class AxisChart extends BaseChart {
                   		});
                   	}
                   
                  -	make_anim_x_axis(height, text_start_at, axis_line_class) {
                  -		// Animate X AXIS to account for more or less axis lines
                  -
                  -		const old_pos = this.x_old_axis_positions;
                  -		const new_pos = this.x_axis_positions;
                  -
                  -		const old_vals = this.old_x_values;
                  -		const new_vals = this.x;
                  -
                  -		const last_line_pos = old_pos[old_pos.length - 1];
                  -
                  -		let add_and_animate_line = (value, old_pos, new_pos) => {
                  -			if(typeof new_pos === 'string') {
                  -				new_pos = parseInt(new_pos.substring(0, new_pos.length-1));
                  -			}
                  -			const x_line = makeXLine(
                  -				height,
                  -				text_start_at,
                  -				value, // new value
                  -				'x-value-text',
                  -				axis_line_class,
                  -				old_pos // old position
                  -			);
                  -			this.x_axis_group.appendChild(x_line);
                  -
                  -			this.elements_to_animate && this.elements_to_animate.push([
                  -				{unit: x_line, array: [0], index: 0},
                  -				{transform: `${ new_pos }, 0`},
                  +	animateXLines(oldX, newX) {
                  +		this.xAxisLines.map((xLine, i) => {
                  +			this.elements_to_animate.push([
                  +				{unit: xLine, array: [0], index: 0},
                  +				{transform: `${ newX[i] }, 0`},
                   				350,
                   				"easein",
                   				"translate",
                  -				{transform: `${ old_pos }, 0`}
                  +				{transform: `${ oldX[i] }, 0`}
                   			]);
                  -		};
                  -
                  -		this.x_axis_group.textContent = '';
                  -
                  -		this.make_new_axis_anim_lines(
                  -			old_pos,
                  -			new_pos,
                  -			old_vals,
                  -			new_vals,
                  -			last_line_pos,
                  -			add_and_animate_line
                  -		);
                  -	}
                  -
                  -	make_anim_y_axis() {
                  -		// Animate Y AXIS to account for more or less axis lines
                  -
                  -		const old_pos = this.y_old_axis_values.map(value =>
                  -			this.zero_line - value * this.multiplier);
                  -		const new_pos = this.y_axis_values.map(value =>
                  -			this.zero_line - value * this.multiplier);
                  -
                  -		const old_vals = this.y_old_axis_values;
                  -		const new_vals = this.y_axis_values;
                  -
                  -		const last_line_pos = old_pos[old_pos.length - 1];
                  -
                  -		this.y_axis_group.textContent = '';
                  -
                  -		this.make_new_axis_anim_lines(
                  -			old_pos,
                  -			new_pos,
                  -			old_vals,
                  -			new_vals,
                  -			last_line_pos,
                  -			this.add_and_animate_y_line.bind(this),
                  -			this.y_axis_group
                  -		);
                  -	}
                  -
                  -	make_anim_y_specifics() {
                  -		this.specific_y_group.textContent = '';
                  -		this.specific_values.map((d) => {
                  -			this.add_and_animate_y_line(
                  -				d.title,
                  -				this.old_zero_line - d.value * this.old_multiplier,
                  -				this.zero_line - d.value * this.multiplier,
                  -				0,
                  -				this.specific_y_group,
                  -				d.line_type,
                  -				true
                  -			);
                   		});
                   	}
                   
                  -	make_new_axis_anim_lines(old_pos, new_pos, old_vals, new_vals, last_line_pos, add_and_animate_line, group) {
                  -		let superimposed_positions, superimposed_values;
                  -		let no_of_extras = new_vals.length - old_vals.length;
                  -		if(no_of_extras > 0) {
                  -			// More axis are needed
                  -			// First make only the superimposed (same position) ones
                  -			// Add in the extras at the end later
                  -			superimposed_positions = new_pos.slice(0, old_pos.length);
                  -			superimposed_values = new_vals.slice(0, old_vals.length);
                  -		} else {
                  -			// Axis have to be reduced
                  -			// Fake it by moving all current extra axis to the last position
                  -			// You'll need filler positions and values in the new arrays
                  -			const filler_vals = new Array(Math.abs(no_of_extras)).fill("");
                  -			superimposed_values = new_vals.concat(filler_vals);
                  -
                  -			const filler_pos = new Array(Math.abs(no_of_extras)).fill(last_line_pos + "F");
                  -			superimposed_positions = new_pos.concat(filler_pos);
                  -		}
                  -
                  -		superimposed_values.map((value, i) => {
                  -			add_and_animate_line(value, old_pos[i], superimposed_positions[i], i, group);
                  +	animateYLines(oldY, newY) {
                  +		this.yAxisLines.map((yLine, i) => {
                  +			this.elements_to_animate.push([
                  +				{unit: yLine, array: [0], index: 0},
                  +				{transform: `0, ${ newY[i] }`},
                  +				350,
                  +				"easein",
                  +				"translate",
                  +				{transform: `0, ${ oldY[i] }`}
                  +			]);
                   		});
                  -
                  -		if(no_of_extras > 0) {
                  -			// Add in extra axis in the end
                  -			// and then animate to new positions
                  -			const extra_values = new_vals.slice(old_vals.length);
                  -			const extra_positions = new_pos.slice(old_pos.length);
                  -
                  -			extra_values.map((value, i) => {
                  -				add_and_animate_line(value, last_line_pos, extra_positions[i], i, group);
                  -			});
                  -		}
                   	}
                   
                  -	add_and_animate_y_line(value, old_pos, new_pos, i, group, type, specific=false) {
                  -		let filler = false;
                  -		if(typeof new_pos === 'string') {
                  -			new_pos = parseInt(new_pos.substring(0, new_pos.length-1));
                  -			filler = true;
                  -		}
                  -		let new_props = {transform: `0, ${ new_pos }`};
                  -		let old_props = {transform: `0, ${ old_pos }`};
                  +	animateYAnnotations() {
                   
                  -		if(filler) {
                  -			new_props['stroke-opacity'] = 0;
                  -			// old_props['stroke-opacity'] = 1;
                  -		}
                  +	}
                   
                  -		let [width, text_end_at, axis_line_class, start_at] = this.get_y_axis_line_props(specific);
                  -		let axis_label_class = !specific ? 'y-value-text' : 'specific-value';
                  -		value = !specific ? value : (value+"").toUpperCase();
                  -		const y_line = makeYLine(
                  -			start_at,
                  -			width,
                  -			text_end_at,
                  -			value,
                  -			axis_label_class,
                  -			axis_line_class,
                  -			old_pos,  // old position
                  -			(value === 0 && i !== 0), // Non-first Zero line
                  -			type
                  -		);
                  +	// make_anim_y_axis() {
                  +	// 	// Animate Y AXIS to account for more or less axis lines
                   
                  -		group.appendChild(y_line);
                  +	// 	const old_pos = this.y_old_axis_values.map(value =>
                  +	// 		this.zero_line - value * this.multiplier);
                  +	// 	const new_pos = this.y_axis_values.map(value =>
                  +	// 		this.zero_line - value * this.multiplier);
                   
                  -		this.elements_to_animate && this.elements_to_animate.push([
                  -			{unit: y_line, array: [0], index: 0},
                  -			new_props,
                  -			350,
                  -			"easein",
                  -			"translate",
                  -			old_props
                  -		]);
                  +	// 	const old_vals = this.y_old_axis_values;
                  +	// 	const new_vals = this.y_axis_values;
                  +
                  +	// 	const last_line_pos = old_pos[old_pos.length - 1];
                  +
                  +	// 	this.y_axis_group.textContent = '';
                  +
                  +	// 	this.make_new_axis_anim_lines(
                  +	// 		old_pos,
                  +	// 		new_pos,
                  +	// 		old_vals,
                  +	// 		new_vals,
                  +	// 		last_line_pos,
                  +	// 		this.add_and_animate_y_line.bind(this),
                  +	// 		this.y_axis_group
                  +	// 	);
                  +	// }
                  +
                  +	// make_anim_y_specifics() {
                  +	// 	this.specific_y_group.textContent = '';
                  +	// 	this.specific_values.map((d) => {
                  +	// 		this.add_and_animate_y_line(
                  +	// 			d.title,
                  +	// 			this.old_zero_line - d.value * this.old_multiplier,
                  +	// 			this.zero_line - d.value * this.multiplier,
                  +	// 			0,
                  +	// 			this.specific_y_group,
                  +	// 			d.line_type,
                  +	// 			true
                  +	// 		);
                  +	// 	});
                  +	// }
                  +
                  +	// make_new_axis_anim_lines(old_pos, new_pos, old_vals, new_vals, last_line_pos, add_and_animate_line, group) {
                  +	// 	let superimposed_positions, superimposed_values;
                  +	// 	let no_of_extras = new_vals.length - old_vals.length;
                  +	// 	if(no_of_extras > 0) {
                  +	// 		// More axis are needed
                  +	// 		// First make only the superimposed (same position) ones
                  +	// 		// Add in the extras at the end later
                  +	// 		superimposed_positions = new_pos.slice(0, old_pos.length);
                  +	// 		superimposed_values = new_vals.slice(0, old_vals.length);
                  +	// 	} else {
                  +	// 		// Axis have to be reduced
                  +	// 		// Fake it by moving all current extra axis to the last position
                  +	// 		// You'll need filler positions and values in the new arrays
                  +	// 		const filler_vals = new Array(Math.abs(no_of_extras)).fill("");
                  +	// 		superimposed_values = new_vals.concat(filler_vals);
                  +
                  +	// 		const filler_pos = new Array(Math.abs(no_of_extras)).fill(last_line_pos + "F");
                  +	// 		superimposed_positions = new_pos.concat(filler_pos);
                  +	// 	}
                  +
                  +	// 	superimposed_values.map((value, i) => {
                  +	// 		add_and_animate_line(value, old_pos[i], superimposed_positions[i], i, group);
                  +	// 	});
                  +
                  +	// 	if(no_of_extras > 0) {
                  +	// 		// Add in extra axis in the end
                  +	// 		// and then animate to new positions
                  +	// 		const extra_values = new_vals.slice(old_vals.length);
                  +	// 		const extra_positions = new_pos.slice(old_pos.length);
                  +
                  +	// 		extra_values.map((value, i) => {
                  +	// 			add_and_animate_line(value, last_line_pos, extra_positions[i], i, group);
                  +	// 		});
                  +	// 	}
                  +	// }
                  +
                  +	// add_and_animate_y_line(value, old_pos, new_pos, i, group, type, specific=false) {
                  +	// 	let filler = false;
                  +	// 	if(typeof new_pos === 'string') {
                  +	// 		new_pos = parseInt(new_pos.substring(0, new_pos.length-1));
                  +	// 		filler = true;
                  +	// 	}
                  +	// 	let new_props = {transform: `0, ${ new_pos }`};
                  +	// 	let old_props = {transform: `0, ${ old_pos }`};
                  +
                  +	// 	if(filler) {
                  +	// 		new_props['stroke-opacity'] = 0;
                  +	// 		// old_props['stroke-opacity'] = 1;
                  +	// 	}
                  +
                  +	// 	let [width, text_end_at, axis_line_class, start_at] = getYLineProps(
                  +	// 		this.width, this.y_axis_mode, specific);
                  +	// 	let axis_label_class = !specific ? 'y-value-text' : 'specific-value';
                  +	// 	value = !specific ? value : (value+"").toUpperCase();
                  +	// 	const y_line = makeYLine(
                  +	// 		start_at,
                  +	// 		width,
                  +	// 		text_end_at,
                  +	// 		value,
                  +	// 		axis_label_class,
                  +	// 		axis_line_class,
                  +	// 		old_pos,  // old position
                  +	// 		(value === 0 && i !== 0), // Non-first Zero line
                  +	// 		type
                  +	// 	);
                  +
                  +	// 	group.appendChild(y_line);
                  +
                  +	// 	this.elements_to_animate && this.elements_to_animate.push([
                  +	// 		{unit: y_line, array: [0], index: 0},
                  +	// 		new_props,
                  +	// 		350,
                  +	// 		"easein",
                  +	// 		"translate",
                  +	// 		old_props
                  +	// 	]);
                  +	// }
                  +
                  +	add_data_point(y_point, x_point, index=this.x.length) {
                  +		let new_y = this.y.map(data_set => { return {values:data_set.values}; });
                  +		new_y.map((d, i) => { d.values.splice(index, 0, y_point[i]); });
                  +		let new_x = this.x.slice();
                  +		new_x.splice(index, 0, x_point);
                  +
                  +		this.updateData(new_y, new_x);
                  +	}
                  +
                  +	remove_data_point(index = this.x.length-1) {
                  +		if(this.x.length < 3) return;
                  +
                  +		let new_y = this.y.map(data_set => { return {values:data_set.values}; });
                  +		new_y.map((d) => { d.values.splice(index, 1); });
                  +		let new_x = this.x.slice();
                  +		new_x.splice(index, 1);
                  +
                  +		this.updateData(new_y, new_x);
                   	}
                   
                   	getDataPoint(index=this.current_index) {
                  diff --git a/src/js/utils/animate.js b/src/js/utils/animate.js
                  index 543aa71..4587f02 100644
                  --- a/src/js/utils/animate.js
                  +++ b/src/js/utils/animate.js
                  @@ -1,90 +1,5 @@
                   import { getBarHeightAndYAttr } from './draw-utils';
                   
                  -let add_and_animate_line = (value, old_pos, new_pos) => {
                  -	if(typeof new_pos === 'string') {
                  -		new_pos = parseInt(new_pos.substring(0, new_pos.length-1));
                  -	}
                  -	const x_line = makeXLine(
                  -		height,
                  -		text_start_at,
                  -		value, // new value
                  -		'x-value-text',
                  -		axis_line_class,
                  -		old_pos // old position
                  -	);
                  -	this.x_axis_group.appendChild(x_line);
                  -
                  -	this.elements_to_animate && this.elements_to_animate.push([
                  -		{unit: x_line, array: [0], index: 0},
                  -		{transform: `${ new_pos }, 0`},
                  -		350,
                  -		"easein",
                  -		"translate",
                  -		{transform: `${ old_pos }, 0`}
                  -	]);
                  -};
                  -
                  -export function getAnimXLine(height, text_start_at, axis_line_class) {
                  -	// Animate X AXIS to account for more or less axis lines
                  -
                  -	const old_pos = this.x_old_axis_positions;
                  -	const new_pos = this.x_axis_positions;
                  -
                  -	const old_vals = this.old_x_values;
                  -	const new_vals = this.x;
                  -
                  -	const last_line_pos = old_pos[old_pos.length - 1];
                  -
                  -	this.x_axis_group.textContent = '';
                  -
                  -	this.make_new_axis_anim_lines(
                  -		old_pos,
                  -		new_pos,
                  -		old_vals,
                  -		new_vals,
                  -		last_line_pos,
                  -		add_and_animate_line
                  -	);
                  -}
                  -
                  -export function make_new_axis_anim_lines(old_pos, new_pos, old_vals, new_vals, last_line_pos, add_and_animate_line, group) {
                  -	let superimposed_positions, superimposed_values;
                  -	let no_of_extras = new_vals.length - old_vals.length;
                  -	if(no_of_extras > 0) {
                  -		// More axis are needed
                  -		// First make only the superimposed (same position) ones
                  -		// Add in the extras at the end later
                  -		superimposed_positions = new_pos.slice(0, old_pos.length);
                  -		superimposed_values = new_vals.slice(0, old_vals.length);
                  -	} else {
                  -		// Axis have to be reduced
                  -		// Fake it by moving all current extra axis to the last position
                  -		// You'll need filler positions and values in the new arrays
                  -		const filler_vals = new Array(Math.abs(no_of_extras)).fill("");
                  -		superimposed_values = new_vals.concat(filler_vals);
                  -
                  -		const filler_pos = new Array(Math.abs(no_of_extras)).fill(last_line_pos + "F");
                  -		superimposed_positions = new_pos.concat(filler_pos);
                  -	}
                  -
                  -	superimposed_values.map((value, i) => {
                  -		add_and_animate_line(value, old_pos[i], superimposed_positions[i], i, group);
                  -	});
                  -
                  -	if(no_of_extras > 0) {
                  -		// Add in extra axis in the end
                  -		// and then animate to new positions
                  -		const extra_values = new_vals.slice(old_vals.length);
                  -		const extra_positions = new_pos.slice(old_pos.length);
                  -
                  -		extra_values.map((value, i) => {
                  -			add_and_animate_line(value, last_line_pos, extra_positions[i], i, group);
                  -		});
                  -	}
                  -}
                  -
                  -export function getAnimYLine() {}
                  -
                   export var Animator = (function() {
                   	var Animator = function(totalHeight, totalWidth, zeroLine, avgUnitWidth) {
                   		// constants
                  diff --git a/src/js/utils/draw-utils.js b/src/js/utils/draw-utils.js
                  index 9eb2c9b..85dc1d5 100644
                  --- a/src/js/utils/draw-utils.js
                  +++ b/src/js/utils/draw-utils.js
                  @@ -24,13 +24,45 @@ export function getBarHeightAndYAttr(yTop, zeroLine, totalHeight) {
                   	return [height, y];
                   }
                   
                  -export function equilizeNoOfPositions(oldPos, newPos,
                  -	extra_count=newPos.length - oldPos.length) {
                  +export function equilizeNoOfElements(array1, array2,
                  +	extra_count=array2.length - array1.length) {
                   
                   	if(extra_count > 0) {
                  -		oldPos = fillArray(oldPos, extra_count);
                  +		array1 = fillArray(array1, extra_count);
                   	} else {
                  -		newPos = fillArray(newPos, extra_count);
                  +		array2 = fillArray(array2, extra_count);
                   	}
                  -	return [oldPos, newPos];
                  +	return [array1, array2];
                  +}
                  +
                  +export function getXLineProps(total_height, mode) {
                  +	let start_at, height, text_start_at, axis_line_class = '';
                  +	if(mode === 'span') {		// long spanning lines
                  +		start_at = -7;
                  +		height = total_height + 15;
                  +		text_start_at = total_height + 25;
                  +	} else if(mode === 'tick'){	// short label lines
                  +		start_at = total_height;
                  +		height = 6;
                  +		text_start_at = 9;
                  +		axis_line_class = 'x-axis-label';
                  +	}
                  +
                  +	return [start_at, height, text_start_at, axis_line_class];
                  +}
                  +
                  +export function getYLineProps(total_width, mode, specific=false) {
                  +	if(specific) {
                  +		return[total_width, total_width + 5, 'specific-value', 0];
                  +	}
                  +	let width, text_end_at = -9, axis_line_class = '', start_at = 0;
                  +	if(mode === 'span') {		// long spanning lines
                  +		width = total_width + 6;
                  +		start_at = -6;
                  +	} else if(mode === 'tick'){	// short label lines
                  +		width = -6;
                  +		axis_line_class = 'y-axis-label';
                  +	}
                  +
                  +	return [width, text_end_at, axis_line_class, start_at];
                   }