{"version":3,"sources":["webpack:///./node_modules/chartkick/dist/chartkick.js"],"names":["global","factory","module","exports","this","isArray","variable","Object","prototype","toString","call","isFunction","Function","isPlainObject","extend","target","source","key","undefined","merge","obj1","obj2","DATE_PATTERN","ISO8601_PATTERN","DECIMAL_SEPARATOR","String","charAt","parseISO8601","input","day","hour","matches","milliseconds","minutes","month","offset","result","seconds","type","year","match","parseInt","parseFloat","slice","Date","UTC","negativeValues","series","i","j","data","length","toStr","n","toFloat","toDate","str","replace","toArr","arr","hasOwnProperty","push","jsOptionsFunc","defaultOptions","hideLegend","setTitle","setMin","setMax","setStacked","setXtitle","setYtitle","chart","opts","chartOptions","options","legend","title","min","max","stacked","colors","xtitle","ytitle","library","sortByTime","a","b","getTime","sortByNumberSeries","sortByNumber","isMinute","d","getMilliseconds","getSeconds","isHour","getMinutes","isDay","getHours","isWeek","dayOfWeek","getDay","isMonth","getDate","isYear","getMonth","isDate","obj","isNaN","isNumber","byteSuffixes","formatValue","pre","value","axis","prefix","suffix","precision","round","byteScale","suffixIdx","baseValue","Error","toPrecision","zeros","num","Math","pow","toFixed","thousands","decimal","parts","split","seriesOption","option","allZeros","baseOptions","maintainAspectRatio","animation","tooltips","displayColors","callbacks","fontSize","fontColor","scales","yAxes","ticks","maxTicksLimit","scaleLabel","xAxes","gridLines","drawOnChartArea","time","defaultColors","display","position","text","setBarMin","setBarMax","labelString","addOpacity","hex","opacity","exec","notnull","x","setLabelSize","maxLabelSize","ceil","element","offsetWidth","labels","callback","substring","setFormatOptions","chartType","formatOptions","bytes","s","scale","myAxes","stepSize","label","item","datasets","datasetIndex","xLabel","yLabel","dataPoint","index","v","tooltipItem","dataLabel","valueLabel","jsOptions","createDataTable","week","minute","i$1","s$1","j$1","rows","rows2","xtype","k","sortedLabels","Array","indexOf","sort","i$2","s$2","d$1","j$2","point","y","r","color","backgroundColor","dataset","name","fill","borderColor","pointBackgroundColor","borderWidth","pointHoverBackgroundColor","stack","curve","lineTension","points","pointRadius","pointHitRadius","xmin","xmax","gte29","helpers","ticksKey","minTime","maxTime","value$1","step","timeDiff","unit","displayFormats","unitStepSize","tooltipFormat","defaultExport","renderLineChart","drawChart","renderPieChart","donut","cutoutPercentage","values","renderColumnChart","barOptions","renderAreaChart","renderBarChart","renderScatterChart","showLines","renderBubbleChart","destroy","code","window","console","log","JSON","stringify","innerHTML","ctx","getElementsByTagName","defaultOptions$1","xAxis","style","yAxis","credits","enabled","tooltip","plotOptions","areaspline","area","marker","hideLegend$1","verticalAlign","layout","align","setTitle$1","setMin$1","setMax$1","setStacked$1","stackedValue","stacking","setXtitle$1","setYtitle$1","jsOptions$1","setFormatOptions$1","formatter","pointFormatter","defaultExport$1","symbol","pie","innerSize","categories","d2","newSeries","renderTo","id","Chart","loaded","defaultOptions$2","chartArea","fontName","pointSize","textStyle","alignment","curveType","hAxis","titleTextStyle","gridlines","baselineColor","viewWindow","vAxis","hideLegend$2","setTitle$2","setMin$2","setMax$2","setBarMin$1","setBarMax$1","setStacked$2","isStacked","setXtitle$2","italic","setYtitle$2","jsOptions$2","resize","attachEvent","addEventListener","defaultExport$2","this$1","waitForLoaded","top","height","pieHole","visualization","DataTable","addColumn","addRows","areaOpacity","renderGeoChart","colorAxis","row","renderTimeline","lineHeight","clearChart","toJSON","draw","pack","runCallbacks","loadOptions","packages","config","__config","language","mapsApiKey","charts","load","cb","LineChart","Timeline","GeoChart","splice","columnType","concat","pendingRequests","runningRequests","maxRequests","pushRequest","url","success","error","runNext","request","shift","getJSON","requestComplete","ajaxCall","jqXHR","textStatus","errorThrown","message","$","jQuery","Zepto","ajax","dataType","complete","xhr","XMLHttpRequest","open","setRequestHeader","onload","status","parse","responseText","statusText","send","adapters","setText","document","body","innerText","textContent","chartError","noPrefix","errorCatcher","__render","err","fetchDataSource","dataSource","rawData","addDownloadButton","link","createElement","download","filename","right","zIndex","image","alt","border","src","appendChild","__downloadAttached","__enterEvent","addEvent","e","related","relatedTarget","childOf","href","toImage","__leaveEvent","parentNode","removeChild","elem","event","fn","fn2","removeEvent","removeEventListener","detachEvent","p","c","getAdapterType","product","addAdapter","adapterType","adapter","loadAdapters","Highcharts","google","dataEmpty","renderChart","messages","empty","callAdapter","fnName","adapterName","__adapterObject","toFormattedKey","keyType","formatSeriesData","detectXType","noDatetime","detectXTypeWithFunction","func","copySeries","copy","processSeries","discrete","processSimple","perfectData","elementId","getElementById","Chartkick","refresh","startRefresh","getElement","getDataSource","getData","getOptions","getChartObject","getAdapter","updateData","__updateOptions","setOptions","redraw","refreshData","sep","intervalId","setInterval","stopRefresh","clearInterval","background","canvas","tmpCanvas","tmpCtx","getContext","width","fillStyle","fillRect","drawImage","toDataURL","toBase64Image","updateRefresh","__processData","__chartName","apply","arguments","__proto__","create","constructor","PieChart","ColumnChart","BarChart","AreaChart","ScatterChart","BubbleChart","configure","setDefaultOptions","eachChart","chartId","use","default"],"mappings":"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","file":"js/chunk-vendors~6fdebd6f.97bef46c.js","sourcesContent":["/*\n * Chartkick.js\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * v3.2.1\n * MIT License\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Chartkick = factory());\n}(this, (function () { 'use strict';\n\n function isArray(variable) {\n return Object.prototype.toString.call(variable) === \"[object Array]\";\n }\n\n function isFunction(variable) {\n return variable instanceof Function;\n }\n\n function isPlainObject(variable) {\n // protect against prototype pollution, defense 2\n return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n }\n\n // https://github.com/madrobby/zepto/blob/master/src/zepto.js\n function extend(target, source) {\n var key;\n for (key in source) {\n // protect against prototype pollution, defense 1\n if (key === \"__proto__\") { continue; }\n\n if (isPlainObject(source[key]) || isArray(source[key])) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n target[key] = {};\n }\n if (isArray(source[key]) && !isArray(target[key])) {\n target[key] = [];\n }\n extend(target[key], source[key]);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n }\n\n function merge(obj1, obj2) {\n var target = {};\n extend(target, obj1);\n extend(target, obj2);\n return target;\n }\n\n var DATE_PATTERN = /^(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)$/i;\n\n // https://github.com/Do/iso8601.js\n var ISO8601_PATTERN = /(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)?(:)?(\\d\\d)?([.,]\\d+)?($|Z|([+-])(\\d\\d)(:)?(\\d\\d)?)/i;\n var DECIMAL_SEPARATOR = String(1.5).charAt(1);\n\n function parseISO8601(input) {\n var day, hour, matches, milliseconds, minutes, month, offset, result, seconds, type, year;\n type = Object.prototype.toString.call(input);\n if (type === \"[object Date]\") {\n return input;\n }\n if (type !== \"[object String]\") {\n return;\n }\n matches = input.match(ISO8601_PATTERN);\n if (matches) {\n year = parseInt(matches[1], 10);\n month = parseInt(matches[3], 10) - 1;\n day = parseInt(matches[5], 10);\n hour = parseInt(matches[7], 10);\n minutes = matches[9] ? parseInt(matches[9], 10) : 0;\n seconds = matches[11] ? parseInt(matches[11], 10) : 0;\n milliseconds = matches[12] ? parseFloat(DECIMAL_SEPARATOR + matches[12].slice(1)) * 1000 : 0;\n result = Date.UTC(year, month, day, hour, minutes, seconds, milliseconds);\n if (matches[13] && matches[14]) {\n offset = matches[15] * 60;\n if (matches[17]) {\n offset += parseInt(matches[17], 10);\n }\n offset *= matches[14] === \"-\" ? -1 : 1;\n result -= offset * 60 * 1000;\n }\n return new Date(result);\n }\n }\n // end iso8601.js\n\n function negativeValues(series) {\n var i, j, data;\n for (i = 0; i < series.length; i++) {\n data = series[i].data;\n for (j = 0; j < data.length; j++) {\n if (data[j][1] < 0) {\n return true;\n }\n }\n }\n return false;\n }\n\n function toStr(n) {\n return \"\" + n;\n }\n\n function toFloat(n) {\n return parseFloat(n);\n }\n\n function toDate(n) {\n var matches, year, month, day;\n if (typeof n !== \"object\") {\n if (typeof n === \"number\") {\n n = new Date(n * 1000); // ms\n } else {\n n = toStr(n);\n if ((matches = n.match(DATE_PATTERN))) {\n year = parseInt(matches[1], 10);\n month = parseInt(matches[3], 10) - 1;\n day = parseInt(matches[5], 10);\n return new Date(year, month, day);\n } else { // str\n // try our best to get the str into iso8601\n // TODO be smarter about this\n var str = n.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\");\n n = parseISO8601(str) || new Date(n);\n }\n }\n }\n return n;\n }\n\n function toArr(n) {\n if (!isArray(n)) {\n var arr = [], i;\n for (i in n) {\n if (n.hasOwnProperty(i)) {\n arr.push([i, n[i]]);\n }\n }\n n = arr;\n }\n return n;\n }\n\n function jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n return function (chart, opts, chartOptions) {\n var series = chart.data;\n var options = merge({}, defaultOptions);\n options = merge(options, chartOptions || {});\n\n if (chart.hideLegend || \"legend\" in opts) {\n hideLegend(options, opts.legend, chart.hideLegend);\n }\n\n if (opts.title) {\n setTitle(options, opts.title);\n }\n\n // min\n if (\"min\" in opts) {\n setMin(options, opts.min);\n } else if (!negativeValues(series)) {\n setMin(options, 0);\n }\n\n // max\n if (opts.max) {\n setMax(options, opts.max);\n }\n\n if (\"stacked\" in opts) {\n setStacked(options, opts.stacked);\n }\n\n if (opts.colors) {\n options.colors = opts.colors;\n }\n\n if (opts.xtitle) {\n setXtitle(options, opts.xtitle);\n }\n\n if (opts.ytitle) {\n setYtitle(options, opts.ytitle);\n }\n\n // merge library last\n options = merge(options, opts.library || {});\n\n return options;\n };\n }\n\n function sortByTime(a, b) {\n return a[0].getTime() - b[0].getTime();\n }\n\n function sortByNumberSeries(a, b) {\n return a[0] - b[0];\n }\n\n function sortByNumber(a, b) {\n return a - b;\n }\n\n function isMinute(d) {\n return d.getMilliseconds() === 0 && d.getSeconds() === 0;\n }\n\n function isHour(d) {\n return isMinute(d) && d.getMinutes() === 0;\n }\n\n function isDay(d) {\n return isHour(d) && d.getHours() === 0;\n }\n\n function isWeek(d, dayOfWeek) {\n return isDay(d) && d.getDay() === dayOfWeek;\n }\n\n function isMonth(d) {\n return isDay(d) && d.getDate() === 1;\n }\n\n function isYear(d) {\n return isMonth(d) && d.getMonth() === 0;\n }\n\n function isDate(obj) {\n return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n }\n\n function isNumber(obj) {\n return typeof obj === \"number\";\n }\n\n var byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\n function formatValue(pre, value, options, axis) {\n pre = pre || \"\";\n if (options.prefix) {\n if (value < 0) {\n value = value * -1;\n pre += \"-\";\n }\n pre += options.prefix;\n }\n\n var suffix = options.suffix || \"\";\n var precision = options.precision;\n var round = options.round;\n\n if (options.byteScale) {\n var suffixIdx;\n var baseValue = axis ? options.byteScale : value;\n\n if (baseValue >= 1152921504606846976) {\n value /= 1152921504606846976;\n suffixIdx = 6;\n } else if (baseValue >= 1125899906842624) {\n value /= 1125899906842624;\n suffixIdx = 5;\n } else if (baseValue >= 1099511627776) {\n value /= 1099511627776;\n suffixIdx = 4;\n } else if (baseValue >= 1073741824) {\n value /= 1073741824;\n suffixIdx = 3;\n } else if (baseValue >= 1048576) {\n value /= 1048576;\n suffixIdx = 2;\n } else if (baseValue >= 1024) {\n value /= 1024;\n suffixIdx = 1;\n } else {\n suffixIdx = 0;\n }\n\n // TODO handle manual precision case\n if (precision === undefined && round === undefined) {\n if (value >= 1023.5) {\n if (suffixIdx < byteSuffixes.length - 1) {\n value = 1.0;\n suffixIdx += 1;\n }\n }\n precision = value >= 1000 ? 4 : 3;\n }\n suffix = \" \" + byteSuffixes[suffixIdx];\n }\n\n if (precision !== undefined && round !== undefined) {\n throw Error(\"Use either round or precision, not both\");\n }\n\n if (!axis) {\n if (precision !== undefined) {\n value = value.toPrecision(precision);\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n\n if (round !== undefined) {\n if (round < 0) {\n var num = Math.pow(10, -1 * round);\n value = parseInt((1.0 * value / num).toFixed(0)) * num;\n } else {\n value = value.toFixed(round);\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n }\n }\n\n if (options.thousands || options.decimal) {\n value = toStr(value);\n var parts = value.split(\".\");\n value = parts[0];\n if (options.thousands) {\n value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n }\n if (parts.length > 1) {\n value += (options.decimal || \".\") + parts[1];\n }\n }\n\n return pre + value + suffix;\n }\n\n function seriesOption(chart, series, option) {\n if (option in series) {\n return series[option];\n } else if (option in chart.options) {\n return chart.options[option];\n }\n return null;\n }\n\n function allZeros(data) {\n var i, j, d;\n for (i = 0; i < data.length; i++) {\n d = data[i].data;\n for (j = 0; j < d.length; j++) {\n if (d[j][1] != 0) {\n return false;\n }\n }\n }\n return true;\n }\n\n var baseOptions = {\n maintainAspectRatio: false,\n animation: false,\n tooltips: {\n displayColors: false,\n callbacks: {}\n },\n legend: {},\n title: {fontSize: 20, fontColor: \"#333\"}\n };\n\n var defaultOptions = {\n scales: {\n yAxes: [\n {\n ticks: {\n maxTicksLimit: 4\n },\n scaleLabel: {\n fontSize: 16,\n // fontStyle: \"bold\",\n fontColor: \"#333\"\n }\n }\n ],\n xAxes: [\n {\n gridLines: {\n drawOnChartArea: false\n },\n scaleLabel: {\n fontSize: 16,\n // fontStyle: \"bold\",\n fontColor: \"#333\"\n },\n time: {},\n ticks: {}\n }\n ]\n }\n };\n\n // http://there4.io/2012/05/02/google-chart-color-list/\n var defaultColors = [\n \"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\",\n \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\",\n \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"\n ];\n\n var hideLegend = function (options, legend, hideLegend) {\n if (legend !== undefined) {\n options.legend.display = !!legend;\n if (legend && legend !== true) {\n options.legend.position = legend;\n }\n } else if (hideLegend) {\n options.legend.display = false;\n }\n };\n\n var setTitle = function (options, title) {\n options.title.display = true;\n options.title.text = title;\n };\n\n var setMin = function (options, min) {\n if (min !== null) {\n options.scales.yAxes[0].ticks.min = toFloat(min);\n }\n };\n\n var setMax = function (options, max) {\n options.scales.yAxes[0].ticks.max = toFloat(max);\n };\n\n var setBarMin = function (options, min) {\n if (min !== null) {\n options.scales.xAxes[0].ticks.min = toFloat(min);\n }\n };\n\n var setBarMax = function (options, max) {\n options.scales.xAxes[0].ticks.max = toFloat(max);\n };\n\n var setStacked = function (options, stacked) {\n options.scales.xAxes[0].stacked = !!stacked;\n options.scales.yAxes[0].stacked = !!stacked;\n };\n\n var setXtitle = function (options, title) {\n options.scales.xAxes[0].scaleLabel.display = true;\n options.scales.xAxes[0].scaleLabel.labelString = title;\n };\n\n var setYtitle = function (options, title) {\n options.scales.yAxes[0].scaleLabel.display = true;\n options.scales.yAxes[0].scaleLabel.labelString = title;\n };\n\n // https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n var addOpacity = function(hex, opacity) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n };\n\n // check if not null or undefined\n // https://stackoverflow.com/a/27757708/1177228\n var notnull = function(x) {\n return x != null;\n };\n\n var setLabelSize = function (chart, data, options) {\n var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n if (maxLabelSize > 25) {\n maxLabelSize = 25;\n } else if (maxLabelSize < 10) {\n maxLabelSize = 10;\n }\n if (!options.scales.xAxes[0].ticks.callback) {\n options.scales.xAxes[0].ticks.callback = function (value) {\n value = toStr(value);\n if (value.length > maxLabelSize) {\n return value.substring(0, maxLabelSize - 2) + \"...\";\n } else {\n return value;\n }\n };\n }\n };\n\n var setFormatOptions = function(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n if (chart.options.bytes) {\n var series = chart.data;\n if (chartType === \"pie\") {\n series = [{data: series}];\n }\n\n // calculate max\n var max = 0;\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n for (var j = 0; j < s.data.length; j++) {\n if (s.data[j][1] > max) {\n max = s.data[j][1];\n }\n }\n }\n\n // calculate scale\n var scale = 1;\n while (max >= 1024) {\n scale *= 1024;\n max /= 1024;\n }\n\n // set step size\n formatOptions.byteScale = scale;\n }\n\n if (chartType !== \"pie\") {\n var myAxes = options.scales.yAxes;\n if (chartType === \"bar\") {\n myAxes = options.scales.xAxes;\n }\n\n if (formatOptions.byteScale) {\n if (!myAxes[0].ticks.stepSize) {\n myAxes[0].ticks.stepSize = formatOptions.byteScale / 2;\n }\n if (!myAxes[0].ticks.maxTicksLimit) {\n myAxes[0].ticks.maxTicksLimit = 4;\n }\n }\n\n if (!myAxes[0].ticks.callback) {\n myAxes[0].ticks.callback = function (value) {\n return formatValue(\"\", value, formatOptions, true);\n };\n }\n }\n\n if (!options.tooltips.callbacks.label) {\n if (chartType === \"scatter\") {\n options.tooltips.callbacks.label = function (item, data) {\n var label = data.datasets[item.datasetIndex].label || '';\n if (label) {\n label += ': ';\n }\n return label + '(' + item.xLabel + ', ' + item.yLabel + ')';\n };\n } else if (chartType === \"bubble\") {\n options.tooltips.callbacks.label = function (item, data) {\n var label = data.datasets[item.datasetIndex].label || '';\n if (label) {\n label += ': ';\n }\n var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n return label + '(' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.v + ')';\n };\n } else if (chartType === \"pie\") {\n // need to use separate label for pie charts\n options.tooltips.callbacks.label = function (tooltipItem, data) {\n var dataLabel = data.labels[tooltipItem.index];\n var value = ': ';\n\n if (isArray(dataLabel)) {\n // show value on first line of multiline label\n // need to clone because we are changing the value\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return formatValue(dataLabel, data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index], formatOptions);\n };\n } else {\n var valueLabel = chartType === \"bar\" ? \"xLabel\" : \"yLabel\";\n options.tooltips.callbacks.label = function (tooltipItem, data) {\n var label = data.datasets[tooltipItem.datasetIndex].label || '';\n if (label) {\n label += ': ';\n }\n return formatValue(label, tooltipItem[valueLabel], formatOptions);\n };\n }\n }\n };\n\n var jsOptions = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\n var createDataTable = function (chart, options, chartType, library) {\n var datasets = [];\n var labels = [];\n\n var colors = chart.options.colors || defaultColors;\n\n var day = true;\n var week = true;\n var dayOfWeek;\n var month = true;\n var year = true;\n var hour = true;\n var minute = true;\n\n var series = chart.data;\n\n var max = 0;\n if (chartType === \"bubble\") {\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n var s$1 = series[i$1];\n for (var j$1 = 0; j$1 < s$1.data.length; j$1++) {\n if (s$1.data[j$1][2] > max) {\n max = s$1.data[j$1][2];\n }\n }\n }\n }\n\n var i, j, s, d, key, rows = [], rows2 = [];\n\n if (chartType === \"bar\" || chartType === \"column\" || (chart.xtype !== \"number\" && chart.xtype !== \"bubble\")) {\n var sortedLabels = [];\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = chart.xtype == \"datetime\" ? d[0].getTime() : d[0];\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n }\n rows[key][i] = toFloat(d[1]);\n if (sortedLabels.indexOf(key) === -1) {\n sortedLabels.push(key);\n }\n }\n }\n\n if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n sortedLabels.sort(sortByNumber);\n }\n\n for (j = 0; j < series.length; j++) {\n rows2.push([]);\n }\n\n var value;\n var k;\n for (k = 0; k < sortedLabels.length; k++) {\n i = sortedLabels[k];\n if (chart.xtype === \"datetime\") {\n value = new Date(toFloat(i));\n // TODO make this efficient\n day = day && isDay(value);\n if (!dayOfWeek) {\n dayOfWeek = value.getDay();\n }\n week = week && isWeek(value, dayOfWeek);\n month = month && isMonth(value);\n year = year && isYear(value);\n hour = hour && isHour(value);\n minute = minute && isMinute(value);\n } else {\n value = i;\n }\n labels.push(value);\n for (j = 0; j < series.length; j++) {\n // Chart.js doesn't like undefined\n rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);\n }\n }\n } else {\n for (var i$2 = 0; i$2 < series.length; i$2++) {\n var s$2 = series[i$2];\n var d$1 = [];\n for (var j$2 = 0; j$2 < s$2.data.length; j$2++) {\n var point = {\n x: toFloat(s$2.data[j$2][0]),\n y: toFloat(s$2.data[j$2][1])\n };\n if (chartType === \"bubble\") {\n point.r = toFloat(s$2.data[j$2][2]) * 20 / max;\n // custom attribute, for tooltip\n point.v = s$2.data[j$2][2];\n }\n d$1.push(point);\n }\n rows2.push(d$1);\n }\n }\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n var color = s.color || colors[i];\n var backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n\n var dataset = {\n label: s.name || \"\",\n data: rows2[i],\n fill: chartType === \"area\",\n borderColor: color,\n backgroundColor: backgroundColor,\n pointBackgroundColor: color,\n borderWidth: 2,\n pointHoverBackgroundColor: color\n };\n\n if (s.stack) {\n dataset.stack = s.stack;\n }\n\n var curve = seriesOption(chart, s, \"curve\");\n if (curve === false) {\n dataset.lineTension = 0;\n }\n\n var points = seriesOption(chart, s, \"points\");\n if (points === false) {\n dataset.pointRadius = 0;\n dataset.pointHitRadius = 5;\n }\n\n dataset = merge(dataset, chart.options.dataset || {});\n dataset = merge(dataset, s.library || {});\n dataset = merge(dataset, s.dataset || {});\n\n datasets.push(dataset);\n }\n\n var xmin = chart.options.xmin;\n var xmax = chart.options.xmax;\n\n if (chart.xtype === \"datetime\") {\n // hacky check for Chart.js >= 2.9.0\n // https://github.com/chartjs/Chart.js/compare/v2.8.0...v2.9.0\n var gte29 = \"math\" in library.helpers;\n var ticksKey = gte29 ? \"ticks\" : \"time\";\n if (notnull(xmin)) {\n options.scales.xAxes[0][ticksKey].min = toDate(xmin).getTime();\n }\n if (notnull(xmax)) {\n options.scales.xAxes[0][ticksKey].max = toDate(xmax).getTime();\n }\n } else if (chart.xtype === \"number\") {\n if (notnull(xmin)) {\n options.scales.xAxes[0].ticks.min = xmin;\n }\n if (notnull(xmax)) {\n options.scales.xAxes[0].ticks.max = xmax;\n }\n }\n\n // for empty datetime chart\n if (chart.xtype === \"datetime\" && labels.length === 0) {\n if (notnull(xmin)) {\n labels.push(toDate(xmin));\n }\n if (notnull(xmax)) {\n labels.push(toDate(xmax));\n }\n day = false;\n week = false;\n month = false;\n year = false;\n hour = false;\n minute = false;\n }\n\n if (chart.xtype === \"datetime\" && labels.length > 0) {\n var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n for (i = 1; i < labels.length; i++) {\n var value$1 = labels[i].getTime();\n if (value$1 < minTime) {\n minTime = value$1;\n }\n if (value$1 > maxTime) {\n maxTime = value$1;\n }\n }\n\n var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n if (!options.scales.xAxes[0].time.unit) {\n var step;\n if (year || timeDiff > 365 * 10) {\n options.scales.xAxes[0].time.unit = \"year\";\n step = 365;\n } else if (month || timeDiff > 30 * 10) {\n options.scales.xAxes[0].time.unit = \"month\";\n step = 30;\n } else if (day || timeDiff > 10) {\n options.scales.xAxes[0].time.unit = \"day\";\n step = 1;\n } else if (hour || timeDiff > 0.5) {\n options.scales.xAxes[0].time.displayFormats = {hour: \"MMM D, h a\"};\n options.scales.xAxes[0].time.unit = \"hour\";\n step = 1 / 24.0;\n } else if (minute) {\n options.scales.xAxes[0].time.displayFormats = {minute: \"h:mm a\"};\n options.scales.xAxes[0].time.unit = \"minute\";\n step = 1 / 24.0 / 60.0;\n }\n\n if (step && timeDiff > 0) {\n var unitStepSize = Math.ceil(timeDiff / step / (chart.element.offsetWidth / 100.0));\n if (week && step === 1) {\n unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n }\n options.scales.xAxes[0].time.unitStepSize = unitStepSize;\n }\n }\n\n if (!options.scales.xAxes[0].time.tooltipFormat) {\n if (day) {\n options.scales.xAxes[0].time.tooltipFormat = \"ll\";\n } else if (hour) {\n options.scales.xAxes[0].time.tooltipFormat = \"MMM D, h a\";\n } else if (minute) {\n options.scales.xAxes[0].time.tooltipFormat = \"h:mm a\";\n }\n }\n }\n\n var data = {\n labels: labels,\n datasets: datasets\n };\n\n return data;\n };\n\n var defaultExport = function defaultExport(library) {\n this.name = \"chartjs\";\n this.library = library;\n };\n\n defaultExport.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n var chartOptions = {};\n // fix for https://github.com/chartjs/Chart.js/issues/2441\n if (!chart.options.max && allZeros(chart.data)) {\n chartOptions.max = 1;\n }\n\n var options = jsOptions(chart, merge(chartOptions, chart.options));\n setFormatOptions(chart, options, chartType);\n\n var data = createDataTable(chart, options, chartType || \"line\", this.library);\n\n if (chart.xtype === \"number\") {\n options.scales.xAxes[0].type = \"linear\";\n options.scales.xAxes[0].position = \"bottom\";\n } else {\n options.scales.xAxes[0].type = chart.xtype === \"string\" ? \"category\" : \"time\";\n }\n\n this.drawChart(chart, \"line\", data, options);\n };\n\n defaultExport.prototype.renderPieChart = function renderPieChart (chart) {\n var options = merge({}, baseOptions);\n if (chart.options.donut) {\n options.cutoutPercentage = 50;\n }\n\n if (\"legend\" in chart.options) {\n hideLegend(options, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle(options, chart.options.title);\n }\n\n options = merge(options, chart.options.library || {});\n setFormatOptions(chart, options, \"pie\");\n\n var labels = [];\n var values = [];\n for (var i = 0; i < chart.data.length; i++) {\n var point = chart.data[i];\n labels.push(point[0]);\n values.push(point[1]);\n }\n\n var dataset = {\n data: values,\n backgroundColor: chart.options.colors || defaultColors\n };\n dataset = merge(dataset, chart.options.dataset || {});\n\n var data = {\n labels: labels,\n datasets: [dataset]\n };\n\n this.drawChart(chart, \"pie\", data, options);\n };\n\n defaultExport.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n var options;\n if (chartType === \"bar\") {\n var barOptions = merge(baseOptions, defaultOptions);\n delete barOptions.scales.yAxes[0].ticks.maxTicksLimit;\n options = jsOptionsFunc(barOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options);\n } else {\n options = jsOptions(chart, chart.options);\n }\n setFormatOptions(chart, options, chartType);\n var data = createDataTable(chart, options, \"column\", this.library);\n if (chartType !== \"bar\") {\n setLabelSize(chart, data, options);\n }\n this.drawChart(chart, (chartType === \"bar\" ? \"horizontalBar\" : \"bar\"), data, options);\n };\n\n defaultExport.prototype.renderAreaChart = function renderAreaChart (chart) {\n this.renderLineChart(chart, \"area\");\n };\n\n defaultExport.prototype.renderBarChart = function renderBarChart (chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport.prototype.renderScatterChart = function renderScatterChart (chart, chartType) {\n chartType = chartType || \"scatter\";\n\n var options = jsOptions(chart, chart.options);\n setFormatOptions(chart, options, chartType);\n\n if (!(\"showLines\" in options)) {\n options.showLines = false;\n }\n\n var data = createDataTable(chart, options, chartType, this.library);\n\n options.scales.xAxes[0].type = \"linear\";\n options.scales.xAxes[0].position = \"bottom\";\n\n this.drawChart(chart, chartType, data, options);\n };\n\n defaultExport.prototype.renderBubbleChart = function renderBubbleChart (chart) {\n this.renderScatterChart(chart, \"bubble\");\n };\n\n defaultExport.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport.prototype.drawChart = function drawChart (chart, type, data, options) {\n this.destroy(chart);\n\n var chartOptions = {\n type: type,\n data: data,\n options: options\n };\n\n if (chart.options.code) {\n window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n }\n\n chart.element.innerHTML = \"\";\n var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n chart.chart = new this.library(ctx, chartOptions);\n };\n\n var defaultOptions$1 = {\n chart: {},\n xAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n legend: {\n borderWidth: 0\n },\n tooltip: {\n style: {\n fontSize: \"12px\"\n }\n },\n plotOptions: {\n areaspline: {},\n area: {},\n series: {\n marker: {}\n }\n }\n };\n\n var hideLegend$1 = function (options, legend, hideLegend) {\n if (legend !== undefined) {\n options.legend.enabled = !!legend;\n if (legend && legend !== true) {\n if (legend === \"top\" || legend === \"bottom\") {\n options.legend.verticalAlign = legend;\n } else {\n options.legend.layout = \"vertical\";\n options.legend.verticalAlign = \"middle\";\n options.legend.align = legend;\n }\n }\n } else if (hideLegend) {\n options.legend.enabled = false;\n }\n };\n\n var setTitle$1 = function (options, title) {\n options.title.text = title;\n };\n\n var setMin$1 = function (options, min) {\n options.yAxis.min = min;\n };\n\n var setMax$1 = function (options, max) {\n options.yAxis.max = max;\n };\n\n var setStacked$1 = function (options, stacked) {\n var stackedValue = stacked ? (stacked === true ? \"normal\" : stacked) : null;\n options.plotOptions.series.stacking = stackedValue;\n options.plotOptions.area.stacking = stackedValue;\n options.plotOptions.areaspline.stacking = stackedValue;\n };\n\n var setXtitle$1 = function (options, title) {\n options.xAxis.title.text = title;\n };\n\n var setYtitle$1 = function (options, title) {\n options.yAxis.title.text = title;\n };\n\n var jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\n var setFormatOptions$1 = function(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n if (chartType !== \"pie\" && !options.yAxis.labels.formatter) {\n options.yAxis.labels.formatter = function () {\n return formatValue(\"\", this.value, formatOptions);\n };\n }\n\n if (!options.tooltip.pointFormatter) {\n options.tooltip.pointFormatter = function () {\n return '\\u25CF ' + formatValue(this.series.name + ': ', this.y, formatOptions) + '
';\n };\n }\n };\n\n var defaultExport$1 = function defaultExport(library) {\n this.name = \"highcharts\";\n this.library = library;\n };\n\n defaultExport$1.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n chartType = chartType || \"spline\";\n var chartOptions = {};\n if (chartType === \"areaspline\") {\n chartOptions = {\n plotOptions: {\n areaspline: {\n stacking: \"normal\"\n },\n area: {\n stacking: \"normal\"\n },\n series: {\n marker: {\n enabled: false\n }\n }\n }\n };\n }\n\n if (chart.options.curve === false) {\n if (chartType === \"areaspline\") {\n chartType = \"area\";\n } else if (chartType === \"spline\") {\n chartType = \"line\";\n }\n }\n\n var options = jsOptions$1(chart, chart.options, chartOptions), data, i, j;\n options.xAxis.type = chart.xtype === \"string\" ? \"category\" : (chart.xtype === \"number\" ? \"linear\" : \"datetime\");\n if (!options.chart.type) {\n options.chart.type = chartType;\n }\n setFormatOptions$1(chart, options, chartType);\n\n var series = chart.data;\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n data = series[i].data;\n if (chart.xtype === \"datetime\") {\n for (j = 0; j < data.length; j++) {\n data[j][0] = data[j][0].getTime();\n }\n }\n series[i].marker = {symbol: \"circle\"};\n if (chart.options.points === false) {\n series[i].marker.enabled = false;\n }\n }\n\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderScatterChart = function renderScatterChart (chart) {\n var options = jsOptions$1(chart, chart.options, {});\n options.chart.type = \"scatter\";\n this.drawChart(chart, chart.data, options);\n };\n\n defaultExport$1.prototype.renderPieChart = function renderPieChart (chart) {\n var chartOptions = merge(defaultOptions$1, {});\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n if (chart.options.donut) {\n chartOptions.plotOptions = {pie: {innerSize: \"50%\"}};\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$1(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$1(chartOptions, chart.options.title);\n }\n\n var options = merge(chartOptions, chart.options.library || {});\n setFormatOptions$1(chart, options, \"pie\");\n var series = [{\n type: \"pie\",\n name: chart.options.label || \"Value\",\n data: chart.data\n }];\n\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n chartType = chartType || \"column\";\n var series = chart.data;\n var options = jsOptions$1(chart, chart.options), i, j, s, d, rows = [], categories = [];\n options.chart.type = chartType;\n setFormatOptions$1(chart, options, chartType);\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n if (!rows[d[0]]) {\n rows[d[0]] = new Array(series.length);\n categories.push(d[0]);\n }\n rows[d[0]][i] = d[1];\n }\n }\n\n if (chart.xtype === \"number\") {\n categories.sort(sortByNumber);\n }\n\n options.xAxis.categories = categories;\n\n var newSeries = [], d2;\n for (i = 0; i < series.length; i++) {\n d = [];\n for (j = 0; j < categories.length; j++) {\n d.push(rows[categories[j]][i] || 0);\n }\n\n d2 = {\n name: series[i].name || \"Value\",\n data: d\n };\n if (series[i].stack) {\n d2.stack = series[i].stack;\n }\n\n newSeries.push(d2);\n }\n\n this.drawChart(chart, newSeries, options);\n };\n\n defaultExport$1.prototype.renderBarChart = function renderBarChart (chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport$1.prototype.renderAreaChart = function renderAreaChart (chart) {\n this.renderLineChart(chart, \"areaspline\");\n };\n\n defaultExport$1.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport$1.prototype.drawChart = function drawChart (chart, data, options) {\n this.destroy(chart);\n\n options.chart.renderTo = chart.element.id;\n options.series = data;\n\n if (chart.options.code) {\n window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.Chart(options);\n };\n\n var loaded = {};\n var callbacks = [];\n\n // Set chart options\n var defaultOptions$2 = {\n chartArea: {},\n fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n pointSize: 6,\n legend: {\n textStyle: {\n fontSize: 12,\n color: \"#444\"\n },\n alignment: \"center\",\n position: \"right\"\n },\n curveType: \"function\",\n hAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n gridlines: {\n color: \"transparent\"\n },\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n vAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n tooltip: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n }\n }\n };\n\n var hideLegend$2 = function (options, legend, hideLegend) {\n if (legend !== undefined) {\n var position;\n if (!legend) {\n position = \"none\";\n } else if (legend === true) {\n position = \"right\";\n } else {\n position = legend;\n }\n options.legend.position = position;\n } else if (hideLegend) {\n options.legend.position = \"none\";\n }\n };\n\n var setTitle$2 = function (options, title) {\n options.title = title;\n options.titleTextStyle = {color: \"#333\", fontSize: \"20px\"};\n };\n\n var setMin$2 = function (options, min) {\n options.vAxis.viewWindow.min = min;\n };\n\n var setMax$2 = function (options, max) {\n options.vAxis.viewWindow.max = max;\n };\n\n var setBarMin$1 = function (options, min) {\n options.hAxis.viewWindow.min = min;\n };\n\n var setBarMax$1 = function (options, max) {\n options.hAxis.viewWindow.max = max;\n };\n\n var setStacked$2 = function (options, stacked) {\n options.isStacked = stacked ? stacked : false;\n };\n\n var setXtitle$2 = function (options, title) {\n options.hAxis.title = title;\n options.hAxis.titleTextStyle.italic = false;\n };\n\n var setYtitle$2 = function (options, title) {\n options.vAxis.title = title;\n options.vAxis.titleTextStyle.italic = false;\n };\n\n var jsOptions$2 = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\n var resize = function (callback) {\n if (window.attachEvent) {\n window.attachEvent(\"onresize\", callback);\n } else if (window.addEventListener) {\n window.addEventListener(\"resize\", callback, true);\n }\n callback();\n };\n\n var defaultExport$2 = function defaultExport(library) {\n this.name = \"google\";\n this.library = library;\n };\n\n defaultExport$2.prototype.renderLineChart = function renderLineChart (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n\n if (chart.options.curve === false) {\n chartOptions.curveType = \"none\";\n }\n\n if (chart.options.points === false) {\n chartOptions.pointSize = 0;\n }\n\n var options = jsOptions$2(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n\n this$1.drawChart(chart, \"LineChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderPieChart = function renderPieChart (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n chartArea: {\n top: \"10%\",\n height: \"80%\"\n },\n legend: {}\n };\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n if (chart.options.donut) {\n chartOptions.pieHole = 0.5;\n }\n if (\"legend\" in chart.options) {\n hideLegend$2(chartOptions, chart.options.legend);\n }\n if (chart.options.title) {\n setTitle$2(chartOptions, chart.options.title);\n }\n var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n\n var data = new this$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", \"Value\");\n data.addRows(chart.data);\n\n this$1.drawChart(chart, \"PieChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderColumnChart = function renderColumnChart (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, function () {\n var options = jsOptions$2(chart, chart.options);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n\n this$1.drawChart(chart, \"ColumnChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderBarChart = function renderBarChart (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n hAxis: {\n gridlines: {\n color: \"#ccc\"\n }\n }\n };\n var options = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n\n this$1.drawChart(chart, \"BarChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderAreaChart = function renderAreaChart (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n isStacked: true,\n pointSize: 0,\n areaOpacity: 0.5\n };\n\n var options = jsOptions$2(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n\n this$1.drawChart(chart, \"AreaChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderGeoChart = function renderGeoChart (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, \"geochart\", function () {\n var chartOptions = {\n legend: \"none\",\n colorAxis: {\n colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n }\n };\n var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n\n var data = new this$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", chart.options.label || \"Value\");\n data.addRows(chart.data);\n\n this$1.drawChart(chart, \"GeoChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderScatterChart = function renderScatterChart (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n var options = jsOptions$2(chart, chart.options, chartOptions);\n\n var series = chart.data, rows2 = [], i, j, data, d;\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n d = series[i].data;\n for (j = 0; j < d.length; j++) {\n var row = new Array(series.length + 1);\n row[0] = d[j][0];\n row[i + 1] = d[j][1];\n rows2.push(row);\n }\n }\n\n data = new this$1.library.visualization.DataTable();\n data.addColumn(\"number\", \"\");\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n data.addRows(rows2);\n\n this$1.drawChart(chart, \"ScatterChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderTimeline = function renderTimeline (chart) {\n var this$1 = this;\n\n this.waitForLoaded(chart, \"timeline\", function () {\n var chartOptions = {\n legend: \"none\"\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n\n var data = new this$1.library.visualization.DataTable();\n data.addColumn({type: \"string\", id: \"Name\"});\n data.addColumn({type: \"date\", id: \"Start\"});\n data.addColumn({type: \"date\", id: \"End\"});\n data.addRows(chart.data);\n\n chart.element.style.lineHeight = \"normal\";\n\n this$1.drawChart(chart, \"Timeline\", data, options);\n });\n };\n\n defaultExport$2.prototype.destroy = function destroy (chart) {\n if (chart.chart) {\n chart.chart.clearChart();\n }\n };\n\n defaultExport$2.prototype.drawChart = function drawChart (chart, type, data, options) {\n this.destroy(chart);\n\n if (chart.options.code) {\n window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.visualization[type](chart.element);\n resize(function () {\n chart.chart.draw(data, options);\n });\n };\n\n defaultExport$2.prototype.waitForLoaded = function waitForLoaded (chart, pack, callback) {\n var this$1 = this;\n\n if (!callback) {\n callback = pack;\n pack = \"corechart\";\n }\n\n callbacks.push({pack: pack, callback: callback});\n\n if (loaded[pack]) {\n this.runCallbacks();\n } else {\n loaded[pack] = true;\n\n // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n var loadOptions = {\n packages: [pack],\n callback: function () { this$1.runCallbacks(); }\n };\n var config = chart.__config();\n if (config.language) {\n loadOptions.language = config.language;\n }\n if (pack === \"geochart\" && config.mapsApiKey) {\n loadOptions.mapsApiKey = config.mapsApiKey;\n }\n\n this.library.charts.load(\"current\", loadOptions);\n }\n };\n\n defaultExport$2.prototype.runCallbacks = function runCallbacks () {\n var cb, call;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n call = this.library.visualization && ((cb.pack === \"corechart\" && this.library.visualization.LineChart) || (cb.pack === \"timeline\" && this.library.visualization.Timeline) || (cb.pack === \"geochart\" && this.library.visualization.GeoChart));\n if (call) {\n cb.callback();\n callbacks.splice(i, 1);\n i--;\n }\n }\n };\n\n // cant use object as key\n defaultExport$2.prototype.createDataTable = function createDataTable (series, columnType) {\n var i, j, s, d, key, rows = [], sortedLabels = [];\n for (i = 0; i < series.length; i++) {\n s = series[i];\n series[i].name = series[i].name || \"Value\";\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = (columnType === \"datetime\") ? d[0].getTime() : d[0];\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n sortedLabels.push(key);\n }\n rows[key][i] = toFloat(d[1]);\n }\n }\n\n var rows2 = [];\n var day = true;\n var value;\n for (j = 0; j < sortedLabels.length; j++) {\n i = sortedLabels[j];\n if (columnType === \"datetime\") {\n value = new Date(toFloat(i));\n day = day && isDay(value);\n } else if (columnType === \"number\") {\n value = toFloat(i);\n } else {\n value = i;\n }\n rows2.push([value].concat(rows[i]));\n }\n if (columnType === \"datetime\") {\n rows2.sort(sortByTime);\n } else if (columnType === \"number\") {\n rows2.sort(sortByNumberSeries);\n\n for (i = 0; i < rows2.length; i++) {\n rows2[i][0] = toStr(rows2[i][0]);\n }\n\n columnType = \"string\";\n }\n\n // create datatable\n var data = new this.library.visualization.DataTable();\n columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n data.addColumn(columnType, \"\");\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n data.addRows(rows2);\n\n return data;\n };\n\n var pendingRequests = [], runningRequests = 0, maxRequests = 4;\n\n function pushRequest(url, success, error) {\n pendingRequests.push([url, success, error]);\n runNext();\n }\n\n function runNext() {\n if (runningRequests < maxRequests) {\n var request = pendingRequests.shift();\n if (request) {\n runningRequests++;\n getJSON(request[0], request[1], request[2]);\n runNext();\n }\n }\n }\n\n function requestComplete() {\n runningRequests--;\n runNext();\n }\n\n function getJSON(url, success, error) {\n ajaxCall(url, success, function (jqXHR, textStatus, errorThrown) {\n var message = (typeof errorThrown === \"string\") ? errorThrown : errorThrown.message;\n error(message);\n });\n }\n\n function ajaxCall(url, success, error) {\n var $ = window.jQuery || window.Zepto || window.$;\n\n if ($ && $.ajax) {\n $.ajax({\n dataType: \"json\",\n url: url,\n success: success,\n error: error,\n complete: requestComplete\n });\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.onload = function () {\n requestComplete();\n if (xhr.status === 200) {\n success(JSON.parse(xhr.responseText), xhr.statusText, xhr);\n } else {\n error(xhr, \"error\", xhr.statusText);\n }\n };\n xhr.send();\n }\n }\n\n var config = {};\n var adapters = [];\n\n // helpers\n\n function setText(element, text) {\n if (document.body.innerText) {\n element.innerText = text;\n } else {\n element.textContent = text;\n }\n }\n\n // TODO remove prefix for all messages\n function chartError(element, message, noPrefix) {\n if (!noPrefix) {\n message = \"Error Loading Chart: \" + message;\n }\n setText(element, message);\n element.style.color = \"#ff0000\";\n }\n\n function errorCatcher(chart) {\n try {\n chart.__render();\n } catch (err) {\n chartError(chart.element, err.message);\n throw err;\n }\n }\n\n function fetchDataSource(chart, dataSource) {\n if (typeof dataSource === \"string\") {\n pushRequest(dataSource, function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message);\n });\n } else if (typeof dataSource === \"function\") {\n try {\n dataSource(function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message, true);\n });\n } catch (err) {\n chartError(chart.element, err, true);\n }\n } else {\n chart.rawData = dataSource;\n errorCatcher(chart);\n }\n }\n\n function addDownloadButton(chart) {\n var element = chart.element;\n var link = document.createElement(\"a\");\n\n var download = chart.options.download;\n if (download === true) {\n download = {};\n } else if (typeof download === \"string\") {\n download = {filename: download};\n }\n link.download = download.filename || \"chart.png\"; // https://caniuse.com/download\n\n link.style.position = \"absolute\";\n link.style.top = \"20px\";\n link.style.right = \"20px\";\n link.style.zIndex = 1000;\n link.style.lineHeight = \"20px\";\n link.target = \"_blank\"; // for safari\n var image = document.createElement(\"img\");\n image.alt = \"Download\";\n image.style.border = \"none\";\n // icon from font-awesome\n // http://fa2png.io/\n image.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABCFBMVEUAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMywEsqxAAAAV3RSTlMAAQIDBggJCgsMDQ4PERQaHB0eISIjJCouLzE0OTo/QUJHSUpLTU5PUllhYmltcHh5foWLjI+SlaCio6atr7S1t7m6vsHHyM7R2tze5Obo7fHz9ff5+/1hlxK2AAAA30lEQVQYGUXBhVYCQQBA0TdYWAt2d3d3YWAHyur7/z9xgD16Lw0DW+XKx+1GgX+FRzM3HWQWrHl5N/oapW5RPe0PkBu+UYeICvozTWZVK23Ao04B79oJrOsJDOoxkZoQPWgX29pHpCZEk7rEvQYiNSFq1UMqvlCjJkRBS1R8hb00Vb/TajtBL7nTHE1X1vyMQF732dQhyF2o6SAwrzP06iUQzvwsArlnzcOdrgBhJyHa1QOgO9U1GsKuvjUTjavliZYQ8nNPapG6sap/3nrIdJ6bOWzmX/fy0XVpfzZP3S8OJT3g9EEiJwAAAABJRU5ErkJggg==\";\n link.appendChild(image);\n element.style.position = \"relative\";\n\n chart.__downloadAttached = true;\n\n // mouseenter\n chart.__enterEvent = addEvent(element, \"mouseover\", function(e) {\n var related = e.relatedTarget;\n // check download option again to ensure it wasn't changed\n if ((!related || (related !== this && !childOf(this, related))) && chart.options.download) {\n link.href = chart.toImage(download);\n element.appendChild(link);\n }\n });\n\n // mouseleave\n chart.__leaveEvent = addEvent(element, \"mouseout\", function(e) {\n var related = e.relatedTarget;\n if (!related || (related !== this && !childOf(this, related))) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n }\n });\n }\n\n // https://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser\n function addEvent(elem, event, fn) {\n if (elem.addEventListener) {\n elem.addEventListener(event, fn, false);\n return fn;\n } else {\n var fn2 = function() {\n // set the this pointer same as addEventListener when fn is called\n return(fn.call(elem, window.event));\n };\n elem.attachEvent(\"on\" + event, fn2);\n return fn2;\n }\n }\n\n function removeEvent(elem, event, fn) {\n if (elem.removeEventListener) {\n elem.removeEventListener(event, fn, false);\n } else {\n elem.detachEvent(\"on\" + event, fn);\n }\n }\n\n // https://gist.github.com/shawnbot/4166283\n function childOf(p, c) {\n if (p === c) { return false; }\n while (c && c !== p) { c = c.parentNode; }\n return c === p;\n }\n\n function getAdapterType(library) {\n if (library) {\n if (library.product === \"Highcharts\") {\n return defaultExport$1;\n } else if (library.charts) {\n return defaultExport$2;\n } else if (isFunction(library)) {\n return defaultExport;\n }\n }\n throw new Error(\"Unknown adapter\");\n }\n\n function addAdapter(library) {\n var adapterType = getAdapterType(library);\n var adapter = new adapterType(library);\n\n if (adapters.indexOf(adapter) === -1) {\n adapters.push(adapter);\n }\n }\n\n function loadAdapters() {\n if (\"Chart\" in window) {\n addAdapter(window.Chart);\n }\n\n if (\"Highcharts\" in window) {\n addAdapter(window.Highcharts);\n }\n\n if (window.google && window.google.charts) {\n addAdapter(window.google);\n }\n }\n\n function dataEmpty(data, chartType) {\n if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n return data.length === 0;\n } else {\n for (var i = 0; i < data.length; i++) {\n if (data[i].data.length > 0) {\n return false;\n }\n }\n return true;\n }\n }\n\n function renderChart(chartType, chart) {\n if (chart.options.messages && chart.options.messages.empty && dataEmpty(chart.data, chartType)) {\n setText(chart.element, chart.options.messages.empty);\n } else {\n callAdapter(chartType, chart);\n if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n addDownloadButton(chart);\n }\n }\n }\n\n // TODO remove chartType if cross-browser way\n // to get the name of the chart class\n function callAdapter(chartType, chart) {\n var i, adapter, fnName, adapterName;\n fnName = \"render\" + chartType;\n adapterName = chart.options.adapter;\n\n loadAdapters();\n\n for (i = 0; i < adapters.length; i++) {\n adapter = adapters[i];\n if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n chart.adapter = adapter.name;\n chart.__adapterObject = adapter;\n return adapter[fnName](chart);\n }\n }\n\n if (adapters.length > 0) {\n throw new Error(\"No charting library found for \" + chartType);\n } else {\n throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n }\n }\n\n // process data\n\n var toFormattedKey = function (key, keyType) {\n if (keyType === \"number\") {\n key = toFloat(key);\n } else if (keyType === \"datetime\") {\n key = toDate(key);\n } else {\n key = toStr(key);\n }\n return key;\n };\n\n var formatSeriesData = function (data, keyType) {\n var r = [], key, j;\n for (j = 0; j < data.length; j++) {\n if (keyType === \"bubble\") {\n r.push([toFloat(data[j][0]), toFloat(data[j][1]), toFloat(data[j][2])]);\n } else {\n key = toFormattedKey(data[j][0], keyType);\n r.push([key, toFloat(data[j][1])]);\n }\n }\n if (keyType === \"datetime\") {\n r.sort(sortByTime);\n } else if (keyType === \"number\") {\n r.sort(sortByNumberSeries);\n }\n return r;\n };\n\n function detectXType(series, noDatetime, options) {\n if (dataEmpty(series)) {\n if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n return \"datetime\";\n } else {\n return \"number\";\n }\n } else if (detectXTypeWithFunction(series, isNumber)) {\n return \"number\";\n } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n return \"datetime\";\n } else {\n return \"string\";\n }\n }\n\n function detectXTypeWithFunction(series, func) {\n var i, j, data;\n for (i = 0; i < series.length; i++) {\n data = toArr(series[i].data);\n for (j = 0; j < data.length; j++) {\n if (!func(data[j][0])) {\n return false;\n }\n }\n }\n return true;\n }\n\n // creates a shallow copy of each element of the array\n // elements are expected to be objects\n function copySeries(series) {\n var newSeries = [], i, j;\n for (i = 0; i < series.length; i++) {\n var copy = {};\n for (j in series[i]) {\n if (series[i].hasOwnProperty(j)) {\n copy[j] = series[i][j];\n }\n }\n newSeries.push(copy);\n }\n return newSeries;\n }\n\n function processSeries(chart, keyType, noDatetime) {\n var i;\n\n var opts = chart.options;\n var series = chart.rawData;\n\n // see if one series or multiple\n if (!isArray(series) || typeof series[0] !== \"object\" || isArray(series[0])) {\n series = [{name: opts.label, data: series}];\n chart.hideLegend = true;\n } else {\n chart.hideLegend = false;\n }\n\n // convert to array\n // must come before dataEmpty check\n series = copySeries(series);\n for (i = 0; i < series.length; i++) {\n series[i].data = toArr(series[i].data);\n }\n\n chart.xtype = keyType ? keyType : (opts.discrete ? \"string\" : detectXType(series, noDatetime, opts));\n\n // right format\n for (i = 0; i < series.length; i++) {\n series[i].data = formatSeriesData(series[i].data, chart.xtype);\n }\n\n return series;\n }\n\n function processSimple(chart) {\n var perfectData = toArr(chart.rawData), i;\n for (i = 0; i < perfectData.length; i++) {\n perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n }\n return perfectData;\n }\n\n // define classes\n\n var Chart = function Chart(element, dataSource, options) {\n var elementId;\n if (typeof element === \"string\") {\n elementId = element;\n element = document.getElementById(element);\n if (!element) {\n throw new Error(\"No element with id \" + elementId);\n }\n }\n this.element = element;\n this.options = merge(Chartkick.options, options || {});\n this.dataSource = dataSource;\n\n Chartkick.charts[element.id] = this;\n\n fetchDataSource(this, dataSource);\n\n if (this.options.refresh) {\n this.startRefresh();\n }\n };\n\n Chart.prototype.getElement = function getElement () {\n return this.element;\n };\n\n Chart.prototype.getDataSource = function getDataSource () {\n return this.dataSource;\n };\n\n Chart.prototype.getData = function getData () {\n return this.data;\n };\n\n Chart.prototype.getOptions = function getOptions () {\n return this.options;\n };\n\n Chart.prototype.getChartObject = function getChartObject () {\n return this.chart;\n };\n\n Chart.prototype.getAdapter = function getAdapter () {\n return this.adapter;\n };\n\n Chart.prototype.updateData = function updateData (dataSource, options) {\n this.dataSource = dataSource;\n if (options) {\n this.__updateOptions(options);\n }\n fetchDataSource(this, dataSource);\n };\n\n Chart.prototype.setOptions = function setOptions (options) {\n this.__updateOptions(options);\n this.redraw();\n };\n\n Chart.prototype.redraw = function redraw () {\n fetchDataSource(this, this.rawData);\n };\n\n Chart.prototype.refreshData = function refreshData () {\n if (typeof this.dataSource === \"string\") {\n // prevent browser from caching\n var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n var url = this.dataSource + sep + \"_=\" + (new Date()).getTime();\n fetchDataSource(this, url);\n } else if (typeof this.dataSource === \"function\") {\n fetchDataSource(this, this.dataSource);\n }\n };\n\n Chart.prototype.startRefresh = function startRefresh () {\n var this$1 = this;\n\n var refresh = this.options.refresh;\n\n if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n throw new Error(\"Data source must be a URL or callback for refresh\");\n }\n\n if (!this.intervalId) {\n if (refresh) {\n this.intervalId = setInterval( function () {\n this$1.refreshData();\n }, refresh * 1000);\n } else {\n throw new Error(\"No refresh interval\");\n }\n }\n };\n\n Chart.prototype.stopRefresh = function stopRefresh () {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n };\n\n Chart.prototype.toImage = function toImage (download) {\n if (this.adapter === \"chartjs\") {\n if (download && download.background && download.background !== \"transparent\") {\n // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n var canvas = this.chart.chart.canvas;\n var ctx = this.chart.chart.ctx;\n var tmpCanvas = document.createElement(\"canvas\");\n var tmpCtx = tmpCanvas.getContext(\"2d\");\n tmpCanvas.width = ctx.canvas.width;\n tmpCanvas.height = ctx.canvas.height;\n tmpCtx.fillStyle = download.background;\n tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n tmpCtx.drawImage(canvas, 0, 0);\n return tmpCanvas.toDataURL(\"image/png\");\n } else {\n return this.chart.toBase64Image();\n }\n } else {\n // TODO throw error in next major version\n // throw new Error(\"Feature only available for Chart.js\");\n return null;\n }\n };\n\n Chart.prototype.destroy = function destroy () {\n if (this.__adapterObject) {\n this.__adapterObject.destroy(this);\n }\n\n if (this.__enterEvent) {\n removeEvent(this.element, \"mouseover\", this.__enterEvent);\n }\n\n if (this.__leaveEvent) {\n removeEvent(this.element, \"mouseout\", this.__leaveEvent);\n }\n };\n\n Chart.prototype.__updateOptions = function __updateOptions (options) {\n var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n this.options = merge(Chartkick.options, options);\n if (updateRefresh) {\n this.stopRefresh();\n this.startRefresh();\n }\n };\n\n Chart.prototype.__render = function __render () {\n this.data = this.__processData();\n renderChart(this.__chartName(), this);\n };\n\n Chart.prototype.__config = function __config () {\n return config;\n };\n\n var LineChart = /*@__PURE__*/(function (Chart) {\n function LineChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) LineChart.__proto__ = Chart;\n LineChart.prototype = Object.create( Chart && Chart.prototype );\n LineChart.prototype.constructor = LineChart;\n\n LineChart.prototype.__processData = function __processData () {\n return processSeries(this);\n };\n\n LineChart.prototype.__chartName = function __chartName () {\n return \"LineChart\";\n };\n\n return LineChart;\n }(Chart));\n\n var PieChart = /*@__PURE__*/(function (Chart) {\n function PieChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) PieChart.__proto__ = Chart;\n PieChart.prototype = Object.create( Chart && Chart.prototype );\n PieChart.prototype.constructor = PieChart;\n\n PieChart.prototype.__processData = function __processData () {\n return processSimple(this);\n };\n\n PieChart.prototype.__chartName = function __chartName () {\n return \"PieChart\";\n };\n\n return PieChart;\n }(Chart));\n\n var ColumnChart = /*@__PURE__*/(function (Chart) {\n function ColumnChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) ColumnChart.__proto__ = Chart;\n ColumnChart.prototype = Object.create( Chart && Chart.prototype );\n ColumnChart.prototype.constructor = ColumnChart;\n\n ColumnChart.prototype.__processData = function __processData () {\n return processSeries(this, null, true);\n };\n\n ColumnChart.prototype.__chartName = function __chartName () {\n return \"ColumnChart\";\n };\n\n return ColumnChart;\n }(Chart));\n\n var BarChart = /*@__PURE__*/(function (Chart) {\n function BarChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) BarChart.__proto__ = Chart;\n BarChart.prototype = Object.create( Chart && Chart.prototype );\n BarChart.prototype.constructor = BarChart;\n\n BarChart.prototype.__processData = function __processData () {\n return processSeries(this, null, true);\n };\n\n BarChart.prototype.__chartName = function __chartName () {\n return \"BarChart\";\n };\n\n return BarChart;\n }(Chart));\n\n var AreaChart = /*@__PURE__*/(function (Chart) {\n function AreaChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) AreaChart.__proto__ = Chart;\n AreaChart.prototype = Object.create( Chart && Chart.prototype );\n AreaChart.prototype.constructor = AreaChart;\n\n AreaChart.prototype.__processData = function __processData () {\n return processSeries(this);\n };\n\n AreaChart.prototype.__chartName = function __chartName () {\n return \"AreaChart\";\n };\n\n return AreaChart;\n }(Chart));\n\n var GeoChart = /*@__PURE__*/(function (Chart) {\n function GeoChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) GeoChart.__proto__ = Chart;\n GeoChart.prototype = Object.create( Chart && Chart.prototype );\n GeoChart.prototype.constructor = GeoChart;\n\n GeoChart.prototype.__processData = function __processData () {\n return processSimple(this);\n };\n\n GeoChart.prototype.__chartName = function __chartName () {\n return \"GeoChart\";\n };\n\n return GeoChart;\n }(Chart));\n\n var ScatterChart = /*@__PURE__*/(function (Chart) {\n function ScatterChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) ScatterChart.__proto__ = Chart;\n ScatterChart.prototype = Object.create( Chart && Chart.prototype );\n ScatterChart.prototype.constructor = ScatterChart;\n\n ScatterChart.prototype.__processData = function __processData () {\n return processSeries(this, \"number\");\n };\n\n ScatterChart.prototype.__chartName = function __chartName () {\n return \"ScatterChart\";\n };\n\n return ScatterChart;\n }(Chart));\n\n var BubbleChart = /*@__PURE__*/(function (Chart) {\n function BubbleChart () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) BubbleChart.__proto__ = Chart;\n BubbleChart.prototype = Object.create( Chart && Chart.prototype );\n BubbleChart.prototype.constructor = BubbleChart;\n\n BubbleChart.prototype.__processData = function __processData () {\n return processSeries(this, \"bubble\");\n };\n\n BubbleChart.prototype.__chartName = function __chartName () {\n return \"BubbleChart\";\n };\n\n return BubbleChart;\n }(Chart));\n\n var Timeline = /*@__PURE__*/(function (Chart) {\n function Timeline () {\n Chart.apply(this, arguments);\n }\n\n if ( Chart ) Timeline.__proto__ = Chart;\n Timeline.prototype = Object.create( Chart && Chart.prototype );\n Timeline.prototype.constructor = Timeline;\n\n Timeline.prototype.__processData = function __processData () {\n var i, data = this.rawData;\n for (i = 0; i < data.length; i++) {\n data[i][1] = toDate(data[i][1]);\n data[i][2] = toDate(data[i][2]);\n }\n return data;\n };\n\n Timeline.prototype.__chartName = function __chartName () {\n return \"Timeline\";\n };\n\n return Timeline;\n }(Chart));\n\n var Chartkick = {\n LineChart: LineChart,\n PieChart: PieChart,\n ColumnChart: ColumnChart,\n BarChart: BarChart,\n AreaChart: AreaChart,\n GeoChart: GeoChart,\n ScatterChart: ScatterChart,\n BubbleChart: BubbleChart,\n Timeline: Timeline,\n charts: {},\n configure: function (options) {\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n config[key] = options[key];\n }\n }\n },\n setDefaultOptions: function (opts) {\n Chartkick.options = opts;\n },\n eachChart: function (callback) {\n for (var chartId in Chartkick.charts) {\n if (Chartkick.charts.hasOwnProperty(chartId)) {\n callback(Chartkick.charts[chartId]);\n }\n }\n },\n config: config,\n options: {},\n adapters: adapters,\n addAdapter: addAdapter,\n use: function(adapter) {\n addAdapter(adapter);\n return Chartkick;\n }\n };\n\n // not ideal, but allows for simpler integration\n if (typeof window !== \"undefined\" && !window.Chartkick) {\n window.Chartkick = Chartkick;\n }\n\n // backwards compatibility for esm require\n Chartkick.default = Chartkick;\n\n return Chartkick;\n\n})));\n"],"sourceRoot":""}