{"version":3,"sources":["webpack:////Users/owenli/Documents/workspace/awi-wool-fe/src/views/blocks/chartBlock/js/chartBlock.js","webpack:////Users/owenli/Documents/workspace/awi-wool-fe/src/views/blocks/marketOfferingChartBlock/js/marketOfferingChartBlock.js","webpack:///./wool/mediaQuery.js","webpack:///./wool/numberFormatter.js","webpack:///./wool/colorGenerator.js","webpack:////Users/owenli/Documents/workspace/awi-wool-fe/node_modules/moment/locale sync ^\\.\\/.*$"],"names":["CLS","d3","require","uuidv4","moment","ChartBlock","element","_this","this","className","arguments","length","undefined","_classCallCheck","$element","$","$chart","find","setChartId","setEmptyMessages","setEmptyData","isDataEmpty","margin","top","right","bottom","left","mediaQuery","numberFormatter","colorGenerator","heightRatio","on","concat","event","params","updateChartData","key","value","data","_","isNil","isEmpty","cloneDeep","emptyData","initChart","removeMessage","appendMessage","chartId","attr","select","emptyMessage","errorMessage","values","i","push","xValue","yValue","isError","append","remove","_this2","css","visibility","drawChart","window","debounce","clearSvg","setChartDimensions","drawSvg","defineXAxesScales","defineYAxesScales","drawXAxes","drawYAxes","width","height","svg","xAxisBottom","scaleLinear","range","domain","extent","datum","nice","yAxisLeft","call","axisBottom","axisLeft","date","format","textElement","maxWidth","x","y","words","text","tspan","textLength","node","getComputedTextLength","slice","power","tickCount","intervals","Math","pow","getLinearTick","MarketOfferingChartBlock","_ChartBlock","_callSuper","api","dotRadius","dotFocusRadius","urlParams","$filtersSelect","setFilterValueEvent","initFilterChangeEvent","getChartDataFromApi","_inherits","each","index","filterKey","val","isArray","join","_this3","currentTarget","_this4","url","param","ajax","type","dataType","success","response","trigger","error","placeholderData","month","day","$tooltip","drawTooltip","defineColors","drawPaths","drawPoints","drawLabels","tooltip","getChartNode","forEach","_this5","getXAxisBottomData","xMinTickValue","xMaxTickValue","add","subtract","scaleTime","getMomentDate","toDate","getYAxisLeftData","yMinTickValue","minBy","yMaxTickValue","maxBy","yTickValue","ceil","floor","toString","outerIndex","_this6","xMinTickDate","xMaxTickDate","duration","diff","ticks","timeDay","every","tickFormat","asMonths","asYears","selectAll","nodes","style","breakpointMaxWidth","BREAKPOINTS","SM","_this7","formatNumbersWithCommas","tickSize","tickPadding","tickValues","_this8","reset","colors","next","_this9","line","innerDatum","curve","curveCatmullRom","alpha","_this10","enter","innerIndex","valueLabel","html","tooltipWidth","outerWidth","tooltipHeight","outerHeight","leftPosition","mouse","topPosition","_this11","dataLength","textItemWidth","legendItemMaxColumns","xAxisWidth","getBoundingClientRect","marginSpacer","legendItemRowIndex","legendGroup","adjustSvgHeight","svgHeight","parseInt","legendItem","label","textWrap","lineWidth","MediaQuery","XS","MD","LG","XL","breakpoint","max","document","documentElement","clientWidth","innerWidth","isFinite","NumberFormatter","number","parts","split","replace","ColorGenerator","cycleIndex","goldenRatioConjugate","blue","red","green","orange","yellow","purple","selectedColor","hsl","object","r","g","b","h","s","l","min","d","rgbToHsl","hexColor","RegExp","test","substr","oldHue","hueWheel","offset","getNewSaturation","getNewLumination","componentToHex","color","hue2rgb","p","q","t","round","hslToRgb","hex","map","./af","./af.js","./ar","./ar-dz","./ar-dz.js","./ar-kw","./ar-kw.js","./ar-ly","./ar-ly.js","./ar-ma","./ar-ma.js","./ar-ps","./ar-ps.js","./ar-sa","./ar-sa.js","./ar-tn","./ar-tn.js","./ar.js","./az","./az.js","./be","./be.js","./bg","./bg.js","./bm","./bm.js","./bn","./bn-bd","./bn-bd.js","./bn.js","./bo","./bo.js","./br","./br.js","./bs","./bs.js","./ca","./ca.js","./cs","./cs.js","./cv","./cv.js","./cy","./cy.js","./da","./da.js","./de","./de-at","./de-at.js","./de-ch","./de-ch.js","./de.js","./dv","./dv.js","./el","./el.js","./en-au","./en-au.js","./en-ca","./en-ca.js","./en-gb","./en-gb.js","./en-ie","./en-ie.js","./en-il","./en-il.js","./en-in","./en-in.js","./en-nz","./en-nz.js","./en-sg","./en-sg.js","./eo","./eo.js","./es","./es-do","./es-do.js","./es-mx","./es-mx.js","./es-us","./es-us.js","./es.js","./et","./et.js","./eu","./eu.js","./fa","./fa.js","./fi","./fi.js","./fil","./fil.js","./fo","./fo.js","./fr","./fr-ca","./fr-ca.js","./fr-ch","./fr-ch.js","./fr.js","./fy","./fy.js","./ga","./ga.js","./gd","./gd.js","./gl","./gl.js","./gom-deva","./gom-deva.js","./gom-latn","./gom-latn.js","./gu","./gu.js","./he","./he.js","./hi","./hi.js","./hr","./hr.js","./hu","./hu.js","./hy-am","./hy-am.js","./id","./id.js","./is","./is.js","./it","./it-ch","./it-ch.js","./it.js","./ja","./ja.js","./jv","./jv.js","./ka","./ka.js","./kk","./kk.js","./km","./km.js","./kn","./kn.js","./ko","./ko.js","./ku","./ku-kmr","./ku-kmr.js","./ku.js","./ky","./ky.js","./lb","./lb.js","./lo","./lo.js","./lt","./lt.js","./lv","./lv.js","./me","./me.js","./mi","./mi.js","./mk","./mk.js","./ml","./ml.js","./mn","./mn.js","./mr","./mr.js","./ms","./ms-my","./ms-my.js","./ms.js","./mt","./mt.js","./my","./my.js","./nb","./nb.js","./ne","./ne.js","./nl","./nl-be","./nl-be.js","./nl.js","./nn","./nn.js","./oc-lnc","./oc-lnc.js","./pa-in","./pa-in.js","./pl","./pl.js","./pt","./pt-br","./pt-br.js","./pt.js","./ro","./ro.js","./ru","./ru.js","./sd","./sd.js","./se","./se.js","./si","./si.js","./sk","./sk.js","./sl","./sl.js","./sq","./sq.js","./sr","./sr-cyrl","./sr-cyrl.js","./sr.js","./ss","./ss.js","./sv","./sv.js","./sw","./sw.js","./ta","./ta.js","./te","./te.js","./tet","./tet.js","./tg","./tg.js","./th","./th.js","./tk","./tk.js","./tl-ph","./tl-ph.js","./tlh","./tlh.js","./tr","./tr.js","./tzl","./tzl.js","./tzm","./tzm-latn","./tzm-latn.js","./tzm.js","./ug-cn","./ug-cn.js","./uk","./uk.js","./ur","./ur.js","./uz","./uz-latn","./uz-latn.js","./uz.js","./vi","./vi.js","./x-pseudo","./x-pseudo.js","./yo","./yo.js","./zh-cn","./zh-cn.js","./zh-hk","./zh-hk.js","./zh-mo","./zh-mo.js","./zh-tw","./zh-tw.js","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports"],"mappings":"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CAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,QAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,WAAA,IACAC,cAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,WAAA,IACAC,cAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,IACAC,eAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,QAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,QAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,QAAA,IACAC,WAAA,IACAC,QAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,WAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,IACAC,eAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,KAIA,SAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAF,GACA,OAAAG,EAAAF,GAEA,SAAAC,EAAAF,GACA,IAAAG,EAAAC,EAAAxR,EAAAoR,GAAA,CACA,IAAAK,EAAA,IAAAC,MAAA,uBAAAN,EAAA,KAEA,MADAK,EAAAE,KAAA,mBACAF,EAEA,OAAAzR,EAAAoR,GAEAD,EAAAS,KAAA,WACA,OAAAC,OAAAD,KAAA5R,IAEAmR,EAAAW,QAAAR,EACAS,EAAAC,QAAAb,EACAA,EAAAE,GAAA","file":"block-16.430117f348aedc9992ce.js","sourcesContent":["const NS = 'ChartBlock';\nconst CLS = 'chartBlock';\n\nlet d3 = require('d3');\nlet uuidv4 = require('uuid/v4');\nlet moment = require('moment');\n\nimport { mediaQuery } from '../../../../global/js/wool/mediaQuery';\nimport { numberFormatter } from '../../../../global/js/wool/numberFormatter';\nimport { colorGenerator } from '../../../../global/js/wool/colorGenerator';\n\nexport class ChartBlock {\n\tconstructor(element, className = CLS) {\n\t\tthis.element = element;\n\t\tthis.$element = $(element);\n\t\tthis.$chart = this.$element.find(`.chart`);\n\n\t\tthis.setChartId();\n\t\tthis.setEmptyMessages();\n\t\tthis.setEmptyData();\n\n\t\tthis.isDataEmpty = false;\n\t\tthis.margin = {\n\t\t\ttop: 30,\n\t\t\tright: 30,\n\t\t\tbottom: 50,\n\t\t\tleft: 50\n\t\t};\n\n\t\tthis.mediaQuery = mediaQuery;\n\t\tthis.numberFormatter = numberFormatter;\n\t\tthis.colorGenerator = colorGenerator;\n\n\t\tthis.heightRatio = 0.66; // Height ratio relative to width, in this case it would be 3:2\n\n\t\t// Updates the chart from an external source\n\t\tthis.$element.on(`${className}.update`, (event, params) => {\n\t\t\tthis.updateChartData(params);\n\t\t});\n\t}\n\n\tupdateChartData(params) {\n\t\tlet data = params.data;\n\n\t\tif(!_.isNil(data)) {\n\t\t\tthis.isDataEmpty = false;\n\t\t\tthis.data = data;\n\t\t\tthis.removeMessage();\n\t\t\tthis.initChart();\n\t\t}\n\t\telse {\n\t\t\tif(!params.isEmpty) {\n\t\t\t\tconsole.error(`${NS}::Error`, 'Chart data could not be loaded.');\n\t\t\t}\n\t\t\tthis.isDataEmpty = true;\n\t\t\tthis.data = _.cloneDeep(this.emptyData);\n\t\t\tthis.initChart();\n\t\t\tthis.removeMessage();\n\n\t\t\tif(params.isEmpty) {\n\t\t\t\tthis.appendMessage(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.appendMessage(true);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Ensures that the chart contains a unique id\n\tsetChartId() {\n\t\tthis.chartId = uuidv4();\n\t\tthis.$chart.attr('data-uuid', this.chartId);\n\t}\n\n\tgetChartNode() {\n\t\treturn d3.select(`[data-uuid=\"${this.chartId}\"]`);\n\t}\n\n\t// Sets the generic error messages\n\tsetEmptyMessages() {\n\t\tthis.emptyMessage = !_.isNil(this.$chart.attr('data-empty-message')) ? this.$chart.attr('data-empty-message') : 'No items loaded';\n\t\tthis.errorMessage = !_.isNil(this.$chart.attr('data-error-message')) ? this.$chart.attr('data-error-message') : 'Error in loading chart…';\n\t}\n\n\t// Sets empty data for the chart to render. Overridable\n\tsetEmptyData() {\n\t\tlet values = [];\n\n\t\tfor(let i = 0; i < 6; i++) {\n\t\t\tvalues.push({\n\t\t\t\txValue: i + 1,\n\t\t\t\tyValue: i + 1\n\t\t\t});\n\t\t}\n\n\t\tthis.emptyData = values;\n\t}\n\n\tappendMessage(isError) {\n\t\tlet emptyMessage = '';\n\t\tif(isError) {\n\t\t\temptyMessage = this.errorMessage;\n\t\t}\n\t\telse {\n\t\t\temptyMessage = this.emptyMessage;\n\t\t}\n\n\t\tthis.$chart.append(`
${emptyMessage}
`);\n\t}\n\n\tremoveMessage() {\n\t\tthis.$chart.remove(`.chart-message`);\n\t}\n\n\t// Initializes the chart by revealing it, drawing it and implementing an event that redraws it when the window resizes\n\tinitChart() {\n\t\tthis.$chart.css({ visibility: 'visible' });\n\t\tthis.drawChart();\n\t\t$(window).on('resize', _.debounce(() => {\n\t\t\tthis.drawChart();\n\t\t}, 500));\n\t}\n\n\t// Overridable draw chart function\n\tdrawChart() {\n\t\tthis.clearSvg();\n\t\tthis.setChartDimensions();\n\t\tthis.drawSvg();\n\n\t\tthis.defineXAxesScales();\n\t\tthis.defineYAxesScales();\n\n\t\tthis.drawXAxes();\n\t\tthis.drawYAxes();\n\t}\n\n\tclearSvg() {\n\t\td3.select(`[data-uuid=\"${this.chartId}\"]`).select('svg').remove(); // Removes the chart\n\t}\n\n\tsetChartDimensions() {\n\t\tthis.width = this.$element.width() - this.margin.left - this.margin.right;\n\t\tthis.height = (this.$element.width() * this.heightRatio) - this.margin.top - this.margin.bottom;\n\t}\n\n\tdrawSvg() {\n\t\tthis.svg = d3.select(`[data-uuid=\"${this.chartId}\"]`)\n\t\t\t.append('svg')\n\t\t\t.attr('width', this.width + this.margin.left + this.margin.right)\n\t\t\t.attr('height', this.height + this.margin.top + this.margin.bottom)\n\t\t\t.append('g')\n\t\t\t.attr('transform', `translate(${this.margin.left},${this.margin.top})`);\n\t}\n\n\tdefineXAxesScales() {\n\t\tthis.xAxisBottom = d3.scaleLinear()\n\t\t\t.range([0, this.width])\n\t\t\t.domain(d3.extent(this.data, (datum) => {\n\t\t\t\treturn datum.xValue;\n\t\t\t})).nice();\n\t}\n\n\tdefineYAxesScales() {\n\t\tthis.yAxisLeft = d3.scaleLinear()\n\t\t\t.range([this.height, 0])\n\t\t\t.domain(d3.extent(this.data, (datum) => {\n\t\t\t\treturn datum.yValue;\n\t\t\t})).nice();\n\t}\n\n\tdrawXAxes() {\n\t\tthis.svg.append('g')\n\t\t\t.attr('class', 'x-axis x-axis--bottom')\n\t\t\t.attr('transform', `translate(0, ${this.height})`)\n\t\t\t.call(d3.axisBottom(this.xAxisBottom));\n\t}\n\n\tdrawYAxes() {\n\t\tthis.svg.append('g')\n\t\t\t.attr('class', 'y-axis')\n\t\t\t.call(d3.axisLeft(this.yAxisLeft));\n\t}\n\n\t// Util method to format moment dates\n\tgetMomentDate(date, format = 'DD/MM/YYYY') {\n\t\treturn moment(date, format);\n\t}\n\n\t// Creates an inner tspan element for the text element and clips the text\n\ttextWrap(textElement, maxWidth, x, y) {\n\t\tlet words = textElement.text();\n\t\tlet tspan = textElement.text(null).append('tspan').text(words).attr('x', x).attr('y', y);\n\n\t\tlet textLength = tspan.node().getComputedTextLength();\n\t\tlet text = tspan.text();\n\t\twhile(textLength > maxWidth && text.length > 0) {\n\t\t\ttext = text.slice(0, -1);\n\t\t\ttspan.text(text + '…');\n\t\t\ttextLength = tspan.node().getComputedTextLength();\n\t\t}\n\t}\n\n\t// Gets an appropriate tick interval depending on the range\n\tgetLinearTick(range, power = 0, tickCount = 20) {\n\t\tif(range !== 0) {\n\t\t\tlet intervals = [0.1, 0.2, 0.5, 1, 2, 5];\n\t\t\tfor(let i = 0; i < intervals.length; i++) {\n\t\t\t\tif((range / (intervals[i] * Math.pow(10, power))) > tickCount) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn intervals[i] * Math.pow(10, power);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpower += 1;\n\t\t\treturn this.getLinearTick(range, power, tickCount);\n\t\t}\n\t\treturn 1;\n\t}\n}\n","const NS = 'MarketOfferingChartBlock';\nconst CLS = 'marketOfferingChartBlock';\n\nimport { ChartBlock } from '../../chartBlock/js/chartBlock';\n\nlet moment = require('moment');\nlet d3 = require('d3');\n\nexport class MarketOfferingChartBlock extends ChartBlock {\n\tconstructor(element) {\n\t\tsuper(element, CLS);\n\n\t\tthis.api = this.$element.attr('data-api');\n\n\t\tthis.margin = {\n\t\t\ttop: 10,\n\t\t\tright: 10,\n\t\t\tbottom: 50,\n\t\t\tleft: 65 \n\t\t};\n\n\t\tthis.heightRatio = 0.55;\n\n\t\tthis.dotRadius = 4;\n\t\tthis.dotFocusRadius = 6;\n\n\t\tthis.urlParams = {};\n\n\t\tthis.$filtersSelect = this.$element.find(`.${CLS}-filters-select`);\n\n\t\tif(this.$filtersSelect && this.$filtersSelect.length > 0) {\n\t\t\tthis.setFilterValueEvent();\n\t\t\tthis.initFilterChangeEvent();\n\t\t}\n\n\t\tthis.getChartDataFromApi();\n\t}\n\n\tsetFilterValueEvent() {\n\t\tthis.$filtersSelect.each((index, element) => {\n\t\t\tlet $element = $(element);\n\t\t\tlet filterKey = $element.data('filter-key');\n\n\t\t\tif(!(_.isNil(this.urlParams[filterKey]) && $element.val() === '')) {\n\t\t\t\tif(_.isNil($element.val()) || $element.val() === '') {\n\t\t\t\t\tdelete this.urlParams[filterKey];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(_.isArray($element.val()) && $element.val().length > 0) {\n\t\t\t\t\t\tthis.urlParams[filterKey] = $element.val().join(',');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.urlParams[filterKey] = $element.val();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tinitFilterChangeEvent() {\n\t\tthis.$filtersSelect.on('change', (event) => {\n\t\t\tlet $element = $(event.currentTarget);\n\t\t\tlet filterKey = $element.data('filter-key');\n\n\t\t\tif(!(_.isNil(this.urlParams[filterKey]) && $element.val() === '')) {\n\t\t\t\t// Ensure that the filterKey does not match the current select value\n\t\t\t\tif(this.urlParams[filterKey] !== $element.val()) {\n\t\t\t\t\tif(_.isNil($element.val()) || $element.val() === '') {\n\t\t\t\t\t\tdelete this.urlParams[filterKey];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif(_.isArray($element.val())) {\n\t\t\t\t\t\t\tthis.urlParams[filterKey] = $element.val().join(',');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.urlParams[filterKey] = $element.val();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.getChartDataFromApi(true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// Retrieves the data from the API\n\tgetChartDataFromApi() {\n\t\tlet url = this.api;\n\n\t\tif(!_.isEmpty(this.urlParams)) {\n\t\t\turl += `?${$.param(this.urlParams)}`;\n\t\t}\n\n\t\tif(this.api) {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: url,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: (response) => {\n\t\t\t\t\tif(response && response.length > 0) {\n\t\t\t\t\t\tthis.$element.trigger(`${CLS}.update`, {\n\t\t\t\t\t\t\tdata: response\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.$element.trigger(`${CLS}.update`, {\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\tisEmpty: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: () => {\n\t\t\t\t\tthis.$element.trigger(`${CLS}.update`, {\n\t\t\t\t\t\tdata: null\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tconsole.error(`${NS}::Error`, 'API is not set.');\n\t\t\tthis.$element.trigger(`${CLS}.update`, {\n\t\t\t\tdata: null\n\t\t\t});\n\t\t}\n\t}\n\n\t// Have placeholder data that generates a generic x-y axes.\n\tsetEmptyData() {\n\t\t// Placeholder data used, when there are no actual values…\n\t\tlet placeholderData = [\n\t\t\t{\n\t\t\t\tvalues: []\n\t\t\t}\n\t\t];\n\t\tlet initialPlaceholderDataValue = 10000;\n\t\tlet initialPlaceholderIncrementValue = 10000;\n\n\t\tfor(let i = 0; i < 6; i++) {\n\t\t\tplaceholderData[0].values.push({\n\t\t\t\tvalue: initialPlaceholderDataValue + (i * initialPlaceholderIncrementValue),\n\t\t\t\tdate: moment().month(i).day(1)\n\t\t\t});\n\t\t}\n\n\t\tthis.emptyData = placeholderData;\n\t}\n\n\tdrawChart() {\n\t\tthis.clearSvg();\n\t\tthis.setChartDimensions();\n\n\t\tif(this.$tooltip && this.$tooltip.length > 0) {\n\t\t\tthis.$tooltip.remove(); // Removes the tooltip\n\t\t}\n\n\t\tthis.drawSvg();\n\t\tthis.drawTooltip();\n\n\t\tthis.defineXAxesScales();\n\t\tthis.defineYAxesScales();\n\n\t\tthis.drawXAxes();\n\t\tthis.drawYAxes();\n\n\t\tif(!this.isDataEmpty) {\n\t\t\tthis.defineColors();\n\t\t\tthis.drawPaths();\n\t\t\tthis.drawPoints();\n\t\t\tthis.drawLabels();\n\t\t}\n\t}\n\n\tdrawTooltip() {\n\t\tthis.tooltip = this.getChartNode()\n\t\t\t.append('div')\n\t\t\t.attr('class', `${CLS}-chart-tooltip`);\n\n\t\tthis.$tooltip = this.$chart.find(`.${CLS}-chart-tooltip`);\n\t}\n\n\tgetXAxisBottomData() {\n\t\tlet data = [];\n\t\t_.forEach(this.data, (datum) => {\n\t\t\t_.forEach(datum.values, (value) => {\n\t\t\t\tif(!_.isNil(value.date)) {\n\t\t\t\t\tdata.push(value.date);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetYAxisLeftData() {\n\t\tlet data = [];\n\n\t\t_.forEach(this.data, (datum) => {\n\t\t\t_.forEach(datum.values, (value) => {\n\t\t\t\tif(!_.isNil(value.value)) {\n\t\t\t\t\tdata.push(value.value);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tdefineXAxesScales() {\n\t\tlet data = this.getXAxisBottomData();\n\t\tthis.xMinTickValue = data[0];\n\t\tthis.xMaxTickValue = data[data.length - 1];\n\n\t\tif(this.xMinTickValue === this.xMaxTickValue) {\n\t\t\tthis.xMaxTickValue = moment(this.xMinTickValue, 'DD/MM/YYYY').add(1, 'years').subtract(2, 'months').format('DD/MM/YYYY');\n\t\t\tdata.push(this.xMaxTickValue);\n\t\t}\n\n\t\tthis.xAxisBottom = d3.scaleTime()\n\t\t\t.range([0, this.width])\n\t\t\t.domain(d3.extent(data, (datum) => {\n\t\t\t\treturn this.getMomentDate(datum).toDate();\n\t\t\t})).nice();\n\t}\n\n\tdefineYAxesScales() {\n\t\tlet data = this.getYAxisLeftData();\n\t\tlet yMinTickValue = _.minBy(data, (datum) => {\n\t\t\treturn datum;\n\t\t});\n\n\t\tlet yMaxTickValue = _.maxBy(data, (datum) => {\n\t\t\treturn datum;\n\t\t});\n\n\t\tif(yMinTickValue !== yMaxTickValue) {\n\t\t\tlet range = yMaxTickValue - yMinTickValue;\n\t\t\tthis.yTickValue = this.getLinearTick(range);\n\n\t\t\tthis.yMaxTickValue = Math.ceil((yMaxTickValue) / this.yTickValue) * this.yTickValue;\n\t\t\tthis.yMinTickValue = Math.floor((yMinTickValue / this.yTickValue)) * this.yTickValue;\n\t\t}\n\t\telse {\n\t\t\tthis.yMaxTickValue = Math.ceil(yMaxTickValue);\n\t\t\tthis.yMinTickValue = Math.floor(yMinTickValue);\n\t\t\tthis.yTickValue = _.floor(this.yMaxTickValue, (((this.yMaxTickValue + '').toString().length) * -1) + 1); // Rounds to the negative {x} sf.; // Rounds to the negative {x} sf.\n\t\t\tif(this.yTickValue !== 0) {\n\t\t\t\tthis.yMaxTickValue *= 2.05;\n\t\t\t\tthis.yMinTickValue = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.yMinTickValue = -1;\n\t\t\t\tthis.yTickValue = 1;\n\t\t\t\tthis.yMaxTickValue = 1.05;\n\t\t\t}\n\t\t}\n\n\t\tthis.yAxisLeft = d3.scaleLinear()\n\t\t\t.range([this.height, 0])\n\t\t\t.domain([\n\t\t\t\tthis.yMinTickValue,\n\t\t\t\tthis.yMaxTickValue\n\t\t\t]).nice();\n\t}\n\n\tdrawXAxes() {\n\t\tlet tickOffset = 10;\n\n\t\tlet xMinTickDate = moment(this.xMinTickValue, 'DD/MM/YYYY');\n\t\tlet xMaxTickDate = moment(this.xMaxTickValue, 'DD/MM/YYYY');\n\t\tlet duration = moment.duration(xMaxTickDate.diff(xMinTickDate));\n\n\t\t// Render x-axes text values\n\t\t(() => {\n\t\t\tlet outerIndex = 0;\n\t\t\tthis.svg.append('g')\n\t\t\t\t.attr('class', 'x-axis')\n\t\t\t\t.attr('transform', `translate(0,${this.height + tickOffset})`)\n\t\t\t\t.call(d3.axisBottom(this.xAxisBottom).ticks(d3.timeDay.every(1)).tickFormat((value, index) => {\n\t\t\t\t\tif(duration.asMonths() <= 12) {\n\t\t\t\t\t\tif(duration.asMonths() <= 2) {\n\t\t\t\t\t\t\t// Return weekly date format if months <= 2\n\t\t\t\t\t\t\tif(index % 7 === 0) {\n\t\t\t\t\t\t\t\treturn moment(value).format('MMM YY');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Return every first day of the month\n\t\t\t\t\t\t\tif(moment(value).date() === 1) {\n\t\t\t\t\t\t\t\treturn moment(value).format('MMM YY');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Return every first day of the month\n\t\t\t\t\t\tif(moment(value).date() === 1) {\n\t\t\t\t\t\t\t// Return {x} monthly value based on {x} yearly value\n\t\t\t\t\t\t\tif(outerIndex % (Math.floor(duration.asYears()) * 2) === 0) {\n\t\t\t\t\t\t\t\touterIndex++;\n\t\t\t\t\t\t\t\treturn moment(value).format('MMM YY');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\touterIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t}));\n\t\t})();\n\n\t\t// Render lines\n\t\t(() => {\n\t\t\tlet outerIndex = 0;\n\t\t\tthis.getChartNode().select('.x-axis').selectAll('line').attr('y2', (value, index, nodes) => {\n\t\t\t\tif(duration.asMonths() <= 12) {\n\t\t\t\t\tif(duration.asMonths() <= 2) {\n\t\t\t\t\t\t// Return weekly tick when if months <= 2\n\t\t\t\t\t\tif(index % 7 === 0) {\n\t\t\t\t\t\t\treturn -(this.height + tickOffset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Return monthly tick value\n\t\t\t\t\t\tif(moment(value).date() === 1) {\n\t\t\t\t\t\t\treturn -(this.height + tickOffset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(moment(value).date() === 1) {\n\t\t\t\t\t\t// Return {x} monthly tick based on {x} yearly value\n\t\t\t\t\t\tif(outerIndex % (Math.floor(duration.asYears())) === 0) {\n\t\t\t\t\t\t\treturn -(this.height + tickOffset);\n\t\t\t\t\t\t}\n\t\t\t\t\t\touterIndex++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t})();\n\n\t\t// Conceal x-axes text values for mobile devices\n\t\t(() => {\n\t\t\tlet ticks = this.getChartNode().select('.x-axis').selectAll('text');\n\t\t\tlet outerIndex = 0;\n\t\t\tticks.each((value, index, nodes) => {\n\t\t\t\tnodes[index].style.visibility = 'hidden';\n\t\t\t\tif(duration.asMonths() <= 12) {\n\t\t\t\t\tif(duration.asMonths() <= 2) {\n\t\t\t\t\t\tif(duration.asMonths() <= 1) {\n\t\t\t\t\t\t\tif(index % 7 === 0) {\n\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Return forntlightly on mobile for excess of one month\n\t\t\t\t\t\t\tif(this.mediaQuery.breakpointMaxWidth(this.mediaQuery.BREAKPOINTS.SM)) {\n\t\t\t\t\t\t\t\tif(index % 14 === 0) {\n\t\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif(index % 7 === 0) {\n\t\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif(moment(value).date() === 1) {\n\t\t\t\t\t\t\tif(duration.asMonths() > 8) {\n\t\t\t\t\t\t\t\t// Returns every other month on mobile when months > 8\n\t\t\t\t\t\t\t\tif(this.mediaQuery.breakpointMaxWidth(this.mediaQuery.BREAKPOINTS.SM)) {\n\t\t\t\t\t\t\t\t\tif(outerIndex % 3 === 0) {\n\t\t\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\touterIndex++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif(outerIndex % 2 === 0) {\n\t\t\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\touterIndex++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(duration.asMonths() > 4) {\n\t\t\t\t\t\t\t\tif(this.mediaQuery.breakpointMaxWidth(this.mediaQuery.BREAKPOINTS.SM)) {\n\t\t\t\t\t\t\t\t\tif(outerIndex % 2 === 0) {\n\t\t\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\touterIndex++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(moment(value).date() === 1) {\n\t\t\t\t\t\tif(this.mediaQuery.breakpointMaxWidth(this.mediaQuery.BREAKPOINTS.SM)) {\n\t\t\t\t\t\t\tif(outerIndex % (Math.floor(duration.asYears()) * 4) === 0) {\n\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif(outerIndex % (Math.floor(duration.asYears()) * 2) === 0) {\n\t\t\t\t\t\t\t\tnodes[index].style.visibility = 'visible';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\touterIndex++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t})();\n\t}\n\n\tdrawYAxes() {\n\t\tlet data = this.getYAxisLeftData();\n\t\tlet yMinTickValue = _.minBy(data, (datum) => {\n\t\t\treturn datum;\n\t\t});\n\n\t\tlet yMaxTickValue = _.maxBy(data, (datum) => {\n\t\t\treturn datum;\n\t\t});\n\n\t\tthis.svg.append('g')\n\t\t\t.attr('class', 'y-axis')\n\t\t\t.attr('transform', `translate(-5, 0)`)\n\t\t\t.call(d3.axisLeft(this.yAxisLeft).tickFormat((value, index, nodes) => {\n\t\t\t\tif(data.length > 1 && yMinTickValue !== yMaxTickValue) {\n\t\t\t\t\t// If mobile devices and the modulo by 4 is 1\n\t\t\t\t\tif(this.mediaQuery.breakpointMaxWidth(this.mediaQuery.BREAKPOINTS.SM)) {\n\t\t\t\t\t\tif(index % 4 === 1) {\n\t\t\t\t\t\t\treturn this.numberFormatter.formatNumbersWithCommas(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif(index % 2 === 1) {\n\t\t\t\t\t\t\treturn this.numberFormatter.formatNumbersWithCommas(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn this.numberFormatter.formatNumbersWithCommas(value);\n\t\t\t\t}\n\t\t\t}).tickSize(-20).tickPadding(15).tickValues(d3.range(this.yMinTickValue, this.yMaxTickValue, this.yTickValue)));\n\n\t\tthis.getChartNode().select('.y-axis').selectAll('line').attr('x2', (value, index, nodes) => {\n\t\t\tif(data.length > 1 && yMinTickValue !== yMaxTickValue) {\n\t\t\t\t// If mobile devices and the modulo by 4 is 1\n\t\t\t\tif(this.mediaQuery.breakpointMaxWidth(this.mediaQuery.BREAKPOINTS.SM)) {\n\t\t\t\t\tif(index % 4 === 1) {\n\t\t\t\t\t\treturn -20;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(index % 2 === 1) {\n\t\t\t\t\t\treturn -20;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -10;\n\t\t});\n\t}\n\n\tdefineColors() {\n\t\tthis.colorGenerator.reset();\n\t\tthis.colors = [];\n\t\t_.forEach(this.data, () => {\n\t\t\tthis.colors.push(this.colorGenerator.next());\n\t\t});\n\t}\n\n\tdrawPaths() {\n\t\t_.forEach(this.data, (datum, index) => {\n\t\t\tthis.svg.append('path')\n\t\t\t\t.datum(datum.values)\n\t\t\t\t.attr('class', 'plot-line')\n\t\t\t\t.attr('stroke', this.colors[index])\n\t\t\t\t.attr('d', d3.line()\n\t\t\t\t\t.x((innerDatum) => {\n\t\t\t\t\t\treturn this.xAxisBottom(this.getMomentDate(innerDatum.date).toDate());\n\t\t\t\t\t})\n\t\t\t\t\t.y((innerDatum) => {\n\t\t\t\t\t\treturn this.yAxisLeft(innerDatum.value);\n\t\t\t\t\t})\n\t\t\t\t\t.curve(d3.curveCatmullRom.alpha(1))\n\t\t\t\t);\n\t\t});\n\t}\n\n\tdrawPoints() {\n\t\t_.forEach(this.data, (datum, index) => {\n\t\t\tthis.svg.append('g')\n\t\t\t\t.selectAll('dot')\n\t\t\t\t.data(datum.values)\n\t\t\t\t.enter()\n\t\t\t\t.append('circle')\n\t\t\t\t.attr('class', 'plot-circle')\n\t\t\t\t.attr('stroke', this.colors[index])\n\t\t\t\t.attr('cx', (innerDatum) => {\n\t\t\t\t\treturn this.xAxisBottom(this.getMomentDate(innerDatum.date).toDate());\n\t\t\t\t})\n\t\t\t\t.attr('cy', (innerDatum) => {\n\t\t\t\t\treturn this.yAxisLeft(innerDatum.value);\n\t\t\t\t})\n\t\t\t\t.attr('r', this.dotRadius)\n\t\t\t\t.attr('fill', 'white')\n\t\t\t\t.on('mouseover', (innerDatum, innerIndex, nodes) => {\n\t\t\t\t\tthis.tooltip.style('display', 'block');\n\n\t\t\t\t\t// Have the dots grow\n\t\t\t\t\tlet circle = d3.select(nodes[innerIndex]);\n\n\t\t\t\t\tcircle.attr('r', this.dotFocusRadius)\n\t\t\t\t\t\t.attr('cx', () => {\n\t\t\t\t\t\t\treturn this.xAxisBottom(this.getMomentDate(innerDatum.date).toDate());\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.attr('cy', () => {\n\t\t\t\t\t\t\treturn this.yAxisLeft(innerDatum.value);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.attr('fill', this.colors[index]);\n\t\t\t\t})\n\t\t\t\t.on('mousemove', (innerDatum, innerIndex, nodes) => {\n\t\t\t\t\tlet value = innerDatum.valueLabel;\n\t\t\t\t\tlet date = this.getMomentDate(innerDatum.date).format('DD/MM/YY');\n\n\t\t\t\t\tthis.tooltip.html(`
${date}
${value}
`);\n\t\t\t\t\tlet tooltipWidth = this.$tooltip.outerWidth();\n\t\t\t\t\tlet tooltipHeight = this.$tooltip.outerHeight();\n\t\t\t\t\tlet topPositionOffset = 30;\n\n\t\t\t\t\t// Subtract the left margin alongside half of the tooltip width. This horizontally centers the tooltip\n\t\t\t\t\tlet leftPosition = (d3.mouse(nodes[innerIndex])[0] + this.margin.left) - (tooltipWidth / 2);\n\t\t\t\t\tlet topPosition = ((d3.mouse(nodes[innerIndex])[1]) + this.margin.top) - tooltipHeight - topPositionOffset;\n\n\t\t\t\t\tthis.tooltip.style('left', `${leftPosition}px`)\n\t\t\t\t\t\t.style('top', `${topPosition}px`);\n\t\t\t\t})\n\t\t\t\t.on('mouseleave', (innerDatum, innerIndex, nodes) => {\n\t\t\t\t\tthis.tooltip.style('display', 'none');\n\n\t\t\t\t\t// Revert the dot size\n\t\t\t\t\tlet circle = d3.select(nodes[innerIndex]);\n\t\t\t\t\tcircle.attr('r', this.dotRadius)\n\t\t\t\t\t\t.attr('cx', () => {\n\t\t\t\t\t\t\treturn this.xAxisBottom(this.getMomentDate(innerDatum.date).toDate());\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.attr('cy', () => {\n\t\t\t\t\t\t\treturn this.yAxisLeft(innerDatum.value);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.attr('fill', 'white');\n\t\t\t\t});\n\t\t});\n\t}\n\n\tdrawLabels() {\n\t\tlet textItemWidth = 100;\n\t\tlet textItemHeight = 30;\n\t\tlet lineWidth = 20;\n\t\tlet marginSpacer = 5;\n\t\tlet legendItemWidth = textItemWidth + lineWidth + marginSpacer + marginSpacer;\n\n\t\tlet legendItemOffset = lineWidth + marginSpacer; // Relative to the line\n\n\t\tlet topPosition = this.height + this.margin.top + this.margin.bottom + 20;\n\t\tlet dataLength = this.data.length;\n\t\tlet leftPosition = ((this.width + this.margin.right) / 2) - ((legendItemWidth * dataLength) / 2);\n\t\t// Recallibrate left position when there is an overflow of items\n\t\tif(leftPosition < 0) {\n\t\t\tleftPosition = -(marginSpacer * 3);\n\t\t}\n\n\t\t// Assign the max amount of legend items that can fit in a column\n\t\tlet legendItemMaxColumns = 0;\n\t\tlet xAxisWidth = $('.x-axis')[0].getBoundingClientRect().width;\n\t\tfor(let index = 0; index < dataLength; index++) {\n\t\t\tif(index * legendItemWidth > (xAxisWidth - (marginSpacer * 3))) {\n\t\t\t\tlegendItemMaxColumns = index - 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet legendItemRowIndex = 0;\n\n\t\tlet legendGroup = this.svg.append('g').attr('class', 'legend')\n\t\t\t.attr('transform', `translate(${leftPosition}, ${topPosition})`);\n\n\t\tlet adjustSvgHeight = () => {\n\t\t\tlet svgHeight = this.$element.find('svg').attr('height');\n\t\t\tthis.$element.find('svg').attr('height', parseInt(svgHeight) + marginSpacer + textItemHeight);\n\t\t};\n\t\tadjustSvgHeight();\n\n\t\t_.forEach(this.data, (datum, index) => {\n\t\t\tif(index % legendItemMaxColumns === 0 && index !== 0) {\n\t\t\t\tadjustSvgHeight();\n\t\t\t\tlegendItemRowIndex++;\n\t\t\t}\n\n\t\t\tlet legendItemX = () => {\n\t\t\t\tif(legendItemMaxColumns !== 0) {\n\t\t\t\t\treturn (index % legendItemMaxColumns) * legendItemWidth;\n\t\t\t\t}\n\t\t\t\treturn index * legendItemWidth;\n\t\t\t};\n\n\t\t\tlet legendItemY= () => {\n\t\t\t\treturn legendItemRowIndex * textItemHeight;\n\t\t\t};\n\n\t\t\tlet legendItem = legendGroup.append('g')\n\t\t\t\t.attr('class', 'legend-item')\n\t\t\t\t.attr('transform', `translate(${legendItemX()}, ${legendItemY()})`);\n\n\t\t\tlegendItem.append('line')\n\t\t\t\t.attr('y1', -4)\n\t\t\t\t.attr('y2', -4)\n\t\t\t\t.attr('x2', lineWidth)\n\t\t\t\t.attr('stroke', this.colors[index])\n\t\t\t\t.attr('stroke-width', 2.5);\n\n\t\t\tlet textElement = legendItem.append('text').text(datum.label);\n\n\t\t\tthis.textWrap(textElement, textItemWidth, legendItemOffset, 0);\n\t\t});\n\t}\n}\n","class MediaQuery {\n\tconstructor() {\n\t\tthis.BREAKPOINTS = {\n\t\t\tXS: 0,\n\t\t\tSM: 576,\n\t\t\tMD: 768,\n\t\t\tLG: 992,\n\t\t\tXL: 1200\n\t\t};\n\t}\n\n\tbreakpointMaxWidth(breakpoint) {\n\t\tlet width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n\t\tif(_.isFinite(breakpoint)) {\n\t\t\treturn breakpoint > width;\n\t\t}\n\t\tconsole.error(`MediaQuery::Error`, 'Please supply a valid breakpoint');\n\t\treturn false;\n\t}\n}\n\nexport let mediaQuery = new MediaQuery();\n","class NumberFormatter {\n\tformatNumbersWithCommas(number) {\n\t\tlet parts = number.toString().split('.');\n\t\tparts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\t\treturn parts.join('.');\n\t}\n}\n\nexport let numberFormatter = new NumberFormatter();\n","class ColorGenerator {\n\tconstructor() {\n\t\t// Hardcoded initial colors\n\t\tthis.colors = [\n\t\t\t'#0c7fbb',\n\t\t\t'#de4443',\n\t\t\t'#77b559',\n\n\t\t\t'#dc7a30',\n\t\t\t'#e8b231',\n\t\t\t'#861cc3'\n\t\t];\n\n\t\tthis.index = 0;\n\t\tthis.cycleIndex = 0;\n\t\tthis.goldenRatioConjugate = 1.618;\n\t}\n\n\treset() {\n\t\tthis.index = 0;\n\t\tthis.cycleIndex = 0;\n\t}\n\n\t// Return the default colors\n\tgetPredefinedColors() {\n\t\treturn {\n\t\t\tblue: this.colors[0],\n\t\t\tred: this.colors[1],\n\t\t\tgreen: this.colors[2],\n\t\t\torange: this.colors[3],\n\t\t\tyellow: this.colors[4],\n\t\t\tpurple: this.colors[5]\n\t\t};\n\t}\n\n\tnext() {\n\t\tlet hslToRgb = (object) => {\n\t\t\tlet r;\n\t\t\tlet g;\n\t\t\tlet b;\n\t\t\tlet h = object.h;\n\t\t\tlet s = object.s;\n\t\t\tlet l = object.l;\n\n\t\t\tif(s === 0) {\n\t\t\t\tr = g = b = l; // achromatic\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet hue2rgb = (p, q, t) => {\n\t\t\t\t\tif(t < 0) t += 1;\n\t\t\t\t\tif(t > 1) t -= 1;\n\t\t\t\t\tif(t < 1/6) return p + (q - p) * 6 * t;\n\t\t\t\t\tif(t < 1/2) return q;\n\t\t\t\t\tif(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n\t\t\t\t\treturn p;\n\t\t\t\t};\n\n\t\t\t\tlet q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\t\t\tlet p = 2 * l - q;\n\t\t\t\tr = hue2rgb(p, q, h + 1/3);\n\t\t\t\tg = hue2rgb(p, q, h);\n\t\t\t\tb = hue2rgb(p, q, h - 1/3);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tr: Math.round(r * 255),\n\t\t\t\tg: Math.round(g * 255),\n\t\t\t\tb: Math.round(b * 255)\n\t\t\t};\n\t\t};\n\n\t\tlet rgbToHsl = (object) => {\n\t\t\tlet r = object.r;\n\t\t\tlet g = object.g;\n\t\t\tlet b = object.b;\n\n\t\t\tr /= 255;\n\t\t\tg /= 255;\n\t\t\tb /= 255;\n\t\t\tlet max = Math.max(r, g, b);\n\t\t\tlet min = Math.min(r, g, b);\n\t\t\tlet h;\n\t\t\tlet s;\n\t\t\tlet l;\n\t\t\th = s = l = (max + min) / 2;\n\n\t\t\tif(max === min) {\n\t\t\t\th = s = 0; // achromatic\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet d = max - min;\n\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\tswitch (max) {\n\t\t\t\t\tcase r: h = (g - b) / d + (g < b ? 6 : 0); break;\n\t\t\t\t\tcase g: h = (b - r) / d + 2; break;\n\t\t\t\t\tcase b: h = (r - g) / d + 4; break;\n\t\t\t\t}\n\t\t\t\th /= 6;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\th: h,\n\t\t\t\ts: s,\n\t\t\t\tl: l\n\t\t\t};\n\t\t};\n\n\t\tlet hexColorToRgbObject = (hexColor) => {\n\t\t\tlet regex = new RegExp('^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$');\n\t\t\tif(regex.test(hexColor)) {\n\t\t\t\tlet r = parseInt(hexColor.substr(1, 2), 16);\n\t\t\t\tlet g = parseInt(hexColor.substr(3, 2), 16);\n\t\t\t\tlet b = parseInt(hexColor.substr(5, 2), 16);\n\n\t\t\t\treturn {\n\t\t\t\t\tr: r,\n\t\t\t\t\tg: g,\n\t\t\t\t\tb: b\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tlet rgbToHex = (object) => {\n\t\t\tlet componentToHex = (color) => {\n\t\t\t\tlet hex = color.toString(16);\n\t\t\t\treturn hex.length == 1 ? '0' + hex : hex;\n\t\t\t};\n\n\t\t\treturn '#' + componentToHex(object.r) + componentToHex(object.g) + componentToHex(object.b);\n\t\t};\n\n\t\t// Return the initial 12 colors\n\t\tif(this.index < this.colors.length) {\n\t\t\tlet selectedColor = this.colors[this.index];\n\n\t\t\tthis.index++;\n\t\t\treturn selectedColor;\n\t\t}\n\t\telse {\n\t\t\tif((this.index % this.colors.length) === 0) {\n\t\t\t\tthis.cycleIndex++;\n\t\t\t}\n\n\t\t\tlet selectedColor = this.colors[this.index % this.colors.length];\n\t\t\tlet hsl = rgbToHsl(hexColorToRgbObject(selectedColor));\n\n\t\t\t// Retrieves a new hue relative to the predefined hue with a ±30° color angle.\n\t\t\tlet getNewHue = (oldHue) => {\n\t\t\t\tlet hueWheel = oldHue * 360; // Hue converted into degrees\n\t\t\t\tlet offset = (this.goldenRatioConjugate * this.cycleIndex); // Multipliy the goldenRatioConjugate with the cycleIncrement\n\t\t\t\toffset %= 1; // Modulo operator that fits between 0–1\n\t\t\t\toffset = ((offset * 60) - 30); // Offset that is between ±60° of the color angle.\n\t\t\t\thueWheel += offset;\n\n\t\t\t\t// Ensure a positive value for the wheel\n\t\t\t\tif(hueWheel < 0) {\n\t\t\t\t\thueWheel += 360;\n\t\t\t\t}\n\n\t\t\t\treturn hueWheel / 360;\n\t\t\t};\n\n\t\t\t// Gets a new saturation that ranges between 20% to 100%\n\t\t\tlet getNewSaturation = () => {\n\t\t\t\tlet offset = (this.goldenRatioConjugate * this.index);\n\t\t\t\toffset %= 1;\n\n\t\t\t\tlet value = 0.20 + (offset * 0.8);\n\t\t\t\treturn value;\n\t\t\t};\n\n\t\t\t// Gets a new value that ranges between 25% to 75%\n\t\t\tlet getNewLumination = () => {\n\t\t\t\tlet offset = (this.goldenRatioConjugate * this.index);\n\t\t\t\toffset %= 1;\n\n\t\t\t\tlet value = 0.25 + (offset * 0.5);\n\t\t\t\treturn value;\n\t\t\t};\n\n\t\t\thsl.h = getNewHue(hsl.h);\n\t\t\thsl.s = getNewSaturation();\n\t\t\thsl.l = getNewLumination();\n\n\t\t\tlet color = rgbToHex(hslToRgb(hsl));\n\t\t\tthis.index++;\n\t\t\treturn color;\n\t\t}\n\t}\n}\n\nexport let colorGenerator = new ColorGenerator();\n","var map = {\n\t\"./af\": 515,\n\t\"./af.js\": 515,\n\t\"./ar\": 516,\n\t\"./ar-dz\": 517,\n\t\"./ar-dz.js\": 517,\n\t\"./ar-kw\": 518,\n\t\"./ar-kw.js\": 518,\n\t\"./ar-ly\": 519,\n\t\"./ar-ly.js\": 519,\n\t\"./ar-ma\": 520,\n\t\"./ar-ma.js\": 520,\n\t\"./ar-ps\": 521,\n\t\"./ar-ps.js\": 521,\n\t\"./ar-sa\": 522,\n\t\"./ar-sa.js\": 522,\n\t\"./ar-tn\": 523,\n\t\"./ar-tn.js\": 523,\n\t\"./ar.js\": 516,\n\t\"./az\": 524,\n\t\"./az.js\": 524,\n\t\"./be\": 525,\n\t\"./be.js\": 525,\n\t\"./bg\": 526,\n\t\"./bg.js\": 526,\n\t\"./bm\": 527,\n\t\"./bm.js\": 527,\n\t\"./bn\": 528,\n\t\"./bn-bd\": 529,\n\t\"./bn-bd.js\": 529,\n\t\"./bn.js\": 528,\n\t\"./bo\": 530,\n\t\"./bo.js\": 530,\n\t\"./br\": 531,\n\t\"./br.js\": 531,\n\t\"./bs\": 532,\n\t\"./bs.js\": 532,\n\t\"./ca\": 533,\n\t\"./ca.js\": 533,\n\t\"./cs\": 534,\n\t\"./cs.js\": 534,\n\t\"./cv\": 535,\n\t\"./cv.js\": 535,\n\t\"./cy\": 536,\n\t\"./cy.js\": 536,\n\t\"./da\": 537,\n\t\"./da.js\": 537,\n\t\"./de\": 538,\n\t\"./de-at\": 539,\n\t\"./de-at.js\": 539,\n\t\"./de-ch\": 540,\n\t\"./de-ch.js\": 540,\n\t\"./de.js\": 538,\n\t\"./dv\": 541,\n\t\"./dv.js\": 541,\n\t\"./el\": 542,\n\t\"./el.js\": 542,\n\t\"./en-au\": 543,\n\t\"./en-au.js\": 543,\n\t\"./en-ca\": 544,\n\t\"./en-ca.js\": 544,\n\t\"./en-gb\": 545,\n\t\"./en-gb.js\": 545,\n\t\"./en-ie\": 546,\n\t\"./en-ie.js\": 546,\n\t\"./en-il\": 547,\n\t\"./en-il.js\": 547,\n\t\"./en-in\": 548,\n\t\"./en-in.js\": 548,\n\t\"./en-nz\": 549,\n\t\"./en-nz.js\": 549,\n\t\"./en-sg\": 550,\n\t\"./en-sg.js\": 550,\n\t\"./eo\": 551,\n\t\"./eo.js\": 551,\n\t\"./es\": 552,\n\t\"./es-do\": 553,\n\t\"./es-do.js\": 553,\n\t\"./es-mx\": 554,\n\t\"./es-mx.js\": 554,\n\t\"./es-us\": 555,\n\t\"./es-us.js\": 555,\n\t\"./es.js\": 552,\n\t\"./et\": 556,\n\t\"./et.js\": 556,\n\t\"./eu\": 557,\n\t\"./eu.js\": 557,\n\t\"./fa\": 558,\n\t\"./fa.js\": 558,\n\t\"./fi\": 559,\n\t\"./fi.js\": 559,\n\t\"./fil\": 560,\n\t\"./fil.js\": 560,\n\t\"./fo\": 561,\n\t\"./fo.js\": 561,\n\t\"./fr\": 562,\n\t\"./fr-ca\": 563,\n\t\"./fr-ca.js\": 563,\n\t\"./fr-ch\": 564,\n\t\"./fr-ch.js\": 564,\n\t\"./fr.js\": 562,\n\t\"./fy\": 565,\n\t\"./fy.js\": 565,\n\t\"./ga\": 566,\n\t\"./ga.js\": 566,\n\t\"./gd\": 567,\n\t\"./gd.js\": 567,\n\t\"./gl\": 568,\n\t\"./gl.js\": 568,\n\t\"./gom-deva\": 569,\n\t\"./gom-deva.js\": 569,\n\t\"./gom-latn\": 570,\n\t\"./gom-latn.js\": 570,\n\t\"./gu\": 571,\n\t\"./gu.js\": 571,\n\t\"./he\": 572,\n\t\"./he.js\": 572,\n\t\"./hi\": 573,\n\t\"./hi.js\": 573,\n\t\"./hr\": 574,\n\t\"./hr.js\": 574,\n\t\"./hu\": 575,\n\t\"./hu.js\": 575,\n\t\"./hy-am\": 576,\n\t\"./hy-am.js\": 576,\n\t\"./id\": 577,\n\t\"./id.js\": 577,\n\t\"./is\": 578,\n\t\"./is.js\": 578,\n\t\"./it\": 579,\n\t\"./it-ch\": 580,\n\t\"./it-ch.js\": 580,\n\t\"./it.js\": 579,\n\t\"./ja\": 581,\n\t\"./ja.js\": 581,\n\t\"./jv\": 582,\n\t\"./jv.js\": 582,\n\t\"./ka\": 583,\n\t\"./ka.js\": 583,\n\t\"./kk\": 584,\n\t\"./kk.js\": 584,\n\t\"./km\": 585,\n\t\"./km.js\": 585,\n\t\"./kn\": 586,\n\t\"./kn.js\": 586,\n\t\"./ko\": 587,\n\t\"./ko.js\": 587,\n\t\"./ku\": 588,\n\t\"./ku-kmr\": 589,\n\t\"./ku-kmr.js\": 589,\n\t\"./ku.js\": 588,\n\t\"./ky\": 590,\n\t\"./ky.js\": 590,\n\t\"./lb\": 591,\n\t\"./lb.js\": 591,\n\t\"./lo\": 592,\n\t\"./lo.js\": 592,\n\t\"./lt\": 593,\n\t\"./lt.js\": 593,\n\t\"./lv\": 594,\n\t\"./lv.js\": 594,\n\t\"./me\": 595,\n\t\"./me.js\": 595,\n\t\"./mi\": 596,\n\t\"./mi.js\": 596,\n\t\"./mk\": 597,\n\t\"./mk.js\": 597,\n\t\"./ml\": 598,\n\t\"./ml.js\": 598,\n\t\"./mn\": 599,\n\t\"./mn.js\": 599,\n\t\"./mr\": 600,\n\t\"./mr.js\": 600,\n\t\"./ms\": 601,\n\t\"./ms-my\": 602,\n\t\"./ms-my.js\": 602,\n\t\"./ms.js\": 601,\n\t\"./mt\": 603,\n\t\"./mt.js\": 603,\n\t\"./my\": 604,\n\t\"./my.js\": 604,\n\t\"./nb\": 605,\n\t\"./nb.js\": 605,\n\t\"./ne\": 606,\n\t\"./ne.js\": 606,\n\t\"./nl\": 607,\n\t\"./nl-be\": 608,\n\t\"./nl-be.js\": 608,\n\t\"./nl.js\": 607,\n\t\"./nn\": 609,\n\t\"./nn.js\": 609,\n\t\"./oc-lnc\": 610,\n\t\"./oc-lnc.js\": 610,\n\t\"./pa-in\": 611,\n\t\"./pa-in.js\": 611,\n\t\"./pl\": 612,\n\t\"./pl.js\": 612,\n\t\"./pt\": 613,\n\t\"./pt-br\": 614,\n\t\"./pt-br.js\": 614,\n\t\"./pt.js\": 613,\n\t\"./ro\": 615,\n\t\"./ro.js\": 615,\n\t\"./ru\": 616,\n\t\"./ru.js\": 616,\n\t\"./sd\": 617,\n\t\"./sd.js\": 617,\n\t\"./se\": 618,\n\t\"./se.js\": 618,\n\t\"./si\": 619,\n\t\"./si.js\": 619,\n\t\"./sk\": 620,\n\t\"./sk.js\": 620,\n\t\"./sl\": 621,\n\t\"./sl.js\": 621,\n\t\"./sq\": 622,\n\t\"./sq.js\": 622,\n\t\"./sr\": 623,\n\t\"./sr-cyrl\": 624,\n\t\"./sr-cyrl.js\": 624,\n\t\"./sr.js\": 623,\n\t\"./ss\": 625,\n\t\"./ss.js\": 625,\n\t\"./sv\": 626,\n\t\"./sv.js\": 626,\n\t\"./sw\": 627,\n\t\"./sw.js\": 627,\n\t\"./ta\": 628,\n\t\"./ta.js\": 628,\n\t\"./te\": 629,\n\t\"./te.js\": 629,\n\t\"./tet\": 630,\n\t\"./tet.js\": 630,\n\t\"./tg\": 631,\n\t\"./tg.js\": 631,\n\t\"./th\": 632,\n\t\"./th.js\": 632,\n\t\"./tk\": 633,\n\t\"./tk.js\": 633,\n\t\"./tl-ph\": 634,\n\t\"./tl-ph.js\": 634,\n\t\"./tlh\": 635,\n\t\"./tlh.js\": 635,\n\t\"./tr\": 636,\n\t\"./tr.js\": 636,\n\t\"./tzl\": 637,\n\t\"./tzl.js\": 637,\n\t\"./tzm\": 638,\n\t\"./tzm-latn\": 639,\n\t\"./tzm-latn.js\": 639,\n\t\"./tzm.js\": 638,\n\t\"./ug-cn\": 640,\n\t\"./ug-cn.js\": 640,\n\t\"./uk\": 641,\n\t\"./uk.js\": 641,\n\t\"./ur\": 642,\n\t\"./ur.js\": 642,\n\t\"./uz\": 643,\n\t\"./uz-latn\": 644,\n\t\"./uz-latn.js\": 644,\n\t\"./uz.js\": 643,\n\t\"./vi\": 645,\n\t\"./vi.js\": 645,\n\t\"./x-pseudo\": 646,\n\t\"./x-pseudo.js\": 646,\n\t\"./yo\": 647,\n\t\"./yo.js\": 647,\n\t\"./zh-cn\": 648,\n\t\"./zh-cn.js\": 648,\n\t\"./zh-hk\": 649,\n\t\"./zh-hk.js\": 649,\n\t\"./zh-mo\": 650,\n\t\"./zh-mo.js\": 650,\n\t\"./zh-tw\": 651,\n\t\"./zh-tw.js\": 651\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 670;"],"sourceRoot":""}