diff --git a/dist/frappe-charts.esm.js b/dist/frappe-charts.esm.js index 1705a84..ea75b89 100644 --- a/dist/frappe-charts.esm.js +++ b/dist/frappe-charts.esm.js @@ -35,7 +35,7 @@ $.create = (tag, o) => { return element; }; -function get_offset(element) { +function getOffset(element) { let rect = element.getBoundingClientRect(); return { // https://stackoverflow.com/a/7436602/6495043 @@ -662,6 +662,33 @@ const COLOR_COMPATIBLE_CHARTS = { heatmap: [] }; +function getDifferentChart(type, current_type, args) { + if(type === current_type) return; + + if(!ALL_CHART_TYPES.includes(type)) { + console.error(`'${type}' is not a valid chart type.`); + } + + if(!COMPATIBLE_CHARTS[current_type].includes(type)) { + console.error(`'${current_type}' chart cannot be converted to a '${type}' chart.`); + } + + // whether the new chart can use the existing colors + const useColor = COLOR_COMPATIBLE_CHARTS[current_type].includes(type); + + // Okay, this is anticlimactic + // this function will need to actually be 'changeChartType(type)' + // that will update only the required elements, but for now ... + return new Chart({ + parent: args.parent, + title: args.title, + data: args.data, + type: type, + height: args.height, + colors: useColor ? args.colors : undefined + }); +} + class BaseChart { constructor({ height = 240, @@ -670,34 +697,33 @@ class BaseChart { subtitle = '', colors = [], - is_navigable = 0, + isNavigable = 0, type = '', parent, data }) { - this.raw_chart_args = arguments[0]; + this.rawChartArgs = arguments[0]; this.parent = typeof parent === 'string' ? document.querySelector(parent) : parent; this.title = title; this.subtitle = subtitle; - this.data = data; - - this.is_navigable = is_navigable; - if(this.is_navigable) { - this.current_index = 0; + this.isNavigable = isNavigable; + if(this.isNavigable) { + this.currentIndex = 0; } - this.setupConfiguration(arguments[0]); + this.setupConfiguration(); } - setupConfiguration(args) { + setupConfiguration() { // Make a this.config, that has stuff like showTooltip, // showLegend, which then all functions will check - this.setColors(args.colors, args.type); - this.set_margins(args.height); + + this.setColors(); + this.setMargins(); this.config = { showTooltip: 1, @@ -706,26 +732,29 @@ class BaseChart { }; } - setColors(colors, type) { - this.colors = colors; + setColors() { + let args = this.rawChartArgs; - // Needs structure as per only labels/datasets - const list = type === 'percentage' || type === 'pie' - ? this.data.labels - : this.data.datasets; + // Needs structure as per only labels/datasets, from config + const list = args.type === 'percentage' || args.type === 'pie' + ? args.data.labels + : args.data.datasets; - if(!this.colors || (list && this.colors.length < list.length)) { + if(!args.colors || (list && args.colors.length < list.length)) { this.colors = DEFAULT_COLORS; + } else { + this.colors = args.colors; } this.colors = this.colors.map(color => getColor(color)); } - set_margins(height) { + setMargins() { + let height = this.rawChartArgs.height; this.baseHeight = height; this.height = height - 40; - this.translate_x = 60; - this.translate_y = 10; + this.translateX = 60; + this.translateY = 10; } validate(){ @@ -733,13 +762,22 @@ class BaseChart { console.error("No parent element to render on was provided."); return false; } - if(!this.validateAndPrepareData()) { + if(!this.parseData()) { return false; } return true; } - validateAndPrepareData() { + parseData() { + let data = this.rawChartArgs.data; + // Check and all + + + + // If all good + this.data = data; + + return true; } @@ -753,8 +791,6 @@ class BaseChart { this.bindWindowEvents(); this.setupConstants(); - // this.setupEmptyValues(); - // this.setupComponents(); this.makeContainer(); this.makeTooltip(); // without binding @@ -763,12 +799,11 @@ class BaseChart { draw(init=false) { // (draw everything, layers, groups, units) - this.setWidth(); - - // these both dependent on width >.<, how can this be decoupled - this.setupEmptyValues(); + this.calc(); + this.setupRenderer(); // this chart's rendered with the config this.setupComponents(); + this.makeChartArea(); this.makeLayers(); @@ -779,40 +814,32 @@ class BaseChart { if(init) this.update(this.data); } - update(data, animate=true) { - this.oldData = Object.assign({}, this.data); - this.data = this.prepareNewData(data); - - this.calculateValues(); - this.updateComponents(animate); - } - - prepareNewData(newData) { - // handle all types of passed data? - return newData; - } - bindWindowEvents() { window.addEventListener('resize', () => this.draw()); window.addEventListener('orientationchange', () => this.draw()); } - setWidth() { - let special_values_width = 0; - // let char_width = 8; - // this.specific_values.map(val => { - // let str_width = getStringWidth((val.title + ""), char_width); - // if(str_width > special_values_width) { - // special_values_width = str_width - 40; + calcWidth() { + let outerAnnotationsWidth = 0; + // let charWidth = 8; + // this.specificValues.map(val => { + // let strWidth = getStringWidth((val.title + ""), charWidth); + // if(strWidth > outerAnnotationsWidth) { + // outerAnnotationsWidth = strWidth - 40; // } // }); - this.baseWidth = getElementContentWidth(this.parent) - special_values_width; - this.width = this.baseWidth - this.translate_x * 2; + this.baseWidth = getElementContentWidth(this.parent) - outerAnnotationsWidth; + this.width = this.baseWidth - this.translateX * 2; } setupConstants() {} - setupEmptyValues() {} + calc() { + this.calcWidth(); + this.reCalc(); + } + + setupRenderer() {} setupComponents() { // Components config @@ -832,13 +859,13 @@ class BaseChart { 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.chartWrapper = this.container.querySelector('.frappe-chart'); + this.statsWrapper = this.container.querySelector('.graph-stats-container'); } makeChartArea() { this.svg = makeSVGContainer( - this.chart_wrapper, + this.chartWrapper, 'chart', this.baseWidth, this.baseHeight @@ -848,7 +875,7 @@ class BaseChart { this.drawArea = makeSVGGroup( this.svg, this.type + '-chart', - `translate(${this.translate_x}, ${this.translate_y})` + `translate(${this.translateX}, ${this.translateY})` ); } @@ -869,72 +896,88 @@ class BaseChart { }); } - updateComponents() { - // this.components.forEach((component) => { - // // - // }); + update() { + this.reCalc(); + this.reRender(); + } + + reCalc() { + // Will update values(state) + // Will recalc specific parts depending on the update + } + + reRender(animate=true) { + if(!animate) { + this.renderComponents(); + return; + } + this.animateComponents(); + setTimeout(() => { + this.renderComponents(); + }, 400); + // TODO: should be max anim duration required + // (opt, should not redraw if still in animate?) + } + + animateComponents() { + this.intermedValues = this.calcIntermediateValues(); + this.components.forEach(c => { + // c.store = c.animate(...c.animateArgs); + // c.layer.textContent = ''; + // c.store.forEach(element => {c.layer.appendChild(element);}); + }); } + + calcInitStage() {} + makeTooltip() { this.tip = new SvgTip({ - parent: this.chart_wrapper, + parent: this.chartWrapper, colors: this.colors }); - this.bind_tooltip(); - } - - show_summary() {} - show_custom_summary() { - this.summary.map(d => { - let stats = $.create('div', { - className: 'stats', - innerHTML: ` - - ${d.title}: ${d.value} - ` - }); - this.stats_wrapper.appendChild(stats); - }); + this.bindTooltip(); } + renderLegend() {} setupNavigation(init=false) { - if(this.is_navigable) return; + if(this.isNavigable) return; - this.make_overlay(); + this.makeOverlay(); if(init) { - this.bind_overlay(); + this.bindOverlay(); document.addEventListener('keydown', (e) => { - if(isElementInViewport(this.chart_wrapper)) { + if(isElementInViewport(this.chartWrapper)) { e = e || window.event; if (e.keyCode == '37') { - this.on_left_arrow(); + this.onLeftArrow(); } else if (e.keyCode == '39') { - this.on_right_arrow(); + this.onRightArrow(); } else if (e.keyCode == '38') { - this.on_up_arrow(); + this.onUpArrow(); } else if (e.keyCode == '40') { - this.on_down_arrow(); + this.onDownArrow(); } else if (e.keyCode == '13') { - this.on_enter_key(); + this.onEnterKey(); } } }); } } - make_overlay() {} - bind_overlay() {} + makeOverlay() {} + bindOverlay() {} bind_units() {} - on_left_arrow() {} - on_right_arrow() {} - on_up_arrow() {} - on_down_arrow() {} - on_enter_key() {} + onLeftArrow() {} + onRightArrow() {} + onUpArrow() {} + onDownArrow() {} + onEnterKey() {} getDataPoint() {} updateCurrentDataPoint() {} @@ -943,31 +986,8 @@ class BaseChart { return makeSVGGroup(this.drawArea, className, transform); } - get_different_chart(type) { - if(type === this.type) return; - - if(!ALL_CHART_TYPES.includes(type)) { - console.error(`'${type}' is not a valid chart type.`); - } - - if(!COMPATIBLE_CHARTS[this.type].includes(type)) { - console.error(`'${this.type}' chart cannot be converted to a '${type}' chart.`); - } - - // whether the new chart can use the existing colors - const use_color = COLOR_COMPATIBLE_CHARTS[this.type].includes(type); - - // Okay, this is anticlimactic - // this function will need to actually be 'change_chart_type(type)' - // that will update only the required elements, but for now ... - return new Chart({ - parent: this.raw_chart_args.parent, - title: this.title, - data: this.raw_chart_args.data, - type: type, - height: this.raw_chart_args.height, - colors: use_color ? this.colors : undefined - }); + getDifferentChart(type) { + return getDifferentChart(type, this.type, this.rawChartArgs); } } @@ -1374,9 +1394,10 @@ class AxisChart extends BaseChart { this.zero_line = this.height; } - validateAndPrepareData() { - this.xAxisLabels = this.data.labels || []; - this.y = this.data.datasets || []; + parseData() { + let args = this.rawChartArgs; + this.xAxisLabels = args.data.labels || []; + this.y = args.data.datasets || []; this.y.forEach(function(d, i) { d.index = i; @@ -1384,25 +1405,67 @@ class AxisChart extends BaseChart { return true; } - setupEmptyValues() { + reCalc() { + // examples: + + // [A] Dimension change: + + // [B] Data change: + // 1. X values update + // 2. Y values update + + + // Aka all the values(state), these all will be documented in an old values object + + // Backup first! + this.oldValues = ["everything"]; + + // extracted, raw args will remain in their own object + this.datasetsLabels = []; + this.datasetsValues = [[[12, 34, 68], [10, 5, 46]], [[20, 20, 20]]]; + + // CALCULATION: we'll need the first batch of calcs + // List of what will happen: + // this.xOffset = 0; + // this.unitWidth = 0; + // this.scaleMultipliers = []; + // this.datasetsPoints = + + // Now, the function calls + + // var merged = [].concat(...arrays) + + + + // INIT + // axes this.yAxisPositions = [this.height, this.height/2, 0]; this.yAxisLabels = ['0', '5', '10']; this.xPositions = [0, this.width/2, this.width]; this.xAxisLabels = ['0', '5', '10']; + + + } + + calcInitStage() { + // will borrow from the full recalc function + } + + calcIntermediateValues() { + // } // this should be inherent in BaseChart getRenderer() { // These args are basically the current state/config of the chart, // with constant and alive params mixed - - return new AxisChartRenderer(this.height, this.width, this.zero_line, this.avg_unit_width, this.xAxisMode, this.yAxisMode); } setupComponents() { + // Must have access to all current data things let self = this; let renderer = this.getRenderer(); this.yAxis = { @@ -1411,6 +1474,7 @@ class AxisChart extends BaseChart { make: self.makeYLines, makeArgs: [renderer, self.yAxisPositions, self.yAxisLabels], store: [], + // animate? or update? will come to while implementing animate: self.animateYLines, // indexed: 1 // ?? As per datasets? }; @@ -1424,6 +1488,16 @@ class AxisChart extends BaseChart { store: [], animate: self.animateXLines }; + // Indexed according to dataset + // this.dataUnits = { + // layerClass: 'y marker axis', + // layer: undefined, + // make: makeXLines, + // makeArgs: [this.xPositions, this.xAxisLabels], + // store: [], + // animate: animateXLines, + // indexed: 1 + // }; this.yMarkerLines = { // layerClass: 'y marker axis', // layer: undefined, @@ -1436,24 +1510,13 @@ class AxisChart extends BaseChart { // layerClass: 'x marker axis', // layer: undefined, // make: makeXMarkerLines, - // makeArgs: [this.yMarkerPositions, this.xMarker], + // makeArgs: [this.xMarkerPositions, this.xMarker], // store: [], // animate: animateXMarkerLines }; // Marker Regions - // Indexed according to dataset - this.dataUnits = { - layerClass: 'y marker axis', - layer: undefined, - // make: makeXLines, - // makeArgs: [this.xPositions, this.xAxisLabels], - // store: [], - // animate: animateXLines, - indexed: 1 - }; - this.components = [ this.yAxis, this.xAxis, @@ -1639,19 +1702,19 @@ class AxisChart extends BaseChart { units_array.push(data_unit); }); - if(this.is_navigable) { + if(this.isNavigable) { this.bind_units(units_array); } } - bind_tooltip() { + bindTooltip() { // TODO: could be in tooltip itself, as it is a given functionality for its parent - this.chart_wrapper.addEventListener('mousemove', (e) => { - let offset = get_offset(this.chart_wrapper); - let relX = e.pageX - offset.left - this.translate_x; - let relY = e.pageY - offset.top - this.translate_y; + this.chartWrapper.addEventListener('mousemove', (e) => { + let offset = getOffset(this.chartWrapper); + let relX = e.pageX - offset.left - this.translateX; + let relY = e.pageY - offset.top - this.translateY; - if(relY < this.height + this.translate_y * 2) { + if(relY < this.height + this.translateY * 2) { this.mapTooltipXPosition(relX); } else { this.tip.hide_tip(); @@ -1673,8 +1736,8 @@ class AxisChart extends BaseChart { let x_val = this.xPositions[i]; // let delta = i === 0 ? this.avg_unit_width : x_val - this.xPositions[i-1]; if(relX > x_val - this.avg_unit_width/2) { - let x = x_val + this.translate_x; - let y = this.y_min_tops[i] + this.translate_y; + let x = x_val + this.translateX; + let y = this.y_min_tops[i] + this.translateY; let title = titles[i]; let values = this.y.map((set, j) => { @@ -1766,7 +1829,7 @@ class AxisChart extends BaseChart { this.animate_units(d, newX, newY); }); - runSMILAnimation(this.chart_wrapper, this.svg, this.elements_to_animate); + runSMILAnimation(this.chartWrapper, this.svg, this.elements_to_animate); setTimeout(() => { this.y.map(d => { @@ -1841,7 +1904,7 @@ class AxisChart extends BaseChart { this.updateData(newY, newX); } - getDataPoint(index=this.current_index) { + getDataPoint(index=this.currentIndex) { // check for length let data_point = { index: index @@ -1859,8 +1922,8 @@ class AxisChart extends BaseChart { index = parseInt(index); if(index < 0) index = 0; if(index >= this.xAxisLabels.length) index = this.xAxisLabels.length - 1; - if(index === this.current_index) return; - this.current_index = index; + if(index === this.currentIndex) return; + this.currentIndex = index; fire(this.parent, "data-select", this.getDataPoint()); } @@ -1892,7 +1955,7 @@ class AxisChart extends BaseChart { } }); }); - // this.chart_wrapper.removeChild(this.tip.container); + // this.chartWrapper.removeChild(this.tip.container); // this.make_tooltip(); } } @@ -1918,7 +1981,7 @@ class BarChart extends AxisChart { }; } - // make_overlay() { + // makeOverlay() { // // Just make one out of the first element // let index = this.xAxisLabels.length - 1; // let unit = this.y[0].svg_units[index]; @@ -1933,7 +1996,7 @@ class BarChart extends AxisChart { // this.drawArea.appendChild(this.overlay); // } - // bind_overlay() { + // bindOverlay() { // // on event, update overlay // this.parent.addEventListener('data-select', (e) => { // this.update_overlay(e.svg_unit); @@ -1963,12 +2026,12 @@ class BarChart extends AxisChart { this.overlay.style.opacity = '0.4'; } - on_left_arrow() { - this.updateCurrentDataPoint(this.current_index - 1); + onLeftArrow() { + this.updateCurrentDataPoint(this.currentIndex - 1); } - on_right_arrow() { - this.updateCurrentDataPoint(this.current_index + 1); + onRightArrow() { + this.updateCurrentDataPoint(this.currentIndex + 1); } set_avg_unit_width_and_x_offset() { @@ -2101,16 +2164,16 @@ class PercentageChart extends BaseChart { } makeChartArea() { - this.chart_wrapper.className += ' ' + 'graph-focus-margin'; - this.chart_wrapper.style.marginTop = '45px'; + this.chartWrapper.className += ' ' + 'graph-focus-margin'; + this.chartWrapper.style.marginTop = '45px'; - this.stats_wrapper.className += ' ' + 'graph-focus-margin'; - this.stats_wrapper.style.marginBottom = '30px'; - this.stats_wrapper.style.paddingTop = '0px'; + this.statsWrapper.className += ' ' + 'graph-focus-margin'; + this.statsWrapper.style.marginBottom = '30px'; + this.statsWrapper.style.paddingTop = '0px'; this.chartDiv = $.create('div', { className: 'div', - inside: this.chart_wrapper + inside: this.chartWrapper }); this.chart = $.create('div', { @@ -2177,10 +2240,10 @@ class PercentageChart extends BaseChart { }); } - bind_tooltip() { + bindTooltip() { this.slices.map((slice, i) => { slice.addEventListener('mouseenter', () => { - let g_off = get_offset(this.chart_wrapper), p_off = get_offset(slice); + let g_off = getOffset(this.chartWrapper), p_off = getOffset(slice); let x = p_off.left - g_off.left + slice.offsetWidth/2; let y = p_off.top - g_off.top - 6; @@ -2201,7 +2264,7 @@ class PercentageChart extends BaseChart { if(d) { let stats = $.create('div', { className: 'stats', - inside: this.stats_wrapper + inside: this.statsWrapper }); stats.innerHTML = ` @@ -2328,7 +2391,7 @@ class PieChart extends BaseChart { }); if(init){ - runSMILAnimation(this.chart_wrapper, this.svg, this.elements_to_animate); + runSMILAnimation(this.chartWrapper, this.svg, this.elements_to_animate); } } @@ -2343,7 +2406,7 @@ class PieChart extends BaseChart { if(flag){ transform(path,this.calTranslateByAngle(this.slicesProperties[i])); path.style.fill = lightenDarkenColor(color,50); - let g_off = get_offset(this.svg); + let g_off = getOffset(this.svg); let x = e.pageX - g_off.left + 10; let y = e.pageY - g_off.top - 10; let title = (this.formatted_labels && this.formatted_labels.length>0 @@ -2375,7 +2438,7 @@ class PieChart extends BaseChart { mouseLeave(){ this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false); } - bind_tooltip() { + bindTooltip() { this.drawArea.addEventListener('mousemove',this.mouseMove); this.drawArea.addEventListener('mouseleave',this.mouseLeave); } @@ -2389,7 +2452,7 @@ class PieChart extends BaseChart { if(d) { let stats = $.create('div', { className: 'stats', - inside: this.stats_wrapper + inside: this.statsWrapper }); stats.innerHTML = ` @@ -2468,7 +2531,7 @@ class Heatmap extends BaseChart { // More colors are difficult to parse visually this.distribution_size = 5; - this.translate_x = 0; + this.translateX = 0; // this.setup(); } @@ -2504,7 +2567,7 @@ class Heatmap extends BaseChart { this.no_of_cols = getWeeksBetween(this.first_week_start + '', this.last_week_start + '') + 1; } - setWidth() { + calcWidth() { this.baseWidth = (this.no_of_cols + 3) * 12 ; if(this.discrete_domains) { @@ -2659,11 +2722,11 @@ class Heatmap extends BaseChart { ).map(d => { d.style.display = 'None'; }); - this.chart_wrapper.style.marginTop = '0px'; - this.chart_wrapper.style.paddingTop = '0px'; + this.chartWrapper.style.marginTop = '0px'; + this.chartWrapper.style.paddingTop = '0px'; } - bind_tooltip() { + bindTooltip() { Array.prototype.slice.call( document.querySelectorAll(".data-group .day") ).map(el => { @@ -2673,7 +2736,7 @@ class Heatmap extends BaseChart { let month = this.month_names[parseInt(date_parts[1])-1].substring(0, 3); - let g_off = this.chart_wrapper.getBoundingClientRect(), p_off = e.target.getBoundingClientRect(); + let g_off = this.chartWrapper.getBoundingClientRect(), p_off = e.target.getBoundingClientRect(); let width = parseInt(e.target.getAttribute('width')); let x = p_off.left - g_off.left + (width+2)/2; @@ -2690,7 +2753,7 @@ class Heatmap extends BaseChart { update(data) { this.data = data; this.setup_values(); - this.bind_tooltip(); + this.bindTooltip(); } } diff --git a/dist/frappe-charts.min.cjs.js b/dist/frappe-charts.min.cjs.js index d080339..17b5823 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 $(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function get_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 fire(t,e,i){var a=document.createEvent("HTMLEvents");a.initEvent(e,!0,!0);for(var n in i)a[n]=i[n];return t.dispatchEvent(a)}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 getXLineProps(t,e){var i=t+6,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){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 getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=i*MIN_BAR_PERCENT_HEIGHT)):(n=e,0===(a=t-e)&&(a=i*MIN_BAR_PERCENT_HEIGHT)),[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 $$1(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)$$1(n).appendChild(i);else if("around"===a){var s=$$1(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 limitColor(t){return t>255?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 animateSVGElement(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 c=s[l]||t.getAttribute(l),u=e[l],p={attributeName:l,from:c,to:u,begin:"0s",dur:i/1e3+"s",values:c+";"+u,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),n?o.setAttribute(l,"translate("+u+")"):o.setAttribute(l,u)}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 animateSVG(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=animateSVGElement.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 runSMILAnimation(t,e,i){if(0!==i.length){var a=animateSVG(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(a)),setTimeout(function(){a.parentNode==t&&(t.removeChild(a),t.appendChild(e))},REPLACE_ALL_NEW_DUR)}}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;s9?"":"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=$.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}(),MIN_BAR_PERCENT_HEIGHT=.01,X_LABEL_CLASS="x-value-text",Y_LABEL_CLASS="y-value-text",AxisChartRenderer=function(){var t=function(t,e,i,a,n,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=a,this.xAxisMode=n,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,a,n,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,h=t-o/2+l*s,c=getBarHeightAndYAttr(e,this.zeroLine,this.totalHeight),u=slicedToArray(c,2),p=u[0];return createSVG("rect",{className:"bar mini",style:"fill: "+a,"data-point-index":n,x:h,y:u[1],width:l,height:p})},dot:function(t,e,i,a,n){return createSVG("circle",{style:"fill: "+a,"data-point-index":n,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,a=getXLineProps(this.totalHeight,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3],h=createSVG("line",{x1:0,x2:0,y1:s,y2:r}),c=createSVG("text",{className:X_LABEL_CLASS,x:0,y:o,dy:".71em",innerHTML:e}),u=createSVG("g",{className:"tick "+l,transform:"translate("+t+", 0)"});return u.appendChild(h),u.appendChild(c),u},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,a=getYLineProps(this.totalWidth,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=createSVG("line",{className:"",x1:n[3],x2:s,y1:0,y2:0}),h=createSVG("text",{className:Y_LABEL_CLASS,x:r,y:0,dy:".32em",innerHTML:e+""}),c=createSVG("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(l),c.appendChild(h),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},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){e.height;var i=e.title,a=void 0===i?"":i,n=e.subtitle,s=void 0===n?"":n,r=(e.colors,e.is_navigable),o=void 0===r?0:r,l=(e.type,e.parent),h=e.data;classCallCheck(this,t),this.raw_chart_args=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=a,this.subtitle=s,this.data=h,this.is_navigable=o,this.is_navigable&&(this.current_index=0),this.setupConfiguration(arguments[0])}return createClass(t,[{key:"setupConfiguration",value:function(t){this.setColors(t.colors,t.type),this.set_margins(t.height),this.config={showTooltip:1,showLegend:1,isNavigable: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.setWidth(),this.setupEmptyValues(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"update",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.oldData=Object.assign({},this.data),this.data=this.prepareNewData(t),this.calculateValues(),this.updateComponents(e)}},{key:"prepareNewData",value:function(t){return t}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"setWidth",value:function(){this.baseWidth=getElementContentWidth(this.parent)-0,this.width=this.baseWidth-2*this.translate_x}},{key:"setupConstants",value:function(){}},{key:"setupEmptyValues",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",value:function(){this.container=$.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")}},{key:"makeChartArea",value:function(){this.svg=makeSVGContainer(this.chart_wrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=makeSVGDefs(this.svg),this.drawArea=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,toConsumableArray(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"updateComponents",value:function(){}},{key:"makeTooltip",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=$.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:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.is_navigable||(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:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.drawArea,t,e)}},{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})}}}]),t}(),UNIT_ANIM_DUR=350,PATH_ANIM_DUR=650,MARKER_LINE_ANIM_DUR=UNIT_ANIM_DUR,REPLACE_ALL_NEW_DUR=250,STD_EASING="easein",Animator=function(){var t=function(t,e,i,a){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=a,this.zeroLine=i};return t.prototype={bar:function(t,e,i,a,n){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/n,o=getBarHeightAndYAttr(i,this.zeroLine,this.totalHeight),l=slicedToArray(o,2);return e=s+r*a,[t,{width:r,height:l[0],x:e,y:l[1]},UNIT_ANIM_DUR,STD_EASING]},dot:function(t,e,i){return[t,{cx:e,cy:i},UNIT_ANIM_DUR,STD_EASING]},path:function(t,e){var i=[],a=[{unit:t.path,object:t,key:"path"},{d:"M"+e},PATH_ANIM_DUR,STD_EASING];if(i.push(a),t.regionPath){var n="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+n+e+s},PATH_ANIM_DUR,STD_EASING];i.push(r)}return i},translate:function(t,e,i,a){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},a,STD_EASING,"translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],MARKER_LINE_ANIM_DUR)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],MARKER_LINE_ANIM_DUR)}},t}(),EASING={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return 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:"validateAndPrepareData",value:function(){return this.xAxisLabels=this.data.labels||[],this.y=this.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setupEmptyValues",value:function(){this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"getRenderer",value:function(){return new AxisChartRenderer(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.dataUnits={layerClass:"y marker axis",layer:void 0,indexed:1},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.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.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=calcIntervals(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,a){return t.xLine(e,i[a])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,a){return t.yLine(e,i[a])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[a]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",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 AxisChartRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var c=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(c),r.push(c)}),this.is_navigable&&this.bind_units(r)}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(e){var i=get_offset(t.chart_wrapper),a=e.pageX-i.left-t.translate_x;e.pageY-i.top-t.translate_y=0;n--){var s=this.xPositions[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:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=equilizeNoOfElements(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=slicedToArray(e,2),a=i[0],n=i[1],s=equilizeNoOfElements(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=slicedToArray(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),u=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;u>0&&this.makeXLines(a,h),this.makeYLines(o,c),0!==u&&this.animateXLines(a,n),this.animateYLines(o,l),this.y.map(function(e){var i=equilizeNoOfElements(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=slicedToArray(i,2),r=s[0],o=s[1];u>0&&(t.make_path&&t.make_path(e,a,r,t.colors[e.index]),t.makeDatasetUnits(a,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,n,o),t.animate_units(e,n,o)}),runSMILAnimation(this.chart_wrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},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(i.animator.verticalLine(a,e[n],t[n]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push(i.animator.horizontalLine(a,e[n],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.xAxisLabels.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.xAxisLabels.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.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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","yUnitPositions","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.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.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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:"renderComponents",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=$.create("div",{className:"progress-bar",inside:t.percentageBar,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=get_offset(t.chart_wrapper),n=get_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:"renderLegend",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&&($.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:"renderComponents",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,c=o/i.grand_total*FULL_ANGLE,u=n?-c:c,p=r+=u,d=e.getPositionByAngle(h,a),_=e.getPositionByAngle(p,a),f=t&&s[l],v=void 0,y=void 0;t?(v=f?f.startPosition:d,y=f?f.endPosition:d):(v=d,y=_);var g=i.makeArcPath(v,y),m=makePath(g,"pie-path","none",i.colors[l]);m.style.transition="transform .3s;",i.drawArea.appendChild(m),i.slices.push(m),i.slicesProperties.push({startPosition:d,endPosition:_,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:u}),t&&i.elements_to_animate.push([{unit:m,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(d,_)},650,"easein",null,{d:g}])}),t&&runSMILAnimation(this.chart_wrapper,this.svg,this.elements_to_animate)}},{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=get_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&&($.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,c=t.discrete_domains,u=void 0===c?0:c,p=t.count_label,d=void 0===p?"":p,_=t.legend_colors,f=void 0===_?[]:_;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=u,v.count_label=d;var y=new Date;return v.start=a||addDays(y,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}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:"setupConstants",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:"setWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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:"renderComponents",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,c=i+" "+t.count_label,u=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,u,c,[],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 $(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function getOffset(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 fire(t,e,i){var a=document.createEvent("HTMLEvents");a.initEvent(e,!0,!0);for(var n in i)a[n]=i[n];return t.dispatchEvent(a)}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 getXLineProps(t,e){var i=t+6,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){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 getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=i*MIN_BAR_PERCENT_HEIGHT)):(n=e,0===(a=t-e)&&(a=i*MIN_BAR_PERCENT_HEIGHT)),[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 $$1(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)$$1(n).appendChild(i);else if("around"===a){var s=$$1(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 limitColor(t){return t>255?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 getDifferentChart(t,e,i){if(t!==e){ALL_CHART_TYPES.includes(t)||console.error("'"+t+"' is not a valid chart type."),COMPATIBLE_CHARTS[e].includes(t)||console.error("'"+e+"' chart cannot be converted to a '"+t+"' chart.");var a=COLOR_COMPATIBLE_CHARTS[e].includes(t);return new Chart({parent:i.parent,title:i.title,data:i.data,type:t,height:i.height,colors:a?i.colors:void 0})}}function animateSVGElement(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 c=s[l]||t.getAttribute(l),u=e[l],p={attributeName:l,from:c,to:u,begin:"0s",dur:i/1e3+"s",values:c+";"+u,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),n?o.setAttribute(l,"translate("+u+")"):o.setAttribute(l,u)}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 animateSVG(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=animateSVGElement.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 runSMILAnimation(t,e,i){if(0!==i.length){var a=animateSVG(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(a)),setTimeout(function(){a.parentNode==t&&(t.removeChild(a),t.appendChild(e))},REPLACE_ALL_NEW_DUR)}}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;s9?"":"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=$.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}(),MIN_BAR_PERCENT_HEIGHT=.01,X_LABEL_CLASS="x-value-text",Y_LABEL_CLASS="y-value-text",AxisChartRenderer=function(){var t=function(t,e,i,a,n,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=a,this.xAxisMode=n,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,a,n,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,h=t-o/2+l*s,c=getBarHeightAndYAttr(e,this.zeroLine,this.totalHeight),u=slicedToArray(c,2),p=u[0];return createSVG("rect",{className:"bar mini",style:"fill: "+a,"data-point-index":n,x:h,y:u[1],width:l,height:p})},dot:function(t,e,i,a,n){return createSVG("circle",{style:"fill: "+a,"data-point-index":n,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,a=getXLineProps(this.totalHeight,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3],h=createSVG("line",{x1:0,x2:0,y1:s,y2:r}),c=createSVG("text",{className:X_LABEL_CLASS,x:0,y:o,dy:".71em",innerHTML:e}),u=createSVG("g",{className:"tick "+l,transform:"translate("+t+", 0)"});return u.appendChild(h),u.appendChild(c),u},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,a=getYLineProps(this.totalWidth,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=createSVG("line",{className:"",x1:n[3],x2:s,y1:0,y2:0}),h=createSVG("text",{className:Y_LABEL_CLASS,x:r,y:0,dy:".32em",innerHTML:e+""}),c=createSVG("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(l),c.appendChild(h),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},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){e.height;var i=e.title,a=void 0===i?"":i,n=e.subtitle,s=void 0===n?"":n,r=(e.colors,e.isNavigable),o=void 0===r?0:r,l=(e.type,e.parent);classCallCheck(this,t),this.rawChartArgs=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=a,this.subtitle=s,this.isNavigable=o,this.isNavigable&&(this.currentIndex=0),this.setupConfiguration()}return createClass(t,[{key:"setupConfiguration",value:function(){this.setColors(),this.setMargins(),this.config={showTooltip:1,showLegend:1,isNavigable:0}}},{key:"setColors",value:function(){var t=this.rawChartArgs,e="percentage"===t.type||"pie"===t.type?t.data.labels:t.data.datasets;!t.colors||e&&t.colors.length0&&void 0!==arguments[0]&&arguments[0];this.calc(),this.setupRenderer(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"calcWidth",value:function(){this.baseWidth=getElementContentWidth(this.parent)-0,this.width=this.baseWidth-2*this.translateX}},{key:"setupConstants",value:function(){}},{key:"calc",value:function(){this.calcWidth(),this.reCalc()}},{key:"setupRenderer",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",value:function(){this.container=$.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.chartWrapper=this.container.querySelector(".frappe-chart"),this.statsWrapper=this.container.querySelector(".graph-stats-container")}},{key:"makeChartArea",value:function(){this.svg=makeSVGContainer(this.chartWrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=makeSVGDefs(this.svg),this.drawArea=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translateX+", "+this.translateY+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,toConsumableArray(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"update",value:function(){this.reCalc(),this.reRender()}},{key:"reCalc",value:function(){}},{key:"reRender",value:function(){var t=this;if(!(!(arguments.length>0&&void 0!==arguments[0])||arguments[0]))return void this.renderComponents();this.animateComponents(),setTimeout(function(){t.renderComponents()},400)}},{key:"animateComponents",value:function(){this.intermedValues=this.calcIntermediateValues(),this.components.forEach(function(t){})}},{key:"calcInitStage",value:function(){}},{key:"makeTooltip",value:function(){this.tip=new SvgTip({parent:this.chartWrapper,colors:this.colors}),this.bindTooltip()}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isNavigable||(this.makeOverlay(),e&&(this.bindOverlay(),document.addEventListener("keydown",function(e){isElementInViewport(t.chartWrapper)&&("37"==(e=e||window.event).keyCode?t.onLeftArrow():"39"==e.keyCode?t.onRightArrow():"38"==e.keyCode?t.onUpArrow():"40"==e.keyCode?t.onDownArrow():"13"==e.keyCode&&t.onEnterKey())})))}},{key:"makeOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.drawArea,t,e)}},{key:"getDifferentChart",value:function(t){return getDifferentChart(t,this.type,this.rawChartArgs)}}]),t}(),UNIT_ANIM_DUR=350,PATH_ANIM_DUR=650,MARKER_LINE_ANIM_DUR=UNIT_ANIM_DUR,REPLACE_ALL_NEW_DUR=250,STD_EASING="easein",Animator=function(){var t=function(t,e,i,a){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=a,this.zeroLine=i};return t.prototype={bar:function(t,e,i,a,n){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/n,o=getBarHeightAndYAttr(i,this.zeroLine,this.totalHeight),l=slicedToArray(o,2);return e=s+r*a,[t,{width:r,height:l[0],x:e,y:l[1]},UNIT_ANIM_DUR,STD_EASING]},dot:function(t,e,i){return[t,{cx:e,cy:i},UNIT_ANIM_DUR,STD_EASING]},path:function(t,e){var i=[],a=[{unit:t.path,object:t,key:"path"},{d:"M"+e},PATH_ANIM_DUR,STD_EASING];if(i.push(a),t.regionPath){var n="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+n+e+s},PATH_ANIM_DUR,STD_EASING];i.push(r)}return i},translate:function(t,e,i,a){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},a,STD_EASING,"translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],MARKER_LINE_ANIM_DUR)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],MARKER_LINE_ANIM_DUR)}},t}(),EASING={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return 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:"parseData",value:function(){var t=this.rawChartArgs;return this.xAxisLabels=t.data.labels||[],this.y=t.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"reCalc",value:function(){this.oldValues=["everything"],this.datasetsLabels=[],this.datasetsValues=[[[12,34,68],[10,5,46]],[[20,20,20]]],this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"calcInitStage",value:function(){}},{key:"calcIntermediateValues",value:function(){}},{key:"getRenderer",value:function(){return new AxisChartRenderer(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.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.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=calcIntervals(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,a){return t.xLine(e,i[a])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,a){return t.yLine(e,i[a])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[a]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",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 AxisChartRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var c=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(c),r.push(c)}),this.isNavigable&&this.bind_units(r)}},{key:"bindTooltip",value:function(){var t=this;this.chartWrapper.addEventListener("mousemove",function(e){var i=getOffset(t.chartWrapper),a=e.pageX-i.left-t.translateX;e.pageY-i.top-t.translateY=0;n--){var s=this.xPositions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translateX,o=this.y_min_tops[n]+this.translateY,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:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=equilizeNoOfElements(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=slicedToArray(e,2),a=i[0],n=i[1],s=equilizeNoOfElements(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=slicedToArray(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),u=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;u>0&&this.makeXLines(a,h),this.makeYLines(o,c),0!==u&&this.animateXLines(a,n),this.animateYLines(o,l),this.y.map(function(e){var i=equilizeNoOfElements(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=slicedToArray(i,2),r=s[0],o=s[1];u>0&&(t.make_path&&t.make_path(e,a,r,t.colors[e.index]),t.makeDatasetUnits(a,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,n,o),t.animate_units(e,n,o)}),runSMILAnimation(this.chartWrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},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(i.animator.verticalLine(a,e[n],t[n]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push(i.animator.horizontalLine(a,e[n],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.xAxisLabels.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.xAxisLabels.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.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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.currentIndex,e={index:t},i=this.y[0];return["svg_units","yUnitPositions","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.length-1),t!==this.currentIndex&&(this.currentIndex=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.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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:"renderComponents",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=$.create("div",{className:"progress-bar",inside:t.percentageBar,styles:{background:t.colors[i],width:100*e/t.grand_total+"%"}});t.slices.push(a)})}},{key:"bindTooltip",value:function(){var t=this;this.slices.map(function(e,i){e.addEventListener("mouseenter",function(){var a=getOffset(t.chartWrapper),n=getOffset(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:"renderLegend",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&&($.create("div",{className:"stats",inside:t.statsWrapper}).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:"renderComponents",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,c=o/i.grand_total*FULL_ANGLE,u=n?-c:c,p=r+=u,d=e.getPositionByAngle(h,a),f=e.getPositionByAngle(p,a),v=t&&s[l],_=void 0,y=void 0;t?(_=v?v.startPosition:d,y=v?v.endPosition:d):(_=d,y=f);var g=i.makeArcPath(_,y),m=makePath(g,"pie-path","none",i.colors[l]);m.style.transition="transform .3s;",i.drawArea.appendChild(m),i.slices.push(m),i.slicesProperties.push({startPosition:d,endPosition:f,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:u}),t&&i.elements_to_animate.push([{unit:m,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(d,f)},650,"easein",null,{d:g}])}),t&&runSMILAnimation(this.chartWrapper,this.svg,this.elements_to_animate)}},{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=getOffset(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&&($.create("div",{className:"stats",inside:t.statsWrapper}).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,c=t.discrete_domains,u=void 0===c?0:c,p=t.count_label,d=void 0===p?"":p,f=t.legend_colors,v=void 0===f?[]:f;classCallCheck(this,e);var _=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));_.type="heatmap",_.domain=s,_.subdomain=o,_.data=h,_.discrete_domains=u,_.count_label=d;var y=new Date;return _.start=a||addDays(y,365),v=v.slice(0,5),_.legend_colors=_.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],_.distribution_size=5,_.translateX=0,_}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:"setupConstants",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:"calcWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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;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=makeText("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"renderComponents",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chartWrapper.style.marginTop="0px",this.chartWrapper.style.paddingTop="0px"}},{key:"bindTooltip",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.chartWrapper.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,c=i+" "+t.count_label,u=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,u,c,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bindTooltip()}}]),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 e4e90e5..b746b6f 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 $(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function get_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 fire(t,e,i){var a=document.createEvent("HTMLEvents");a.initEvent(e,!0,!0);for(var n in i)a[n]=i[n];return t.dispatchEvent(a)}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 getXLineProps(t,e){var i=t+6,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){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 getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=i*MIN_BAR_PERCENT_HEIGHT)):(n=e,0===(a=t-e)&&(a=i*MIN_BAR_PERCENT_HEIGHT)),[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 $$1(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)$$1(n).appendChild(i);else if("around"===a){var s=$$1(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 limitColor(t){return t>255?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 animateSVGElement(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 c=s[l]||t.getAttribute(l),u=e[l],p={attributeName:l,from:c,to:u,begin:"0s",dur:i/1e3+"s",values:c+";"+u,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),n?o.setAttribute(l,"translate("+u+")"):o.setAttribute(l,u)}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 animateSVG(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=animateSVGElement.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 runSMILAnimation(t,e,i){if(0!==i.length){var a=animateSVG(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(a)),setTimeout(function(){a.parentNode==t&&(t.removeChild(a),t.appendChild(e))},REPLACE_ALL_NEW_DUR)}}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;s9?"":"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=$.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}(),MIN_BAR_PERCENT_HEIGHT=.01,X_LABEL_CLASS="x-value-text",Y_LABEL_CLASS="y-value-text",AxisChartRenderer=function(){var t=function(t,e,i,a,n,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=a,this.xAxisMode=n,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,a,n,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,h=t-o/2+l*s,c=getBarHeightAndYAttr(e,this.zeroLine,this.totalHeight),u=slicedToArray(c,2),p=u[0];return createSVG("rect",{className:"bar mini",style:"fill: "+a,"data-point-index":n,x:h,y:u[1],width:l,height:p})},dot:function(t,e,i,a,n){return createSVG("circle",{style:"fill: "+a,"data-point-index":n,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,a=getXLineProps(this.totalHeight,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3],h=createSVG("line",{x1:0,x2:0,y1:s,y2:r}),c=createSVG("text",{className:X_LABEL_CLASS,x:0,y:o,dy:".71em",innerHTML:e}),u=createSVG("g",{className:"tick "+l,transform:"translate("+t+", 0)"});return u.appendChild(h),u.appendChild(c),u},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,a=getYLineProps(this.totalWidth,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=createSVG("line",{className:"",x1:n[3],x2:s,y1:0,y2:0}),h=createSVG("text",{className:Y_LABEL_CLASS,x:r,y:0,dy:".32em",innerHTML:e+""}),c=createSVG("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(l),c.appendChild(h),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},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){e.height;var i=e.title,a=void 0===i?"":i,n=e.subtitle,s=void 0===n?"":n,r=(e.colors,e.is_navigable),o=void 0===r?0:r,l=(e.type,e.parent),h=e.data;classCallCheck(this,t),this.raw_chart_args=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=a,this.subtitle=s,this.data=h,this.is_navigable=o,this.is_navigable&&(this.current_index=0),this.setupConfiguration(arguments[0])}return createClass(t,[{key:"setupConfiguration",value:function(t){this.setColors(t.colors,t.type),this.set_margins(t.height),this.config={showTooltip:1,showLegend:1,isNavigable: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.setWidth(),this.setupEmptyValues(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"update",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.oldData=Object.assign({},this.data),this.data=this.prepareNewData(t),this.calculateValues(),this.updateComponents(e)}},{key:"prepareNewData",value:function(t){return t}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"setWidth",value:function(){this.baseWidth=getElementContentWidth(this.parent)-0,this.width=this.baseWidth-2*this.translate_x}},{key:"setupConstants",value:function(){}},{key:"setupEmptyValues",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",value:function(){this.container=$.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")}},{key:"makeChartArea",value:function(){this.svg=makeSVGContainer(this.chart_wrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=makeSVGDefs(this.svg),this.drawArea=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,toConsumableArray(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"updateComponents",value:function(){}},{key:"makeTooltip",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=$.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:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.is_navigable||(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:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.drawArea,t,e)}},{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})}}}]),t}(),UNIT_ANIM_DUR=350,PATH_ANIM_DUR=650,MARKER_LINE_ANIM_DUR=UNIT_ANIM_DUR,REPLACE_ALL_NEW_DUR=250,STD_EASING="easein",Animator=function(){var t=function(t,e,i,a){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=a,this.zeroLine=i};return t.prototype={bar:function(t,e,i,a,n){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/n,o=getBarHeightAndYAttr(i,this.zeroLine,this.totalHeight),l=slicedToArray(o,2);return e=s+r*a,[t,{width:r,height:l[0],x:e,y:l[1]},UNIT_ANIM_DUR,STD_EASING]},dot:function(t,e,i){return[t,{cx:e,cy:i},UNIT_ANIM_DUR,STD_EASING]},path:function(t,e){var i=[],a=[{unit:t.path,object:t,key:"path"},{d:"M"+e},PATH_ANIM_DUR,STD_EASING];if(i.push(a),t.regionPath){var n="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+n+e+s},PATH_ANIM_DUR,STD_EASING];i.push(r)}return i},translate:function(t,e,i,a){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},a,STD_EASING,"translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],MARKER_LINE_ANIM_DUR)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],MARKER_LINE_ANIM_DUR)}},t}(),EASING={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return 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:"validateAndPrepareData",value:function(){return this.xAxisLabels=this.data.labels||[],this.y=this.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setupEmptyValues",value:function(){this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"getRenderer",value:function(){return new AxisChartRenderer(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.dataUnits={layerClass:"y marker axis",layer:void 0,indexed:1},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.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.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=calcIntervals(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,a){return t.xLine(e,i[a])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,a){return t.yLine(e,i[a])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[a]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",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 AxisChartRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var c=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(c),r.push(c)}),this.is_navigable&&this.bind_units(r)}},{key:"bind_tooltip",value:function(){var t=this;this.chart_wrapper.addEventListener("mousemove",function(e){var i=get_offset(t.chart_wrapper),a=e.pageX-i.left-t.translate_x;e.pageY-i.top-t.translate_y=0;n--){var s=this.xPositions[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:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=equilizeNoOfElements(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=slicedToArray(e,2),a=i[0],n=i[1],s=equilizeNoOfElements(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=slicedToArray(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),u=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;u>0&&this.makeXLines(a,h),this.makeYLines(o,c),0!==u&&this.animateXLines(a,n),this.animateYLines(o,l),this.y.map(function(e){var i=equilizeNoOfElements(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=slicedToArray(i,2),r=s[0],o=s[1];u>0&&(t.make_path&&t.make_path(e,a,r,t.colors[e.index]),t.makeDatasetUnits(a,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,n,o),t.animate_units(e,n,o)}),runSMILAnimation(this.chart_wrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},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(i.animator.verticalLine(a,e[n],t[n]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push(i.animator.horizontalLine(a,e[n],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.xAxisLabels.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.xAxisLabels.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.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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","yUnitPositions","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.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.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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:"renderComponents",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=$.create("div",{className:"progress-bar",inside:t.percentageBar,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=get_offset(t.chart_wrapper),n=get_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:"renderLegend",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&&($.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:"renderComponents",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,c=o/i.grand_total*FULL_ANGLE,u=n?-c:c,p=r+=u,d=e.getPositionByAngle(h,a),_=e.getPositionByAngle(p,a),f=t&&s[l],v=void 0,y=void 0;t?(v=f?f.startPosition:d,y=f?f.endPosition:d):(v=d,y=_);var g=i.makeArcPath(v,y),m=makePath(g,"pie-path","none",i.colors[l]);m.style.transition="transform .3s;",i.drawArea.appendChild(m),i.slices.push(m),i.slicesProperties.push({startPosition:d,endPosition:_,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:u}),t&&i.elements_to_animate.push([{unit:m,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(d,_)},650,"easein",null,{d:g}])}),t&&runSMILAnimation(this.chart_wrapper,this.svg,this.elements_to_animate)}},{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=get_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&&($.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,c=t.discrete_domains,u=void 0===c?0:c,p=t.count_label,d=void 0===p?"":p,_=t.legend_colors,f=void 0===_?[]:_;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=u,v.count_label=d;var y=new Date;return v.start=a||addDays(y,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}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:"setupConstants",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:"setWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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:"renderComponents",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,c=i+" "+t.count_label,u=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,u,c,[],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 $(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function getOffset(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 fire(t,e,i){var a=document.createEvent("HTMLEvents");a.initEvent(e,!0,!0);for(var n in i)a[n]=i[n];return t.dispatchEvent(a)}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 getXLineProps(t,e){var i=t+6,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){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 getBarHeightAndYAttr(t,e,i){var a=void 0,n=void 0;return t<=e?(n=t,0===(a=e-t)&&(n-=a=i*MIN_BAR_PERCENT_HEIGHT)):(n=e,0===(a=t-e)&&(a=i*MIN_BAR_PERCENT_HEIGHT)),[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 $$1(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)$$1(n).appendChild(i);else if("around"===a){var s=$$1(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 limitColor(t){return t>255?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 getDifferentChart(t,e,i){if(t!==e){ALL_CHART_TYPES.includes(t)||console.error("'"+t+"' is not a valid chart type."),COMPATIBLE_CHARTS[e].includes(t)||console.error("'"+e+"' chart cannot be converted to a '"+t+"' chart.");var a=COLOR_COMPATIBLE_CHARTS[e].includes(t);return new Chart({parent:i.parent,title:i.title,data:i.data,type:t,height:i.height,colors:a?i.colors:void 0})}}function animateSVGElement(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 c=s[l]||t.getAttribute(l),u=e[l],p={attributeName:l,from:c,to:u,begin:"0s",dur:i/1e3+"s",values:c+";"+u,keySplines:EASING[a],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};n&&(p.type=n);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),n?o.setAttribute(l,"translate("+u+")"):o.setAttribute(l,u)}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 animateSVG(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=animateSVGElement.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 runSMILAnimation(t,e,i){if(0!==i.length){var a=animateSVG(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(a)),setTimeout(function(){a.parentNode==t&&(t.removeChild(a),t.appendChild(e))},REPLACE_ALL_NEW_DUR)}}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;s9?"":"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=$.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}(),MIN_BAR_PERCENT_HEIGHT=.01,X_LABEL_CLASS="x-value-text",Y_LABEL_CLASS="y-value-text",AxisChartRenderer=function(){var t=function(t,e,i,a,n,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=a,this.xAxisMode=n,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,a,n,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,h=t-o/2+l*s,c=getBarHeightAndYAttr(e,this.zeroLine,this.totalHeight),u=slicedToArray(c,2),p=u[0];return createSVG("rect",{className:"bar mini",style:"fill: "+a,"data-point-index":n,x:h,y:u[1],width:l,height:p})},dot:function(t,e,i,a,n){return createSVG("circle",{style:"fill: "+a,"data-point-index":n,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,a=getXLineProps(this.totalHeight,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=n[3],h=createSVG("line",{x1:0,x2:0,y1:s,y2:r}),c=createSVG("text",{className:X_LABEL_CLASS,x:0,y:o,dy:".71em",innerHTML:e}),u=createSVG("g",{className:"tick "+l,transform:"translate("+t+", 0)"});return u.appendChild(h),u.appendChild(c),u},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,a=getYLineProps(this.totalWidth,i),n=slicedToArray(a,4),s=n[0],r=n[1],o=n[2],l=createSVG("line",{className:"",x1:n[3],x2:s,y1:0,y2:0}),h=createSVG("text",{className:Y_LABEL_CLASS,x:r,y:0,dy:".32em",innerHTML:e+""}),c=createSVG("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(l),c.appendChild(h),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},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){e.height;var i=e.title,a=void 0===i?"":i,n=e.subtitle,s=void 0===n?"":n,r=(e.colors,e.isNavigable),o=void 0===r?0:r,l=(e.type,e.parent);classCallCheck(this,t),this.rawChartArgs=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=a,this.subtitle=s,this.isNavigable=o,this.isNavigable&&(this.currentIndex=0),this.setupConfiguration()}return createClass(t,[{key:"setupConfiguration",value:function(){this.setColors(),this.setMargins(),this.config={showTooltip:1,showLegend:1,isNavigable:0}}},{key:"setColors",value:function(){var t=this.rawChartArgs,e="percentage"===t.type||"pie"===t.type?t.data.labels:t.data.datasets;!t.colors||e&&t.colors.length0&&void 0!==arguments[0]&&arguments[0];this.calc(),this.setupRenderer(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"calcWidth",value:function(){this.baseWidth=getElementContentWidth(this.parent)-0,this.width=this.baseWidth-2*this.translateX}},{key:"setupConstants",value:function(){}},{key:"calc",value:function(){this.calcWidth(),this.reCalc()}},{key:"setupRenderer",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",value:function(){this.container=$.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.chartWrapper=this.container.querySelector(".frappe-chart"),this.statsWrapper=this.container.querySelector(".graph-stats-container")}},{key:"makeChartArea",value:function(){this.svg=makeSVGContainer(this.chartWrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=makeSVGDefs(this.svg),this.drawArea=makeSVGGroup(this.svg,this.type+"-chart","translate("+this.translateX+", "+this.translateY+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,toConsumableArray(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"update",value:function(){this.reCalc(),this.reRender()}},{key:"reCalc",value:function(){}},{key:"reRender",value:function(){var t=this;if(!(!(arguments.length>0&&void 0!==arguments[0])||arguments[0]))return void this.renderComponents();this.animateComponents(),setTimeout(function(){t.renderComponents()},400)}},{key:"animateComponents",value:function(){this.intermedValues=this.calcIntermediateValues(),this.components.forEach(function(t){})}},{key:"calcInitStage",value:function(){}},{key:"makeTooltip",value:function(){this.tip=new SvgTip({parent:this.chartWrapper,colors:this.colors}),this.bindTooltip()}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isNavigable||(this.makeOverlay(),e&&(this.bindOverlay(),document.addEventListener("keydown",function(e){isElementInViewport(t.chartWrapper)&&("37"==(e=e||window.event).keyCode?t.onLeftArrow():"39"==e.keyCode?t.onRightArrow():"38"==e.keyCode?t.onUpArrow():"40"==e.keyCode?t.onDownArrow():"13"==e.keyCode&&t.onEnterKey())})))}},{key:"makeOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return makeSVGGroup(this.drawArea,t,e)}},{key:"getDifferentChart",value:function(t){return getDifferentChart(t,this.type,this.rawChartArgs)}}]),t}(),UNIT_ANIM_DUR=350,PATH_ANIM_DUR=650,MARKER_LINE_ANIM_DUR=UNIT_ANIM_DUR,REPLACE_ALL_NEW_DUR=250,STD_EASING="easein",Animator=function(){var t=function(t,e,i,a){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=a,this.zeroLine=i};return t.prototype={bar:function(t,e,i,a,n){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/n,o=getBarHeightAndYAttr(i,this.zeroLine,this.totalHeight),l=slicedToArray(o,2);return e=s+r*a,[t,{width:r,height:l[0],x:e,y:l[1]},UNIT_ANIM_DUR,STD_EASING]},dot:function(t,e,i){return[t,{cx:e,cy:i},UNIT_ANIM_DUR,STD_EASING]},path:function(t,e){var i=[],a=[{unit:t.path,object:t,key:"path"},{d:"M"+e},PATH_ANIM_DUR,STD_EASING];if(i.push(a),t.regionPath){var n="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+n+e+s},PATH_ANIM_DUR,STD_EASING];i.push(r)}return i},translate:function(t,e,i,a){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},a,STD_EASING,"translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],MARKER_LINE_ANIM_DUR)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],MARKER_LINE_ANIM_DUR)}},t}(),EASING={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},AxisChart=function(t){function e(t){classCallCheck(this,e);var i=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return 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:"parseData",value:function(){var t=this.rawChartArgs;return this.xAxisLabels=t.data.labels||[],this.y=t.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"reCalc",value:function(){this.oldValues=["everything"],this.datasetsLabels=[],this.datasetsValues=[[[12,34,68],[10,5,46]],[[20,20,20]]],this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"calcInitStage",value:function(){}},{key:"calcIntermediateValues",value:function(){}},{key:"getRenderer",value:function(){return new AxisChartRenderer(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.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.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=calcIntervals(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,a){return t.xLine(e,i[a])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,a){return t.yLine(e,i[a])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,a){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[a]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var i=this;t?setTimeout(function(){get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",i).call(i,t)},500):get(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",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 AxisChartRenderer(this.height,this.zero_line,this.avg_unit_width);e.map(function(e,h){var c=l[o.type](t[h],e,o.args,i,h,a,n);s.appendChild(c),r.push(c)}),this.isNavigable&&this.bind_units(r)}},{key:"bindTooltip",value:function(){var t=this;this.chartWrapper.addEventListener("mousemove",function(e){var i=getOffset(t.chartWrapper),a=e.pageX-i.left-t.translateX;e.pageY-i.top-t.translateY=0;n--){var s=this.xPositions[n];if(t>s-this.avg_unit_width/2){var r=s+this.translateX,o=this.y_min_tops[n]+this.translateY,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:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new Animator(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=equilizeNoOfElements(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=slicedToArray(e,2),a=i[0],n=i[1],s=equilizeNoOfElements(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=slicedToArray(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),u=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;u>0&&this.makeXLines(a,h),this.makeYLines(o,c),0!==u&&this.animateXLines(a,n),this.animateYLines(o,l),this.y.map(function(e){var i=equilizeNoOfElements(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=slicedToArray(i,2),r=s[0],o=s[1];u>0&&(t.make_path&&t.make_path(e,a,r,t.colors[e.index]),t.makeDatasetUnits(a,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,n,o),t.animate_units(e,n,o)}),runSMILAnimation(this.chartWrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},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(i.animator.verticalLine(a,e[n],t[n]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(a,n){i.elements_to_animate.push(i.animator.horizontalLine(a,e[n],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.xAxisLabels.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.xAxisLabels.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.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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.currentIndex,e={index:t},i=this.y[0];return["svg_units","yUnitPositions","values"].map(function(a){var n=a.slice(0,a.length-1);e[n]=i[a][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.length-1),t!==this.currentIndex&&(this.currentIndex=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.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return floatTwo(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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:"renderComponents",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=$.create("div",{className:"progress-bar",inside:t.percentageBar,styles:{background:t.colors[i],width:100*e/t.grand_total+"%"}});t.slices.push(a)})}},{key:"bindTooltip",value:function(){var t=this;this.slices.map(function(e,i){e.addEventListener("mouseenter",function(){var a=getOffset(t.chartWrapper),n=getOffset(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:"renderLegend",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&&($.create("div",{className:"stats",inside:t.statsWrapper}).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:"renderComponents",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,c=o/i.grand_total*FULL_ANGLE,u=n?-c:c,p=r+=u,d=e.getPositionByAngle(h,a),f=e.getPositionByAngle(p,a),v=t&&s[l],_=void 0,y=void 0;t?(_=v?v.startPosition:d,y=v?v.endPosition:d):(_=d,y=f);var g=i.makeArcPath(_,y),m=makePath(g,"pie-path","none",i.colors[l]);m.style.transition="transform .3s;",i.drawArea.appendChild(m),i.slices.push(m),i.slicesProperties.push({startPosition:d,endPosition:f,value:o,total:i.grand_total,startAngle:h,endAngle:p,angle:u}),t&&i.elements_to_animate.push([{unit:m,array:i.slices,index:i.slices.length-1},{d:i.makeArcPath(d,f)},650,"easein",null,{d:g}])}),t&&runSMILAnimation(this.chartWrapper,this.svg,this.elements_to_animate)}},{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=getOffset(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&&($.create("div",{className:"stats",inside:t.statsWrapper}).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,c=t.discrete_domains,u=void 0===c?0:c,p=t.count_label,d=void 0===p?"":p,f=t.legend_colors,v=void 0===f?[]:f;classCallCheck(this,e);var _=possibleConstructorReturn(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));_.type="heatmap",_.domain=s,_.subdomain=o,_.data=h,_.discrete_domains=u,_.count_label=d;var y=new Date;return _.start=a||addDays(y,365),v=v.slice(0,5),_.legend_colors=_.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],_.distribution_size=5,_.translateX=0,_}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:"setupConstants",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:"calcWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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;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=makeText("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(a)})}},{key:"renderComponents",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chartWrapper.style.marginTop="0px",this.chartWrapper.style.paddingTop="0px"}},{key:"bindTooltip",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.chartWrapper.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,c=i+" "+t.count_label,u=" on "+n+" "+a[0]+", "+a[2];t.tip.set_values(l,h,u,c,[],1),t.tip.show_tip()})})}},{key:"update",value:function(t){this.data=t,this.setup_values(),this.bindTooltip()}}]),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 53342b2..ce838e0 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 n(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function a(t,e,i){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0);for(var a in i)n[a]=i[a];return t.dispatchEvent(n)}function s(t){return parseFloat(t.toFixed(2))}function r(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var a=new Array(Math.abs(e)).fill(i);return t=n?a.concat(t):t.concat(a)}function o(t,e){var i=t+6,n=void 0,a=void 0,s="";return"span"===e?(i=-7,n=t+15,a=t+25):"tick"===e&&(i=t,n=6,a=9,s="x-axis-label"),[i,n,a,s]}function l(t,e){var i=void 0,n="",a=0;return"span"===e?(i=t+6,a=-6):"tick"===e&&(i=-6,n="y-axis-label"),[i,-9,n,a]}function h(t,e,i){var n=void 0,a=void 0;return t<=e?(a=t,0===(n=e-t)&&(a-=n=i*G)):(a=e,0===(n=t-e)&&(n=i*G)),[n,a]}function u(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 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 n in e){var a=e[n];if("inside"===n)c(a).appendChild(i);else if("around"===n){var s=c(a);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===n?"object"===(void 0===a?"undefined":F(a))&&Object.keys(a).map(function(t){i.style[t]=a[t]}):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=a:i.setAttribute(n,a))}return i}function d(t,e){return p("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function f(t,e,i,n){return p("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function v(t,e,i,n){return p("svg",{className:e,inside:t,width:i,height:n})}function _(t){return p("defs",{inside:t})}function y(t,e){return p("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function g(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 m(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e,a=d(t,n),s=[1,.6,.2];return i&&(s=[.4,.2,0]),f(a,"0%",e,s[0]),f(a,"50%",e,s[1]),f(a,"100%",e,s[2]),n}function x(t,e,i,n){var a=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:n,height:n,fill:a};return Object.keys(s).map(function(t){r[t]=s[t]}),p("rect",r)}function b(t,e,i,n){return p("text",{className:t,x:e,y:i,dy:".32em",innerHTML:n})}function k(t){return t>255?255:t<0?0:t}function w(t,e){var i=tt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var a=parseInt(i,16),s=k((a>>16)+e),r=k((a>>8&255)+e),o=k((255&a)+e);return(n?"#":"")+(o|r<<8|s<<16).toString(16)}function A(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function L(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",a=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:ot[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};a&&(p.type=a);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),a?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function P(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function C(t,e){var i=[],n=[];e.map(function(t){var e=t[0],a=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=L.apply(void 0,J(t)),l=V(o,2);s=l[0],r=l[1],i.push(r),n.push([s,a]),a.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var a=t.cloneNode(!0);return n.map(function(t,n){t[1].replaceChild(i[n],t[0]),e[n][0]=i[n]}),a}function M(t,e,i){if(0!==i.length){var n=C(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout(function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))},st)}}function N(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),n=Math.floor(e),a=i-n,s=a,r=1;a>5&&(a%2!=0&&(a=++i-n),s=a/2,r=2),a<=2&&(r=a/(s=4)),0===a&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(n+r*l);return o}function D(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=N(t),n=V(i,2),a=n[0],s=n[1],r=e?e/Math.pow(10,s):0,o=O(a=a.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function T(t){function e(t,e){for(var i=D(t),n=i[1]-i[0],a=0,s=1;a1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,J(t)),a=Math.min.apply(Math,J(t)),s=[];if(n>=0&&a>=0)N(n)[1],s=i?D(n,a):D(n);else if(n>0&&a<0){var r=Math.abs(a);n>=r?(N(n)[1],s=e(n,r)):(N(r)[1],s=e(r,n).map(function(t){return-1*t}))}else if(n<=0&&a<=0){var o=Math.abs(a),l=Math.abs(n);N(o)[1],s=(s=i?D(o,l):D(o)).reverse().map(function(t){return-1*t})}return s}function S(t,e){for(var i=Math.max.apply(Math,J(t)),n=1/(e-1),a=[],s=0;s9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function U(t,e){return Math.ceil(W(t,e)/7)}function W(t,e){return(z(e)-z(t))/864e5}function H(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 _t[t]?new _t[t](e):new ut(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.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 F="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},B=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,a){var o={key:t,arg:e,resolve:i,reject:a,next:null};r?r=r.next=o:(s=r=o,n(t,e))})}function n(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){n("next",t)},function(t){n("throw",t)}):a(r.done?"return":"normal",r.value)}catch(t){a("throw",t)}}function a(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)?n(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,n){var a=e.colors[n]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+a},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 n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,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]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=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=n,this.list_values=a,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}(),G=.01,K=function(){var t=function(t,e,i,n,a,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=n,this.xAxisMode=a,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,n,a,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,u=t-o/2+l*s,c=h(e,this.zeroLine,this.totalHeight),d=V(c,2),f=d[0];return p("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:u,y:d[1],width:l,height:f})},dot:function(t,e,i,n,a){return p("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,n=o(this.totalHeight,i),a=V(n,4),s=a[0],r=a[1],l=a[2],h=a[3],u=p("line",{x1:0,x2:0,y1:s,y2:r}),c=p("text",{className:"x-value-text",x:0,y:l,dy:".71em",innerHTML:e}),d=p("g",{className:"tick "+h,transform:"translate("+t+", 0)"});return d.appendChild(u),d.appendChild(c),d},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,n=l(this.totalWidth,i),a=V(n,4),s=a[0],r=a[1],o=a[2],h=p("line",{className:"",x1:a[3],x2:s,y1:0,y2:0}),u=p("text",{className:"y-value-text",x:r,y:0,dy:".32em",innerHTML:e+""}),c=p("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(h),c.appendChild(u),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},t}(),Q={"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"},Z=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],tt=function(t){return Q[t]||t},et=["line","scatter","bar","percentage","heatmap","pie"],it={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:[]},nt={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},at=function(){function e(t){t.height;var i=t.title,n=void 0===i?"":i,a=t.subtitle,s=void 0===a?"":a,r=(t.colors,t.is_navigable),o=void 0===r?0:r,l=(t.type,t.parent),h=t.data;B(this,e),this.raw_chart_args=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=n,this.subtitle=s,this.data=h,this.is_navigable=o,this.is_navigable&&(this.current_index=0),this.setupConfiguration(arguments[0])}return R(e,[{key:"setupConfiguration",value:function(t){this.setColors(t.colors,t.type),this.set_margins(t.height),this.config={showTooltip:1,showLegend:1,isNavigable: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.setWidth(),this.setupEmptyValues(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"update",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.oldData=Object.assign({},this.data),this.data=this.prepareNewData(t),this.calculateValues(),this.updateComponents(e)}},{key:"prepareNewData",value:function(t){return t}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"setWidth",value:function(){this.baseWidth=n(this.parent)-0,this.width=this.baseWidth-2*this.translate_x}},{key:"setupConstants",value:function(){}},{key:"setupEmptyValues",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",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")}},{key:"makeChartArea",value:function(){this.svg=v(this.chart_wrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=_(this.svg),this.drawArea=y(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,J(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"updateComponents",value:function(){}},{key:"makeTooltip",value:function(){this.tip=new $({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 n=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(n)})}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.is_navigable||(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:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return y(this.drawArea,t,e)}},{key:"get_different_chart",value:function(t){if(t!==this.type){et.includes(t)||console.error("'"+t+"' is not a valid chart type."),it[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=nt[this.type].includes(t);return new yt({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})}}}]),e}(),st=250,rt=function(){var t=function(t,e,i,n){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=n,this.zeroLine=i};return t.prototype={bar:function(t,e,i,n,a){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/a,o=h(i,this.zeroLine,this.totalHeight),l=V(o,2);return e=s+r*n,[t,{width:r,height:l[0],x:e,y:l[1]},350,"easein"]},dot:function(t,e,i){return[t,{cx:e,cy:i},350,"easein"]},path:function(t,e){var i=[],n=[{unit:t.path,object:t,key:"path"},{d:"M"+e},650,"easein"];if(i.push(n),t.regionPath){var a="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+a+e+s},650,"easein"];i.push(r)}return i},translate:function(t,e,i,n){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},n,"easein","translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],350)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],350)}},t}(),ot={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},lt=function(t){function i(t){B(this,i);var e=q(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return 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 I(i,t),R(i,[{key:"validateAndPrepareData",value:function(){return this.xAxisLabels=this.data.labels||[],this.y=this.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setupEmptyValues",value:function(){this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"getRenderer",value:function(){return new K(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.dataUnits={layerClass:"y marker axis",layer:void 0,indexed:1},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.map(function(e,i){return s(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=T(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,n=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/n,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=i[1]-i[0],s=a*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/a:-1*i[i.length-1]/a+(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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,n){return t.xLine(e,i[n])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,n){return t.yLine(e,i[n])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,n){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[n]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var e=this;t?setTimeout(function(){X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",e).call(e,t)},500):X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",value:function(t,e,i,n,a,s,r,o){s||(s=this.svg_units_groups[n]),r||(r=this.y[n].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,n,a);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 n=e(t.chart_wrapper),a=i.pageX-n.left-t.translate_x;i.pageY-n.top-t.translate_y=0;a--){var s=this.xPositions[a];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[a]+this.translate_y,l=i[a],h=this.y.map(function(t,i){return{title:t.title,value:n?e.format_tooltip_y(t.values[a]):t.values[a],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new rt(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=u(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=V(e,2),n=i[0],a=i[1],s=u(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=V(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),p=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;p>0&&this.makeXLines(n,h),this.makeYLines(o,c),0!==p&&this.animateXLines(n,a),this.animateYLines(o,l),this.y.map(function(e){var i=u(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=V(i,2),r=s[0],o=s[1];p>0&&(t.make_path&&t.make_path(e,n,r,t.colors[e.index]),t.makeDatasetUnits(n,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,a,o),t.animate_units(e,a,o)}),M(this.chart_wrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},400)}},{key:"animate_path",value:function(t,e,i){var n=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,n.join("L")))}},{key:"animate_units",value:function(t,e,i){var n=this,a=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&n.elements_to_animate.push(n.animator[a]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,n.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.verticalLine(n,e[a],t[a]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.horizontalLine(n,e[a],t[a]))})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisLabels.length,n=this.y.map(function(t){return{values:t.values}});n.map(function(e,n){e.values.splice(i,0,t[n])});var a=this.xAxisLabels.slice();a.splice(i,0,e),this.updateData(n,a)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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","yUnitPositions","values"].map(function(n){var a=n.slice(0,n.length-1);e[a]=i[n][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.length-1),t!==this.current_index&&(this.current_index=t,a(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return s(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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:"renderComponents",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,n){var a=t.create("div",{className:"progress-bar",inside:e.percentageBar,styles:{background:e.colors[n],width:100*i/e.grand_total+"%"}});e.slices.push(a)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(i,n){i.addEventListener("mouseenter",function(){var a=e(t.chart_wrapper),s=e(i),r=s.left-a.left+i.offsetWidth/2,o=s.top-a.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[n]:t.labels[n])+": ",h=(100*t.slice_totals[n]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"renderLegend",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){n&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}]),n}(at),dt=Math.PI/180,ft=function(i){function n(t){B(this,n);var e=q(this,(n.__proto__||Object.getPrototypeOf(n)).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 I(n,i),R(n,[{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 n=0;return t.data.datasets.map(function(t){n+=t.values[i]}),[n,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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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,n=this.centerY,a=this.radius,s=this.clockWise;return"M"+i+" "+n+" L"+(i+t.x)+" "+(n+t.y)+" A "+a+" "+a+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(n+e.y)+" z"}},{key:"renderComponents",value:function(t){var e=this,i=this.radius,a=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=a?-u:u,p=r+=c,d=n.getPositionByAngle(h,i),f=n.getPositionByAngle(p,i),v=t&&s[l],_=void 0,y=void 0;t?(_=v?v.startPosition:d,y=v?v.endPosition:d):(_=d,y=f);var m=e.makeArcPath(_,y),x=g(m,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.drawArea.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:d,endPosition:f,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,f)},650,"easein",null,{d:m}])}),t&&M(this.chart_wrapper,this.svg,this.elements_to_animate)}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,a=n.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+a.x*i+"px,"+a.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,a){if(t){var s=this.colors[i];if(n){P(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=w(s,50);var r=e(this.svg),o=a.pageX-r.left+10,l=a.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 P(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,n=this.curActiveSlice,a=0;a0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){var s=e.colors[a];n&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*dt)*e,y:Math.cos(t*dt)*e}}}]),n}(at),vt=function(t){function e(t){var i=t.start,n=void 0===i?"":i,a=t.domain,s=void 0===a?"":a,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,d=void 0===p?"":p,f=t.legend_colors,v=void 0===f?[]:f;B(this,e);var _=q(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));_.type="heatmap",_.domain=s,_.subdomain=o,_.data=h,_.discrete_domains=c,_.count_label=d;var y=new Date;return _.start=n||H(y,365),v=v.slice(0,5),_.legend_colors=_.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],_.distribution_size=5,_.translate_x=0,_}return I(e,t),R(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){A(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setupConstants",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()&&H(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&H(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=U(this.first_week_start+"",this.last_week_start+"")+1}},{key:"setWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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=S(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()&&(n=1,this.discrete_domains&&(a=1),this.month_start_points.push(13+12*(e+a))),t=v}return[s,n]}},{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 n=b("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(n)})}},{key:"renderComponents",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"),n=e.target.getAttribute("data-date").split("-"),a=t.month_names[parseInt(n[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 "+a+" "+n[0]+", "+n[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}(at),_t={line:ut,bar:ht,scatter:ct,percentage:pt,heatmap:vt,pie:ft},yt=function t(e){return B(this,t),Y(e.type,arguments[0])};return yt}(); +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 n(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function a(t,e,i){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0);for(var a in i)n[a]=i[a];return t.dispatchEvent(n)}function s(t){return parseFloat(t.toFixed(2))}function r(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var a=new Array(Math.abs(e)).fill(i);return t=n?a.concat(t):t.concat(a)}function o(t,e){var i=t+6,n=void 0,a=void 0,s="";return"span"===e?(i=-7,n=t+15,a=t+25):"tick"===e&&(i=t,n=6,a=9,s="x-axis-label"),[i,n,a,s]}function l(t,e){var i=void 0,n="",a=0;return"span"===e?(i=t+6,a=-6):"tick"===e&&(i=-6,n="y-axis-label"),[i,-9,n,a]}function h(t,e,i){var n=void 0,a=void 0;return t<=e?(a=t,0===(n=e-t)&&(a-=n=i*G)):(a=e,0===(n=t-e)&&(n=i*G)),[n,a]}function u(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 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 n in e){var a=e[n];if("inside"===n)c(a).appendChild(i);else if("around"===n){var s=c(a);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===n?"object"===(void 0===a?"undefined":R(a))&&Object.keys(a).map(function(t){i.style[t]=a[t]}):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=a:i.setAttribute(n,a))}return i}function d(t,e){return p("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function f(t,e,i,n){return p("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function v(t,e,i,n){return p("svg",{className:e,inside:t,width:i,height:n})}function _(t){return p("defs",{inside:t})}function y(t,e){return p("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function g(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 m(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e,a=d(t,n),s=[1,.6,.2];return i&&(s=[.4,.2,0]),f(a,"0%",e,s[0]),f(a,"50%",e,s[1]),f(a,"100%",e,s[2]),n}function x(t,e,i,n){var a=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:n,height:n,fill:a};return Object.keys(s).map(function(t){r[t]=s[t]}),p("rect",r)}function b(t,e,i,n){return p("text",{className:t,x:e,y:i,dy:".32em",innerHTML:n})}function k(t){return t>255?255:t<0?0:t}function w(t,e){var i=et(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var a=parseInt(i,16),s=k((a>>16)+e),r=k((a>>8&255)+e),o=k((255&a)+e);return(n?"#":"")+(o|r<<8|s<<16).toString(16)}function A(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function L(t,e,i){if(t!==e){it.includes(t)||console.error("'"+t+"' is not a valid chart type."),nt[e].includes(t)||console.error("'"+e+"' chart cannot be converted to a '"+t+"' chart.");var n=at[e].includes(t);return new gt({parent:i.parent,title:i.title,data:i.data,type:t,height:i.height,colors:n?i.colors:void 0})}}function P(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",a=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:lt[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};a&&(p.type=a);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),a?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 M(t,e){var i=[],n=[];e.map(function(t){var e=t[0],a=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=P.apply(void 0,K(t)),l=J(o,2);s=l[0],r=l[1],i.push(r),n.push([s,a]),a.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var a=t.cloneNode(!0);return n.map(function(t,n){t[1].replaceChild(i[n],t[0]),e[n][0]=i[n]}),a}function N(t,e,i){if(0!==i.length){var n=M(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout(function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))},rt)}}function O(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 T(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),a=i-n,s=a,r=1;a>5&&(a%2!=0&&(a=++i-n),s=a/2,r=2),a<=2&&(r=a/(s=4)),0===a&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(n+r*l);return o}function W(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=O(t),n=J(i,2),a=n[0],s=n[1],r=e?e/Math.pow(10,s):0,o=T(a=a.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=W(t),n=i[1]-i[0],a=0,s=1;a1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,K(t)),a=Math.min.apply(Math,K(t)),s=[];if(n>=0&&a>=0)O(n)[1],s=i?W(n,a):W(n);else if(n>0&&a<0){var r=Math.abs(a);n>=r?(O(n)[1],s=e(n,r)):(O(r)[1],s=e(r,n).map(function(t){return-1*t}))}else if(n<=0&&a<=0){var o=Math.abs(a),l=Math.abs(n);O(o)[1],s=(s=i?W(o,l):W(o)).reverse().map(function(t){return-1*t})}return s}function S(t,e){for(var i=Math.max.apply(Math,K(t)),n=1/(e-1),a=[],s=0;s9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function U(t,e){return Math.ceil(Y(t,e)/7)}function Y(t,e){return(z(e)-z(t))/864e5}function H(t,e){t.setDate(t.getDate()+e)}function I(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return yt[t]?new yt[t](e):new ct(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.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 R="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},X=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,a){var o={key:t,arg:e,resolve:i,reject:a,next:null};r?r=r.next=o:(s=r=o,n(t,e))})}function n(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){n("next",t)},function(t){n("throw",t)}):a(r.done?"return":"normal",r.value)}catch(t){a("throw",t)}}function a(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)?n(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")}),F=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,n){var a=e.colors[n]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+a},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 n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,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]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=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=n,this.list_values=a,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}(),G=.01,Q=function(){var t=function(t,e,i,n,a,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=n,this.xAxisMode=a,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,n,a,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,u=t-o/2+l*s,c=h(e,this.zeroLine,this.totalHeight),d=J(c,2),f=d[0];return p("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:u,y:d[1],width:l,height:f})},dot:function(t,e,i,n,a){return p("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,n=o(this.totalHeight,i),a=J(n,4),s=a[0],r=a[1],l=a[2],h=a[3],u=p("line",{x1:0,x2:0,y1:s,y2:r}),c=p("text",{className:"x-value-text",x:0,y:l,dy:".71em",innerHTML:e}),d=p("g",{className:"tick "+h,transform:"translate("+t+", 0)"});return d.appendChild(u),d.appendChild(c),d},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,n=l(this.totalWidth,i),a=J(n,4),s=a[0],r=a[1],o=a[2],h=p("line",{className:"",x1:a[3],x2:s,y1:0,y2:0}),u=p("text",{className:"y-value-text",x:r,y:0,dy:".32em",innerHTML:e+""}),c=p("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(h),c.appendChild(u),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},t}(),Z={"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"},tt=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],et=function(t){return Z[t]||t},it=["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:[]},at={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},st=function(){function e(t){t.height;var i=t.title,n=void 0===i?"":i,a=t.subtitle,s=void 0===a?"":a,r=(t.colors,t.isNavigable),o=void 0===r?0:r,l=(t.type,t.parent);X(this,e),this.rawChartArgs=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=n,this.subtitle=s,this.isNavigable=o,this.isNavigable&&(this.currentIndex=0),this.setupConfiguration()}return F(e,[{key:"setupConfiguration",value:function(){this.setColors(),this.setMargins(),this.config={showTooltip:1,showLegend:1,isNavigable:0}}},{key:"setColors",value:function(){var t=this.rawChartArgs,e="percentage"===t.type||"pie"===t.type?t.data.labels:t.data.datasets;!t.colors||e&&t.colors.length0&&void 0!==arguments[0]&&arguments[0];this.calc(),this.setupRenderer(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"calcWidth",value:function(){this.baseWidth=n(this.parent)-0,this.width=this.baseWidth-2*this.translateX}},{key:"setupConstants",value:function(){}},{key:"calc",value:function(){this.calcWidth(),this.reCalc()}},{key:"setupRenderer",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",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.chartWrapper=this.container.querySelector(".frappe-chart"),this.statsWrapper=this.container.querySelector(".graph-stats-container")}},{key:"makeChartArea",value:function(){this.svg=v(this.chartWrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=_(this.svg),this.drawArea=y(this.svg,this.type+"-chart","translate("+this.translateX+", "+this.translateY+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,K(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"update",value:function(){this.reCalc(),this.reRender()}},{key:"reCalc",value:function(){}},{key:"reRender",value:function(){var t=this;if(!(!(arguments.length>0&&void 0!==arguments[0])||arguments[0]))return void this.renderComponents();this.animateComponents(),setTimeout(function(){t.renderComponents()},400)}},{key:"animateComponents",value:function(){this.intermedValues=this.calcIntermediateValues(),this.components.forEach(function(t){})}},{key:"calcInitStage",value:function(){}},{key:"makeTooltip",value:function(){this.tip=new $({parent:this.chartWrapper,colors:this.colors}),this.bindTooltip()}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isNavigable||(this.makeOverlay(),e&&(this.bindOverlay(),document.addEventListener("keydown",function(e){i(t.chartWrapper)&&("37"==(e=e||window.event).keyCode?t.onLeftArrow():"39"==e.keyCode?t.onRightArrow():"38"==e.keyCode?t.onUpArrow():"40"==e.keyCode?t.onDownArrow():"13"==e.keyCode&&t.onEnterKey())})))}},{key:"makeOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return y(this.drawArea,t,e)}},{key:"getDifferentChart",value:function(t){return L(t,this.type,this.rawChartArgs)}}]),e}(),rt=250,ot=function(){var t=function(t,e,i,n){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=n,this.zeroLine=i};return t.prototype={bar:function(t,e,i,n,a){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/a,o=h(i,this.zeroLine,this.totalHeight),l=J(o,2);return e=s+r*n,[t,{width:r,height:l[0],x:e,y:l[1]},350,"easein"]},dot:function(t,e,i){return[t,{cx:e,cy:i},350,"easein"]},path:function(t,e){var i=[],n=[{unit:t.path,object:t,key:"path"},{d:"M"+e},650,"easein"];if(i.push(n),t.regionPath){var a="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+a+e+s},650,"easein"];i.push(r)}return i},translate:function(t,e,i,n){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},n,"easein","translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],350)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],350)}},t}(),lt={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},ht=function(t){function i(t){X(this,i);var e=V(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return 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 q(i,t),F(i,[{key:"parseData",value:function(){var t=this.rawChartArgs;return this.xAxisLabels=t.data.labels||[],this.y=t.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"reCalc",value:function(){this.oldValues=["everything"],this.datasetsLabels=[],this.datasetsValues=[[[12,34,68],[10,5,46]],[[20,20,20]]],this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"calcInitStage",value:function(){}},{key:"calcIntermediateValues",value:function(){}},{key:"getRenderer",value:function(){return new Q(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.map(function(e,i){return s(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=D(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,n=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/n,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=i[1]-i[0],s=a*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/a:-1*i[i.length-1]/a+(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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,n){return t.xLine(e,i[n])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,n){return t.yLine(e,i[n])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,n){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[n]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var e=this;t?setTimeout(function(){B(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",e).call(e,t)},500):B(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",value:function(t,e,i,n,a,s,r,o){s||(s=this.svg_units_groups[n]),r||(r=this.y[n].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new Q(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,n,a);s.appendChild(u),r.push(u)}),this.isNavigable&&this.bind_units(r)}},{key:"bindTooltip",value:function(){var t=this;this.chartWrapper.addEventListener("mousemove",function(i){var n=e(t.chartWrapper),a=i.pageX-n.left-t.translateX;i.pageY-n.top-t.translateY=0;a--){var s=this.xPositions[a];if(t>s-this.avg_unit_width/2){var r=s+this.translateX,o=this.y_min_tops[a]+this.translateY,l=i[a],h=this.y.map(function(t,i){return{title:t.title,value:n?e.format_tooltip_y(t.values[a]):t.values[a],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new ot(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=u(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=J(e,2),n=i[0],a=i[1],s=u(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=J(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),p=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;p>0&&this.makeXLines(n,h),this.makeYLines(o,c),0!==p&&this.animateXLines(n,a),this.animateYLines(o,l),this.y.map(function(e){var i=u(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=J(i,2),r=s[0],o=s[1];p>0&&(t.make_path&&t.make_path(e,n,r,t.colors[e.index]),t.makeDatasetUnits(n,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,a,o),t.animate_units(e,a,o)}),N(this.chartWrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},400)}},{key:"animate_path",value:function(t,e,i){var n=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,n.join("L")))}},{key:"animate_units",value:function(t,e,i){var n=this,a=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&n.elements_to_animate.push(n.animator[a]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,n.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.verticalLine(n,e[a],t[a]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.horizontalLine(n,e[a],t[a]))})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisLabels.length,n=this.y.map(function(t){return{values:t.values}});n.map(function(e,n){e.values.splice(i,0,t[n])});var a=this.xAxisLabels.slice();a.splice(i,0,e),this.updateData(n,a)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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.currentIndex,e={index:t},i=this.y[0];return["svg_units","yUnitPositions","values"].map(function(n){var a=n.slice(0,n.length-1);e[a]=i[n][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.length-1),t!==this.currentIndex&&(this.currentIndex=t,a(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return s(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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:"renderComponents",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,n){var a=t.create("div",{className:"progress-bar",inside:e.percentageBar,styles:{background:e.colors[n],width:100*i/e.grand_total+"%"}});e.slices.push(a)})}},{key:"bindTooltip",value:function(){var t=this;this.slices.map(function(i,n){i.addEventListener("mouseenter",function(){var a=e(t.chartWrapper),s=e(i),r=s.left-a.left+i.offsetWidth/2,o=s.top-a.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[n]:t.labels[n])+": ",h=(100*t.slice_totals[n]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"renderLegend",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){n&&(t.create("div",{className:"stats",inside:e.statsWrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}]),n}(st),ft=Math.PI/180,vt=function(i){function n(t){X(this,n);var e=V(this,(n.__proto__||Object.getPrototypeOf(n)).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 q(n,i),F(n,[{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 n=0;return t.data.datasets.map(function(t){n+=t.values[i]}),[n,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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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,n=this.centerY,a=this.radius,s=this.clockWise;return"M"+i+" "+n+" L"+(i+t.x)+" "+(n+t.y)+" A "+a+" "+a+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(n+e.y)+" z"}},{key:"renderComponents",value:function(t){var e=this,i=this.radius,a=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=a?-u:u,p=r+=c,d=n.getPositionByAngle(h,i),f=n.getPositionByAngle(p,i),v=t&&s[l],_=void 0,y=void 0;t?(_=v?v.startPosition:d,y=v?v.endPosition:d):(_=d,y=f);var m=e.makeArcPath(_,y),x=g(m,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.drawArea.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:d,endPosition:f,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,f)},650,"easein",null,{d:m}])}),t&&N(this.chartWrapper,this.svg,this.elements_to_animate)}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,a=n.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+a.x*i+"px,"+a.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,a){if(t){var s=this.colors[i];if(n){C(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=w(s,50);var r=e(this.svg),o=a.pageX-r.left+10,l=a.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,n=this.curActiveSlice,a=0;a0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){var s=e.colors[a];n&&(t.create("div",{className:"stats",inside:e.statsWrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*ft)*e,y:Math.cos(t*ft)*e}}}]),n}(st),_t=function(t){function e(t){var i=t.start,n=void 0===i?"":i,a=t.domain,s=void 0===a?"":a,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,d=void 0===p?"":p,f=t.legend_colors,v=void 0===f?[]:f;X(this,e);var _=V(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));_.type="heatmap",_.domain=s,_.subdomain=o,_.data=h,_.discrete_domains=c,_.count_label=d;var y=new Date;return _.start=n||H(y,365),v=v.slice(0,5),_.legend_colors=_.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],_.distribution_size=5,_.translateX=0,_}return q(e,t),F(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){A(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setupConstants",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()&&H(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&H(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=U(this.first_week_start+"",this.last_week_start+"")+1}},{key:"calcWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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=S(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()&&(n=1,this.discrete_domains&&(a=1),this.month_start_points.push(13+12*(e+a))),t=v}return[s,n]}},{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 n=b("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(n)})}},{key:"renderComponents",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chartWrapper.style.marginTop="0px",this.chartWrapper.style.paddingTop="0px"}},{key:"bindTooltip",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"),n=e.target.getAttribute("data-date").split("-"),a=t.month_names[parseInt(n[1])-1].substring(0,3),s=t.chartWrapper.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 "+a+" "+n[0]+", "+n[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.bindTooltip()}}]),e}(st),yt={line:ct,bar:ut,scatter:pt,percentage:dt,heatmap:_t,pie:vt},gt=function t(e){return X(this,t),I(e.type,arguments[0])};return gt}(); diff --git a/docs/assets/js/frappe-charts.min.js b/docs/assets/js/frappe-charts.min.js index 53342b2..ce838e0 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 n(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function a(t,e,i){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0);for(var a in i)n[a]=i[a];return t.dispatchEvent(n)}function s(t){return parseFloat(t.toFixed(2))}function r(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var a=new Array(Math.abs(e)).fill(i);return t=n?a.concat(t):t.concat(a)}function o(t,e){var i=t+6,n=void 0,a=void 0,s="";return"span"===e?(i=-7,n=t+15,a=t+25):"tick"===e&&(i=t,n=6,a=9,s="x-axis-label"),[i,n,a,s]}function l(t,e){var i=void 0,n="",a=0;return"span"===e?(i=t+6,a=-6):"tick"===e&&(i=-6,n="y-axis-label"),[i,-9,n,a]}function h(t,e,i){var n=void 0,a=void 0;return t<=e?(a=t,0===(n=e-t)&&(a-=n=i*G)):(a=e,0===(n=t-e)&&(n=i*G)),[n,a]}function u(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 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 n in e){var a=e[n];if("inside"===n)c(a).appendChild(i);else if("around"===n){var s=c(a);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===n?"object"===(void 0===a?"undefined":F(a))&&Object.keys(a).map(function(t){i.style[t]=a[t]}):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=a:i.setAttribute(n,a))}return i}function d(t,e){return p("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function f(t,e,i,n){return p("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function v(t,e,i,n){return p("svg",{className:e,inside:t,width:i,height:n})}function _(t){return p("defs",{inside:t})}function y(t,e){return p("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function g(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 m(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e,a=d(t,n),s=[1,.6,.2];return i&&(s=[.4,.2,0]),f(a,"0%",e,s[0]),f(a,"50%",e,s[1]),f(a,"100%",e,s[2]),n}function x(t,e,i,n){var a=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:n,height:n,fill:a};return Object.keys(s).map(function(t){r[t]=s[t]}),p("rect",r)}function b(t,e,i,n){return p("text",{className:t,x:e,y:i,dy:".32em",innerHTML:n})}function k(t){return t>255?255:t<0?0:t}function w(t,e){var i=tt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var a=parseInt(i,16),s=k((a>>16)+e),r=k((a>>8&255)+e),o=k((255&a)+e);return(n?"#":"")+(o|r<<8|s<<16).toString(16)}function A(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function L(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",a=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:ot[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};a&&(p.type=a);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),a?o.setAttribute(l,"translate("+c+")"):o.setAttribute(l,c)}return[r,o]}function P(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function C(t,e){var i=[],n=[];e.map(function(t){var e=t[0],a=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=L.apply(void 0,J(t)),l=V(o,2);s=l[0],r=l[1],i.push(r),n.push([s,a]),a.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var a=t.cloneNode(!0);return n.map(function(t,n){t[1].replaceChild(i[n],t[0]),e[n][0]=i[n]}),a}function M(t,e,i){if(0!==i.length){var n=C(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout(function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))},st)}}function N(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),n=Math.floor(e),a=i-n,s=a,r=1;a>5&&(a%2!=0&&(a=++i-n),s=a/2,r=2),a<=2&&(r=a/(s=4)),0===a&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(n+r*l);return o}function D(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=N(t),n=V(i,2),a=n[0],s=n[1],r=e?e/Math.pow(10,s):0,o=O(a=a.toFixed(6),r);return o=o.map(function(t){return t*Math.pow(10,s)})}function T(t){function e(t,e){for(var i=D(t),n=i[1]-i[0],a=0,s=1;a1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,J(t)),a=Math.min.apply(Math,J(t)),s=[];if(n>=0&&a>=0)N(n)[1],s=i?D(n,a):D(n);else if(n>0&&a<0){var r=Math.abs(a);n>=r?(N(n)[1],s=e(n,r)):(N(r)[1],s=e(r,n).map(function(t){return-1*t}))}else if(n<=0&&a<=0){var o=Math.abs(a),l=Math.abs(n);N(o)[1],s=(s=i?D(o,l):D(o)).reverse().map(function(t){return-1*t})}return s}function S(t,e){for(var i=Math.max.apply(Math,J(t)),n=1/(e-1),a=[],s=0;s9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function U(t,e){return Math.ceil(W(t,e)/7)}function W(t,e){return(z(e)-z(t))/864e5}function H(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 _t[t]?new _t[t](e):new ut(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.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 F="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},B=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,a){var o={key:t,arg:e,resolve:i,reject:a,next:null};r?r=r.next=o:(s=r=o,n(t,e))})}function n(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){n("next",t)},function(t){n("throw",t)}):a(r.done?"return":"normal",r.value)}catch(t){a("throw",t)}}function a(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)?n(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,n){var a=e.colors[n]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+a},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 n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,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]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=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=n,this.list_values=a,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}(),G=.01,K=function(){var t=function(t,e,i,n,a,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=n,this.xAxisMode=a,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,n,a,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,u=t-o/2+l*s,c=h(e,this.zeroLine,this.totalHeight),d=V(c,2),f=d[0];return p("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:u,y:d[1],width:l,height:f})},dot:function(t,e,i,n,a){return p("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,n=o(this.totalHeight,i),a=V(n,4),s=a[0],r=a[1],l=a[2],h=a[3],u=p("line",{x1:0,x2:0,y1:s,y2:r}),c=p("text",{className:"x-value-text",x:0,y:l,dy:".71em",innerHTML:e}),d=p("g",{className:"tick "+h,transform:"translate("+t+", 0)"});return d.appendChild(u),d.appendChild(c),d},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,n=l(this.totalWidth,i),a=V(n,4),s=a[0],r=a[1],o=a[2],h=p("line",{className:"",x1:a[3],x2:s,y1:0,y2:0}),u=p("text",{className:"y-value-text",x:r,y:0,dy:".32em",innerHTML:e+""}),c=p("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(h),c.appendChild(u),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},t}(),Q={"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"},Z=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],tt=function(t){return Q[t]||t},et=["line","scatter","bar","percentage","heatmap","pie"],it={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:[]},nt={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},at=function(){function e(t){t.height;var i=t.title,n=void 0===i?"":i,a=t.subtitle,s=void 0===a?"":a,r=(t.colors,t.is_navigable),o=void 0===r?0:r,l=(t.type,t.parent),h=t.data;B(this,e),this.raw_chart_args=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=n,this.subtitle=s,this.data=h,this.is_navigable=o,this.is_navigable&&(this.current_index=0),this.setupConfiguration(arguments[0])}return R(e,[{key:"setupConfiguration",value:function(t){this.setColors(t.colors,t.type),this.set_margins(t.height),this.config={showTooltip:1,showLegend:1,isNavigable: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.setWidth(),this.setupEmptyValues(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"update",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.oldData=Object.assign({},this.data),this.data=this.prepareNewData(t),this.calculateValues(),this.updateComponents(e)}},{key:"prepareNewData",value:function(t){return t}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"setWidth",value:function(){this.baseWidth=n(this.parent)-0,this.width=this.baseWidth-2*this.translate_x}},{key:"setupConstants",value:function(){}},{key:"setupEmptyValues",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",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")}},{key:"makeChartArea",value:function(){this.svg=v(this.chart_wrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=_(this.svg),this.drawArea=y(this.svg,this.type+"-chart","translate("+this.translate_x+", "+this.translate_y+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,J(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"updateComponents",value:function(){}},{key:"makeTooltip",value:function(){this.tip=new $({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 n=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(n)})}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.is_navigable||(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:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return y(this.drawArea,t,e)}},{key:"get_different_chart",value:function(t){if(t!==this.type){et.includes(t)||console.error("'"+t+"' is not a valid chart type."),it[this.type].includes(t)||console.error("'"+this.type+"' chart cannot be converted to a '"+t+"' chart.");var e=nt[this.type].includes(t);return new yt({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})}}}]),e}(),st=250,rt=function(){var t=function(t,e,i,n){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=n,this.zeroLine=i};return t.prototype={bar:function(t,e,i,n,a){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/a,o=h(i,this.zeroLine,this.totalHeight),l=V(o,2);return e=s+r*n,[t,{width:r,height:l[0],x:e,y:l[1]},350,"easein"]},dot:function(t,e,i){return[t,{cx:e,cy:i},350,"easein"]},path:function(t,e){var i=[],n=[{unit:t.path,object:t,key:"path"},{d:"M"+e},650,"easein"];if(i.push(n),t.regionPath){var a="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+a+e+s},650,"easein"];i.push(r)}return i},translate:function(t,e,i,n){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},n,"easein","translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],350)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],350)}},t}(),ot={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},lt=function(t){function i(t){B(this,i);var e=q(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return 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 I(i,t),R(i,[{key:"validateAndPrepareData",value:function(){return this.xAxisLabels=this.data.labels||[],this.y=this.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"setupEmptyValues",value:function(){this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"getRenderer",value:function(){return new K(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.dataUnits={layerClass:"y marker axis",layer:void 0,indexed:1},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.map(function(e,i){return s(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=T(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,n=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/n,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=i[1]-i[0],s=a*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/a:-1*i[i.length-1]/a+(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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,n){return t.xLine(e,i[n])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,n){return t.yLine(e,i[n])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,n){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[n]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var e=this;t?setTimeout(function(){X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",e).call(e,t)},500):X(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",value:function(t,e,i,n,a,s,r,o){s||(s=this.svg_units_groups[n]),r||(r=this.y[n].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,n,a);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 n=e(t.chart_wrapper),a=i.pageX-n.left-t.translate_x;i.pageY-n.top-t.translate_y=0;a--){var s=this.xPositions[a];if(t>s-this.avg_unit_width/2){var r=s+this.translate_x,o=this.y_min_tops[a]+this.translate_y,l=i[a],h=this.y.map(function(t,i){return{title:t.title,value:n?e.format_tooltip_y(t.values[a]):t.values[a],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new rt(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=u(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=V(e,2),n=i[0],a=i[1],s=u(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=V(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),p=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;p>0&&this.makeXLines(n,h),this.makeYLines(o,c),0!==p&&this.animateXLines(n,a),this.animateYLines(o,l),this.y.map(function(e){var i=u(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=V(i,2),r=s[0],o=s[1];p>0&&(t.make_path&&t.make_path(e,n,r,t.colors[e.index]),t.makeDatasetUnits(n,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,a,o),t.animate_units(e,a,o)}),M(this.chart_wrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},400)}},{key:"animate_path",value:function(t,e,i){var n=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,n.join("L")))}},{key:"animate_units",value:function(t,e,i){var n=this,a=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&n.elements_to_animate.push(n.animator[a]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,n.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.verticalLine(n,e[a],t[a]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.horizontalLine(n,e[a],t[a]))})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisLabels.length,n=this.y.map(function(t){return{values:t.values}});n.map(function(e,n){e.values.splice(i,0,t[n])});var a=this.xAxisLabels.slice();a.splice(i,0,e),this.updateData(n,a)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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","yUnitPositions","values"].map(function(n){var a=n.slice(0,n.length-1);e[a]=i[n][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.length-1),t!==this.current_index&&(this.current_index=t,a(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return s(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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:"renderComponents",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,n){var a=t.create("div",{className:"progress-bar",inside:e.percentageBar,styles:{background:e.colors[n],width:100*i/e.grand_total+"%"}});e.slices.push(a)})}},{key:"bind_tooltip",value:function(){var t=this;this.slices.map(function(i,n){i.addEventListener("mouseenter",function(){var a=e(t.chart_wrapper),s=e(i),r=s.left-a.left+i.offsetWidth/2,o=s.top-a.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[n]:t.labels[n])+": ",h=(100*t.slice_totals[n]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"renderLegend",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){n&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}]),n}(at),dt=Math.PI/180,ft=function(i){function n(t){B(this,n);var e=q(this,(n.__proto__||Object.getPrototypeOf(n)).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 I(n,i),R(n,[{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 n=0;return t.data.datasets.map(function(t){n+=t.values[i]}),[n,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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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,n=this.centerY,a=this.radius,s=this.clockWise;return"M"+i+" "+n+" L"+(i+t.x)+" "+(n+t.y)+" A "+a+" "+a+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(n+e.y)+" z"}},{key:"renderComponents",value:function(t){var e=this,i=this.radius,a=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=a?-u:u,p=r+=c,d=n.getPositionByAngle(h,i),f=n.getPositionByAngle(p,i),v=t&&s[l],_=void 0,y=void 0;t?(_=v?v.startPosition:d,y=v?v.endPosition:d):(_=d,y=f);var m=e.makeArcPath(_,y),x=g(m,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.drawArea.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:d,endPosition:f,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,f)},650,"easein",null,{d:m}])}),t&&M(this.chart_wrapper,this.svg,this.elements_to_animate)}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,a=n.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+a.x*i+"px,"+a.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,a){if(t){var s=this.colors[i];if(n){P(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=w(s,50);var r=e(this.svg),o=a.pageX-r.left+10,l=a.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 P(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,n=this.curActiveSlice,a=0;a0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){var s=e.colors[a];n&&(t.create("div",{className:"stats",inside:e.stats_wrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*dt)*e,y:Math.cos(t*dt)*e}}}]),n}(at),vt=function(t){function e(t){var i=t.start,n=void 0===i?"":i,a=t.domain,s=void 0===a?"":a,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,d=void 0===p?"":p,f=t.legend_colors,v=void 0===f?[]:f;B(this,e);var _=q(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));_.type="heatmap",_.domain=s,_.subdomain=o,_.data=h,_.discrete_domains=c,_.count_label=d;var y=new Date;return _.start=n||H(y,365),v=v.slice(0,5),_.legend_colors=_.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],_.distribution_size=5,_.translate_x=0,_}return I(e,t),R(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){A(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setupConstants",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()&&H(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&H(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=U(this.first_week_start+"",this.last_week_start+"")+1}},{key:"setWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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=S(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()&&(n=1,this.discrete_domains&&(a=1),this.month_start_points.push(13+12*(e+a))),t=v}return[s,n]}},{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 n=b("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(n)})}},{key:"renderComponents",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"),n=e.target.getAttribute("data-date").split("-"),a=t.month_names[parseInt(n[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 "+a+" "+n[0]+", "+n[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}(at),_t={line:ut,bar:ht,scatter:ct,percentage:pt,heatmap:vt,pie:ft},yt=function t(e){return B(this,t),Y(e.type,arguments[0])};return yt}(); +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 n(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}function a(t,e,i){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0);for(var a in i)n[a]=i[a];return t.dispatchEvent(n)}function s(t){return parseFloat(t.toFixed(2))}function r(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var a=new Array(Math.abs(e)).fill(i);return t=n?a.concat(t):t.concat(a)}function o(t,e){var i=t+6,n=void 0,a=void 0,s="";return"span"===e?(i=-7,n=t+15,a=t+25):"tick"===e&&(i=t,n=6,a=9,s="x-axis-label"),[i,n,a,s]}function l(t,e){var i=void 0,n="",a=0;return"span"===e?(i=t+6,a=-6):"tick"===e&&(i=-6,n="y-axis-label"),[i,-9,n,a]}function h(t,e,i){var n=void 0,a=void 0;return t<=e?(a=t,0===(n=e-t)&&(a-=n=i*G)):(a=e,0===(n=t-e)&&(n=i*G)),[n,a]}function u(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 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 n in e){var a=e[n];if("inside"===n)c(a).appendChild(i);else if("around"===n){var s=c(a);s.parentNode.insertBefore(i,s),i.appendChild(s)}else"styles"===n?"object"===(void 0===a?"undefined":R(a))&&Object.keys(a).map(function(t){i.style[t]=a[t]}):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=a:i.setAttribute(n,a))}return i}function d(t,e){return p("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function f(t,e,i,n){return p("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function v(t,e,i,n){return p("svg",{className:e,inside:t,width:i,height:n})}function _(t){return p("defs",{inside:t})}function y(t,e){return p("g",{className:e,inside:t,transform:arguments.length>2&&void 0!==arguments[2]?arguments[2]:""})}function g(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 m(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e,a=d(t,n),s=[1,.6,.2];return i&&(s=[.4,.2,0]),f(a,"0%",e,s[0]),f(a,"50%",e,s[1]),f(a,"100%",e,s[2]),n}function x(t,e,i,n){var a=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:n,height:n,fill:a};return Object.keys(s).map(function(t){r[t]=s[t]}),p("rect",r)}function b(t,e,i,n){return p("text",{className:t,x:e,y:i,dy:".32em",innerHTML:n})}function k(t){return t>255?255:t<0?0:t}function w(t,e){var i=et(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var a=parseInt(i,16),s=k((a>>16)+e),r=k((a>>8&255)+e),o=k((255&a)+e);return(n?"#":"")+(o|r<<8|s<<16).toString(16)}function A(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function L(t,e,i){if(t!==e){it.includes(t)||console.error("'"+t+"' is not a valid chart type."),nt[e].includes(t)||console.error("'"+e+"' chart cannot be converted to a '"+t+"' chart.");var n=at[e].includes(t);return new gt({parent:i.parent,title:i.title,data:i.data,type:t,height:i.height,colors:n?i.colors:void 0})}}function P(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",a=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:lt[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};a&&(p.type=a);for(var d in p)h.setAttribute(d,p[d]);r.appendChild(h),a?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 M(t,e){var i=[],n=[];e.map(function(t){var e=t[0],a=e.unit.parentNode,s=void 0,r=void 0;t[0]=e.unit;var o=P.apply(void 0,K(t)),l=J(o,2);s=l[0],r=l[1],i.push(r),n.push([s,a]),a.replaceChild(s,e.unit),e.array?e.array[e.index]=r:e.object[e.key]=r});var a=t.cloneNode(!0);return n.map(function(t,n){t[1].replaceChild(i[n],t[0]),e[n][0]=i[n]}),a}function N(t,e,i){if(0!==i.length){var n=M(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout(function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))},rt)}}function O(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 T(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),a=i-n,s=a,r=1;a>5&&(a%2!=0&&(a=++i-n),s=a/2,r=2),a<=2&&(r=a/(s=4)),0===a&&(s=5,r=1);for(var o=[],l=0;l<=s;l++)o.push(n+r*l);return o}function W(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=O(t),n=J(i,2),a=n[0],s=n[1],r=e?e/Math.pow(10,s):0,o=T(a=a.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=W(t),n=i[1]-i[0],a=0,s=1;a1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,K(t)),a=Math.min.apply(Math,K(t)),s=[];if(n>=0&&a>=0)O(n)[1],s=i?W(n,a):W(n);else if(n>0&&a<0){var r=Math.abs(a);n>=r?(O(n)[1],s=e(n,r)):(O(r)[1],s=e(r,n).map(function(t){return-1*t}))}else if(n<=0&&a<=0){var o=Math.abs(a),l=Math.abs(n);O(o)[1],s=(s=i?W(o,l):W(o)).reverse().map(function(t){return-1*t})}return s}function S(t,e){for(var i=Math.max.apply(Math,K(t)),n=1/(e-1),a=[],s=0;s9?"":"0")+e,(i>9?"":"0")+i,t.getFullYear()].join("-")}function U(t,e){return Math.ceil(Y(t,e)/7)}function Y(t,e){return(z(e)-z(t))/864e5}function H(t,e){t.setDate(t.getDate()+e)}function I(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1];return yt[t]?new yt[t](e):new ct(e)}!function(t,e){if("undefined"==typeof document)return e;t=t||"";var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",i.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.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 R="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},X=(function(){function t(t){this.value=t}function e(e){function i(t,e){return new Promise(function(i,a){var o={key:t,arg:e,resolve:i,reject:a,next:null};r?r=r.next=o:(s=r=o,n(t,e))})}function n(i,s){try{var r=e[i](s),o=r.value;o instanceof t?Promise.resolve(o.value).then(function(t){n("next",t)},function(t){n("throw",t)}):a(r.done?"return":"normal",r.value)}catch(t){a("throw",t)}}function a(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)?n(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")}),F=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,n){var a=e.colors[n]||"black",s=t.create("li",{styles:{"border-top":"3px solid "+a},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 n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,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]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=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=n,this.list_values=a,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}(),G=.01,Q=function(){var t=function(t,e,i,n,a,s){this.totalHeight=t,this.totalWidth=e,this.zeroLine=i,this.avgUnitWidth=n,this.xAxisMode=a,this.yAxisMode=s};return t.prototype={bar:function(t,e,i,n,a,s,r){var o=this.avgUnitWidth-i.spaceWidth,l=o/r,u=t-o/2+l*s,c=h(e,this.zeroLine,this.totalHeight),d=J(c,2),f=d[0];return p("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:u,y:d[1],width:l,height:f})},dot:function(t,e,i,n,a){return p("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i.radius})},xLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisMode,n=o(this.totalHeight,i),a=J(n,4),s=a[0],r=a[1],l=a[2],h=a[3],u=p("line",{x1:0,x2:0,y1:s,y2:r}),c=p("text",{className:"x-value-text",x:0,y:l,dy:".71em",innerHTML:e}),d=p("g",{className:"tick "+h,transform:"translate("+t+", 0)"});return d.appendChild(u),d.appendChild(c),d},yLine:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.yAxisMode,n=l(this.totalWidth,i),a=J(n,4),s=a[0],r=a[1],o=a[2],h=p("line",{className:"",x1:a[3],x2:s,y1:0,y2:0}),u=p("text",{className:"y-value-text",x:r,y:0,dy:".32em",innerHTML:e+""}),c=p("g",{className:"tick "+o,transform:"translate(0, "+t+")","stroke-opacity":1});return c.appendChild(h),c.appendChild(u),c},xRegion:function(t,e,i){},yRegion:function(t,e,i){}},t}(),Z={"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"},tt=["light-blue","blue","violet","red","orange","yellow","green","light-green","purple","magenta"],et=function(t){return Z[t]||t},it=["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:[]},at={bar:["line","scatter"],line:["scatter","bar"],pie:["percentage"],scatter:["line","bar"],percentage:["pie"],heatmap:[]},st=function(){function e(t){t.height;var i=t.title,n=void 0===i?"":i,a=t.subtitle,s=void 0===a?"":a,r=(t.colors,t.isNavigable),o=void 0===r?0:r,l=(t.type,t.parent);X(this,e),this.rawChartArgs=arguments[0],this.parent="string"==typeof l?document.querySelector(l):l,this.title=n,this.subtitle=s,this.isNavigable=o,this.isNavigable&&(this.currentIndex=0),this.setupConfiguration()}return F(e,[{key:"setupConfiguration",value:function(){this.setColors(),this.setMargins(),this.config={showTooltip:1,showLegend:1,isNavigable:0}}},{key:"setColors",value:function(){var t=this.rawChartArgs,e="percentage"===t.type||"pie"===t.type?t.data.labels:t.data.datasets;!t.colors||e&&t.colors.length0&&void 0!==arguments[0]&&arguments[0];this.calc(),this.setupRenderer(),this.setupComponents(),this.makeChartArea(),this.makeLayers(),this.renderComponents(),this.renderLegend(),this.setupNavigation(t),t&&this.update(this.data)}},{key:"bindWindowEvents",value:function(){var t=this;window.addEventListener("resize",function(){return t.draw()}),window.addEventListener("orientationchange",function(){return t.draw()})}},{key:"calcWidth",value:function(){this.baseWidth=n(this.parent)-0,this.width=this.baseWidth-2*this.translateX}},{key:"setupConstants",value:function(){}},{key:"calc",value:function(){this.calcWidth(),this.reCalc()}},{key:"setupRenderer",value:function(){}},{key:"setupComponents",value:function(){this.components=[]}},{key:"makeContainer",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.chartWrapper=this.container.querySelector(".frappe-chart"),this.statsWrapper=this.container.querySelector(".graph-stats-container")}},{key:"makeChartArea",value:function(){this.svg=v(this.chartWrapper,"chart",this.baseWidth,this.baseHeight),this.svg_defs=_(this.svg),this.drawArea=y(this.svg,this.type+"-chart","translate("+this.translateX+", "+this.translateY+")")}},{key:"makeLayers",value:function(){var t=this;this.components.forEach(function(e){e.layer=t.makeLayer(e.layerClass)})}},{key:"calculateValues",value:function(){}},{key:"renderComponents",value:function(){this.components.forEach(function(t){t.store=t.make.apply(t,K(t.makeArgs)),t.layer.textContent="",t.store.forEach(function(e){t.layer.appendChild(e)})})}},{key:"update",value:function(){this.reCalc(),this.reRender()}},{key:"reCalc",value:function(){}},{key:"reRender",value:function(){var t=this;if(!(!(arguments.length>0&&void 0!==arguments[0])||arguments[0]))return void this.renderComponents();this.animateComponents(),setTimeout(function(){t.renderComponents()},400)}},{key:"animateComponents",value:function(){this.intermedValues=this.calcIntermediateValues(),this.components.forEach(function(t){})}},{key:"calcInitStage",value:function(){}},{key:"makeTooltip",value:function(){this.tip=new $({parent:this.chartWrapper,colors:this.colors}),this.bindTooltip()}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isNavigable||(this.makeOverlay(),e&&(this.bindOverlay(),document.addEventListener("keydown",function(e){i(t.chartWrapper)&&("37"==(e=e||window.event).keyCode?t.onLeftArrow():"39"==e.keyCode?t.onRightArrow():"38"==e.keyCode?t.onUpArrow():"40"==e.keyCode?t.onDownArrow():"13"==e.keyCode&&t.onEnterKey())})))}},{key:"makeOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bind_units",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"updateCurrentDataPoint",value:function(){}},{key:"makeLayer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return y(this.drawArea,t,e)}},{key:"getDifferentChart",value:function(t){return L(t,this.type,this.rawChartArgs)}}]),e}(),rt=250,ot=function(){var t=function(t,e,i,n){this.totalHeight=t,this.totalWidth=e,this.avgUnitWidth=n,this.zeroLine=i};return t.prototype={bar:function(t,e,i,n,a){var s=e-this.avgUnitWidth/4,r=this.avgUnitWidth/2/a,o=h(i,this.zeroLine,this.totalHeight),l=J(o,2);return e=s+r*n,[t,{width:r,height:l[0],x:e,y:l[1]},350,"easein"]},dot:function(t,e,i){return[t,{cx:e,cy:i},350,"easein"]},path:function(t,e){var i=[],n=[{unit:t.path,object:t,key:"path"},{d:"M"+e},650,"easein"];if(i.push(n),t.regionPath){var a="0,"+this.zeroLine+"L",s="L"+this.totalWidth+", "+this.zeroLine,r=[{unit:t.regionPath,object:t,key:"regionPath"},{d:"M"+a+e+s},650,"easein"];i.push(r)}return i},translate:function(t,e,i,n){return[{unit:t,array:[0],index:0},{transform:i.join(", ")},n,"easein","translate",{transform:e.join(", ")}]},verticalLine:function(t,e,i){return this.translate(t,[i,0],[e,0],350)},horizontalLine:function(t,e,i){return this.translate(t,[0,i],[0,e],350)}},t}(),lt={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},ht=function(t){function i(t){X(this,i);var e=V(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t));return 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 q(i,t),F(i,[{key:"parseData",value:function(){var t=this.rawChartArgs;return this.xAxisLabels=t.data.labels||[],this.y=t.data.datasets||[],this.y.forEach(function(t,e){t.index=e},this),!0}},{key:"reCalc",value:function(){this.oldValues=["everything"],this.datasetsLabels=[],this.datasetsValues=[[[12,34,68],[10,5,46]],[[20,20,20]]],this.yAxisPositions=[this.height,this.height/2,0],this.yAxisLabels=["0","5","10"],this.xPositions=[0,this.width/2,this.width],this.xAxisLabels=["0","5","10"]}},{key:"calcInitStage",value:function(){}},{key:"calcIntermediateValues",value:function(){}},{key:"getRenderer",value:function(){return new Q(this.height,this.width,this.zero_line,this.avg_unit_width,this.xAxisMode,this.yAxisMode)}},{key:"setupComponents",value:function(){var t=this,e=this.getRenderer();this.yAxis={layerClass:"y axis",layer:void 0,make:t.makeYLines,makeArgs:[e,t.yAxisPositions,t.yAxisLabels],store:[],animate:t.animateYLines},this.xAxis={layerClass:"x axis",layer:void 0,make:t.makeXLines,makeArgs:[e,t.xPositions,t.xAxisLabels],store:[],animate:t.animateXLines},this.yMarkerLines={},this.xMarkerLines={},this.components=[this.yAxis,this.xAxis]}},{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.xPositions&&(this.x_old_axis_positions=this.xPositions.slice()),this.xPositions=this.xAxisLabels.map(function(e,i){return s(t.x_offset+i*t.avg_unit_width)}),this.x_old_axis_positions||(this.x_old_axis_positions=this.xPositions.slice())}},{key:"setup_y",value:function(){var t=this;this.yAxisLabels&&(this.y_old_axis_values=this.yAxisLabels.slice());var e=this.get_all_y_values();this.y_sums&&this.y_sums.length>0&&(e=e.concat(this.y_sums)),this.yAxisLabels=D(e,"line"===this.type),this.y_old_axis_values||(this.y_old_axis_values=this.yAxisLabels.slice());var i=this.yAxisLabels,n=i[i.length-1]-i[0];this.multiplier&&(this.old_multiplier=this.multiplier),this.multiplier=this.height/n,this.old_multiplier||(this.old_multiplier=this.multiplier);var a=i[1]-i[0],s=a*this.multiplier,r=void 0;r=i.indexOf(0)>=0?i.indexOf(0):i[0]>0?-1*i[0]/a:-1*i[i.length-1]/a+(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.yAxisPositions&&(this.oldYAxisPositions=this.yAxisPositions),this.yAxisPositions=this.yAxisLabels.map(function(e){return t.zero_line-e*t.multiplier}),this.oldYAxisPositions||(this.oldYAxisPositions=this.yAxisPositions)}},{key:"makeXLines",value:function(t,e,i){return e.map(function(e,n){return t.xLine(e,i[n])})}},{key:"makeYLines",value:function(t,e,i){return e.map(function(e,n){return t.yLine(e,i[n])})}},{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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e),t.calcYDependencies()}):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.xPositions,e.yUnitPositions,t.colors[i]),t.makeUnits(e)})}},{key:"draw_new_graph_and_animate",value:function(){var t=this,e=[];this.y.map(function(i,n){i.yUnitPositions=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.xPositions,i.yUnitPositions,t.colors[n]),t.makeUnits(i)}),setTimeout(function(){t.updateData(e)},350)}},{key:"setupNavigation",value:function(t){var e=this;t?setTimeout(function(){B(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",e).call(e,t)},500):B(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"setupNavigation",this).call(this,t)}},{key:"makeUnits",value:function(t){this.makeDatasetUnits(this.xPositions,t.yUnitPositions,this.colors[t.index],t.index,this.y.length)}},{key:"makeDatasetUnits",value:function(t,e,i,n,a,s,r,o){s||(s=this.svg_units_groups[n]),r||(r=this.y[n].svg_units),o||(o=this.unit_args),s.textContent="",r.length=0;var l=new Q(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,n,a);s.appendChild(u),r.push(u)}),this.isNavigable&&this.bind_units(r)}},{key:"bindTooltip",value:function(){var t=this;this.chartWrapper.addEventListener("mousemove",function(i){var n=e(t.chartWrapper),a=i.pageX-n.left-t.translateX;i.pageY-n.top-t.translateY=0;a--){var s=this.xPositions[a];if(t>s-this.avg_unit_width/2){var r=s+this.translateX,o=this.y_min_tops[a]+this.translateY,l=i[a],h=this.y.map(function(t,i){return{title:t.title,value:n?e.format_tooltip_y(t.values[a]):t.values[a],color:e.colors[i]}});this.tip.set_values(r,o,l,"",h),this.tip.show_tip();break}}}}},{key:"updateData",value:function(t,e){e||(e=this.xAxisLabels),this.updating=!0,this.old_x_values=this.xAxisLabels.slice(),this.old_y_axis_tops=this.y.map(function(t){return t.yUnitPositions.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.xAxisLabels=e),this.setup_x(),this.setup_y(),this.calcYDependencies(),this.animator=new ot(this.height,this.width,this.zero_line,this.avg_unit_width),this.animate_graphs(),this.updating=!1}},{key:"animate_graphs",value:function(){var t=this;this.elements_to_animate=[];var e=u(this.x_old_axis_positions.slice(),this.xPositions.slice()),i=J(e,2),n=i[0],a=i[1],s=u(this.oldYAxisPositions.slice(),this.yAxisPositions.slice()),r=J(s,2),o=r[0],l=r[1],h=this.xAxisLabels.slice(),c=this.yAxisLabels.slice(),p=this.xPositions.slice().length-this.x_old_axis_positions.slice().length;p>0&&this.makeXLines(n,h),this.makeYLines(o,c),0!==p&&this.animateXLines(n,a),this.animateYLines(o,l),this.y.map(function(e){var i=u(t.old_y_axis_tops[e.index].slice(),e.yUnitPositions.slice()),s=J(i,2),r=s[0],o=s[1];p>0&&(t.make_path&&t.make_path(e,n,r,t.colors[e.index]),t.makeDatasetUnits(n,r,t.colors[e.index],e.index,t.y.length)),e.path&&t.animate_path(e,a,o),t.animate_units(e,a,o)}),N(this.chartWrapper,this.svg,this.elements_to_animate),setTimeout(function(){t.y.map(function(e){t.make_path&&t.make_path(e,t.xPositions,e.yUnitPositions,t.colors[e.index]),t.makeUnits(e),t.makeYLines(t.yAxisPositions,t.yAxisLabels),t.makeXLines(t.xPositions,t.xAxisLabels)})},400)}},{key:"animate_path",value:function(t,e,i){var n=i.map(function(t,i){return e[i]+","+t});this.elements_to_animate=this.elements_to_animate.concat(this.animator.path(t,n.join("L")))}},{key:"animate_units",value:function(t,e,i){var n=this,a=this.unit_args.type;t.svg_units.map(function(s,r){void 0!==e[r]&&void 0!==i[r]&&n.elements_to_animate.push(n.animator[a]({unit:s,array:t.svg_units,index:r},e[r],i[r],t.index,n.y.length))})}},{key:"animateXLines",value:function(t,e){var i=this;this.xAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.verticalLine(n,e[a],t[a]))})}},{key:"animateYLines",value:function(t,e){var i=this;this.yAxisLines.map(function(n,a){i.elements_to_animate.push(i.animator.horizontalLine(n,e[a],t[a]))})}},{key:"animateYAnnotations",value:function(){}},{key:"add_data_point",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.xAxisLabels.length,n=this.y.map(function(t){return{values:t.values}});n.map(function(e,n){e.values.splice(i,0,t[n])});var a=this.xAxisLabels.slice();a.splice(i,0,e),this.updateData(n,a)}},{key:"remove_data_point",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.xAxisLabels.length-1;if(!(this.xAxisLabels.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.xAxisLabels.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.currentIndex,e={index:t},i=this.y[0];return["svg_units","yUnitPositions","values"].map(function(n){var a=n.slice(0,n.length-1);e[a]=i[n][t]}),e.label=this.xAxisLabels[t],e}},{key:"updateCurrentDataPoint",value:function(t){(t=parseInt(t))<0&&(t=0),t>=this.xAxisLabels.length&&(t=this.xAxisLabels.length-1),t!==this.currentIndex&&(this.currentIndex=t,a(this.parent,"data-select",this.getDataPoint()))}},{key:"set_avg_unit_width_and_x_offset",value:function(){this.avg_unit_width=this.width/(this.xAxisLabels.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:"calcYDependencies",value:function(){var t=this;this.y_min_tops=new Array(this.xAxisLabels.length).fill(9999),this.y.map(function(e){e.yUnitPositions=e.values.map(function(e){return s(t.zero_line-e*t.multiplier)}),e.yUnitPositions.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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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:"renderComponents",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,n){var a=t.create("div",{className:"progress-bar",inside:e.percentageBar,styles:{background:e.colors[n],width:100*i/e.grand_total+"%"}});e.slices.push(a)})}},{key:"bindTooltip",value:function(){var t=this;this.slices.map(function(i,n){i.addEventListener("mouseenter",function(){var a=e(t.chartWrapper),s=e(i),r=s.left-a.left+i.offsetWidth/2,o=s.top-a.top-6,l=(t.formatted_labels&&t.formatted_labels.length>0?t.formatted_labels[n]:t.labels[n])+": ",h=(100*t.slice_totals[n]/t.grand_total).toFixed(1);t.tip.set_values(r,o,l,h+"%"),t.tip.show_tip()})})}},{key:"renderLegend",value:function(){var e=this,i=this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){n&&(t.create("div",{className:"stats",inside:e.statsWrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}]),n}(st),ft=Math.PI/180,vt=function(i){function n(t){X(this,n);var e=V(this,(n.__proto__||Object.getPrototypeOf(n)).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 q(n,i),F(n,[{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 n=0;return t.data.datasets.map(function(t){n+=t.values[i]}),[n,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 n=0;e.slice(this.max_slices-1).map(function(t){n+=t[0]}),i.push([n,"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,n=this.centerY,a=this.radius,s=this.clockWise;return"M"+i+" "+n+" L"+(i+t.x)+" "+(n+t.y)+" A "+a+" "+a+" 0 0 "+(s?1:0)+" "+(i+e.x)+" "+(n+e.y)+" z"}},{key:"renderComponents",value:function(t){var e=this,i=this.radius,a=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=a?-u:u,p=r+=c,d=n.getPositionByAngle(h,i),f=n.getPositionByAngle(p,i),v=t&&s[l],_=void 0,y=void 0;t?(_=v?v.startPosition:d,y=v?v.endPosition:d):(_=d,y=f);var m=e.makeArcPath(_,y),x=g(m,"pie-path","none",e.colors[l]);x.style.transition="transform .3s;",e.drawArea.appendChild(x),e.slices.push(x),e.slicesProperties.push({startPosition:d,endPosition:f,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,f)},650,"easein",null,{d:m}])}),t&&N(this.chartWrapper,this.svg,this.elements_to_animate)}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,a=n.getPositionByAngle(t.startAngle+t.angle/2,e);return"translate3d("+a.x*i+"px,"+a.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,a){if(t){var s=this.colors[i];if(n){C(t,this.calTranslateByAngle(this.slicesProperties[i])),t.style.fill=w(s,50);var r=e(this.svg),o=a.pageX-r.left+10,l=a.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,n=this.curActiveSlice,a=0;a0?this.formatted_labels:this.labels;this.legend_totals.map(function(n,a){var s=e.colors[a];n&&(t.create("div",{className:"stats",inside:e.statsWrapper}).innerHTML='\n\t\t\t\t\t\n\t\t\t\t\t'+i[a]+":\n\t\t\t\t\t"+n+"\n\t\t\t\t")})}}],[{key:"getPositionByAngle",value:function(t,e){return{x:Math.sin(t*ft)*e,y:Math.cos(t*ft)*e}}}]),n}(st),_t=function(t){function e(t){var i=t.start,n=void 0===i?"":i,a=t.domain,s=void 0===a?"":a,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,d=void 0===p?"":p,f=t.legend_colors,v=void 0===f?[]:f;X(this,e);var _=V(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,arguments[0]));_.type="heatmap",_.domain=s,_.subdomain=o,_.data=h,_.discrete_domains=c,_.count_label=d;var y=new Date;return _.start=n||H(y,365),v=v.slice(0,5),_.legend_colors=_.validate_colors(v)?v:["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"],_.distribution_size=5,_.translateX=0,_}return q(e,t),F(e,[{key:"validate_colors",value:function(t){if(t.length<5)return 0;var e=1;return t.forEach(function(t){A(t)||(e=0,console.warn('"'+t+'" is not a valid color.'))},this),e}},{key:"setupConstants",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()&&H(this.first_week_start,-1*this.first_week_start.getDay()),7!==this.last_week_start.getDay()&&H(this.last_week_start,-1*this.last_week_start.getDay()),this.no_of_cols=U(this.first_week_start+"",this.last_week_start+"")+1}},{key:"calcWidth",value:function(){this.baseWidth=12*(this.no_of_cols+3),this.discrete_domains&&(this.baseWidth+=144)}},{key:"setupLayers",value:function(){this.domain_label_group=this.makeLayer("domain-label-group chart-label"),this.data_groups=this.makeLayer("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=S(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()&&(n=1,this.discrete_domains&&(a=1),this.month_start_points.push(13+12*(e+a))),t=v}return[s,n]}},{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 n=b("y-value-text",e+12,10,t.month_names[t.months[i]].substring(0,3));t.domain_label_group.appendChild(n)})}},{key:"renderComponents",value:function(){Array.prototype.slice.call(this.container.querySelectorAll(".graph-stats-container, .sub-title, .title")).map(function(t){t.style.display="None"}),this.chartWrapper.style.marginTop="0px",this.chartWrapper.style.paddingTop="0px"}},{key:"bindTooltip",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"),n=e.target.getAttribute("data-date").split("-"),a=t.month_names[parseInt(n[1])-1].substring(0,3),s=t.chartWrapper.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 "+a+" "+n[0]+", "+n[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.bindTooltip()}}]),e}(st),yt={line:ct,bar:ut,scatter:pt,percentage:dt,heatmap:_t,pie:vt},gt=function t(e){return X(this,t),I(e.type,arguments[0])};return gt}(); diff --git a/docs/assets/js/index.js b/docs/assets/js/index.js index f6c0bad..fcc8487 100755 --- a/docs/assets/js/index.js +++ b/docs/assets/js/index.js @@ -50,7 +50,7 @@ let bar_composite_chart = new Chart ({ type: 'bar', height: 180, colors: ['orange'], - is_navigable: 1, + isNavigable: 1, is_series: 1 // region_fill: 1 }); @@ -110,7 +110,7 @@ Array.prototype.slice.call( let btn = e.target; let type = btn.getAttribute('data-type'); - let newChart = type_chart.get_different_chart(type); + let newChart = type_chart.getDifferentChart(type); if(newChart){ type_chart = newChart; } @@ -300,7 +300,7 @@ let events_chart = new Chart({ type: 'bar', height: 250, colors: ['grey'], - is_navigable: 1, + isNavigable: 1, }); let data_div = document.querySelector('.chart-events-data'); diff --git a/docs/index.html b/docs/index.html index d3a6094..d2a6ec8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -205,7 +205,7 @@
                ...
                   type: 'bar',     // Bar Chart specific properties:
              -    is_navigable: 1, // Navigate across bars; default 0
              +    isNavigable: 1, // Navigate across bars; default 0
                 ...
               
                 chart.parent.addEventListener('data-select', (e) => {
              diff --git a/rollup.config.js b/rollup.config.js
              index ea315fe..42a57c7 100644
              --- a/rollup.config.js
              +++ b/rollup.config.js
              @@ -15,7 +15,7 @@ import pkg from './package.json';
               
               export default [
               	{
              -		input: 'src/js/charts.js',
              +		input: 'src/js/chart.js',
               		output: [
               			{
               				file: 'docs/assets/js/frappe-charts.min.js',
              @@ -56,7 +56,7 @@ export default [
               		]
               	},
               	{
              -		input: 'src/js/charts.js',
              +		input: 'src/js/chart.js',
               		output: [
               			{
               				file: pkg.main,
              @@ -96,7 +96,7 @@ export default [
               		],
               	},
               	{
              -		input: 'src/js/charts.js',
              +		input: 'src/js/chart.js',
               		output: [
               			{
               				file: pkg.src,
              diff --git a/src/js/charts.js b/src/js/chart.js
              similarity index 100%
              rename from src/js/charts.js
              rename to src/js/chart.js
              diff --git a/src/js/charts/AxisChart.js b/src/js/charts/AxisChart.js
              index 242c1bf..14b8ee3 100644
              --- a/src/js/charts/AxisChart.js
              +++ b/src/js/charts/AxisChart.js
              @@ -1,5 +1,5 @@
               import BaseChart from './BaseChart';
              -import { get_offset, fire } from '../utils/dom';
              +import { getOffset, fire } from '../utils/dom';
               import { AxisChartRenderer } from '../utils/draw';
               import { equilizeNoOfElements } from '../utils/draw-utils';
               import { Animator } from '../utils/animate';
              @@ -16,9 +16,10 @@ export default class AxisChart extends BaseChart {
               		this.zero_line = this.height;
               	}
               
              -	validateAndPrepareData() {
              -		this.xAxisLabels = this.data.labels || [];
              -		this.y = this.data.datasets || [];
              +	parseData() {
              +		let args = this.rawChartArgs;
              +		this.xAxisLabels = args.data.labels || [];
              +		this.y = args.data.datasets || [];
               
               		this.y.forEach(function(d, i) {
               			d.index = i;
              @@ -26,25 +27,67 @@ export default class AxisChart extends BaseChart {
               		return true;
               	}
               
              -	setupEmptyValues() {
              +	reCalc() {
              +		// examples:
              +
              +		// [A] Dimension change:
              +
              +		// [B] Data change:
              +		// 1. X values update
              +		// 2. Y values update
              +
              +
              +		// Aka all the values(state), these all will be documented in an old values object
              +
              +		// Backup first!
              +		this.oldValues = ["everything"];
              +
              +		// extracted, raw args will remain in their own object
              +		this.datasetsLabels = [];
              +		this.datasetsValues = [[[12, 34, 68], [10, 5, 46]], [[20, 20, 20]]];
              +
              +		// CALCULATION: we'll need the first batch of calcs
              +		// List of what will happen:
              +			// this.xOffset = 0;
              +			// this.unitWidth = 0;
              +			// this.scaleMultipliers = [];
              +			// this.datasetsPoints =
              +
              +		// Now, the function calls
              +
              +		// var merged = [].concat(...arrays)
              +
              +
              +
              +		// INIT
              +		// axes
               		this.yAxisPositions = [this.height, this.height/2, 0];
               		this.yAxisLabels = ['0', '5', '10'];
               
               		this.xPositions = [0, this.width/2, this.width];
               		this.xAxisLabels = ['0', '5', '10'];
              +
              +
              +	}
              +
              +	calcInitStage() {
              +		// will borrow from the full recalc function
              +	}
              +
              +	calcIntermediateValues() {
              +		//
               	}
               
               	// this should be inherent in BaseChart
               	getRenderer() {
               		// These args are basically the current state/config of the chart,
               		// with constant and alive params mixed
              -
              -
               		return new AxisChartRenderer(this.height, this.width,
               			this.zero_line, this.avg_unit_width, this.xAxisMode, this.yAxisMode);
               	}
               
               	setupComponents() {
              +		// Must have access to all current data things
               		let self = this;
               		let renderer = this.getRenderer();
               		this.yAxis = {
              @@ -53,6 +96,7 @@ export default class AxisChart extends BaseChart {
               			make: self.makeYLines,
               			makeArgs: [renderer, self.yAxisPositions, self.yAxisLabels],
               			store: [],
              +			// animate? or update? will come to while implementing
               			animate: self.animateYLines,
               			// indexed: 1 // ?? As per datasets?
               		};
              @@ -66,6 +110,16 @@ export default class AxisChart extends BaseChart {
               			store: [],
               			animate: self.animateXLines
               		};
              +		// Indexed according to dataset
              +		// this.dataUnits = {
              +		// 	layerClass: 'y marker axis',
              +		// 	layer: undefined,
              +		// 	make: makeXLines,
              +		// 	makeArgs: [this.xPositions, this.xAxisLabels],
              +		// 	store: [],
              +		// 	animate: animateXLines,
              +		// 	indexed: 1
              +		// };
               		this.yMarkerLines = {
               			// layerClass: 'y marker axis',
               			// layer: undefined,
              @@ -78,24 +132,13 @@ export default class AxisChart extends BaseChart {
               			// layerClass: 'x marker axis',
               			// layer: undefined,
               			// make: makeXMarkerLines,
              -			// makeArgs: [this.yMarkerPositions, this.xMarker],
              +			// makeArgs: [this.xMarkerPositions, this.xMarker],
               			// store: [],
               			// animate: animateXMarkerLines
               		};
               
               		// Marker Regions
               
              -		// Indexed according to dataset
              -		this.dataUnits = {
              -			layerClass: 'y marker axis',
              -			layer: undefined,
              -			// make: makeXLines,
              -			// makeArgs: [this.xPositions, this.xAxisLabels],
              -			// store: [],
              -			// animate: animateXLines,
              -			indexed: 1
              -		};
              -
               		this.components = [
               			this.yAxis,
               			this.xAxis,
              @@ -281,19 +324,19 @@ export default class AxisChart extends BaseChart {
               			units_array.push(data_unit);
               		});
               
              -		if(this.is_navigable) {
              +		if(this.isNavigable) {
               			this.bind_units(units_array);
               		}
               	}
               
              -	bind_tooltip() {
              +	bindTooltip() {
               		// TODO: could be in tooltip itself, as it is a given functionality for its parent
              -		this.chart_wrapper.addEventListener('mousemove', (e) => {
              -			let offset = get_offset(this.chart_wrapper);
              -			let relX = e.pageX - offset.left - this.translate_x;
              -			let relY = e.pageY - offset.top - this.translate_y;
              +		this.chartWrapper.addEventListener('mousemove', (e) => {
              +			let offset = getOffset(this.chartWrapper);
              +			let relX = e.pageX - offset.left - this.translateX;
              +			let relY = e.pageY - offset.top - this.translateY;
               
              -			if(relY < this.height + this.translate_y * 2) {
              +			if(relY < this.height + this.translateY * 2) {
               				this.mapTooltipXPosition(relX);
               			} else {
               				this.tip.hide_tip();
              @@ -315,8 +358,8 @@ export default class AxisChart extends BaseChart {
               			let x_val = this.xPositions[i];
               			// let delta = i === 0 ? this.avg_unit_width : x_val - this.xPositions[i-1];
               			if(relX > x_val - this.avg_unit_width/2) {
              -				let x = x_val + this.translate_x;
              -				let y = this.y_min_tops[i] + this.translate_y;
              +				let x = x_val + this.translateX;
              +				let y = this.y_min_tops[i] + this.translateY;
               
               				let title = titles[i];
               				let values = this.y.map((set, j) => {
              @@ -408,7 +451,7 @@ export default class AxisChart extends BaseChart {
               			this.animate_units(d, newX, newY);
               		});
               
              -		runSMILAnimation(this.chart_wrapper, this.svg, this.elements_to_animate);
              +		runSMILAnimation(this.chartWrapper, this.svg, this.elements_to_animate);
               
               		setTimeout(() => {
               			this.y.map(d => {
              @@ -483,7 +526,7 @@ export default class AxisChart extends BaseChart {
               		this.updateData(newY, newX);
               	}
               
              -	getDataPoint(index=this.current_index) {
              +	getDataPoint(index=this.currentIndex) {
               		// check for length
               		let data_point = {
               			index: index
              @@ -501,8 +544,8 @@ export default class AxisChart extends BaseChart {
               		index = parseInt(index);
               		if(index < 0) index = 0;
               		if(index >= this.xAxisLabels.length) index = this.xAxisLabels.length - 1;
              -		if(index === this.current_index) return;
              -		this.current_index = index;
              +		if(index === this.currentIndex) return;
              +		this.currentIndex = index;
               		fire(this.parent, "data-select", this.getDataPoint());
               	}
               
              @@ -534,7 +577,7 @@ export default class AxisChart extends BaseChart {
               				}
               			});
               		});
              -		// this.chart_wrapper.removeChild(this.tip.container);
              +		// this.chartWrapper.removeChild(this.tip.container);
               		// this.make_tooltip();
               	}
               }
              diff --git a/src/js/charts/BarChart.js b/src/js/charts/BarChart.js
              index 1da5f32..b6f2967 100644
              --- a/src/js/charts/BarChart.js
              +++ b/src/js/charts/BarChart.js
              @@ -21,7 +21,7 @@ export default class BarChart extends AxisChart {
               		};
               	}
               
              -	// make_overlay() {
              +	// makeOverlay() {
               	// 	// Just make one out of the first element
               	// 	let index = this.xAxisLabels.length - 1;
               	// 	let unit = this.y[0].svg_units[index];
              @@ -36,7 +36,7 @@ export default class BarChart extends AxisChart {
               	// 	this.drawArea.appendChild(this.overlay);
               	// }
               
              -	// bind_overlay() {
              +	// bindOverlay() {
               	// 	// on event, update overlay
               	// 	this.parent.addEventListener('data-select', (e) => {
               	// 		this.update_overlay(e.svg_unit);
              @@ -66,12 +66,12 @@ export default class BarChart extends AxisChart {
               		this.overlay.style.opacity = '0.4';
               	}
               
              -	on_left_arrow() {
              -		this.updateCurrentDataPoint(this.current_index - 1);
              +	onLeftArrow() {
              +		this.updateCurrentDataPoint(this.currentIndex - 1);
               	}
               
              -	on_right_arrow() {
              -		this.updateCurrentDataPoint(this.current_index + 1);
              +	onRightArrow() {
              +		this.updateCurrentDataPoint(this.currentIndex + 1);
               	}
               
               	set_avg_unit_width_and_x_offset() {
              diff --git a/src/js/charts/BaseChart.js b/src/js/charts/BaseChart.js
              index 02d4a2f..5439e89 100644
              --- a/src/js/charts/BaseChart.js
              +++ b/src/js/charts/BaseChart.js
              @@ -3,28 +3,7 @@ import { $, isElementInViewport, getElementContentWidth } from '../utils/dom';
               import { makeSVGContainer, makeSVGDefs, makeSVGGroup } from '../utils/draw';
               import { getStringWidth } from '../utils/helpers';
               import { getColor, DEFAULT_COLORS } from '../utils/colors';
              -import Chart from '../charts';
              -
              -const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];
              -
              -const 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: []
              -};
              -
              -// Needs structure as per only labels/datasets
              -const COLOR_COMPATIBLE_CHARTS = {
              -	bar: ['line', 'scatter'],
              -	line: ['scatter', 'bar'],
              -	pie: ['percentage'],
              -	scatter: ['line', 'bar'],
              -	percentage: ['pie'],
              -	heatmap: []
              -};
              +import { getDifferentChart } from '../config';
               
               export default class BaseChart {
               	constructor({
              @@ -34,34 +13,33 @@ export default class BaseChart {
               		subtitle = '',
               		colors = [],
               
              -		is_navigable = 0,
              +		isNavigable = 0,
               
               		type = '',
               
               		parent,
               		data
               	}) {
              -		this.raw_chart_args = arguments[0];
              +		this.rawChartArgs = arguments[0];
               
               		this.parent = typeof parent === 'string' ? document.querySelector(parent) : parent;
               		this.title = title;
               		this.subtitle = subtitle;
               
              -		this.data = data;
              -
              -		this.is_navigable = is_navigable;
              -		if(this.is_navigable) {
              -			this.current_index = 0;
              +		this.isNavigable = isNavigable;
              +		if(this.isNavigable) {
              +			this.currentIndex = 0;
               		}
               
              -		this.setupConfiguration(arguments[0]);
              +		this.setupConfiguration();
               	}
               
              -	setupConfiguration(args) {
              +	setupConfiguration() {
               		// Make a this.config, that has stuff like showTooltip,
               		// showLegend, which then all functions will check
              -		this.setColors(args.colors, args.type);
              -		this.set_margins(args.height);
              +
              +		this.setColors();
              +		this.setMargins();
               
               		this.config = {
               			showTooltip: 1,
              @@ -70,40 +48,54 @@ export default class BaseChart {
               		};
               	}
               
              -	setColors(colors, type) {
              -		this.colors = colors;
              +	setColors() {
              +		let args = this.rawChartArgs;
               
              -		// Needs structure as per only labels/datasets
              -		const list = type === 'percentage' || type === 'pie'
              -			? this.data.labels
              -			: this.data.datasets;
              +		// Needs structure as per only labels/datasets, from config
              +		const list = args.type === 'percentage' || args.type === 'pie'
              +			? args.data.labels
              +			: args.data.datasets;
               
              -		if(!this.colors || (list && this.colors.length < list.length)) {
              +		if(!args.colors || (list && args.colors.length < list.length)) {
               			this.colors = DEFAULT_COLORS;
              +		} else {
              +			this.colors = args.colors;
               		}
               
               		this.colors = this.colors.map(color => getColor(color));
               	}
               
              -	set_margins(height) {
              +	setMargins() {
              +		let height = this.rawChartArgs.height;
               		this.baseHeight = height;
               		this.height = height - 40;
              -		this.translate_x = 60;
              -		this.translate_y = 10;
              +		this.translateX = 60;
              +		this.translateY = 10;
               	}
               
               	validate(){
              +		let args = this.rawChartArgs;
              +		// Now yo have the args, set this stuff only after validating
               		if(!this.parent) {
               			console.error("No parent element to render on was provided.");
               			return false;
               		}
              -		if(!this.validateAndPrepareData()) {
              +		if(!this.parseData()) {
               			return false;
               		}
               		return true;
               	}
               
              -	validateAndPrepareData() {
              +	parseData() {
              +		let data = this.rawChartArgs.data;
              +		// Check and all
              +
              +
              +
              +		// If all good
              +		this.data = data;
              +
              +
               		return true;
               	}
               
              @@ -117,8 +109,6 @@ export default class BaseChart {
               		this.bindWindowEvents();
               		this.setupConstants();
               
              -		// this.setupEmptyValues();
              -		// this.setupComponents();
               
               		this.makeContainer();
               		this.makeTooltip(); // without binding
              @@ -127,12 +117,11 @@ export default class BaseChart {
               
               	draw(init=false) {
               		// (draw everything, layers, groups, units)
              -		this.setWidth();
              -
              -		// these both dependent on width >.<, how can this be decoupled
              -		this.setupEmptyValues();
              +		this.calc();
              +		this.setupRenderer(); // this chart's rendered with the config
               		this.setupComponents();
               
              +
               		this.makeChartArea();
               		this.makeLayers();
               
              @@ -143,40 +132,32 @@ export default class BaseChart {
               		if(init) this.update(this.data);
               	}
               
              -	update(data, animate=true) {
              -		this.oldData = Object.assign({}, this.data);
              -		this.data = this.prepareNewData(data);
              -
              -		this.calculateValues();
              -		this.updateComponents(animate);
              -	}
              -
              -	prepareNewData(newData) {
              -		// handle all types of passed data?
              -		return newData;
              -	}
              -
               	bindWindowEvents() {
               		window.addEventListener('resize', () => this.draw());
               		window.addEventListener('orientationchange', () => this.draw());
               	}
               
              -	setWidth() {
              -		let special_values_width = 0;
              -		// let char_width = 8;
              -		// this.specific_values.map(val => {
              -		// 	let str_width = getStringWidth((val.title + ""), char_width);
              -		// 	if(str_width > special_values_width) {
              -		// 		special_values_width = str_width - 40;
              +	calcWidth() {
              +		let outerAnnotationsWidth = 0;
              +		// let charWidth = 8;
              +		// this.specificValues.map(val => {
              +		// 	let strWidth = getStringWidth((val.title + ""), charWidth);
              +		// 	if(strWidth > outerAnnotationsWidth) {
              +		// 		outerAnnotationsWidth = strWidth - 40;
               		// 	}
               		// });
              -		this.baseWidth = getElementContentWidth(this.parent) - special_values_width;
              -		this.width = this.baseWidth - this.translate_x * 2;
              +		this.baseWidth = getElementContentWidth(this.parent) - outerAnnotationsWidth;
              +		this.width = this.baseWidth - this.translateX * 2;
               	}
               
               	setupConstants() {}
               
              -	setupEmptyValues() {}
              +	calc() {
              +		this.calcWidth();
              +		this.reCalc();
              +	}
              +
              +	setupRenderer() {}
               
               	setupComponents() {
               		// Components config
              @@ -196,13 +177,13 @@ export default class BaseChart {
               		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.chartWrapper = this.container.querySelector('.frappe-chart');
              +		this.statsWrapper = this.container.querySelector('.graph-stats-container');
               	}
               
               	makeChartArea() {
               		this.svg = makeSVGContainer(
              -			this.chart_wrapper,
              +			this.chartWrapper,
               			'chart',
               			this.baseWidth,
               			this.baseHeight
              @@ -212,7 +193,7 @@ export default class BaseChart {
               		this.drawArea = makeSVGGroup(
               			this.svg,
               			this.type + '-chart',
              -			`translate(${this.translate_x}, ${this.translate_y})`
              +			`translate(${this.translateX}, ${this.translateY})`
               		);
               	}
               
              @@ -233,72 +214,88 @@ export default class BaseChart {
               		});
               	}
               
              -	updateComponents() {
              -		// this.components.forEach((component) => {
              -		// 	//
              -		// });
              +	update() {
              +		this.reCalc();
              +		this.reRender();
               	}
               
              +	reCalc() {
              +		// Will update values(state)
              +		// Will recalc specific parts depending on the update
              +	}
              +
              +	reRender(animate=true) {
              +		if(!animate) {
              +			this.renderComponents();
              +			return;
              +		}
              +		this.animateComponents();
              +		setTimeout(() => {
              +			this.renderComponents();
              +		}, 400);
              +		// TODO: should be max anim duration required
              +		// (opt, should not redraw if still in animate?)
              +	}
              +
              +	animateComponents() {
              +		this.intermedValues = this.calcIntermediateValues();
              +		this.components.forEach(c => {
              +			// c.store = c.animate(...c.animateArgs);
              +			// c.layer.textContent = '';
              +			// c.store.forEach(element => {c.layer.appendChild(element);});
              +		});
              +	}
              +
              +
              +	calcInitStage() {}
              +
               	makeTooltip() {
               		this.tip = new SvgTip({
              -			parent: this.chart_wrapper,
              +			parent: this.chartWrapper,
               			colors: this.colors
               		});
              -		this.bind_tooltip();
              +		this.bindTooltip();
               	}
               
              -	show_summary() {}
              -	show_custom_summary() {
              -		this.summary.map(d => {
              -			let stats = $.create('div', {
              -				className: 'stats',
              -				innerHTML: `
              -					
              -					${d.title}: ${d.value}
              -				`
              -			});
              -			this.stats_wrapper.appendChild(stats);
              -		});
              -	}
               	renderLegend() {}
               
               	setupNavigation(init=false) {
              -		if(this.is_navigable) return;
              +		if(this.isNavigable) return;
               
              -		this.make_overlay();
              +		this.makeOverlay();
               
               		if(init) {
              -			this.bind_overlay();
              +			this.bindOverlay();
               
               			document.addEventListener('keydown', (e) => {
              -				if(isElementInViewport(this.chart_wrapper)) {
              +				if(isElementInViewport(this.chartWrapper)) {
               					e = e || window.event;
               
               					if (e.keyCode == '37') {
              -						this.on_left_arrow();
              +						this.onLeftArrow();
               					} else if (e.keyCode == '39') {
              -						this.on_right_arrow();
              +						this.onRightArrow();
               					} else if (e.keyCode == '38') {
              -						this.on_up_arrow();
              +						this.onUpArrow();
               					} else if (e.keyCode == '40') {
              -						this.on_down_arrow();
              +						this.onDownArrow();
               					} else if (e.keyCode == '13') {
              -						this.on_enter_key();
              +						this.onEnterKey();
               					}
               				}
               			});
               		}
               	}
               
              -	make_overlay() {}
              -	bind_overlay() {}
              +	makeOverlay() {}
              +	bindOverlay() {}
               	bind_units() {}
               
              -	on_left_arrow() {}
              -	on_right_arrow() {}
              -	on_up_arrow() {}
              -	on_down_arrow() {}
              -	on_enter_key() {}
              +	onLeftArrow() {}
              +	onRightArrow() {}
              +	onUpArrow() {}
              +	onDownArrow() {}
              +	onEnterKey() {}
               
               	getDataPoint() {}
               	updateCurrentDataPoint() {}
              @@ -307,30 +304,7 @@ export default class BaseChart {
               		return makeSVGGroup(this.drawArea, className, transform);
               	}
               
              -	get_different_chart(type) {
              -		if(type === this.type) return;
              -
              -		if(!ALL_CHART_TYPES.includes(type)) {
              -			console.error(`'${type}' is not a valid chart type.`);
              -		}
              -
              -		if(!COMPATIBLE_CHARTS[this.type].includes(type)) {
              -			console.error(`'${this.type}' chart cannot be converted to a '${type}' chart.`);
              -		}
              -
              -		// whether the new chart can use the existing colors
              -		const use_color = COLOR_COMPATIBLE_CHARTS[this.type].includes(type);
              -
              -		// Okay, this is anticlimactic
              -		// this function will need to actually be 'change_chart_type(type)'
              -		// that will update only the required elements, but for now ...
              -		return new Chart({
              -			parent: this.raw_chart_args.parent,
              -			title: this.title,
              -			data: this.raw_chart_args.data,
              -			type: type,
              -			height: this.raw_chart_args.height,
              -			colors: use_color ? this.colors : undefined
              -		});
              +	getDifferentChart(type) {
              +		return getDifferentChart(type, this.type, this.rawChartArgs);
               	}
               }
              diff --git a/src/js/charts/Heatmap.js b/src/js/charts/Heatmap.js
              index 5f0356d..822a0b8 100644
              --- a/src/js/charts/Heatmap.js
              +++ b/src/js/charts/Heatmap.js
              @@ -36,7 +36,7 @@ export default class Heatmap extends BaseChart {
               		// More colors are difficult to parse visually
               		this.distribution_size = 5;
               
              -		this.translate_x = 0;
              +		this.translateX = 0;
               		// this.setup();
               	}
               
              @@ -72,7 +72,7 @@ export default class Heatmap extends BaseChart {
               		this.no_of_cols = getWeeksBetween(this.first_week_start + '', this.last_week_start + '') + 1;
               	}
               
              -	setWidth() {
              +	calcWidth() {
               		this.baseWidth = (this.no_of_cols + 3) * 12 ;
               
               		if(this.discrete_domains) {
              @@ -227,11 +227,11 @@ export default class Heatmap extends BaseChart {
               		).map(d => {
               			d.style.display = 'None';
               		});
              -		this.chart_wrapper.style.marginTop = '0px';
              -		this.chart_wrapper.style.paddingTop = '0px';
              +		this.chartWrapper.style.marginTop = '0px';
              +		this.chartWrapper.style.paddingTop = '0px';
               	}
               
              -	bind_tooltip() {
              +	bindTooltip() {
               		Array.prototype.slice.call(
               			document.querySelectorAll(".data-group .day")
               		).map(el => {
              @@ -241,7 +241,7 @@ export default class Heatmap extends BaseChart {
               
               				let month = this.month_names[parseInt(date_parts[1])-1].substring(0, 3);
               
              -				let g_off = this.chart_wrapper.getBoundingClientRect(), p_off = e.target.getBoundingClientRect();
              +				let g_off = this.chartWrapper.getBoundingClientRect(), p_off = e.target.getBoundingClientRect();
               
               				let width = parseInt(e.target.getAttribute('width'));
               				let x = p_off.left - g_off.left + (width+2)/2;
              @@ -258,6 +258,6 @@ export default class Heatmap extends BaseChart {
               	update(data) {
               		this.data = data;
               		this.setup_values();
              -		this.bind_tooltip();
              +		this.bindTooltip();
               	}
               }
              diff --git a/src/js/charts/PercentageChart.js b/src/js/charts/PercentageChart.js
              index d2488f7..7b2dc38 100644
              --- a/src/js/charts/PercentageChart.js
              +++ b/src/js/charts/PercentageChart.js
              @@ -1,5 +1,5 @@
               import BaseChart from './BaseChart';
              -import { $, get_offset } from '../utils/dom';
              +import { $, getOffset } from '../utils/dom';
               
               export default class PercentageChart extends BaseChart {
               	constructor(args) {
              @@ -13,16 +13,16 @@ export default class PercentageChart extends BaseChart {
               	}
               
               	makeChartArea() {
              -		this.chart_wrapper.className += ' ' + 'graph-focus-margin';
              -		this.chart_wrapper.style.marginTop = '45px';
              +		this.chartWrapper.className += ' ' + 'graph-focus-margin';
              +		this.chartWrapper.style.marginTop = '45px';
               
              -		this.stats_wrapper.className += ' ' + 'graph-focus-margin';
              -		this.stats_wrapper.style.marginBottom = '30px';
              -		this.stats_wrapper.style.paddingTop = '0px';
              +		this.statsWrapper.className += ' ' + 'graph-focus-margin';
              +		this.statsWrapper.style.marginBottom = '30px';
              +		this.statsWrapper.style.paddingTop = '0px';
               
               		this.chartDiv = $.create('div', {
               			className: 'div',
              -			inside: this.chart_wrapper
              +			inside: this.chartWrapper
               		});
               
               		this.chart = $.create('div', {
              @@ -89,10 +89,10 @@ export default class PercentageChart extends BaseChart {
               		});
               	}
               
              -	bind_tooltip() {
              +	bindTooltip() {
               		this.slices.map((slice, i) => {
               			slice.addEventListener('mouseenter', () => {
              -				let g_off = get_offset(this.chart_wrapper), p_off = get_offset(slice);
              +				let g_off = getOffset(this.chartWrapper), p_off = getOffset(slice);
               
               				let x = p_off.left - g_off.left + slice.offsetWidth/2;
               				let y = p_off.top - g_off.top - 6;
              @@ -113,7 +113,7 @@ export default class PercentageChart extends BaseChart {
               			if(d) {
               				let stats = $.create('div', {
               					className: 'stats',
              -					inside: this.stats_wrapper
              +					inside: this.statsWrapper
               				});
               				stats.innerHTML = `
               					
              diff --git a/src/js/charts/PieChart.js b/src/js/charts/PieChart.js
              index e8ed0c3..c84b7ae 100644
              --- a/src/js/charts/PieChart.js
              +++ b/src/js/charts/PieChart.js
              @@ -1,5 +1,5 @@
               import BaseChart from './BaseChart';
              -import { $, get_offset } from '../utils/dom';
              +import { $, getOffset } from '../utils/dom';
               import { makePath } from '../utils/draw';
               import { lightenDarkenColor } from '../utils/colors';
               import { runSMILAnimation, transform } from '../utils/animation';
              @@ -118,7 +118,7 @@ export default class PieChart extends BaseChart {
               
               		});
               		if(init){
              -			runSMILAnimation(this.chart_wrapper, this.svg, this.elements_to_animate);
              +			runSMILAnimation(this.chartWrapper, this.svg, this.elements_to_animate);
               		}
               	}
               
              @@ -133,7 +133,7 @@ export default class PieChart extends BaseChart {
               		if(flag){
               			transform(path,this.calTranslateByAngle(this.slicesProperties[i]));
               			path.style.fill = lightenDarkenColor(color,50);
              -			let g_off = get_offset(this.svg);
              +			let g_off = getOffset(this.svg);
               			let x = e.pageX - g_off.left + 10;
               			let y = e.pageY - g_off.top - 10;
               			let title = (this.formatted_labels && this.formatted_labels.length>0
              @@ -165,7 +165,7 @@ export default class PieChart extends BaseChart {
               	mouseLeave(){
               		this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);
               	}
              -	bind_tooltip() {
              +	bindTooltip() {
               		this.drawArea.addEventListener('mousemove',this.mouseMove);
               		this.drawArea.addEventListener('mouseleave',this.mouseLeave);
               	}
              @@ -179,7 +179,7 @@ export default class PieChart extends BaseChart {
               			if(d) {
               				let stats = $.create('div', {
               					className: 'stats',
              -					inside: this.stats_wrapper
              +					inside: this.statsWrapper
               				});
               				stats.innerHTML = `
               					
              diff --git a/src/js/config.js b/src/js/config.js
              new file mode 100644
              index 0000000..b390f61
              --- /dev/null
              +++ b/src/js/config.js
              @@ -0,0 +1,49 @@
              +import Chart from './chart';
              +
              +const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];
              +
              +const 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: []
              +};
              +
              +// Needs structure as per only labels/datasets
              +const COLOR_COMPATIBLE_CHARTS = {
              +	bar: ['line', 'scatter'],
              +	line: ['scatter', 'bar'],
              +	pie: ['percentage'],
              +	scatter: ['line', 'bar'],
              +	percentage: ['pie'],
              +	heatmap: []
              +};
              +
              +export function getDifferentChart(type, current_type, args) {
              +	if(type === current_type) return;
              +
              +	if(!ALL_CHART_TYPES.includes(type)) {
              +		console.error(`'${type}' is not a valid chart type.`);
              +	}
              +
              +	if(!COMPATIBLE_CHARTS[current_type].includes(type)) {
              +		console.error(`'${current_type}' chart cannot be converted to a '${type}' chart.`);
              +	}
              +
              +	// whether the new chart can use the existing colors
              +	const useColor = COLOR_COMPATIBLE_CHARTS[current_type].includes(type);
              +
              +	// Okay, this is anticlimactic
              +	// this function will need to actually be 'changeChartType(type)'
              +	// that will update only the required elements, but for now ...
              +	return new Chart({
              +		parent: args.parent,
              +		title: args.title,
              +		data: args.data,
              +		type: type,
              +		height: args.height,
              +		colors: useColor ? args.colors : undefined
              +	});
              +}
              \ No newline at end of file
              diff --git a/src/js/utils/dom.js b/src/js/utils/dom.js
              index cea0550..3f278b6 100644
              --- a/src/js/utils/dom.js
              +++ b/src/js/utils/dom.js
              @@ -43,7 +43,7 @@ $.create = (tag, o) => {
               	return element;
               };
               
              -export function get_offset(element) {
              +export function getOffset(element) {
               	let rect = element.getBoundingClientRect();
               	return {
               		// https://stackoverflow.com/a/7436602/6495043