flarum-bot d818e83235 Bundled output for commit 257be2b9db6f5365faa017bd9cc4a0e870efb449
Includes transpiled JS/TS, and Typescript declaration files (typings).

[skip ci]
2024-09-28 14:51:19 +00:00

1 line
272 KiB
Plaintext
Generated

{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/statistics/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/utc.js","webpack://@flarum/statistics/../src/js/utils/dom.js","webpack://@flarum/statistics/../src/js/utils/constants.js","webpack://@flarum/statistics/../src/js/utils/helpers.js","webpack://@flarum/statistics/../src/js/utils/draw-utils.js","webpack://@flarum/statistics/../src/js/utils/colors.js","webpack://@flarum/statistics/../src/js/utils/draw.js","webpack://@flarum/statistics/../src/js/utils/animate.js","webpack://@flarum/statistics/../src/js/utils/animation.js","webpack://@flarum/statistics/../src/js/utils/export.js","webpack://@flarum/statistics/../src/js/utils/date-utils.js","webpack://@flarum/statistics/../src/js/objects/ChartComponents.js","webpack://@flarum/statistics/../src/js/utils/intervals.js","webpack://@flarum/statistics/../node_modules/style-inject/dist/style-inject.es.js","webpack://@flarum/statistics/../src/js/objects/SvgTip.js","webpack://@flarum/statistics/../src/css/chartsCss.js","webpack://@flarum/statistics/../src/js/charts/BaseChart.js","webpack://@flarum/statistics/../src/js/charts/AggregationChart.js","webpack://@flarum/statistics/../src/js/charts/PercentageChart.js","webpack://@flarum/statistics/../src/js/charts/PieChart.js","webpack://@flarum/statistics/../src/js/charts/Heatmap.js","webpack://@flarum/statistics/../src/js/charts/AxisChart.js","webpack://@flarum/statistics/../src/js/utils/axis-chart-utils.js","webpack://@flarum/statistics/../src/js/charts/DonutChart.js","webpack://@flarum/statistics/../src/js/chart.js","webpack://@flarum/statistics/../src/js/index.js","webpack://@flarum/statistics/webpack/bootstrap","webpack://@flarum/statistics/webpack/runtime/compat get default export","webpack://@flarum/statistics/webpack/runtime/define property getters","webpack://@flarum/statistics/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/statistics/webpack/runtime/make namespace object","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardPage')\"","webpack://@flarum/statistics/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/statistics/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/statistics/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/statistics/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardWidget')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/abbreviateNumber')\"","webpack://@flarum/statistics/./src/admin/components/MiniStatisticsWidget.tsx","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/SelectDropdown')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Placeholder')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/generateElementId')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/statistics/./src/admin/components/StatisticsWidgetDateSelectionModal.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsWidget.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsPage.tsx","webpack://@flarum/statistics/./src/admin/extend.tsx","webpack://@flarum/statistics/./src/admin/index.tsx"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t=\"YYYY-MM-DDTHH:mm:ssZ\");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","export function $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nexport function findNodeIndex(node)\n{\n\tvar i = 0;\n\twhile (node.previousSibling) {\n\t\tnode = node.previousSibling;\n\t\ti++;\n\t}\n\treturn i;\n}\n\n$.create = (tag, o) => {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (i in element ) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\nexport function getOffset(element) {\n\tlet rect = element.getBoundingClientRect();\n\treturn {\n\t\t// https://stackoverflow.com/a/7436602/6495043\n\t\t// rect.top varies with scroll, so we add whatever has been\n\t\t// scrolled to it to get absolute distance from actual page top\n\t\ttop: rect.top + (document.documentElement.scrollTop || document.body.scrollTop),\n\t\tleft: rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft)\n\t};\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n// an element's offsetParent property will return null whenever it, or any of its parents,\n// is hidden via the display style property.\nexport function isHidden(el) {\n\treturn (el.offsetParent === null);\n}\n\nexport function isElementInViewport(el) {\n\t// Although straightforward: https://stackoverflow.com/a/7557433/6495043\n\tvar rect = el.getBoundingClientRect();\n\n\treturn (\n\t\trect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */\n\t);\n}\n\nexport function getElementContentWidth(element) {\n\tvar styles = window.getComputedStyle(element);\n\tvar padding = parseFloat(styles.paddingLeft) +\n\t\tparseFloat(styles.paddingRight);\n\n\treturn element.clientWidth - padding;\n}\n\nexport function bind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function unbind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function fire(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n}\n\n// https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\nexport function forEachNode(nodeList, callback, scope) {\n\tif(!nodeList) return;\n\tfor (var i = 0; i < nodeList.length; i++) {\n\t\tcallback.call(scope, nodeList[i], i);\n\t}\n}\n\nexport function activate($parent, $child, commonClass, activeClass='active', index = -1) {\n\tlet $children = $parent.querySelectorAll(`.${commonClass}.${activeClass}`);\n\n\tforEachNode($children, (node, i) => {\n\t\tif(index >= 0 && i <= index) return;\n\t\tnode.classList.remove(activeClass);\n\t});\n\n\t$child.classList.add(activeClass);\n}\n","export const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];\n\nexport const COMPATIBLE_CHARTS = {\n\tbar: ['line', 'scatter', 'percentage', 'pie'],\n\tline: ['scatter', 'bar', 'percentage', 'pie'],\n\tpie: ['line', 'scatter', 'percentage', 'bar'],\n\tpercentage: ['bar', 'line', 'scatter', 'pie'],\n\theatmap: []\n};\n\nexport const DATA_COLOR_DIVISIONS = {\n\tbar: 'datasets',\n\tline: 'datasets',\n\tpie: 'labels',\n\tpercentage: 'labels',\n\theatmap: HEATMAP_DISTRIBUTION_SIZE\n};\n\nexport const BASE_MEASURES = {\n\tmargins: {\n\t\ttop: 10,\n\t\tbottom: 10,\n\t\tleft: 20,\n\t\tright: 20\n\t},\n\tpaddings: {\n\t\ttop: 20,\n\t\tbottom: 40,\n\t\tleft: 30,\n\t\tright: 10\n\t},\n\n\tbaseHeight: 240,\n\ttitleHeight: 20,\n\tlegendHeight: 30,\n\n\ttitleFontSize: 12,\n};\n\nexport function getTopOffset(m) {\n\treturn m.titleHeight + m.margins.top + m.paddings.top;\n}\n\nexport function getLeftOffset(m) {\n\treturn m.margins.left + m.paddings.left;\n}\n\nexport function getExtraHeight(m) {\n\tlet totalExtraHeight = m.margins.top + m.margins.bottom\n\t\t+ m.paddings.top + m.paddings.bottom\n\t\t+ m.titleHeight + m.legendHeight;\n\treturn totalExtraHeight;\n}\n\nexport function getExtraWidth(m) {\n\tlet totalExtraWidth = m.margins.left + m.margins.right\n\t\t+ m.paddings.left + m.paddings.right;\n\n\treturn totalExtraWidth;\n}\n\nexport const INIT_CHART_UPDATE_TIMEOUT = 700;\nexport const CHART_POST_ANIMATE_TIMEOUT = 400;\n\nexport const DEFAULT_AXIS_CHART_TYPE = 'line';\nexport const AXIS_DATASET_CHART_TYPES = ['line', 'bar'];\n\nexport const AXIS_LEGEND_BAR_SIZE = 100;\n\nexport const BAR_CHART_SPACE_RATIO = 0.5;\nexport const MIN_BAR_PERCENT_HEIGHT = 0.00;\n\nexport const LINE_CHART_DOT_SIZE = 4;\nexport const DOT_OVERLAY_SIZE_INCR = 4;\n\nexport const PERCENTAGE_BAR_DEFAULT_HEIGHT = 20;\nexport const PERCENTAGE_BAR_DEFAULT_DEPTH = 2;\n\n// Fixed 5-color theme,\n// More colors are difficult to parse visually\nexport const HEATMAP_DISTRIBUTION_SIZE = 5;\n\nexport const HEATMAP_SQUARE_SIZE = 10;\nexport const HEATMAP_GUTTER_SIZE = 2;\n\nexport const DEFAULT_CHAR_WIDTH = 7;\n\nexport const TOOLTIP_POINTER_TRIANGLE_HEIGHT = 5;\n\nconst DEFAULT_CHART_COLORS = ['light-blue', 'blue', 'violet', 'red', 'orange',\n\t'yellow', 'green', 'light-green', 'purple', 'magenta', 'light-grey', 'dark-grey'];\nconst HEATMAP_COLORS_GREEN = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'];\nexport const HEATMAP_COLORS_BLUE = ['#ebedf0', '#c0ddf9', '#73b3f3', '#3886e1', '#17459e'];\nexport const HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001c'];\n\nexport const DEFAULT_COLORS = {\n\tbar: DEFAULT_CHART_COLORS,\n\tline: DEFAULT_CHART_COLORS,\n\tpie: DEFAULT_CHART_COLORS,\n\tpercentage: DEFAULT_CHART_COLORS,\n\theatmap: HEATMAP_COLORS_GREEN,\n\tdonut: DEFAULT_CHART_COLORS\n};\n\n// Universal constants\nexport const ANGLE_RATIO = Math.PI / 180;\nexport const FULL_ANGLE = 360;\n","import { ANGLE_RATIO } from './constants';\n\n/**\n * Returns the value of a number upto 2 decimal places.\n * @param {Number} d Any number\n */\nexport function floatTwo(d) {\n\treturn parseFloat(d.toFixed(2));\n}\n\n/**\n * Returns whether or not two given arrays are equal.\n * @param {Array} arr1 First array\n * @param {Array} arr2 Second array\n */\nexport function arraysEqual(arr1, arr2) {\n\tif(arr1.length !== arr2.length) return false;\n\tlet areEqual = true;\n\tarr1.map((d, i) => {\n\t\tif(arr2[i] !== d) areEqual = false;\n\t});\n\treturn areEqual;\n}\n\n/**\n * Shuffles array in place. ES6 version\n * @param {Array} array An array containing the items.\n */\nexport function shuffle(array) {\n\t// Awesomeness: https://bost.ocks.org/mike/shuffle/\n\t// https://stackoverflow.com/a/2450976/6495043\n\t// https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array?noredirect=1&lq=1\n\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j], array[i]];\n\t}\n\n\treturn array;\n}\n\n/**\n * Fill an array with extra points\n * @param {Array} array Array\n * @param {Number} count number of filler elements\n * @param {Object} element element to fill with\n * @param {Boolean} start fill at start?\n */\nexport function fillArray(array, count, element, start=false) {\n\tif(!element) {\n\t\telement = start ? array[0] : array[array.length - 1];\n\t}\n\tlet fillerArray = new Array(Math.abs(count)).fill(element);\n\tarray = start ? fillerArray.concat(array) : array.concat(fillerArray);\n\treturn array;\n}\n\n/**\n * Returns pixel width of string.\n * @param {String} string\n * @param {Number} charWidth Width of single char in pixels\n */\nexport function getStringWidth(string, charWidth) {\n\treturn (string+\"\").length * charWidth;\n}\n\nexport function bindChange(obj, getFn, setFn) {\n\treturn new Proxy(obj, {\n\t\tset: function(target, prop, value) {\n\t\t\tsetFn();\n\t\t\treturn Reflect.set(target, prop, value);\n\t\t},\n\t\tget: function(target, prop) {\n\t\t\tgetFn();\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/29325222\nexport function getRandomBias(min, max, bias, influence) {\n\tconst range = max - min;\n\tconst biasValue = range * bias + min;\n\tvar rnd = Math.random() * range + min,\t\t// random in range\n\t\tmix = Math.random() * influence;\t\t// random mixer\n\treturn rnd * (1 - mix) + biasValue * mix;\t// mix full range and bias\n}\n\nexport function getPositionByAngle(angle, radius) {\n\treturn {\n\t\tx: Math.sin(angle * ANGLE_RATIO) * radius,\n\t\ty: Math.cos(angle * ANGLE_RATIO) * radius,\n\t};\n}\n\n/**\n * Check if a number is valid for svg attributes\n * @param {object} candidate Candidate to test\n * @param {Boolean} nonNegative flag to treat negative number as invalid\n */\nexport function isValidNumber(candidate, nonNegative=false) {\n\tif (Number.isNaN(candidate)) return false;\n\telse if (candidate === undefined) return false;\n\telse if (!Number.isFinite(candidate)) return false;\n\telse if (nonNegative && candidate < 0) return false;\n\telse return true;\n}\n\n/**\n * Round a number to the closes precision, max max precision 4\n * @param {Number} d Any Number\n */\nexport function round(d) {\n\t// https://floating-point-gui.de/\n\t// https://www.jacklmoore.com/notes/rounding-in-javascript/\n\treturn Number(Math.round(d + 'e4') + 'e-4');\n}\n\n/**\n * Creates a deep clone of an object\n * @param {Object} candidate Any Object\n */\n export function deepClone(candidate) {\n\tlet cloned, value, key;\n \n\tif (candidate instanceof Date) {\n\t return new Date(candidate.getTime());\n\t}\n \n\tif (typeof candidate !== \"object\" || candidate === null) {\n\t return candidate;\n\t}\n \n\tcloned = Array.isArray(candidate) ? [] : {};\n \n\tfor (key in candidate) {\n\t value = candidate[key];\n \n\t cloned[key] = deepClone(value);\n\t}\n \n\treturn cloned;\n }","import { fillArray } from './helpers';\n\nexport function getBarHeightAndYAttr(yTop, zeroLine) {\n\tlet height, y;\n\tif (yTop <= zeroLine) {\n\t\theight = zeroLine - yTop;\n\t\ty = yTop;\n\t} else {\n\t\theight = yTop - zeroLine;\n\t\ty = zeroLine;\n\t}\n\n\treturn [height, y];\n}\n\nexport function equilizeNoOfElements(array1, array2,\n\textraCount = array2.length - array1.length) {\n\n\t// Doesn't work if either has zero elements.\n\tif(extraCount > 0) {\n\t\tarray1 = fillArray(array1, extraCount);\n\t} else {\n\t\tarray2 = fillArray(array2, extraCount);\n\t}\n\treturn [array1, array2];\n}\n\nexport function truncateString(txt, len) {\n\tif (!txt) {\n\t\treturn;\n\t}\n\tif (txt.length > len) {\n\t\treturn txt.slice(0, len-3) + '...';\n\t} else {\n\t\treturn txt;\n\t}\n}\n\nexport function shortenLargeNumber(label) {\n\tlet number;\n\tif (typeof label === 'number') number = label;\n\telse if (typeof label === 'string') {\n\t\tnumber = Number(label);\n\t\tif (Number.isNaN(number)) return label;\n\t}\n\n\t// Using absolute since log wont work for negative numbers\n\tlet p = Math.floor(Math.log10(Math.abs(number)));\n\tif (p <= 2) return number; // Return as is for a 3 digit number of less\n\tlet\tl = Math.floor(p / 3);\n\tlet shortened = (Math.pow(10, p - l * 3) * +(number / Math.pow(10, p)).toFixed(1));\n\n\t// Correct for floating point error upto 2 decimal places\n\treturn Math.round(shortened*100)/100 + ' ' + ['', 'K', 'M', 'B', 'T'][l];\n}\n\n// cubic bezier curve calculation (from example by François Romain)\nexport function getSplineCurvePointsStr(xList, yList) {\n\n\tlet points=[];\n\tfor(let i=0;i<xList.length;i++){\n\t\tpoints.push([xList[i], yList[i]]);\n\t}\n\n\tlet smoothing = 0.2;\n\tlet line = (pointA, pointB) => {\n\t\tlet lengthX = pointB[0] - pointA[0];\n\t\tlet lengthY = pointB[1] - pointA[1];\n\t\treturn {\n\t\t\tlength: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n\t\t\tangle: Math.atan2(lengthY, lengthX)\n\t\t};\n\t};\n \n\tlet controlPoint = (current, previous, next, reverse) => {\n\t\tlet p = previous || current;\n\t\tlet n = next || current;\n\t\tlet o = line(p, n);\n\t\tlet angle = o.angle + (reverse ? Math.PI : 0);\n\t\tlet length = o.length * smoothing;\n\t\tlet x = current[0] + Math.cos(angle) * length;\n\t\tlet y = current[1] + Math.sin(angle) * length;\n\t\treturn [x, y];\n\t};\n \n\tlet bezierCommand = (point, i, a) => {\n\t\tlet cps = controlPoint(a[i - 1], a[i - 2], point);\n\t\tlet cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n\t\treturn `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}`;\n\t};\n \n\tlet pointStr = (points, command) => {\n\t\treturn points.reduce((acc, point, i, a) => i === 0\n\t\t\t? `${point[0]},${point[1]}`\n\t\t\t: `${acc} ${command(point, i, a)}`, '');\n\t};\n \n\treturn pointStr(points, bezierCommand);\n}\n","const PRESET_COLOR_MAP = {\n\t'light-blue': '#7cd6fd',\n\t'blue': '#5e64ff',\n\t'violet': '#743ee2',\n\t'red': '#ff5858',\n\t'orange': '#ffa00a',\n\t'yellow': '#feef72',\n\t'green': '#28a745',\n\t'light-green': '#98d85b',\n\t'purple': '#b554ff',\n\t'magenta': '#ffa3ef',\n\t'black': '#36114C',\n\t'grey': '#bdd3e6',\n\t'light-grey': '#f0f4f7',\n\t'dark-grey': '#b8c2cc'\n};\n\nfunction limitColor(r){\n\tif (r > 255) return 255;\n\telse if (r < 0) return 0;\n\treturn r;\n}\n\nexport function lightenDarkenColor(color, amt) {\n\tlet col = getColor(color);\n\tlet usePound = false;\n\tif (col[0] == \"#\") {\n\t\tcol = col.slice(1);\n\t\tusePound = true;\n\t}\n\tlet num = parseInt(col,16);\n\tlet r = limitColor((num >> 16) + amt);\n\tlet b = limitColor(((num >> 8) & 0x00FF) + amt);\n\tlet g = limitColor((num & 0x0000FF) + amt);\n\treturn (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\n}\n\nexport function isValidColor(string) {\n\t// https://stackoverflow.com/a/32685393\n\tlet HEX_RE = /(^\\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i;\n\tlet RGB_RE = /(^\\s*)(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/i;\n\treturn HEX_RE.test(string) || RGB_RE.test(string);\n}\n\nexport const getColor = (color) => {\n\t// When RGB color, convert to hexadecimal (alpha value is omitted)\n\tif((/rgb[a]{0,1}\\([\\d, ]+\\)/gim).test(color)) {\n\t\treturn (/\\D+(\\d*)\\D+(\\d*)\\D+(\\d*)/gim).exec(color)\n\t\t\t.map((x, i) => (i !== 0 ? Number(x).toString(16) : '#'))\n\t\t\t.reduce((c, ch) => `${c}${ch}`);\n\t}\n\treturn PRESET_COLOR_MAP[color] || color;\n};\n","import { getBarHeightAndYAttr, truncateString, shortenLargeNumber, getSplineCurvePointsStr } from './draw-utils';\nimport { getStringWidth, isValidNumber } from './helpers';\nimport { DOT_OVERLAY_SIZE_INCR, PERCENTAGE_BAR_DEFAULT_DEPTH } from './constants';\nimport { lightenDarkenColor } from './colors';\n\nexport const AXIS_TICK_LENGTH = 6;\nconst LABEL_MARGIN = 4;\nconst LABEL_MAX_CHARS = 15;\nexport const FONT_SIZE = 10;\nconst BASE_LINE_COLOR = '#dadada';\nconst FONT_FILL = '#555b51';\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nexport function createSVG(tag, o) {\n\tvar element = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif(i === \"className\") { i = \"class\"; }\n\t\t\tif(i === \"innerHTML\") {\n\t\t\t\telement['textContent'] = val;\n\t\t\t} else {\n\t\t\t\telement.setAttribute(i, val);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn element;\n}\n\nfunction renderVerticalGradient(svgDefElem, gradientId) {\n\treturn createSVG('linearGradient', {\n\t\tinside: svgDefElem,\n\t\tid: gradientId,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: 0,\n\t\ty2: 1\n\t});\n}\n\nfunction setGradientStop(gradElem, offset, color, opacity) {\n\treturn createSVG('stop', {\n\t\t'inside': gradElem,\n\t\t'style': `stop-color: ${color}`,\n\t\t'offset': offset,\n\t\t'stop-opacity': opacity\n\t});\n}\n\nexport function makeSVGContainer(parent, className, width, height) {\n\treturn createSVG('svg', {\n\t\tclassName: className,\n\t\tinside: parent,\n\t\twidth: width,\n\t\theight: height\n\t});\n}\n\nexport function makeSVGDefs(svgContainer) {\n\treturn createSVG('defs', {\n\t\tinside: svgContainer,\n\t});\n}\n\nexport function makeSVGGroup(className, transform='', parent=undefined) {\n\tlet args = {\n\t\tclassName: className,\n\t\ttransform: transform\n\t};\n\tif(parent) args.inside = parent;\n\treturn createSVG('g', args);\n}\n\nexport function wrapInSVGGroup(elements, className='') {\n\tlet g = createSVG('g', {\n\t\tclassName: className\n\t});\n\telements.forEach(e => g.appendChild(e));\n\treturn g;\n}\n\nexport function makePath(pathStr, className='', stroke='none', fill='none', strokeWidth=2) {\n\treturn createSVG('path', {\n\t\tclassName: className,\n\t\td: pathStr,\n\t\tstyles: {\n\t\t\tstroke: stroke,\n\t\t\tfill: fill,\n\t\t\t'stroke-width': strokeWidth\n\t\t}\n\t});\n}\n\nexport function makeArcPathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, center.y * 2, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc} z\n\t\tL${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeArcStrokePathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeStrokeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, radius * 2 + arcStartY, center.y + startPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc}\n\t\tM${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeGradient(svgDefElem, color, lighter = false) {\n\tlet gradientId ='path-fill-gradient' + '-' + color + '-' +(lighter ? 'lighter' : 'default');\n\tlet gradientDef = renderVerticalGradient(svgDefElem, gradientId);\n\tlet opacities = [1, 0.6, 0.2];\n\tif(lighter) {\n\t\topacities = [0.4, 0.2, 0];\n\t}\n\n\tsetGradientStop(gradientDef, \"0%\", color, opacities[0]);\n\tsetGradientStop(gradientDef, \"50%\", color, opacities[1]);\n\tsetGradientStop(gradientDef, \"100%\", color, opacities[2]);\n\n\treturn gradientId;\n}\n\nexport function percentageBar(x, y, width, height,\n\tdepth=PERCENTAGE_BAR_DEFAULT_DEPTH, fill='none') {\n\n\tlet args = {\n\t\tclassName: 'percentage-bar',\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height,\n\t\tfill: fill,\n\t\tstyles: {\n\t\t\t'stroke': lightenDarkenColor(fill, -25),\n\t\t\t// Diabolically good: https://stackoverflow.com/a/9000859\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n\t\t\t'stroke-dasharray': `0, ${height + width}, ${width}, ${height}`,\n\t\t\t'stroke-width': depth\n\t\t},\n\t};\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function heatSquare(className, x, y, size, radius, fill='none', data={}) {\n\tlet args = {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: size,\n\t\theight: size,\n\t\trx: radius,\n\t\tfill: fill\n\t};\n\n\tObject.keys(data).map(key => {\n\t\targs[key] = data[key];\n\t});\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function legendBar(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-bar',\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: size,\n\t\theight: '2px',\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE * 2) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"rect\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function legendDot(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-dot',\n\t\tcx: 0,\n\t\tcy: 0,\n\t\tr: size,\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdx: (FONT_SIZE) + 'px',\n\t\tdy: (FONT_SIZE/3) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"circle\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function makeText(className, x, y, content, options = {}) {\n\tlet fontSize = options.fontSize || FONT_SIZE;\n\tlet dy = options.dy !== undefined ? options.dy : (fontSize / 2);\n\tlet fill = options.fill || FONT_FILL;\n\tlet textAnchor = options.textAnchor || 'start';\n\treturn createSVG('text', {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\tdy: dy + 'px',\n\t\t'font-size': fontSize + 'px',\n\t\tfill: fill,\n\t\t'text-anchor': textAnchor,\n\t\tinnerHTML: content\n\t});\n}\n\nfunction makeVertLine(x, label, y1, y2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tlet l = createSVG('line', {\n\t\tclassName: 'line-vertical ' + options.className,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: y1,\n\t\ty2: y2,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: 0,\n\t\ty: y1 > y2 ? y1 + LABEL_MARGIN : y1 - LABEL_MARGIN - FONT_SIZE,\n\t\tdy: FONT_SIZE + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'middle',\n\t\tinnerHTML: label + \"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(${ x }, 0)`\n\t});\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nfunction makeHoriLine(y, label, x1, x2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.lineType) options.lineType = '';\n\tif (options.shortenNumbers) label = shortenLargeNumber(label);\n\n\tlet className = 'line-horizontal ' + options.className +\n\t\t(options.lineType === \"dashed\" ? \"dashed\": \"\");\n\n\tlet l = createSVG('line', {\n\t\tclassName: className,\n\t\tx1: x1,\n\t\tx2: x2,\n\t\ty1: 0,\n\t\ty2: 0,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: x1 < x2 ? x1 - LABEL_MARGIN : x1 + LABEL_MARGIN,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / 2 - 2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': x1 < x2 ? 'end' : 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(0, ${y})`,\n\t\t'stroke-opacity': 1\n\t});\n\n\tif(text === 0 || text === '0') {\n\t\tline.style.stroke = \"rgba(27, 31, 35, 0.6)\";\n\t}\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nexport function yLine(y, label, width, options={}) {\n\tif (!isValidNumber(y)) y = 0;\n\n\tif(!options.pos) options.pos = 'left';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\tlet x1 = -1 * AXIS_TICK_LENGTH;\n\tlet x2 = options.mode === 'span' ? width + AXIS_TICK_LENGTH : 0;\n\n\tif(options.mode === 'tick' && options.pos === 'right') {\n\t\tx1 = width + AXIS_TICK_LENGTH;\n\t\tx2 = width;\n\t}\n\n\t// let offset = options.pos === 'left' ? -1 * options.offset : options.offset;\n\n\tx1 += options.offset;\n\tx2 += options.offset;\n\n\treturn makeHoriLine(y, label, x1, x2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType,\n\t\tshortenNumbers: options.shortenNumbers\n\t});\n}\n\nexport function xLine(x, label, height, options={}) {\n\tif (!isValidNumber(x)) x = 0;\n\n\tif(!options.pos) options.pos = 'bottom';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\t// Draw X axis line in span/tick mode with optional label\n\t// \ty2(span)\n\t// \t\t\t\t\t\t|\n\t// \t\t\t\t\t\t|\n\t//\t\t\t\tx line\t|\n\t//\t\t\t\t\t\t|\n\t// \t\t\t\t\t \t|\n\t// ---------------------+-- y2(tick)\n\t//\t\t\t\t\t\t|\n\t//\t\t\t\t\t\t\ty1\n\n\tlet y1 = height + AXIS_TICK_LENGTH;\n\tlet y2 = options.mode === 'span' ? -1 * AXIS_TICK_LENGTH : height;\n\n\tif(options.mode === 'tick' && options.pos === 'top') {\n\t\t// top axis ticks\n\t\ty1 = -1 * AXIS_TICK_LENGTH;\n\t\ty2 = 0;\n\t}\n\n\treturn makeVertLine(x, label, y1, y2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType\n\t});\n}\n\nexport function yMarker(y, label, width, options={}) {\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label, 5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = makeHoriLine(y, '', 0, width, {\n\t\tstroke: options.stroke || BASE_LINE_COLOR,\n\t\tclassName: options.className || '',\n\t\tlineType: options.lineType\n\t});\n\n\tline.appendChild(labelSvg);\n\n\treturn line;\n}\n\nexport function yRegion(y1, y2, width, label, options={}) {\n\t// return a group\n\tlet height = y1 - y2;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`, // remove class\n\t\tstyles: {\n\t\t\tfill: `rgba(228, 234, 239, 0.49)`,\n\t\t\tstroke: BASE_LINE_COLOR,\n\t\t\t'stroke-dasharray': `${width}, ${height}`\n\t\t},\n\t\t// 'data-point-index': index,\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label+\"\", 4.5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet region = createSVG('g', {\n\t\ttransform: `translate(0, ${y2})`\n\t});\n\n\tregion.appendChild(rect);\n\tregion.appendChild(labelSvg);\n\n\treturn region;\n}\n\nexport function datasetBar(x, yTop, width, color, label='', index=0, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\n\tif(height === 0) {\n\t\theight = meta.minHeight;\n\t\ty -= meta.minHeight;\n\t}\n\n\t// Preprocess numbers to avoid svg building errors\n\tif (!isValidNumber(x)) x = 0;\n\tif (!isValidNumber(y)) y = 0;\n\tif (!isValidNumber(height, true)) height = 0;\n\tif (!isValidNumber(width, true)) width = 0;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`,\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn rect;\n\t} else {\n\t\trect.setAttribute('y', 0);\n\t\trect.setAttribute('x', 0);\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: width/2,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(rect);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function datasetDot(x, y, radius, color, label='', index=0) {\n\tlet dot = createSVG('circle', {\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tcx: x,\n\t\tcy: y,\n\t\tr: radius\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn dot;\n\t} else {\n\t\tdot.setAttribute('cy', 0);\n\t\tdot.setAttribute('cx', 0);\n\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1 - radius) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(dot);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function getPaths(xList, yList, color, options={}, meta={}) {\n\tlet pointsList = yList.map((y, i) => (xList[i] + ',' + y));\n\tlet pointsStr = pointsList.join(\"L\");\n\n\t// Spline\n\tif (options.spline)\n\t\tpointsStr = getSplineCurvePointsStr(xList, yList);\n\n\tlet path = makePath(\"M\"+pointsStr, 'line-graph-path', color);\n\n\t// HeatLine\n\tif(options.heatline) {\n\t\tlet gradient_id = makeGradient(meta.svgDefs, color);\n\t\tpath.style.stroke = `url(#${gradient_id})`;\n\t}\n\n\tlet paths = {\n\t\tpath: path\n\t};\n\n\t// Region\n\tif(options.regionFill) {\n\t\tlet gradient_id_region = makeGradient(meta.svgDefs, color, true);\n\n\t\tlet pathStr = \"M\" + `${xList[0]},${meta.zeroLine}L` + pointsStr + `L${xList.slice(-1)[0]},${meta.zeroLine}`;\n\t\tpaths.region = makePath(pathStr, `region-fill`, 'none', `url(#${gradient_id_region})`);\n\t}\n\n\treturn paths;\n}\n\nexport let makeOverlay = {\n\t'bar': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\toverlay.style.fill = '#000000';\n\t\toverlay.style.opacity = '0.4';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'dot': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'heat_square': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t}\n};\n\nexport let updateOverlay = {\n\t'bar': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['x', 'y', 'width', 'height'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'dot': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'heat_square': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n};\n","import { getBarHeightAndYAttr, getSplineCurvePointsStr } from './draw-utils';\n\nexport const UNIT_ANIM_DUR = 350;\nexport const PATH_ANIM_DUR = 350;\nexport const MARKER_LINE_ANIM_DUR = UNIT_ANIM_DUR;\nexport const REPLACE_ALL_NEW_DUR = 250;\n\nexport const STD_EASING = 'easein';\n\nexport function translate(unit, oldCoord, newCoord, duration) {\n\tlet old = typeof oldCoord === 'string' ? oldCoord : oldCoord.join(', ');\n\treturn [\n\t\tunit,\n\t\t{transform: newCoord.join(', ')},\n\t\tduration,\n\t\tSTD_EASING,\n\t\t\"translate\",\n\t\t{transform: old}\n\t];\n}\n\nexport function translateVertLine(xLine, newX, oldX) {\n\treturn translate(xLine, [oldX, 0], [newX, 0], MARKER_LINE_ANIM_DUR);\n}\n\nexport function translateHoriLine(yLine, newY, oldY) {\n\treturn translate(yLine, [0, oldY], [0, newY], MARKER_LINE_ANIM_DUR);\n}\n\nexport function animateRegion(rectGroup, newY1, newY2, oldY2) {\n\tlet newHeight = newY1 - newY2;\n\tlet rect = rectGroup.childNodes[0];\n\tlet width = rect.getAttribute(\"width\");\n\tlet rectAnim = [\n\t\trect,\n\t\t{ height: newHeight, 'stroke-dasharray': `${width}, ${newHeight}` },\n\t\tMARKER_LINE_ANIM_DUR,\n\t\tSTD_EASING\n\t];\n\n\tlet groupAnim = translate(rectGroup, [0, oldY2], [0, newY2], MARKER_LINE_ANIM_DUR);\n\treturn [rectAnim, groupAnim];\n}\n\nexport function animateBar(bar, x, yTop, width, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\tif(bar.nodeName !== 'rect') {\n\t\tlet rect = bar.childNodes[0];\n\t\tlet rectAnim = [\n\t\t\trect,\n\t\t\t{width: width, height: height},\n\t\t\tUNIT_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\n\t\tlet oldCoordStr = bar.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(bar, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [rectAnim, groupAnim];\n\t} else {\n\t\treturn [[bar, {width: width, height: height, x: x, y: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// bar.animate({height: args.newHeight, y: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animateDot(dot, x, y) {\n\tif(dot.nodeName !== 'circle') {\n\t\tlet oldCoordStr = dot.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(dot, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [groupAnim];\n\t} else {\n\t\treturn [[dot, {cx: x, cy: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// dot.animate({cy: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animatePath(paths, newXList, newYList, zeroLine, spline) {\n\tlet pathComponents = [];\n\tlet pointsStr = newYList.map((y, i) => (newXList[i] + ',' + y)).join(\"L\");\n\n\tif (spline)\n\t\tpointsStr = getSplineCurvePointsStr(newXList, newYList);\n\n\tconst animPath = [paths.path, {d:\"M\" + pointsStr}, PATH_ANIM_DUR, STD_EASING];\n\tpathComponents.push(animPath);\n\n\tif(paths.region) {\n\t\tlet regStartPt = `${newXList[0]},${zeroLine}L`;\n\t\tlet regEndPt = `L${newXList.slice(-1)[0]}, ${zeroLine}`;\n\n\t\tconst animRegion = [\n\t\t\tpaths.region,\n\t\t\t{d:\"M\" + regStartPt + pointsStr + regEndPt},\n\t\t\tPATH_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\t\tpathComponents.push(animRegion);\n\t}\n\n\treturn pathComponents;\n}\n\nexport function animatePathStr(oldPath, pathStr) {\n\treturn [oldPath, {d: pathStr}, UNIT_ANIM_DUR, STD_EASING];\n}\n","// Leveraging SMIL Animations\n\nimport { REPLACE_ALL_NEW_DUR } from './animate';\n\nconst EASING = {\n\tease: \"0.25 0.1 0.25 1\",\n\tlinear: \"0 0 1 1\",\n\t// easein: \"0.42 0 1 1\",\n\teasein: \"0.1 0.8 0.2 1\",\n\teaseout: \"0 0 0.58 1\",\n\teaseinout: \"0.42 0 0.58 1\"\n};\n\nfunction animateSVGElement(element, props, dur, easingType=\"linear\", type=undefined, oldValues={}) {\n\n\tlet animElement = element.cloneNode(true);\n\tlet newElement = element.cloneNode(true);\n\n\tfor(var attributeName in props) {\n\t\tlet animateElement;\n\t\tif(attributeName === 'transform') {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animateTransform\");\n\t\t} else {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animate\");\n\t\t}\n\t\tlet currentValue = oldValues[attributeName] || element.getAttribute(attributeName);\n\t\tlet value = props[attributeName];\n\n\t\tlet animAttr = {\n\t\t\tattributeName: attributeName,\n\t\t\tfrom: currentValue,\n\t\t\tto: value,\n\t\t\tbegin: \"0s\",\n\t\t\tdur: dur/1000 + \"s\",\n\t\t\tvalues: currentValue + \";\" + value,\n\t\t\tkeySplines: EASING[easingType],\n\t\t\tkeyTimes: \"0;1\",\n\t\t\tcalcMode: \"spline\",\n\t\t\tfill: 'freeze'\n\t\t};\n\n\t\tif(type) {\n\t\t\tanimAttr[\"type\"] = type;\n\t\t}\n\n\t\tfor (var i in animAttr) {\n\t\t\tanimateElement.setAttribute(i, animAttr[i]);\n\t\t}\n\n\t\tanimElement.appendChild(animateElement);\n\n\t\tif(type) {\n\t\t\tnewElement.setAttribute(attributeName, `translate(${value})`);\n\t\t} else {\n\t\t\tnewElement.setAttribute(attributeName, value);\n\t\t}\n\t}\n\n\treturn [animElement, newElement];\n}\n\nexport function transform(element, style) { // eslint-disable-line no-unused-vars\n\telement.style.transform = style;\n\telement.style.webkitTransform = style;\n\telement.style.msTransform = style;\n\telement.style.mozTransform = style;\n\telement.style.oTransform = style;\n}\n\nfunction animateSVG(svgContainer, elements) {\n\tlet newElements = [];\n\tlet animElements = [];\n\n\telements.map(element => {\n\t\tlet unit = element[0];\n\t\tlet parent = unit.parentNode;\n\n\t\tlet animElement, newElement;\n\n\t\telement[0] = unit;\n\t\t[animElement, newElement] = animateSVGElement(...element);\n\n\t\tnewElements.push(newElement);\n\t\tanimElements.push([animElement, parent]);\n\t\t\n\t\tif (parent) {\n\t\t\tparent.replaceChild(animElement, unit);\n\t\t}\n\t});\n\n\tlet animSvg = svgContainer.cloneNode(true);\n\n\tanimElements.map((animElement, i) => {\n\t\tif (animElement[1]) {\n\t\t\tanimElement[1].replaceChild(newElements[i], animElement[0]);\n\t\t\telements[i][0] = newElements[i];\n\t\t}\n\t});\n\n\treturn animSvg;\n}\n\nexport function runSMILAnimation(parent, svgElement, elementsToAnimate) {\n\tif(elementsToAnimate.length === 0) return;\n\n\tlet animSvgElement = animateSVG(svgElement, elementsToAnimate);\n\tif(svgElement.parentNode == parent) {\n\t\tparent.removeChild(svgElement);\n\t\tparent.appendChild(animSvgElement);\n\n\t}\n\n\t// Replace the new svgElement (data has already been replaced)\n\tsetTimeout(() => {\n\t\tif(animSvgElement.parentNode == parent) {\n\t\t\tparent.removeChild(animSvgElement);\n\t\t\tparent.appendChild(svgElement);\n\t\t}\n\t}, REPLACE_ALL_NEW_DUR);\n}\n","import { $ } from '../utils/dom';\nimport { CSSTEXT } from '../../css/chartsCss';\n\nexport function downloadFile(filename, data) {\n\tvar a = document.createElement('a');\n\ta.style = \"display: none\";\n\tvar blob = new Blob(data, {type: \"image/svg+xml; charset=utf-8\"});\n\tvar url = window.URL.createObjectURL(blob);\n\ta.href = url;\n\ta.download = filename;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tsetTimeout(function(){\n\t\tdocument.body.removeChild(a);\n\t\twindow.URL.revokeObjectURL(url);\n\t}, 300);\n}\n\nexport function prepareForExport(svg) {\n\tlet clone = svg.cloneNode(true);\n\tclone.classList.add('chart-container');\n\tclone.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n\tclone.setAttribute('xmlns:xlink', \"http://www.w3.org/1999/xlink\");\n\tlet styleEl = $.create('style', {\n\t\t'innerHTML': CSSTEXT\n\t});\n\tclone.insertBefore(styleEl, clone.firstChild);\n\n\tlet container = $.create('div');\n\tcontainer.appendChild(clone);\n\n\treturn container.innerHTML;\n}\n","// Playing around with dates\n\nexport const NO_OF_YEAR_MONTHS = 12;\nexport const NO_OF_DAYS_IN_WEEK = 7;\nexport const DAYS_IN_YEAR = 375;\nexport const NO_OF_MILLIS = 1000;\nexport const SEC_IN_DAY = 86400;\n\nexport const MONTH_NAMES = [\"January\", \"February\", \"March\", \"April\", \"May\",\n\t\"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const MONTH_NAMES_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const DAY_NAMES_SHORT = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nexport const DAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n\t\"Thursday\", \"Friday\", \"Saturday\"];\n\n// https://stackoverflow.com/a/11252167/6495043\nfunction treatAsUtc(date) {\n\tlet result = new Date(date);\n\tresult.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n\treturn result;\n}\n\nexport function getYyyyMmDd(date) {\n\tlet dd = date.getDate();\n\tlet mm = date.getMonth() + 1; // getMonth() is zero-based\n\treturn [\n\t\tdate.getFullYear(),\n\t\t(mm>9 ? '' : '0') + mm,\n\t\t(dd>9 ? '' : '0') + dd\n\t].join('-');\n}\n\nexport function clone(date) {\n\treturn new Date(date.getTime());\n}\n\nexport function timestampSec(date) {\n\treturn date.getTime()/NO_OF_MILLIS;\n}\n\nexport function timestampToMidnight(timestamp, roundAhead = false) {\n\tlet midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));\n\tif(roundAhead) {\n\t\treturn midnightTs + SEC_IN_DAY;\n\t}\n\treturn midnightTs;\n}\n\n// export function getMonthsBetween(startDate, endDate) {}\n\nexport function getWeeksBetween(startDate, endDate) {\n\tlet weekStartDate = setDayToSunday(startDate);\n\treturn Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);\n}\n\nexport function getDaysBetween(startDate, endDate) {\n\tlet millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;\n\treturn (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;\n}\n\nexport function areInSameMonth(startDate, endDate) {\n\treturn startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getFullYear() === endDate.getFullYear();\n}\n\nexport function getMonthName(i, short=false) {\n\tlet monthName = MONTH_NAMES[i];\n\treturn short ? monthName.slice(0, 3) : monthName;\n}\n\nexport function getLastDateInMonth (month, year) {\n\treturn new Date(year, month + 1, 0); // 0: last day in previous month\n}\n\n// mutates\nexport function setDayToSunday(date) {\n\tlet newDate = clone(date);\n\tconst day = newDate.getDay();\n\tif(day !== 0) {\n\t\taddDays(newDate, (-1) * day);\n\t}\n\treturn newDate;\n}\n\n// mutates\nexport function addDays(date, numberOfDays) {\n\tdate.setDate(date.getDate() + numberOfDays);\n}\n","import { makeSVGGroup } from '../utils/draw';\nimport { makeText, makePath, xLine, yLine, yMarker, yRegion, datasetBar, datasetDot, percentageBar, getPaths, heatSquare } from '../utils/draw';\nimport { equilizeNoOfElements } from '../utils/draw-utils';\nimport { translateHoriLine, translateVertLine, animateRegion, animateBar,\n\tanimateDot, animatePath, animatePathStr } from '../utils/animate';\nimport { getMonthName } from '../utils/date-utils';\n\nclass ChartComponent {\n\tconstructor({\n\t\tlayerClass = '',\n\t\tlayerTransform = '',\n\t\tconstants,\n\n\t\tgetData,\n\t\tmakeElements,\n\t\tanimateElements\n\t}) {\n\t\tthis.layerTransform = layerTransform;\n\t\tthis.constants = constants;\n\n\t\tthis.makeElements = makeElements;\n\t\tthis.getData = getData;\n\n\t\tthis.animateElements = animateElements;\n\n\t\tthis.store = [];\n\t\tthis.labels = [];\n\n\t\tthis.layerClass = layerClass;\n\t\tthis.layerClass = typeof(this.layerClass) === 'function'\n\t\t\t? this.layerClass() : this.layerClass;\n\n\t\tthis.refresh();\n\t}\n\n\trefresh(data) {\n\t\tthis.data = data || this.getData();\n\t}\n\n\tsetup(parent) {\n\t\tthis.layer = makeSVGGroup(this.layerClass, this.layerTransform, parent);\n\t}\n\n\tmake() {\n\t\tthis.render(this.data);\n\t\tthis.oldData = this.data;\n\t}\n\n\trender(data) {\n\t\tthis.store = this.makeElements(data);\n\n\t\tthis.layer.textContent = '';\n\t\tthis.store.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t\tthis.labels.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.refresh();\n\t\tlet animateElements = [];\n\t\tif(animate) {\n\t\t\tanimateElements = this.animateElements(this.data) || [];\n\t\t}\n\t\treturn animateElements;\n\t}\n}\n\nlet componentConfigs = {\n\tdonutSlices: {\n\t\tlayerClass: 'donut-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) => {\n\t\t\t\tlet slice = makePath(s, 'donut-path', data.colors[i], 'none', data.strokeWidth);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) => animatePathStr(slice, newData.sliceStrings[i]));\n\t\t},\n\t},\n\tpieSlices: {\n\t\tlayerClass: 'pie-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) =>{\n\t\t\t\tlet slice = makePath(s, 'pie-path', 'none', data.colors[i]);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) =>\n\t\t\t\tanimatePathStr(slice, newData.sliceStrings[i])\n\t\t\t);\n\t\t}\n\t},\n\tpercentageBars: {\n\t\tlayerClass: 'percentage-bars',\n\t\tmakeElements(data) {\n\t\t\treturn data.xPositions.map((x, i) =>{\n\t\t\t\tlet y = 0;\n\t\t\t\tlet bar = percentageBar(x, y, data.widths[i],\n\t\t\t\t\tthis.constants.barHeight, this.constants.barDepth, data.colors[i]);\n\t\t\t\treturn bar;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\tyAxis: {\n\t\tlayerClass: 'y axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\tyLine(position, data.labels[i], this.constants.width,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos, shortenNumbers: this.constants.shortenNumbers})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.labels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tlabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\txAxis: {\n\t\tlayerClass: 'x axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\txLine(position, data.calcLabels[i], this.constants.height,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.calcLabels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.calcLabels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tcalcLabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateVertLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyMarkers: {\n\t\tlayerClass: 'y-markers',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(m =>\n\t\t\t\tyMarker(m.position, m.label, this.constants.width,\n\t\t\t\t\t{labelPos: m.options.labelPos, mode: 'span', lineType: 'dashed'})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.position);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.position);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tposition: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyRegions: {\n\t\tlayerClass: 'y-regions',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(r =>\n\t\t\t\tyRegion(r.startPos, r.endPos, this.constants.width,\n\t\t\t\t\tr.label, {labelPos: r.options.labelPos})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.endPos);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newStarts = newData.map(d => d.startPos);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.endPos);\n\t\t\tlet oldStarts = this.oldData.map(d => d.startPos);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartPos: oldStarts[i],\n\t\t\t\t\tendPos: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((rectGroup, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateRegion(\n\t\t\t\t\trectGroup, newStarts[i], newPos[i], oldPos[i]\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\theatDomain: {\n\t\tlayerClass: function() { return 'heat-domain domain-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet {index, colWidth, rowHeight, squareSize, radius, xTranslate} = this.constants;\n\t\t\tlet monthNameHeight = -12;\n\t\t\tlet x = xTranslate, y = 0;\n\n\t\t\tthis.serializedSubDomains = [];\n\n\t\t\tdata.cols.map((week, weekNo) => {\n\t\t\t\tif(weekNo === 1) {\n\t\t\t\t\tthis.labels.push(\n\t\t\t\t\t\tmakeText('domain-name', x, monthNameHeight, getMonthName(index, true).toUpperCase(),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfontSize: 9\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\tweek.map((day, i) => {\n\t\t\t\t\tif(day.fill) {\n\t\t\t\t\t\tlet data = {\n\t\t\t\t\t\t\t'data-date': day.yyyyMmDd,\n\t\t\t\t\t\t\t'data-value': day.dataValue,\n\t\t\t\t\t\t\t'data-day': i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet square = heatSquare('day', x, y, squareSize, radius, day.fill, data);\n\t\t\t\t\t\tthis.serializedSubDomains.push(square);\n\t\t\t\t\t}\n\t\t\t\t\ty += rowHeight;\n\t\t\t\t});\n\t\t\t\ty = 0;\n\t\t\t\tx += colWidth;\n\t\t\t});\n\n\t\t\treturn this.serializedSubDomains;\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\n\tbarGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-bars dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'bar';\n\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\treturn datasetBar(\n\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\ty,\n\t\t\t\t\tdata.barWidth,\n\t\t\t\t\tc.color,\n\t\t\t\t\tdata.labels[j],\n\t\t\t\t\tj,\n\t\t\t\t\tdata.offsets[j],\n\t\t\t\t\t{\n\t\t\t\t\t\tzeroLine: data.zeroLine,\n\t\t\t\t\t\tbarsWidth: data.barsWidth,\n\t\t\t\t\t\tminHeight: c.minHeight\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn this.units;\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newOffsets = newData.offsets;\n\t\t\tlet newLabels = newData.labels;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldOffsets = this.oldData.offsets;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldOffsets, newOffsets] = equilizeNoOfElements(oldOffsets, newOffsets);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\toffsets: oldOffsets,\n\t\t\t\tlabels: newLabels,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tbarsWidth: this.oldData.barsWidth,\n\t\t\t\tbarWidth: this.oldData.barWidth,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((bar, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateBar(\n\t\t\t\t\tbar, newXPos[i], newYPos[i], newData.barWidth, newOffsets[i],\n\t\t\t\t\t{zeroLine: newData.zeroLine}\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\tlineGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-line dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'dot';\n\t\t\tthis.paths = {};\n\t\t\tif(!c.hideLine) {\n\t\t\t\tthis.paths = getPaths(\n\t\t\t\t\tdata.xPositions,\n\t\t\t\t\tdata.yPositions,\n\t\t\t\t\tc.color,\n\t\t\t\t\t{\n\t\t\t\t\t\theatline: c.heatline,\n\t\t\t\t\t\tregionFill: c.regionFill,\n\t\t\t\t\t\tspline: c.spline\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsvgDefs: c.svgDefs,\n\t\t\t\t\t\tzeroLine: data.zeroLine\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.units = [];\n\t\t\tif(!c.hideDots) {\n\t\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\t\treturn datasetDot(\n\t\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\t\ty,\n\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\tc.color,\n\t\t\t\t\t\t(c.valuesOverPoints ? data.values[j] : ''),\n\t\t\t\t\t\tj\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Object.values(this.paths).concat(this.units);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newValues = newData.values;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldValues = this.oldData.values;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldValues, newValues] = equilizeNoOfElements(oldValues, newValues);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\tvalues: newValues,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tradius: this.oldData.radius,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tif(Object.keys(this.paths).length) {\n\t\t\t\tanimateElements = animateElements.concat(animatePath(\n\t\t\t\t\tthis.paths, newXPos, newYPos, newData.zeroLine, this.constants.spline));\n\t\t\t}\n\n\t\t\tif(this.units.length) {\n\t\t\t\tthis.units.map((dot, i) => {\n\t\t\t\t\tanimateElements = animateElements.concat(animateDot(\n\t\t\t\t\t\tdot, newXPos[i], newYPos[i]));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn animateElements;\n\t\t}\n\t}\n};\n\nexport function getComponent(name, constants, getData) {\n\tlet keys = Object.keys(componentConfigs).filter(k => name.includes(k));\n\tlet config = componentConfigs[keys[0]];\n\tObject.assign(config, {\n\t\tconstants: constants,\n\t\tgetData: getData\n\t});\n\treturn new ChartComponent(config);\n}\n","import { floatTwo } from './helpers';\n\nfunction normalize(x) {\n\t// Calculates mantissa and exponent of a number\n\t// Returns normalized number and exponent\n\t// https://stackoverflow.com/q/9383593/6495043\n\n\tif(x===0) {\n\t\treturn [0, 0];\n\t}\n\tif(isNaN(x)) {\n\t\treturn {mantissa: -6755399441055744, exponent: 972};\n\t}\n\tvar sig = x > 0 ? 1 : -1;\n\tif(!isFinite(x)) {\n\t\treturn {mantissa: sig * 4503599627370496, exponent: 972};\n\t}\n\n\tx = Math.abs(x);\n\tvar exp = Math.floor(Math.log10(x));\n\tvar man = x/Math.pow(10, exp);\n\n\treturn [sig * man, exp];\n}\n\nfunction getChartRangeIntervals(max, min=0) {\n\tlet upperBound = Math.ceil(max);\n\tlet lowerBound = Math.floor(min);\n\tlet range = upperBound - lowerBound;\n\n\tlet noOfParts = range;\n\tlet partSize = 1;\n\n\t// To avoid too many partitions\n\tif(range > 5) {\n\t\tif(range % 2 !== 0) {\n\t\t\tupperBound++;\n\t\t\t// Recalc range\n\t\t\trange = upperBound - lowerBound;\n\t\t}\n\t\tnoOfParts = range/2;\n\t\tpartSize = 2;\n\t}\n\n\t// Special case: 1 and 2\n\tif(range <= 2) {\n\t\tnoOfParts = 4;\n\t\tpartSize = range/noOfParts;\n\t}\n\n\t// Special case: 0\n\tif(range === 0) {\n\t\tnoOfParts = 5;\n\t\tpartSize = 1;\n\t}\n\n\tlet intervals = [];\n\tfor(var i = 0; i <= noOfParts; i++){\n\t\tintervals.push(lowerBound + partSize * i);\n\t}\n\treturn intervals;\n}\n\nfunction getChartIntervals(maxValue, minValue=0) {\n\tlet [normalMaxValue, exponent] = normalize(maxValue);\n\tlet normalMinValue = minValue ? minValue/Math.pow(10, exponent): 0;\n\n\t// Allow only 7 significant digits\n\tnormalMaxValue = normalMaxValue.toFixed(6);\n\n\tlet intervals = getChartRangeIntervals(normalMaxValue, normalMinValue);\n\tintervals = intervals.map(value => value * Math.pow(10, exponent));\n\treturn intervals;\n}\n\nexport function calcChartIntervals(values, withMinimum=false) {\n\t//*** Where the magic happens ***\n\n\t// Calculates best-fit y intervals from given values\n\t// and returns the interval array\n\n\tlet maxValue = Math.max(...values);\n\tlet minValue = Math.min(...values);\n\n\t// Exponent to be used for pretty print\n\tlet exponent = 0, intervals = []; // eslint-disable-line no-unused-vars\n\n\tfunction getPositiveFirstIntervals(maxValue, absMinValue) {\n\t\tlet intervals = getChartIntervals(maxValue);\n\n\t\tlet intervalSize = intervals[1] - intervals[0];\n\n\t\t// Then unshift the negative values\n\t\tlet value = 0;\n\t\tfor(var i = 1; value < absMinValue; i++) {\n\t\t\tvalue += intervalSize;\n\t\t\tintervals.unshift((-1) * value);\n\t\t}\n\t\treturn intervals;\n\t}\n\n\t// CASE I: Both non-negative\n\n\tif(maxValue >= 0 && minValue >= 0) {\n\t\texponent = normalize(maxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(maxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(maxValue, minValue);\n\t\t}\n\t}\n\n\t// CASE II: Only minValue negative\n\n\telse if(maxValue > 0 && minValue < 0) {\n\t\t// `withMinimum` irrelevant in this case,\n\t\t// We'll be handling both sides of zero separately\n\t\t// (both starting from zero)\n\t\t// Because ceil() and floor() behave differently\n\t\t// in those two regions\n\n\t\tlet absMinValue = Math.abs(minValue);\n\n\t\tif(maxValue >= absMinValue) {\n\t\t\texponent = normalize(maxValue)[1];\n\t\t\tintervals = getPositiveFirstIntervals(maxValue, absMinValue);\n\t\t} else {\n\t\t\t// Mirror: maxValue => absMinValue, then change sign\n\t\t\texponent = normalize(absMinValue)[1];\n\t\t\tlet posIntervals = getPositiveFirstIntervals(absMinValue, maxValue);\n\t\t\tintervals = posIntervals.reverse().map(d => d * (-1));\n\t\t}\n\n\t}\n\n\t// CASE III: Both non-positive\n\n\telse if(maxValue <= 0 && minValue <= 0) {\n\t\t// Mirrored Case I:\n\t\t// Work with positives, then reverse the sign and array\n\n\t\tlet pseudoMaxValue = Math.abs(minValue);\n\t\tlet pseudoMinValue = Math.abs(maxValue);\n\n\t\texponent = normalize(pseudoMaxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue, pseudoMinValue);\n\t\t}\n\n\t\tintervals = intervals.reverse().map(d => d * (-1));\n\t}\n\n\treturn intervals;\n}\n\nexport function getZeroIndex(yPts) {\n\tlet zeroIndex;\n\tlet interval = getIntervalSize(yPts);\n\tif(yPts.indexOf(0) >= 0) {\n\t\t// the range has a given zero\n\t\t// zero-line on the chart\n\t\tzeroIndex = yPts.indexOf(0);\n\t} else if(yPts[0] > 0) {\n\t\t// Minimum value is positive\n\t\t// zero-line is off the chart: below\n\t\tlet min = yPts[0];\n\t\tzeroIndex = (-1) * min / interval;\n\t} else {\n\t\t// Maximum value is negative\n\t\t// zero-line is off the chart: above\n\t\tlet max = yPts[yPts.length - 1];\n\t\tzeroIndex = (-1) * max / interval + (yPts.length - 1);\n\t}\n\treturn zeroIndex;\n}\n\nexport function getRealIntervals(max, noOfIntervals, min = 0, asc = 1) {\n\tlet range = max - min;\n\tlet part = range * 1.0 / noOfIntervals;\n\tlet intervals = [];\n\n\tfor(var i = 0; i <= noOfIntervals; i++) {\n\t\tintervals.push(min + part * i);\n\t}\n\n\treturn asc ? intervals : intervals.reverse();\n}\n\nexport function getIntervalSize(orderedArray) {\n\treturn orderedArray[1] - orderedArray[0];\n}\n\nexport function getValueRange(orderedArray) {\n\treturn orderedArray[orderedArray.length-1] - orderedArray[0];\n}\n\nexport function scale(val, yAxis) {\n\treturn floatTwo(yAxis.zeroLine - val * yAxis.scaleMultiplier);\n}\n\nexport function isInRange(val, min, max) {\n\treturn val > min && val < max;\n}\n\nexport function isInRange2D(coord, minCoord, maxCoord) {\n\treturn isInRange(coord[0], minCoord[0], maxCoord[0])\n\t\t&& isInRange(coord[1], minCoord[1], maxCoord[1]);\n}\n\nexport function getClosestInArray(goal, arr, index = false) {\n\tlet closest = arr.reduce(function(prev, curr) {\n\t\treturn (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);\n\t}, []);\n\n\treturn index ? arr.indexOf(closest) : closest;\n}\n\nexport function calcDistribution(values, distributionSize) {\n\t// Assume non-negative values,\n\t// implying distribution minimum at zero\n\n\tlet dataMaxValue = Math.max(...values);\n\n\tlet distributionStep = 1 / (distributionSize - 1);\n\tlet distribution = [];\n\n\tfor(var i = 0; i < distributionSize; i++) {\n\t\tlet checkpoint = dataMaxValue * (distributionStep * i);\n\t\tdistribution.push(checkpoint);\n\t}\n\n\treturn distribution;\n}\n\nexport function getMaxCheckpoint(value, distribution) {\n\treturn distribution.filter(d => d < value).length;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { $ } from '../utils/dom';\nimport { TOOLTIP_POINTER_TRIANGLE_HEIGHT } from '../utils/constants';\n\nexport default class SvgTip {\n\tconstructor({\n\t\tparent = null,\n\t\tcolors = []\n\t}) {\n\t\tthis.parent = parent;\n\t\tthis.colors = colors;\n\t\tthis.titleName = '';\n\t\tthis.titleValue = '';\n\t\tthis.listValues = [];\n\t\tthis.titleValueFirst = 0;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\n\t\tthis.top = 0;\n\t\tthis.left = 0;\n\n\t\tthis.setup();\n\t}\n\n\tsetup() {\n\t\tthis.makeTooltip();\n\t}\n\n\trefresh() {\n\t\tthis.fill();\n\t\tthis.calcPosition();\n\t}\n\n\tmakeTooltip() {\n\t\tthis.container = $.create('div', {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'graph-svg-tip comparison',\n\t\t\tinnerHTML: `<span class=\"title\"></span>\n\t\t\t\t<ul class=\"data-point-list\"></ul>\n\t\t\t\t<div class=\"svg-pointer\"></div>`\n\t\t});\n\t\tthis.hideTip();\n\n\t\tthis.title = this.container.querySelector('.title');\n\t\tthis.dataPointList = this.container.querySelector('.data-point-list');\n\n\t\tthis.parent.addEventListener('mouseleave', () => {\n\t\t\tthis.hideTip();\n\t\t});\n\t}\n\n\tfill() {\n\t\tlet title;\n\t\tif(this.index) {\n\t\t\tthis.container.setAttribute('data-point-index', this.index);\n\t\t}\n\t\tif(this.titleValueFirst) {\n\t\t\ttitle = `<strong>${this.titleValue}</strong>${this.titleName}`;\n\t\t} else {\n\t\t\ttitle = `${this.titleName}<strong>${this.titleValue}</strong>`;\n\t\t}\n\t\tthis.title.innerHTML = title;\n\t\tthis.dataPointList.innerHTML = '';\n\n\t\tthis.listValues.map((set, i) => {\n\t\t\tconst color = this.colors[i] || 'black';\n\t\t\tlet value = set.formatted === 0 || set.formatted ? set.formatted : set.value;\n\n\t\t\tlet li = $.create('li', {\n\t\t\t\tstyles: {\n\t\t\t\t\t'border-top': `3px solid ${color}`\n\t\t\t\t},\n\t\t\t\tinnerHTML: `<strong style=\"display: block;\">${ value === 0 || value ? value : '' }</strong>\n\t\t\t\t\t${set.title ? set.title : '' }`\n\t\t\t});\n\n\t\t\tthis.dataPointList.appendChild(li);\n\t\t});\n\t}\n\n\tcalcPosition() {\n\t\tlet width = this.container.offsetWidth;\n\n\t\tthis.top = this.y - this.container.offsetHeight\n\t\t\t- TOOLTIP_POINTER_TRIANGLE_HEIGHT;\n\t\tthis.left = this.x - width/2;\n\t\tlet maxLeft = this.parent.offsetWidth - width;\n\n\t\tlet pointer = this.container.querySelector('.svg-pointer');\n\n\t\tif(this.left < 0) {\n\t\t\tpointer.style.left = `calc(50% - ${-1 * this.left}px)`;\n\t\t\tthis.left = 0;\n\t\t} else if(this.left > maxLeft) {\n\t\t\tlet delta = this.left - maxLeft;\n\t\t\tlet pointerOffset = `calc(50% + ${delta}px)`;\n\t\t\tpointer.style.left = pointerOffset;\n\n\t\t\tthis.left = maxLeft;\n\t\t} else {\n\t\t\tpointer.style.left = `50%`;\n\t\t}\n\t}\n\n\tsetValues(x, y, title = {}, listValues = [], index = -1) {\n\t\tthis.titleName = title.name;\n\t\tthis.titleValue = title.value;\n\t\tthis.listValues = listValues;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.titleValueFirst = title.valueFirst || 0;\n\t\tthis.index = index;\n\t\tthis.refresh();\n\t}\n\n\thideTip() {\n\t\tthis.container.style.top = '0px';\n\t\tthis.container.style.left = '0px';\n\t\tthis.container.style.opacity = '0';\n\t}\n\n\tshowTip() {\n\t\tthis.container.style.top = this.top + 'px';\n\t\tthis.container.style.left = this.left + 'px';\n\t\tthis.container.style.opacity = '1';\n\t}\n}\n","export const CSSTEXT = \".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}\";","import SvgTip from '../objects/SvgTip';\nimport { $, isElementInViewport, getElementContentWidth, isHidden } from '../utils/dom';\nimport { makeSVGContainer, makeSVGDefs, makeSVGGroup, makeText } from '../utils/draw';\nimport { BASE_MEASURES, getExtraHeight, getExtraWidth, getTopOffset, getLeftOffset,\n\tINIT_CHART_UPDATE_TIMEOUT, CHART_POST_ANIMATE_TIMEOUT, DEFAULT_COLORS} from '../utils/constants';\nimport { getColor, isValidColor } from '../utils/colors';\nimport { runSMILAnimation } from '../utils/animation';\nimport { downloadFile, prepareForExport } from '../utils/export';\nimport { deepClone } from '../utils/helpers';\n\nexport default class BaseChart {\n\tconstructor(parent, options) {\n\t\t// deepclone options to avoid making changes to orignal object\n\t\toptions = deepClone(options);\n\n\t\tthis.parent = typeof parent === 'string'\n\t\t\t? document.querySelector(parent)\n\t\t\t: parent;\n\n\t\tif (!(this.parent instanceof HTMLElement)) {\n\t\t\tthrow new Error('No `parent` element to render on was provided.');\n\t\t}\n\n\t\tthis.rawChartArgs = options;\n\n\t\tthis.title = options.title || '';\n\t\tthis.type = options.type || '';\n\n\t\tthis.realData = this.prepareData(options.data);\n\t\tthis.data = this.prepareFirstData(this.realData);\n\n\t\tthis.colors = this.validateColors(options.colors, this.type);\n\n\t\tthis.config = {\n\t\t\tshowTooltip: 1, // calculate\n\t\t\tshowLegend: 1, // calculate\n\t\t\tisNavigable: options.isNavigable || 0,\n\t\t\tanimate: (typeof options.animate !== 'undefined') ? options.animate : 1,\n\t\t\ttruncateLegends: options.truncateLegends || 1\n\t\t};\n\n\t\tthis.measures = JSON.parse(JSON.stringify(BASE_MEASURES));\n\t\tlet m = this.measures;\n\t\tthis.setMeasures(options);\n\t\tif(!this.title.length) { m.titleHeight = 0; }\n\t\tif(!this.config.showLegend) m.legendHeight = 0;\n\t\tthis.argHeight = options.height || m.baseHeight;\n\n\t\tthis.state = {};\n\t\tthis.options = {};\n\n\t\tthis.initTimeout = INIT_CHART_UPDATE_TIMEOUT;\n\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.overlays = [];\n\t\t}\n\n\t\tthis.configure(options);\n\t}\n\n\tprepareData(data) {\n\t\treturn data;\n\t}\n\n\tprepareFirstData(data) {\n\t\treturn data;\n\t}\n\n\tvalidateColors(colors, type) {\n\t\tconst validColors = [];\n\t\tcolors = (colors || []).concat(DEFAULT_COLORS[type]);\n\t\tcolors.forEach((string) => {\n\t\t\tconst color = getColor(string);\n\t\t\tif(!isValidColor(color)) {\n\t\t\t\tconsole.warn('\"' + string + '\" is not a valid color.');\n\t\t\t} else {\n\t\t\t\tvalidColors.push(color);\n\t\t\t}\n\t\t});\n\t\treturn validColors;\n\t}\n\n\tsetMeasures() {\n\t\t// Override measures, including those for title and legend\n\t\t// set config for legend and title\n\t}\n\n\tconfigure() {\n\t\tlet height = this.argHeight;\n\t\tthis.baseHeight = height;\n\t\tthis.height = height - getExtraHeight(this.measures);\n\n\t\t// Bind window events\n\t\tthis.boundDrawFn = () => this.draw(true);\n\t\tif (ResizeObserver) {\n\t\t\tthis.resizeObserver = new ResizeObserver(this.boundDrawFn);\n\t\t\tthis.resizeObserver.observe(this.parent);\n\t\t}\n\t\twindow.addEventListener('resize', this.boundDrawFn);\n\t\twindow.addEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\tdestroy() {\n\t\tif (this.resizeObserver) this.resizeObserver.disconnect();\n\t\twindow.removeEventListener('resize', this.boundDrawFn);\n\t\twindow.removeEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\t// Has to be called manually\n\tsetup() {\n\t\tthis.makeContainer();\n\t\tthis.updateWidth();\n\t\tthis.makeTooltip();\n\n\t\tthis.draw(false, true);\n\t}\n\n\tmakeContainer() {\n\t\t// Chart needs a dedicated parent element\n\t\tthis.parent.innerHTML = '';\n\n\t\tlet args = {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'chart-container'\n\t\t};\n\n\t\tif(this.independentWidth) {\n\t\t\targs.styles = { width: this.independentWidth + 'px' };\n\t\t}\n\n\t\tthis.container = $.create('div', args);\n\t}\n\n\tmakeTooltip() {\n\t\tthis.tip = new SvgTip({\n\t\t\tparent: this.container,\n\t\t\tcolors: this.colors\n\t\t});\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {}\n\n\tdraw(onlyWidthChange=false, init=false) {\n\t\tif (onlyWidthChange && isHidden(this.parent)) {\n\t\t\t// Don't update anything if the chart is hidden\n\t\t\treturn;\n\t\t}\n\t\tthis.updateWidth();\n\n\t\tthis.calc(onlyWidthChange);\n\t\tthis.makeChartArea();\n\t\tthis.setupComponents();\n\n\t\tthis.components.forEach(c => c.setup(this.drawArea));\n\t\t// this.components.forEach(c => c.make());\n\t\tthis.render(this.components, false);\n\n\t\tif(init) {\n\t\t\tthis.data = this.realData;\n\t\t\tsetTimeout(() => {this.update(this.data);}, this.initTimeout);\n\t\t}\n\n\t\tthis.renderLegend();\n\n\t\tthis.setupNavigation(init);\n\t}\n\n\tcalc() {} // builds state\n\n\tupdateWidth() {\n\t\tthis.baseWidth = getElementContentWidth(this.parent);\n\t\tthis.width = this.baseWidth - getExtraWidth(this.measures);\n\t}\n\n\tmakeChartArea() {\n\t\tif(this.svg) {\n\t\t\tthis.container.removeChild(this.svg);\n\t\t}\n\t\tlet m = this.measures;\n\n\t\tthis.svg = makeSVGContainer(\n\t\t\tthis.container,\n\t\t\t'frappe-chart chart',\n\t\t\tthis.baseWidth,\n\t\t\tthis.baseHeight\n\t\t);\n\t\tthis.svgDefs = makeSVGDefs(this.svg);\n\n\t\tif(this.title.length) {\n\t\t\tthis.titleEL = makeText(\n\t\t\t\t'title',\n\t\t\t\tm.margins.left,\n\t\t\t\tm.margins.top,\n\t\t\t\tthis.title,\n\t\t\t\t{\n\t\t\t\t\tfontSize: m.titleFontSize,\n\t\t\t\t\tfill: '#666666',\n\t\t\t\t\tdy: m.titleFontSize\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tlet top = getTopOffset(m);\n\t\tthis.drawArea = makeSVGGroup(\n\t\t\tthis.type + '-chart chart-draw-area',\n\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t);\n\n\t\tif(this.config.showLegend) {\n\t\t\ttop += this.height + m.paddings.bottom;\n\t\t\tthis.legendArea = makeSVGGroup(\n\t\t\t\t'chart-legend',\n\t\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t\t);\n\t\t}\n\n\t\tif(this.title.length) { this.svg.appendChild(this.titleEL); }\n\t\tthis.svg.appendChild(this.drawArea);\n\t\tif(this.config.showLegend) { this.svg.appendChild(this.legendArea); }\n\n\t\tthis.updateTipOffset(getLeftOffset(m), getTopOffset(m));\n\t}\n\n\tupdateTipOffset(x, y) {\n\t\tthis.tip.offset = {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\tsetupComponents() { this.components = new Map(); }\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\t\tthis.data = this.prepareData(data);\n\t\tthis.calc(); // builds state\n\t\tthis.render(this.components, this.config.animate);\n\t\tthis.renderLegend();\n\t}\n\n\trender(components=this.components, animate=true) {\n\t\tif(this.config.isNavigable) {\n\t\t\t// Remove all existing overlays\n\t\t\tthis.overlays.map(o => o.parentNode.removeChild(o));\n\t\t\t// ref.parentNode.insertBefore(element, ref);\n\t\t}\n\t\tlet elementsToAnimate = [];\n\t\t// Can decouple to this.refreshComponents() first to save animation timeout\n\t\tcomponents.forEach(c => {\n\t\t\telementsToAnimate = elementsToAnimate.concat(c.update(animate));\n\t\t});\n\t\tif(elementsToAnimate.length > 0) {\n\t\t\trunSMILAnimation(this.container, this.svg, elementsToAnimate);\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomponents.forEach(c => c.make());\n\t\t\t\tthis.updateNav();\n\t\t\t}, CHART_POST_ANIMATE_TIMEOUT);\n\t\t} else {\n\t\t\tcomponents.forEach(c => c.make());\n\t\t\tthis.updateNav();\n\t\t}\n\t}\n\n\tupdateNav() {\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.makeOverlay();\n\t\t\tthis.bindUnits();\n\t\t}\n\t}\n\n\trenderLegend() {}\n\n\tsetupNavigation(init=false) {\n\t\tif(!this.config.isNavigable) return;\n\n\t\tif(init) {\n\t\t\tthis.bindOverlay();\n\n\t\t\tthis.keyActions = {\n\t\t\t\t'13': this.onEnterKey.bind(this),\n\t\t\t\t'37': this.onLeftArrow.bind(this),\n\t\t\t\t'38': this.onUpArrow.bind(this),\n\t\t\t\t'39': this.onRightArrow.bind(this),\n\t\t\t\t'40': this.onDownArrow.bind(this),\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\t\tif(isElementInViewport(this.container)) {\n\t\t\t\t\te = e || window.event;\n\t\t\t\t\tif(this.keyActions[e.keyCode]) {\n\t\t\t\t\t\tthis.keyActions[e.keyCode]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tmakeOverlay() {}\n\tupdateOverlay() {}\n\tbindOverlay() {}\n\tbindUnits() {}\n\n\tonLeftArrow() {}\n\tonRightArrow() {}\n\tonUpArrow() {}\n\tonDownArrow() {}\n\tonEnterKey() {}\n\n\taddDataPoint() {}\n\tremoveDataPoint() {}\n\n\tgetDataPoint() {}\n\tsetCurrentDataPoint() {}\n\n\tupdateDataset() {}\n\n\texport() {\n\t\tlet chartSvg = prepareForExport(this.svg);\n\t\tdownloadFile(this.title || 'Chart', [chartSvg]);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { truncateString } from '../utils/draw-utils';\nimport { legendDot } from '../utils/draw';\nimport { round } from '../utils/helpers';\nimport { getExtraWidth } from '../utils/constants';\n\nexport default class AggregationChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\n\t\tthis.config.formatTooltipY = (args.tooltipOptions || {}).formatTooltipY;\n\t\tthis.config.maxSlices = args.maxSlices || 20;\n\t\tthis.config.maxLegendPoints = args.maxLegendPoints || 20;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\t\tlet maxSlices = this.config.maxSlices;\n\t\ts.sliceTotals = [];\n\n\t\tlet allTotals = this.data.labels.map((label, i) => {\n\t\t\tlet total = 0;\n\t\t\tthis.data.datasets.map(e => {\n\t\t\t\ttotal += e.values[i];\n\t\t\t});\n\t\t\treturn [total, label];\n\t\t}).filter(d => { return d[0] >= 0; }); // keep only positive results\n\n\t\tlet totals = allTotals;\n\t\tif(allTotals.length > maxSlices) {\n\t\t\t// Prune and keep a grey area for rest as per maxSlices\n\t\t\tallTotals.sort((a, b) => { return b[0] - a[0]; });\n\n\t\t\ttotals = allTotals.slice(0, maxSlices-1);\n\t\t\tlet remaining = allTotals.slice(maxSlices-1);\n\n\t\t\tlet sumOfRemaining = 0;\n\t\t\tremaining.map(d => {sumOfRemaining += d[0];});\n\t\t\ttotals.push([sumOfRemaining, 'Rest']);\n\t\t\tthis.colors[maxSlices-1] = 'grey';\n\t\t}\n\n\t\ts.labels = [];\n\t\ttotals.map(d => {\n\t\t\ts.sliceTotals.push(round(d[0]));\n\t\t\ts.labels.push(d[1]);\n\t\t});\n\n\t\ts.grandTotal = s.sliceTotals.reduce((a, b) => a + b, 0);\n\n\t\tthis.center = {\n\t\t\tx: this.width / 2,\n\t\t\ty: this.height / 2\n\t\t};\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.state;\n\t\tthis.legendArea.textContent = '';\n\t\tthis.legendTotals = s.sliceTotals.slice(0, this.config.maxLegendPoints);\n\n\t\tlet count = 0;\n\t\tlet y = 0;\n\t\tthis.legendTotals.map((d, i) => {\n\t\t\tlet barWidth = 150;\n\t\t\tlet divisor = Math.floor(\n\t\t\t\t(this.width - getExtraWidth(this.measures))/barWidth\n\t\t\t);\n\t\t\tif (this.legendTotals.length < divisor) {\n\t\t\t\tbarWidth = this.width/this.legendTotals.length;\n\t\t\t}\n\t\t\tif(count > divisor) {\n\t\t\t\tcount = 0;\n\t\t\t\ty += 20;\n\t\t\t}\n\t\t\tlet x = barWidth * count + 5;\n\t\t\tlet label = this.config.truncateLegends ? truncateString(s.labels[i], barWidth/10) : s.labels[i];\n\t\t\tlet formatted = this.config.formatTooltipY ? this.config.formatTooltipY(d) : d;\n\t\t\tlet dot = legendDot(\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\t5,\n\t\t\t\tthis.colors[i],\n\t\t\t\t`${label}: ${formatted}`,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tthis.legendArea.appendChild(dot);\n\t\t\tcount++;\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getOffset } from '../utils/dom';\nimport { getComponent } from '../objects/ChartComponents';\nimport { PERCENTAGE_BAR_DEFAULT_HEIGHT, PERCENTAGE_BAR_DEFAULT_DEPTH } from '../utils/constants';\n\nexport default class PercentageChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'percentage';\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.barOptions = options.barOptions || {};\n\n\t\tlet b = this.barOptions;\n\t\tb.height = b.height || PERCENTAGE_BAR_DEFAULT_HEIGHT;\n\t\tb.depth = b.depth || PERCENTAGE_BAR_DEFAULT_DEPTH;\n\n\t\tm.paddings.right = 30;\n\t\tm.legendHeight = 60;\n\t\tm.baseHeight = (b.height + b.depth * 0.5) * 8;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'percentageBars',\n\t\t\t\t{\n\t\t\t\t\tbarHeight: this.barOptions.height,\n\t\t\t\t\tbarDepth: this.barOptions.depth,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xPositions,\n\t\t\t\t\t\twidths: s.widths,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\n\t\ts.xPositions = [];\n\t\ts.widths = [];\n\n\t\tlet xPos = 0;\n\t\ts.sliceTotals.map((value) => {\n\t\t\tlet width = this.width * value / s.grandTotal;\n\t\t\ts.widths.push(width);\n\t\t\ts.xPositions.push(xPos);\n\t\t\txPos += width;\n\t\t});\n\t}\n\n\tmakeDataByIndex() { }\n\n\tbindTooltip() {\n\t\tlet s = this.state;\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet bars = this.components.get('percentageBars').store;\n\t\t\tlet bar = e.target;\n\t\t\tif(bars.includes(bar)) {\n\n\t\t\t\tlet i = bars.indexOf(bar);\n\t\t\t\tlet gOff = getOffset(this.container), pOff = getOffset(bar);\n\n\t\t\t\tlet x = pOff.left - gOff.left + parseInt(bar.getAttribute('width'))/2;\n\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\tlet title = (this.formattedLabels && this.formattedLabels.length>0\n\t\t\t\t\t? this.formattedLabels[i] : this.state.labels[i]) + ': ';\n\t\t\t\tlet fraction = s.sliceTotals[i]/s.grandTotal;\n\n\t\t\t\tthis.tip.setValues(x, y, {name: title, value: (fraction*100).toFixed(1) + \"%\"});\n\t\t\t\tthis.tip.showTip();\n\t\t\t}\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcPathStr, makeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class PieChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'pie';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius = (this.height > this.width ? this.center.x : this.center.y);\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeCircleStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc)\n\t\t\t\t\t: makeArcPathStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'pieSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{radius,hoverRadio} = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.fill = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.fill = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('pieSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { makeText, heatSquare } from '../utils/draw';\nimport { DAY_NAMES_SHORT, addDays, areInSameMonth, getLastDateInMonth, setDayToSunday, getYyyyMmDd, getWeeksBetween, getMonthName, clone,\n\tNO_OF_MILLIS, NO_OF_YEAR_MONTHS, NO_OF_DAYS_IN_WEEK } from '../utils/date-utils';\nimport { calcDistribution, getMaxCheckpoint } from '../utils/intervals';\nimport { getExtraHeight, getExtraWidth, HEATMAP_DISTRIBUTION_SIZE, HEATMAP_SQUARE_SIZE,\n\tHEATMAP_GUTTER_SIZE } from '../utils/constants';\n\nconst COL_WIDTH = HEATMAP_SQUARE_SIZE + HEATMAP_GUTTER_SIZE;\nconst ROW_HEIGHT = COL_WIDTH;\n// const DAY_INCR = 1;\n\nexport default class Heatmap extends BaseChart {\n\tconstructor(parent, options) {\n\t\tsuper(parent, options);\n\t\tthis.type = 'heatmap';\n\n\t\tthis.countLabel = options.countLabel || '';\n\n\t\tlet validStarts = ['Sunday', 'Monday'];\n\t\tlet startSubDomain = validStarts.includes(options.startSubDomain)\n\t\t\t? options.startSubDomain : 'Sunday';\n\t\tthis.startSubDomainIndex = validStarts.indexOf(startSubDomain);\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.discreteDomains = options.discreteDomains === 0 ? 0 : 1;\n\n\t\tm.paddings.top = ROW_HEIGHT * 3;\n\t\tm.paddings.bottom = 0;\n\t\tm.legendHeight = ROW_HEIGHT * 2;\n\t\tm.baseHeight = ROW_HEIGHT * NO_OF_DAYS_IN_WEEK\n\t\t\t+ getExtraHeight(m);\n\n\t\tlet d = this.data;\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tthis.independentWidth = (getWeeksBetween(d.start, d.end)\n\t\t\t+ spacing) * COL_WIDTH + getExtraWidth(m);\n\t}\n\n\tupdateWidth() {\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tlet noOfWeeks = this.state.noOfWeeks ? this.state.noOfWeeks : 52;\n\t\tthis.baseWidth = (noOfWeeks + spacing) * COL_WIDTH\n\t\t\t+ getExtraWidth(this.measures);\n\t}\n\n\tprepareData(data=this.data) {\n\t\tif(data.start && data.end && data.start > data.end) {\n\t\t\tthrow new Error('Start date cannot be greater than end date.');\n\t\t}\n\n\t\tif(!data.start) {\n\t\t\tdata.start = new Date();\n\t\t\tdata.start.setFullYear( data.start.getFullYear() - 1 );\n\t\t}\n\t\tif(!data.end) { data.end = new Date(); }\n\t\tdata.dataPoints = data.dataPoints || {};\n\n\t\tif(parseInt(Object.keys(data.dataPoints)[0]) > 100000) {\n\t\t\tlet points = {};\n\t\t\tObject.keys(data.dataPoints).forEach(timestampSec => {\n\t\t\t\tlet date = new Date(timestampSec * NO_OF_MILLIS);\n\t\t\t\tpoints[getYyyyMmDd(date)] = data.dataPoints[timestampSec];\n\t\t\t});\n\t\t\tdata.dataPoints = points;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\n\t\ts.start = clone(this.data.start);\n\t\ts.end = clone(this.data.end);\n\n\t\ts.firstWeekStart = clone(s.start);\n\t\ts.noOfWeeks = getWeeksBetween(s.start, s.end);\n\t\ts.distribution = calcDistribution(\n\t\t\tObject.values(this.data.dataPoints), HEATMAP_DISTRIBUTION_SIZE);\n\n\t\ts.domainConfigs = this.getDomains();\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\t\tlet lessCol = this.discreteDomains ? 0 : 1;\n\n\t\tlet componentConfigs = s.domainConfigs.map((config, i) => [\n\t\t\t'heatDomain',\n\t\t\t{\n\t\t\t\tindex: config.index,\n\t\t\t\tcolWidth: COL_WIDTH,\n\t\t\t\trowHeight: ROW_HEIGHT,\n\t\t\t\tsquareSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\tradius: this.rawChartArgs.radius || 0,\n\t\t\t\txTranslate: s.domainConfigs\n\t\t\t\t\t.filter((config, j) => j < i)\n\t\t\t\t\t.map(config => config.cols.length - lessCol)\n\t\t\t\t\t.reduce((a, b) => a + b, 0)\n\t\t\t\t\t* COL_WIDTH\n\t\t\t},\n\t\t\tfunction() {\n\t\t\t\treturn s.domainConfigs[i];\n\t\t\t}.bind(this)\n\n\t\t]);\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map((args, i) => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0] + '-' + i, component];\n\t\t\t})\n\t\t);\n\n\t\tlet y = 0;\n\t\tDAY_NAMES_SHORT.forEach((dayName, i) => {\n\t\t\tif([1, 3, 5].includes(i)) {\n\t\t\t\tlet dayText = makeText('subdomain-name', -COL_WIDTH/2, y, dayName,\n\t\t\t\t\t{\n\t\t\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\t\t\tdy: 8,\n\t\t\t\t\t\ttextAnchor: 'end'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tthis.drawArea.appendChild(dayText);\n\t\t\t}\n\t\t\ty += ROW_HEIGHT;\n\t\t});\n\t}\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\n\t\tthis.data = this.prepareData(data);\n\t\tthis.draw();\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tthis.components.forEach(comp => {\n\t\t\t\tlet daySquares = comp.store;\n\t\t\t\tlet daySquare = e.target;\n\t\t\t\tif(daySquares.includes(daySquare)) {\n\n\t\t\t\t\tlet count = daySquare.getAttribute('data-value');\n\t\t\t\t\tlet dateParts = daySquare.getAttribute('data-date').split('-');\n\n\t\t\t\t\tlet month = getMonthName(parseInt(dateParts[1])-1, true);\n\n\t\t\t\t\tlet gOff = this.container.getBoundingClientRect(), pOff = daySquare.getBoundingClientRect();\n\n\t\t\t\t\tlet width = parseInt(e.target.getAttribute('width'));\n\t\t\t\t\tlet x = pOff.left - gOff.left + width/2;\n\t\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\t\tlet value = count + ' ' + this.countLabel;\n\t\t\t\t\tlet name = ' on ' + month + ' ' + dateParts[0] + ', ' + dateParts[2];\n\n\t\t\t\t\tthis.tip.setValues(x, y, {name: name, value: value, valueFirst: 1}, []);\n\t\t\t\t\tthis.tip.showTip();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\trenderLegend() {\n\t\tthis.legendArea.textContent = '';\n\t\tlet x = 0;\n\t\tlet y = ROW_HEIGHT;\n\t\tlet radius = this.rawChartArgs.radius || 0;\n\n\t\tlet lessText = makeText('subdomain-name', x, y, 'Less',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tx = (COL_WIDTH * 2) + COL_WIDTH/2;\n\t\tthis.legendArea.appendChild(lessText);\n\n\t\tthis.colors.slice(0, HEATMAP_DISTRIBUTION_SIZE).map((color, i) => {\n\t\t\tconst square = heatSquare('heatmap-legend-unit', x + (COL_WIDTH + 3) * i,\n\t\t\t\ty, HEATMAP_SQUARE_SIZE, radius, color);\n\t\t\tthis.legendArea.appendChild(square);\n\t\t});\n\n\t\tlet moreTextX = x + HEATMAP_DISTRIBUTION_SIZE * (COL_WIDTH + 3) + COL_WIDTH/4;\n\t\tlet moreText = makeText('subdomain-name', moreTextX, y, 'More',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tthis.legendArea.appendChild(moreText);\n\t}\n\n\tgetDomains() {\n\t\tlet s = this.state;\n\t\tconst [startMonth, startYear] = [s.start.getMonth(), s.start.getFullYear()];\n\t\tconst [endMonth, endYear] = [s.end.getMonth(), s.end.getFullYear()];\n\n\t\tconst noOfMonths = (endMonth - startMonth + 1) + (endYear - startYear) * 12;\n\n\t\tlet domainConfigs = [];\n\n\t\tlet startOfMonth = clone(s.start);\n\t\tfor(var i = 0; i < noOfMonths; i++) {\n\t\t\tlet endDate = s.end;\n\t\t\tif(!areInSameMonth(startOfMonth, s.end)) {\n\t\t\t\tlet [month, year] = [startOfMonth.getMonth(), startOfMonth.getFullYear()];\n\t\t\t\tendDate = getLastDateInMonth(month, year);\n\t\t\t}\n\t\t\tdomainConfigs.push(this.getDomainConfig(startOfMonth, endDate));\n\n\t\t\taddDays(endDate, 1);\n\t\t\tstartOfMonth = endDate;\n\t\t}\n\n\t\treturn domainConfigs;\n\t}\n\n\tgetDomainConfig(startDate, endDate='') {\n\t\tlet [month, year] = [startDate.getMonth(), startDate.getFullYear()];\n\t\tlet startOfWeek = setDayToSunday(startDate); // TODO: Monday as well\n\t\tendDate = clone(endDate) || getLastDateInMonth(month, year);\n\n\t\tlet domainConfig = {\n\t\t\tindex: month,\n\t\t\tcols: []\n\t\t};\n\n\t\taddDays(endDate, 1);\n\t\tlet noOfMonthWeeks = getWeeksBetween(startOfWeek, endDate);\n\n\t\tlet cols = [], col;\n\t\tfor(var i = 0; i < noOfMonthWeeks; i++) {\n\t\t\tcol = this.getCol(startOfWeek, month);\n\t\t\tcols.push(col);\n\n\t\t\tstartOfWeek = new Date(col[NO_OF_DAYS_IN_WEEK - 1].yyyyMmDd);\n\t\t\taddDays(startOfWeek, 1);\n\t\t}\n\n\t\tif(col[NO_OF_DAYS_IN_WEEK - 1].dataValue !== undefined) {\n\t\t\taddDays(startOfWeek, 1);\n\t\t\tcols.push(this.getCol(startOfWeek, month, true));\n\t\t}\n\n\t\tdomainConfig.cols = cols;\n\n\t\treturn domainConfig;\n\t}\n\n\tgetCol(startDate, month, empty = false) {\n\t\tlet s = this.state;\n\n\t\t// startDate is the start of week\n\t\tlet currentDate = clone(startDate);\n\t\tlet col = [];\n\n\t\tfor(var i = 0; i < NO_OF_DAYS_IN_WEEK; i++, addDays(currentDate, 1)) {\n\t\t\tlet config = {};\n\n\t\t\t// Non-generic adjustment for entire heatmap, needs state\n\t\t\tlet currentDateWithinData = currentDate >= s.start && currentDate <= s.end;\n\n\t\t\tif(empty || currentDate.getMonth() !== month || !currentDateWithinData) {\n\t\t\t\tconfig.yyyyMmDd = getYyyyMmDd(currentDate);\n\t\t\t} else {\n\t\t\t\tconfig = this.getSubDomainConfig(currentDate);\n\t\t\t}\n\t\t\tcol.push(config);\n\t\t}\n\n\t\treturn col;\n\t}\n\n\tgetSubDomainConfig(date) {\n\t\tlet yyyyMmDd = getYyyyMmDd(date);\n\t\tlet dataValue = this.data.dataPoints[yyyyMmDd];\n\t\tlet config = {\n\t\t\tyyyyMmDd: yyyyMmDd,\n\t\t\tdataValue: dataValue || 0,\n\t\t\tfill: this.colors[getMaxCheckpoint(dataValue, this.state.distribution)]\n\t\t};\n\t\treturn config;\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { dataPrep, zeroDataPrep, getShortenedLabels } from '../utils/axis-chart-utils';\nimport { AXIS_LEGEND_BAR_SIZE } from '../utils/constants';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset, fire } from '../utils/dom';\nimport { calcChartIntervals, getIntervalSize, getValueRange, getZeroIndex, scale, getClosestInArray } from '../utils/intervals';\nimport { floatTwo } from '../utils/helpers';\nimport { makeOverlay, updateOverlay, legendBar } from '../utils/draw';\nimport { getTopOffset, getLeftOffset, MIN_BAR_PERCENT_HEIGHT, BAR_CHART_SPACE_RATIO,\n\tLINE_CHART_DOT_SIZE } from '../utils/constants';\n\nexport default class AxisChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\n\t\tthis.barOptions = args.barOptions || {};\n\t\tthis.lineOptions = args.lineOptions || {};\n\n\t\tthis.type = args.type || 'line';\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures() {\n\t\tif(this.data.datasets.length <= 1) {\n\t\t\tthis.config.showLegend = 0;\n\t\t\tthis.measures.paddings.bottom = 30;\n\t\t}\n\t}\n\n\tconfigure(options) {\n\t\tsuper.configure(options);\n\n\t\toptions.axisOptions = options.axisOptions || {};\n\t\toptions.tooltipOptions = options.tooltipOptions || {};\n\n\t\tthis.config.xAxisMode = options.axisOptions.xAxisMode || 'span';\n\t\tthis.config.yAxisMode = options.axisOptions.yAxisMode || 'span';\n\t\tthis.config.xIsSeries = options.axisOptions.xIsSeries || 0;\n\t\tthis.config.shortenYAxisNumbers = options.axisOptions.shortenYAxisNumbers || 0;\n\n\t\tthis.config.formatTooltipX = options.tooltipOptions.formatTooltipX;\n\t\tthis.config.formatTooltipY = options.tooltipOptions.formatTooltipY;\n\n\t\tthis.config.valuesOverPoints = options.valuesOverPoints;\n\t}\n\n\tprepareData(data=this.data) {\n\t\treturn dataPrep(data, this.type);\n\t}\n\n\tprepareFirstData(data=this.data) {\n\t\treturn zeroDataPrep(data);\n\t}\n\n\tcalc(onlyWidthChange = false) {\n\t\tthis.calcXPositions();\n\t\tif(!onlyWidthChange) {\n\t\t\tthis.calcYAxisParameters(this.getAllYValues(), this.type === 'line');\n\t\t}\n\t\tthis.makeDataByIndex();\n\t}\n\n\tcalcXPositions() {\n\t\tlet s = this.state;\n\t\tlet labels = this.data.labels;\n\t\ts.datasetLength = labels.length;\n\n\t\ts.unitWidth = this.width/(s.datasetLength);\n\t\t// Default, as per bar, and mixed. Only line will be a special case\n\t\ts.xOffset = s.unitWidth/2;\n\n\t\t// // For a pure Line Chart\n\t\t// s.unitWidth = this.width/(s.datasetLength - 1);\n\t\t// s.xOffset = 0;\n\n\t\ts.xAxis = {\n\t\t\tlabels: labels,\n\t\t\tpositions: labels.map((d, i) =>\n\t\t\t\tfloatTwo(s.xOffset + i * s.unitWidth)\n\t\t\t)\n\t\t};\n\t}\n\n\tcalcYAxisParameters(dataValues, withMinimum = 'false') {\n\t\tconst yPts = calcChartIntervals(dataValues, withMinimum);\n\t\tconst scaleMultiplier = this.height / getValueRange(yPts);\n\t\tconst intervalHeight = getIntervalSize(yPts) * scaleMultiplier;\n\t\tconst zeroLine = this.height - (getZeroIndex(yPts) * intervalHeight);\n\n\t\tthis.state.yAxis = {\n\t\t\tlabels: yPts,\n\t\t\tpositions: yPts.map(d => zeroLine - d * scaleMultiplier),\n\t\t\tscaleMultiplier: scaleMultiplier,\n\t\t\tzeroLine: zeroLine,\n\t\t};\n\n\t\t// Dependent if above changes\n\t\tthis.calcDatasetPoints();\n\t\tthis.calcYExtremes();\n\t\tthis.calcYRegions();\n\t}\n\n\tcalcDatasetPoints() {\n\t\tlet s = this.state;\n\t\tlet scaleAll = values => values.map(val => scale(val, s.yAxis));\n\n\t\ts.datasets = this.data.datasets.map((d, i) => {\n\t\t\tlet values = d.values;\n\t\t\tlet cumulativeYs = d.cumulativeYs || [];\n\t\t\treturn {\n\t\t\t\tname: d.name && d.name.replace(/<|>|&/g, (char) => char == '&' ? '&amp;' : char == '<' ? '&lt;' : '&gt;'),\n\t\t\t\tindex: i,\n\t\t\t\tchartType: d.chartType,\n\n\t\t\t\tvalues: values,\n\t\t\t\tyPositions: scaleAll(values),\n\n\t\t\t\tcumulativeYs: cumulativeYs,\n\t\t\t\tcumulativeYPos: scaleAll(cumulativeYs),\n\t\t\t};\n\t\t});\n\t}\n\n\tcalcYExtremes() {\n\t\tlet s = this.state;\n\t\tif(this.barOptions.stacked) {\n\t\t\ts.yExtremes = s.datasets[s.datasets.length - 1].cumulativeYPos;\n\t\t\treturn;\n\t\t}\n\t\ts.yExtremes = new Array(s.datasetLength).fill(9999);\n\t\ts.datasets.map(d => {\n\t\t\td.yPositions.map((pos, j) => {\n\t\t\t\tif(pos < s.yExtremes[j]) {\n\t\t\t\t\ts.yExtremes[j] = pos;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tcalcYRegions() {\n\t\tlet s = this.state;\n\t\tif(this.data.yMarkers) {\n\t\t\tthis.state.yMarkers = this.data.yMarkers.map(d => {\n\t\t\t\td.position = scale(d.value, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\t// if(!d.label.includes(':')) {\n\t\t\t\t// \td.label += ': ' + d.value;\n\t\t\t\t// }\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.state.yRegions = this.data.yRegions.map(d => {\n\t\t\t\td.startPos = scale(d.start, s.yAxis);\n\t\t\t\td.endPos = scale(d.end, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t}\n\n\tgetAllYValues() {\n\t\tlet key = 'values';\n\n\t\tif(this.barOptions.stacked) {\n\t\t\tkey = 'cumulativeYs';\n\t\t\tlet cumulative = new Array(this.state.datasetLength).fill(0);\n\t\t\tthis.data.datasets.map((d, i) => {\n\t\t\t\tlet values = this.data.datasets[i].values;\n\t\t\t\td[key] = cumulative = cumulative.map((c, i) => c + values[i]);\n\t\t\t});\n\t\t}\n\n\t\tlet allValueLists = this.data.datasets.map(d => d[key]);\n\t\tif(this.data.yMarkers) {\n\t\t\tallValueLists.push(this.data.yMarkers.map(d => d.value));\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.data.yRegions.map(d => {\n\t\t\t\tallValueLists.push([d.end, d.start]);\n\t\t\t});\n\t\t}\n\n\t\treturn [].concat(...allValueLists);\n\t}\n\n\tsetupComponents() {\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'yAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.yAxisMode,\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tshortenNumbers: this.config.shortenYAxisNumbers\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'xAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.xAxisMode,\n\t\t\t\t\theight: this.height,\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\ts.xAxis.calcLabels = getShortenedLabels(this.width,\n\t\t\t\t\t\ts.xAxis.labels, this.config.xIsSeries);\n\n\t\t\t\t\treturn s.xAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'yRegions',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yRegions;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\t\t];\n\n\t\tlet barDatasets = this.state.datasets.filter(d => d.chartType === 'bar');\n\t\tlet lineDatasets = this.state.datasets.filter(d => d.chartType === 'line');\n\n\t\tlet barsConfigs = barDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'barGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tstacked: this.barOptions.stacked,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t\tminHeight: this.height * MIN_BAR_PERCENT_HEIGHT,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet stacked = this.barOptions.stacked;\n\n\t\t\t\t\tlet spaceRatio = this.barOptions.spaceRatio || BAR_CHART_SPACE_RATIO;\n\t\t\t\t\tlet barsWidth = s.unitWidth * (1 - spaceRatio);\n\t\t\t\t\tlet barWidth = barsWidth/(stacked ? 1 : barDatasets.length);\n\n\t\t\t\t\tlet xPositions = s.xAxis.positions.map(x => x - barsWidth/2);\n\t\t\t\t\tif(!stacked) {\n\t\t\t\t\t\txPositions = xPositions.map(p => p + barWidth * index);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet labels = new Array(s.datasetLength).fill('');\n\t\t\t\t\tif(this.config.valuesOverPoints) {\n\t\t\t\t\t\tif(stacked && d.index === s.datasets.length - 1) {\n\t\t\t\t\t\t\tlabels = d.cumulativeYs;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabels = d.values;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet offsets = new Array(s.datasetLength).fill(0);\n\t\t\t\t\tif(stacked) {\n\t\t\t\t\t\toffsets = d.yPositions.map((y, j) => y - d.cumulativeYPos[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: xPositions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\t\t\t\t\t\toffsets: offsets,\n\t\t\t\t\t\t// values: d.values,\n\t\t\t\t\t\tlabels: labels,\n\n\t\t\t\t\t\tzeroLine: s.yAxis.zeroLine,\n\t\t\t\t\t\tbarsWidth: barsWidth,\n\t\t\t\t\t\tbarWidth: barWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet lineConfigs = lineDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'lineGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tsvgDefs: this.svgDefs,\n\t\t\t\t\theatline: this.lineOptions.heatline,\n\t\t\t\t\tregionFill: this.lineOptions.regionFill,\n\t\t\t\t\tspline: this.lineOptions.spline,\n\t\t\t\t\thideDots: this.lineOptions.hideDots,\n\t\t\t\t\thideLine: this.lineOptions.hideLine,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet minLine = s.yAxis.positions[0] < s.yAxis.zeroLine\n\t\t\t\t\t\t? s.yAxis.positions[0] : s.yAxis.zeroLine;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xAxis.positions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\n\t\t\t\t\t\tvalues: d.values,\n\n\t\t\t\t\t\tzeroLine: minLine,\n\t\t\t\t\t\tradius: this.lineOptions.dotSize || LINE_CHART_DOT_SIZE,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet markerConfigs = [\n\t\t\t[\n\t\t\t\t'yMarkers',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yMarkers;\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tcomponentConfigs = componentConfigs.concat(barsConfigs, lineConfigs, markerConfigs);\n\n\t\tlet optionals = ['yMarkers', 'yRegions'];\n\t\tthis.dataUnitComponents = [];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.filter(args => !optionals.includes(args[0]) || this.state[args[0]])\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\tif(args[0].includes('lineGraph') || args[0].includes('barGraph')) {\n\t\t\t\t\tthis.dataUnitComponents.push(component);\n\t\t\t\t}\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tmakeDataByIndex() {\n\t\tthis.dataByIndex = {};\n\n\t\tlet s = this.state;\n\t\tlet formatX = this.config.formatTooltipX;\n\t\tlet formatY = this.config.formatTooltipY;\n\t\tlet titles = s.xAxis.labels;\n\n\t\ttitles.map((label, index) => {\n\t\t\tlet values = this.state.datasets.map((set, i) => {\n\t\t\t\tlet value = set.values[index];\n\t\t\t\treturn {\n\t\t\t\t\ttitle: set.name,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tyPos: set.yPositions[index],\n\t\t\t\t\tcolor: this.colors[i],\n\t\t\t\t\tformatted: formatY ? formatY(value) : value,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tthis.dataByIndex[index] = {\n\t\t\t\tlabel: label,\n\t\t\t\tformattedLabel: formatX ? formatX(label) : label,\n\t\t\t\txPos: s.xAxis.positions[index],\n\t\t\t\tvalues: values,\n\t\t\t\tyExtreme: s.yExtremes[index],\n\t\t\t};\n\t\t});\n\t}\n\n\tbindTooltip() {\n\t\t// NOTE: could be in tooltip itself, as it is a given functionality for its parent\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet m = this.measures;\n\t\t\tlet o = getOffset(this.container);\n\t\t\tlet relX = e.pageX - o.left - getLeftOffset(m);\n\t\t\tlet relY = e.pageY - o.top;\n\n\t\t\tif(relY < this.height + getTopOffset(m)\n\t\t\t\t&& relY > getTopOffset(m)) {\n\t\t\t\tthis.mapTooltipXPosition(relX);\n\t\t\t} else {\n\t\t\t\tthis.tip.hideTip();\n\t\t\t}\n\t\t});\n\t}\n\n\tmapTooltipXPosition(relX) {\n\t\tlet s = this.state;\n\t\tif(!s.yExtremes) return;\n\n\t\tlet index = getClosestInArray(relX, s.xAxis.positions, true);\n\t\tif (index >= 0) {\n\t\t\tlet dbi = this.dataByIndex[index];\n\n\t\t\tthis.tip.setValues(\n\t\t\t\tdbi.xPos + this.tip.offset.x,\n\t\t\t\tdbi.yExtreme + this.tip.offset.y,\n\t\t\t\t{name: dbi.formattedLabel, value: ''},\n\t\t\t\tdbi.values,\n\t\t\t\tindex\n\t\t\t);\n\n\t\t\tthis.tip.showTip();\n\t\t}\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.data;\n\t\tif(s.datasets.length > 1) {\n\t\t\tthis.legendArea.textContent = '';\n\t\t\ts.datasets.map((d, i) => {\n\t\t\t\tlet barWidth = AXIS_LEGEND_BAR_SIZE;\n\t\t\t\t// let rightEndPoint = this.baseWidth - this.measures.margins.left - this.measures.margins.right;\n\t\t\t\t// let multiplier = s.datasets.length - i;\n\t\t\t\tlet rect = legendBar(\n\t\t\t\t\t// rightEndPoint - multiplier * barWidth,\t// To right align\n\t\t\t\t\tbarWidth * i,\n\t\t\t\t\t'0',\n\t\t\t\t\tbarWidth,\n\t\t\t\t\tthis.colors[i],\n\t\t\t\t\td.name,\n\t\t\t\t\tthis.config.truncateLegends);\n\t\t\t\tthis.legendArea.appendChild(rect);\n\t\t\t});\n\t\t}\n\t}\n\n\n\n\t// Overlay\n\tmakeOverlay() {\n\t\tif(this.init) {\n\t\t\tthis.init = 0;\n\t\t\treturn;\n\t\t}\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\n\t\tthis.overlayGuides = this.dataUnitComponents.map(c => {\n\t\t\treturn {\n\t\t\t\ttype: c.unitType,\n\t\t\t\toverlay: undefined,\n\t\t\t\tunits: c.units,\n\t\t\t};\n\t\t});\n\n\t\tif(this.state.currentIndex === undefined) {\n\t\t\tthis.state.currentIndex = this.state.datasetLength - 1;\n\t\t}\n\n\t\t// Render overlays\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\n\t\t\td.overlay = makeOverlay[d.type](currentUnit);\n\t\t\tthis.drawArea.appendChild(d.overlay);\n\t\t});\n\t}\n\n\tupdateOverlayGuides() {\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\t}\n\n\tbindOverlay() {\n\t\tthis.parent.addEventListener('data-select', () => {\n\t\t\tthis.updateOverlay();\n\t\t});\n\t}\n\n\tbindUnits() {\n\t\tthis.dataUnitComponents.map(c => {\n\t\t\tc.units.map(unit => {\n\t\t\t\tunit.addEventListener('click', () => {\n\t\t\t\t\tlet index = unit.getAttribute('data-point-index');\n\t\t\t\t\tthis.setCurrentDataPoint(index);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t// Note: Doesn't work as tooltip is absolutely positioned\n\t\tthis.tip.container.addEventListener('click', () => {\n\t\t\tlet index = this.tip.container.getAttribute('data-point-index');\n\t\t\tthis.setCurrentDataPoint(index);\n\t\t});\n\t}\n\n\tupdateOverlay() {\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\t\t\tupdateOverlay[d.type](currentUnit, d.overlay);\n\t\t});\n\t}\n\n\tonLeftArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex - 1);\n\t}\n\n\tonRightArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex + 1);\n\t}\n\n\tgetDataPoint(index=this.state.currentIndex) {\n\t\tlet s = this.state;\n\t\tlet data_point = {\n\t\t\tindex: index,\n\t\t\tlabel: s.xAxis.labels[index],\n\t\t\tvalues: s.datasets.map(d => d.values[index])\n\t\t};\n\t\treturn data_point;\n\t}\n\n\tsetCurrentDataPoint(index) {\n\t\tlet s = this.state;\n\t\tindex = parseInt(index);\n\t\tif(index < 0) index = 0;\n\t\tif(index >= s.xAxis.labels.length) index = s.xAxis.labels.length - 1;\n\t\tif(index === s.currentIndex) return;\n\t\ts.currentIndex = index;\n\t\tfire(this.parent, \"data-select\", this.getDataPoint());\n\t}\n\n\n\n\t// API\n\taddDataPoint(label, datasetValues, index=this.state.datasetLength) {\n\t\tsuper.addDataPoint(label, datasetValues, index);\n\t\tthis.data.labels.splice(index, 0, label);\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\td.values.splice(index, 0, datasetValues[i]);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tremoveDataPoint(index = this.state.datasetLength-1) {\n\t\tif (this.data.labels.length <= 1) {\n\t\t\treturn;\n\t\t}\n\t\tsuper.removeDataPoint(index);\n\t\tthis.data.labels.splice(index, 1);\n\t\tthis.data.datasets.map(d => {\n\t\t\td.values.splice(index, 1);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tupdateDataset(datasetValues, index=0) {\n\t\tthis.data.datasets[index].values = datasetValues;\n\t\tthis.update(this.data);\n\t}\n\t// addDataset(dataset, index) {}\n\t// removeDataset(index = 0) {}\n\n\tupdateDatasets(datasets) {\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\tif(datasets[i]) {\n\t\t\t\td.values = datasets[i];\n\t\t\t}\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\t// updateDataPoint(dataPoint, index = 0) {}\n\t// addDataPoint(dataPoint, index = 0) {}\n\t// removeDataPoint(index = 0) {}\n}\n","import { fillArray } from '../utils/helpers';\nimport { DEFAULT_AXIS_CHART_TYPE, AXIS_DATASET_CHART_TYPES, DEFAULT_CHAR_WIDTH } from '../utils/constants';\n\nexport function dataPrep(data, type) {\n\tdata.labels = data.labels || [];\n\n\tlet datasetLength = data.labels.length;\n\n\t// Datasets\n\tlet datasets = data.datasets;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\tif(!datasets) {\n\t\t// default\n\t\tdatasets = [{\n\t\t\tvalues: zeroArray\n\t\t}];\n\t}\n\n\tdatasets.map(d=> {\n\t\t// Set values\n\t\tif(!d.values) {\n\t\t\td.values = zeroArray;\n\t\t} else {\n\t\t\t// Check for non values\n\t\t\tlet vals = d.values;\n\t\t\tvals = vals.map(val => (!isNaN(val) ? val : 0));\n\n\t\t\t// Trim or extend\n\t\t\tif(vals.length > datasetLength) {\n\t\t\t\tvals = vals.slice(0, datasetLength);\n\t\t\t} else {\n\t\t\t\tvals = fillArray(vals, datasetLength - vals.length, 0);\n\t\t\t}\n\t\t\td.values = vals;\n\t\t}\n\n\t\t// Set type\n\t\tif(!d.chartType ) {\n\t\t\tif(!AXIS_DATASET_CHART_TYPES.includes(type)) type === DEFAULT_AXIS_CHART_TYPE;\n\t\t\td.chartType = type;\n\t\t}\n\n\t});\n\n\t// Markers\n\n\t// Regions\n\t// data.yRegions = data.yRegions || [];\n\tif(data.yRegions) {\n\t\tdata.yRegions.map(d => {\n\t\t\tif(d.end < d.start) {\n\t\t\t\t[d.start, d.end] = [d.end, d.start];\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n}\n\nexport function zeroDataPrep(realData) {\n\tlet datasetLength = realData.labels.length;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\n\tlet zeroData = {\n\t\tlabels: realData.labels.slice(0, -1),\n\t\tdatasets: realData.datasets.map(d => {\n\t\t\treturn {\n\t\t\t\tname: '',\n\t\t\t\tvalues: zeroArray.slice(0, -1),\n\t\t\t\tchartType: d.chartType\n\t\t\t};\n\t\t}),\n\t};\n\n\tif(realData.yMarkers) {\n\t\tzeroData.yMarkers = [\n\t\t\t{\n\t\t\t\tvalue: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\tif(realData.yRegions) {\n\t\tzeroData.yRegions = [\n\t\t\t{\n\t\t\t\tstart: 0,\n\t\t\t\tend: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\treturn zeroData;\n}\n\nexport function getShortenedLabels(chartWidth, labels=[], isSeries=true) {\n\tlet allowedSpace = chartWidth / labels.length;\n\tif(allowedSpace <= 0) allowedSpace = 1;\n\tlet allowedLetters = allowedSpace / DEFAULT_CHAR_WIDTH;\n\n\tlet seriesMultiple;\n\tif(isSeries) {\n\t\t// Find the maximum label length for spacing calculations\n\t\tlet maxLabelLength = Math.max(...labels.map(label => label.length));\n\t\tseriesMultiple = Math.ceil(maxLabelLength/allowedLetters);\n\t}\n\n\tlet calcLabels = labels.map((label, i) => {\n\t\tlabel += \"\";\n\t\tif(label.length > allowedLetters) {\n\n\t\t\tif(!isSeries) {\n\t\t\t\tif(allowedLetters-3 > 0) {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters-3) + \" ...\";\n\t\t\t\t} else {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters) + '..';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(i % seriesMultiple !== 0) {\n\t\t\t\t\tlabel = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn label;\n\t});\n\n\treturn calcLabels;\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcStrokePathStr, makeStrokeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class DonutChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'donut';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t\tthis.strokeWidth = args.strokeWidth || 30;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius =\n\t\t\tthis.height > this.width\n\t\t\t\t? this.center.x - this.strokeWidth / 2\n\t\t\t\t: this.center.y - this.strokeWidth / 2;\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeStrokeCircleStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc)\n\t\t\t\t\t: makeArcStrokePathStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'donutSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors,\n\t\t\t\t\t\tstrokeWidth: this.strokeWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{ radius, hoverRadio } = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.stroke = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.stroke = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('donutSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import '../css/charts.scss';\n\n// import MultiAxisChart from './charts/MultiAxisChart';\nimport PercentageChart from './charts/PercentageChart';\nimport PieChart from './charts/PieChart';\nimport Heatmap from './charts/Heatmap';\nimport AxisChart from './charts/AxisChart';\nimport DonutChart from './charts/DonutChart';\n\nconst chartTypes = {\n\tbar: AxisChart,\n\tline: AxisChart,\n\t// multiaxis: MultiAxisChart,\n\tpercentage: PercentageChart,\n\theatmap: Heatmap,\n\tpie: PieChart,\n\tdonut: DonutChart,\n};\n\nfunction getChartByType(chartType = 'line', parent, options) {\n\tif (chartType === 'axis-mixed') {\n\t\toptions.type = 'line';\n\t\treturn new AxisChart(parent, options);\n\t}\n\n\tif (!chartTypes[chartType]) {\n\t\tconsole.error(\"Undefined chart type: \" + chartType);\n\t\treturn;\n\t}\n\n\treturn new chartTypes[chartType](parent, options);\n}\n\nclass Chart {\n\tconstructor(parent, options) {\n\t\treturn getChartByType(options.type, parent, options);\n\t}\n}\n\nexport { Chart, PercentageChart, PieChart, Heatmap, AxisChart };","import * as Charts from './chart';\n\nlet frappe = { };\n\nfrappe.NAME = 'Frappe Charts';\nfrappe.VERSION = '1.6.2';\n\nfrappe = Object.assign({ }, frappe, Charts);\n\nexport default frappe;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardPage');","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardWidget');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/abbreviateNumber');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Link from 'flarum/common/components/Link';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nexport default class MiniStatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"loadingLifetime\", true);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n className() {\n return 'StatisticsWidget StatisticsWidget--mini';\n }\n content() {\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"h4\", {\n className: \"StatisticsWidget-title\"\n }, app.translator.trans('flarum-statistics.admin.statistics.mini_heading')), m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label'))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n return m(\"div\", {\n className: \"StatisticsWidget-entity\"\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)));\n })), m(\"div\", {\n className: \"StatisticsWidget-viewFull\"\n }, m(Link, {\n href: app.route('extension', {\n id: 'flarum-statistics'\n })\n }, app.translator.trans('flarum-statistics.admin.statistics.view_full'))));\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/MiniStatisticsWidget', MiniStatisticsWidget);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/SelectDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Placeholder');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/generateElementId');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport generateElementId from 'flarum/common/utils/generateElementId';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\ndayjs.extend(dayjsUtc);\nexport default class StatisticsWidgetDateSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n /* @ts-expect-error core typings don't allow us to set the type of the state attr :( */\n _defineProperty(this, \"state\", {\n inputs: {\n startDateVal: dayjs().format('YYYY-MM-DD'),\n endDateVal: dayjs().format('YYYY-MM-DD')\n },\n ids: {\n startDate: generateElementId(),\n endDate: generateElementId()\n }\n });\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (this.attrs.value) {\n this.state.inputs = {\n startDateVal: dayjs.utc(this.attrs.value.start * 1000).format('YYYY-MM-DD'),\n endDateVal: dayjs.utc(this.attrs.value.end * 1000).format('YYYY-MM-DD')\n };\n }\n }\n className() {\n return 'StatisticsWidgetDateSelectionModal Modal--small';\n }\n title() {\n return app.translator.trans('flarum-statistics.admin.date_selection_modal.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.items().toArray());\n }\n items() {\n const items = new ItemList();\n items.add('intro', m(\"p\", null, app.translator.trans('flarum-statistics.admin.date_selection_modal.description')), 100);\n items.add('date_start', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.startDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.start_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.startDate,\n value: this.state.inputs.startDateVal,\n onchange: this.updateState('startDateVal'),\n className: \"FormControl\"\n })), 90);\n items.add('date_end', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.endDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.end_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.endDate,\n value: this.state.inputs.endDateVal,\n onchange: this.updateState('endDateVal'),\n className: \"FormControl\"\n })), 80);\n items.add('submit', m(Button, {\n className: \"Button Button--primary\",\n type: \"submit\"\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.submit_button')), 0);\n return items;\n }\n updateState(field) {\n return e => {\n this.state.inputs[field] = e.currentTarget.value;\n };\n }\n submitData() {\n // We force 'zulu' time (UTC)\n return {\n start: Math.floor(+dayjs.utc(this.state.inputs.startDateVal + 'Z') / 1000),\n // Ensures that the end date is the end of the day\n end: Math.floor(+dayjs.utc(this.state.inputs.endDateVal + 'Z').hour(23).minute(59).second(59).millisecond(999) / 1000)\n };\n }\n onsubmit(e) {\n e.preventDefault();\n const data = this.submitData();\n if (data.end < data.start) {\n this.alertAttrs = {\n type: 'error',\n controls: app.translator.trans('flarum-statistics.admin.date_selection_modal.errors.end_before_start')\n };\n return;\n }\n this.attrs.onModalSubmit(data);\n this.hide();\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidgetDateSelectionModal', StatisticsWidgetDateSelectionModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport SelectDropdown from 'flarum/common/components/SelectDropdown';\nimport Button from 'flarum/common/components/Button';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nimport extractText from 'flarum/common/utils/extractText';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Placeholder from 'flarum/common/components/Placeholder';\nimport Icon from 'flarum/common/components/Icon';\nimport classList from 'flarum/common/utils/classList';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport StatisticsWidgetDateSelectionModal from './StatisticsWidgetDateSelectionModal';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\n// @ts-expect-error No typings available\nimport { Chart } from 'frappe-charts';\ndayjs.extend(dayjsUtc);\ndayjs.extend(dayjsLocalizedFormat);\nexport default class StatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"periods\", void 0);\n _defineProperty(this, \"chart\", void 0);\n _defineProperty(this, \"customPeriod\", null);\n _defineProperty(this, \"timedData\", {});\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"customPeriodData\", {});\n _defineProperty(this, \"noData\", false);\n _defineProperty(this, \"loadingLifetime\", true);\n _defineProperty(this, \"loadingTimed\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"loadingCustom\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"selectedEntity\", 'users');\n _defineProperty(this, \"selectedPeriod\", void 0);\n _defineProperty(this, \"chartEntity\", void 0);\n _defineProperty(this, \"chartPeriod\", void 0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n async loadTimedData(model) {\n this.loadingTimed[model] = 'loading';\n m.redraw();\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'timed',\n model\n }\n });\n this.timedData[model] = data;\n this.loadingTimed[model] = 'loaded';\n\n // Create a Date object which represents the start of the day.\n let todayDate = new Date();\n todayDate.setUTCHours(0, 0, 0, 0);\n const today = todayDate.getTime() / 1000;\n this.periods = {\n today: {\n start: today,\n end: today + 86400,\n step: 3600\n },\n last_7_days: {\n start: today - 86400 * 7,\n end: today,\n step: 86400\n },\n previous_7_days: {\n start: today - 86400 * 14,\n end: today - 86400 * 7,\n step: 86400\n },\n last_28_days: {\n start: today - 86400 * 28,\n end: today,\n step: 86400\n },\n previous_28_days: {\n start: today - 86400 * 28 * 2,\n end: today - 86400 * 28,\n step: 86400\n },\n last_12_months: {\n start: today - 86400 * 364,\n end: today,\n step: 86400 * 7\n }\n };\n this.selectedPeriod = 'last_7_days';\n } catch (e) {\n console.error(e);\n this.loadingTimed[model] = 'fail';\n }\n m.redraw();\n }\n async loadCustomRangeData(model) {\n this.loadingCustom[model] = 'loading';\n m.redraw();\n\n // We clone so we can check that the same period is still selected\n // once the HTTP request is complete and the data is to be displayed\n const range = {\n ...this.customPeriod\n };\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'custom',\n model,\n dateRange: {\n start: range.start,\n end: range.end\n }\n }\n });\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n this.customPeriodData[model] = data;\n this.loadingCustom[model] = 'loaded';\n m.redraw();\n } catch (e) {\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n console.error(e);\n this.loadingCustom[model] = 'fail';\n }\n }\n className() {\n return 'StatisticsWidget';\n }\n content() {\n var _this$customPeriod, _this$customPeriod2;\n const loadingSelectedEntity = (this.selectedPeriod === 'custom' ? this.loadingCustom : this.loadingTimed)[this.selectedEntity] !== 'loaded';\n const thisPeriod = loadingSelectedEntity ? null : this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod = this.customPeriod) == null ? void 0 : _this$customPeriod.end,\n end: (_this$customPeriod2 = this.customPeriod) == null ? void 0 : _this$customPeriod2.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n if (this.selectedPeriod === 'custom') {\n if (!this.customPeriodData[this.selectedEntity] && this.loadingCustom[this.selectedEntity] === 'unloaded') {\n this.loadCustomRangeData(this.selectedEntity);\n }\n } else {\n if (!this.timedData[this.selectedEntity] && this.loadingTimed[this.selectedEntity] === 'unloaded') {\n this.loadTimedData(this.selectedEntity);\n }\n }\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label')), m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(SelectDropdown, {\n disabled: loadingSelectedEntity,\n buttonClassName: \"Button Button--text\",\n caretIcon: \"fas fa-caret-down\"\n }, Object.keys(this.periods).map(period => m(Button, {\n key: period,\n active: period === this.selectedPeriod,\n onclick: this.changePeriod.bind(this, period),\n icon: period === this.selectedPeriod ? 'fas fa-check' : true\n }, app.translator.trans(\"flarum-statistics.admin.statistics.\".concat(period, \"_label\")))).concat([m(Button, {\n key: \"custom\",\n active: this.selectedPeriod === 'custom',\n onclick: () => {\n const attrs = {\n onModalSubmit: dates => {\n if (JSON.stringify(dates) === JSON.stringify(this.customPeriod)) {\n // If same period is selected, don't reload data\n return;\n }\n this.customPeriodData = {};\n Object.keys(this.loadingCustom).forEach(k => this.loadingCustom[k] = 'unloaded');\n this.customPeriod = dates;\n this.changePeriod('custom');\n }\n };\n\n // If we have a custom period set already,\n // let's prefill the modal with it\n if (this.customPeriod) {\n attrs.value = this.customPeriod;\n }\n app.modal.show(StatisticsWidgetDateSelectionModal, attrs);\n },\n icon: this.selectedPeriod === 'custom' ? 'fas fa-check' : true\n }, this.selectedPeriod === 'custom' ? extractText(app.translator.trans(\"flarum-statistics.admin.statistics.custom_label_specified\", {\n fromDate: dayjs.utc(this.customPeriod.start * 1000).format('ll'),\n toDate: dayjs.utc(this.customPeriod.end * 1000).format('ll')\n })) : app.translator.trans(\"flarum-statistics.admin.statistics.custom_label\"))])))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n const thisPeriodCount = loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, thisPeriod);\n const lastPeriodCount = this.selectedPeriod === 'custom' ? null : loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, this.getLastPeriod(thisPeriod));\n const periodChange = loadingSelectedEntity || lastPeriodCount === 0 || lastPeriodCount === null ? 0 : (thisPeriodCount - lastPeriodCount) / lastPeriodCount * 100;\n return m(\"button\", {\n className: classList('Button--ua-reset StatisticsWidget-entity', {\n active: this.selectedEntity === entity\n }),\n onclick: this.changeEntity.bind(this, entity)\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)), m(\"div\", {\n className: \"StatisticsWidget-period\",\n title: thisPeriodCount\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(thisPeriodCount), periodChange !== 0 && m('[', null, ' ', m(\"span\", {\n className: 'StatisticsWidget-change StatisticsWidget-change--' + (periodChange > 0 ? 'up' : 'down')\n }, m(Icon, {\n name: 'fas fa-arrow-' + (periodChange > 0 ? 'up' : 'down')\n }), Math.abs(periodChange).toFixed(1), \"%\"))));\n })), m('[', null, loadingSelectedEntity ? m(\"div\", {\n key: \"loading\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"true\"\n }, m(LoadingIndicator, {\n size: \"large\"\n })) : m(\"div\", {\n key: \"loaded\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"false\",\n oncreate: this.drawChart.bind(this),\n onupdate: this.drawChart.bind(this)\n })), this.noData && m(Placeholder, {\n text: app.translator.trans(\"flarum-statistics.admin.statistics.no_data\")\n }), !this.noData && !!this.chart && m(Button, {\n className: \"StatisticsWidget-chartExport Button\",\n icon: \"fas fa-file-export\",\n onclick: () => {\n this.chart.export();\n }\n }, app.translator.trans('flarum-statistics.admin.statistics.export_chart_button')));\n }\n drawChart(vnode) {\n var _this$customPeriod3, _this$customPeriod4;\n if (this.chart && this.chartEntity === this.selectedEntity && this.chartPeriod === this.selectedPeriod) {\n return;\n }\n const period = this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod3 = this.customPeriod) == null ? void 0 : _this$customPeriod3.start,\n end: (_this$customPeriod4 = this.customPeriod) == null ? void 0 : _this$customPeriod4.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n const periodLength = period.end - period.start;\n const labels = [];\n const thisPeriod = [];\n const lastPeriod = [];\n for (let i = period.start; i < period.end; i += period.step) {\n let label;\n if (period.step < 86400) {\n label = dayjs.unix(i).utc().format('h A');\n } else {\n label = dayjs.unix(i).utc().format('D MMM');\n if (period.step > 86400) {\n label += ' - ' + dayjs.unix(i + period.step - 1).utc().format('D MMM');\n }\n }\n labels.push(label);\n thisPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i,\n end: i + period.step\n }));\n lastPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i - periodLength,\n end: i - periodLength\n }));\n }\n if (thisPeriod.length === 0) {\n this.noData = true;\n m.redraw();\n return;\n } else {\n this.noData = false;\n m.redraw();\n }\n const datasets = [{\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.current_period')),\n values: thisPeriod\n }, {\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.previous_period')),\n values: lastPeriod\n }];\n const data = {\n labels,\n datasets\n };\n\n // If the dom element no longer exists, recreate the chart\n // https://stackoverflow.com/a/2620373/11091039\n if (!this.chart || !(document.compareDocumentPosition(this.chart.parent) & 16)) {\n this.chart = new Chart(vnode.dom, {\n data,\n type: 'line',\n height: 280,\n axisOptions: {\n xAxisMode: 'tick',\n yAxisMode: 'span',\n xIsSeries: true\n },\n lineOptions: {\n hideDots: 1,\n regionFill: 1\n },\n colors: [app.forum.attribute('themePrimaryColor'), 'black']\n });\n } else {\n this.chart.update(data);\n }\n this.chartEntity = this.selectedEntity;\n this.chartPeriod = this.selectedPeriod;\n }\n changeEntity(entity) {\n this.selectedEntity = entity;\n }\n changePeriod(period) {\n this.selectedPeriod = period;\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n getPeriodCount(entity, period) {\n const timed = (this.selectedPeriod === 'custom' ? this.customPeriodData : this.timedData)[entity];\n let count = 0;\n for (const t in timed) {\n const time = parseInt(t);\n if (time >= period.start && time < period.end) {\n count += timed[time];\n }\n }\n return count;\n }\n getLastPeriod(thisPeriod) {\n return {\n start: thisPeriod.start - (thisPeriod.end - thisPeriod.start),\n end: thisPeriod.start\n };\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidget', StatisticsWidget);","import ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport StatisticsWidget from './StatisticsWidget';\nexport default class StatisticsPage extends ExtensionPage {\n content() {\n return m(\"div\", {\n className: \"StatisticsPage\"\n }, m(\"div\", {\n className: \"container\"\n }, m(StatisticsWidget, null)));\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsPage', StatisticsPage);","import Extend from 'flarum/common/extenders';\nimport StatisticsPage from './components/StatisticsPage';\nexport default [new Extend.Admin().page(StatisticsPage)];","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport DashboardPage from 'flarum/admin/components/DashboardPage';\nimport MiniStatisticsWidget from './components/MiniStatisticsWidget';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-statistics', () => {\n extend(DashboardPage.prototype, 'availableWidgets', function (widgets) {\n widgets.add('statistics', m(MiniStatisticsWidget, null), 20);\n });\n});"],"names":["module","exports","e","n","r","i","s","u","a","o","c","f","h","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","S","_","O","args","arguments","b","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","k","forEach","extend","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","formats","toUpperCase","call","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","document","querySelector","getBoundingClientRect","top","documentElement","scrollTop","body","left","scrollLeft","titleHeight","margins","paddings","bottom","legendHeight","right","parseFloat","toFixed","fill","concat","sin","Zt","cos","isNaN","isFinite","Ft","isArray","push","sqrt","pow","angle","atan2","PI","reduce","A","ie","parseInt","T","createElementNS","appendChild","parentNode","insertBefore","Object","keys","map","style","textContent","setAttribute","inside","offset","N","className","transform","styles","stroke","j","id","x1","x2","y1","y2","H","width","height","rx","Y","fontSize","re","dy","le","textAnchor","innerHTML","V","oe","lineType","shortenNumbers","log10","ae","G","pos","mode","ne","B","ve","tt","pe","it","zeroLine","Vt","nodeName","childNodes","ce","getAttribute","st","rt","cloneNode","attributeName","from","to","begin","dur","values","keySplines","ge","keyTimes","calcMode","type","ot","webkitTransform","msTransform","mozTransform","oTransform","lt","Ut","replaceChild","ct","classList","create","me","firstChild","dt","setMinutes","pt","ft","vt","xt","we","ke","gt","xe","mt","yt","Ae","bt","kt","setDate","wt","Le","filter","includes","assign","constants","getData","Te","At","mantissa","exponent","Tt","Pt","Mt","Dt","scaleMultiplier","Et","insertAt","head","getElementsByTagName","createElement","styleSheet","cssText","createTextNode","Symbol","iterator","constructor","Ht","value","Promise","resolve","then","done","reject","next","key","arg","_invoke","return","asyncIterator","throw","TypeError","It","enumerable","configurable","writable","defineProperty","Rt","Function","getOwnPropertyDescriptor","getPrototypeOf","Yt","setPrototypeOf","__proto__","Bt","ReferenceError","Gt","baseHeight","titleFontSize","Xt","Jt","Kt","$t","Qt","bar","line","pie","percentage","heatmap","donut","te","parent","colors","titleName","titleValue","listValues","titleValueFirst","setup","makeTooltip","calcPosition","container","hideTip","title","dataPointList","addEventListener","index","formatted","offsetWidth","offsetHeight","valueFirst","refresh","opacity","ee","blue","violet","red","orange","yellow","green","purple","magenta","black","grey","exec","se","ue","dot","heat_square","he","attributes","specified","nodeValue","de","fe","ease","linear","easein","easeout","easeinout","ye","HTMLElement","Error","rawChartArgs","realData","prepareData","data","prepareFirstData","validateColors","config","showTooltip","showLegend","isNavigable","animate","truncateLegends","measures","JSON","stringify","setMeasures","argHeight","state","options","initTimeout","overlays","configure","P","console","warn","boundDrawFn","draw","ResizeObserver","resizeObserver","observe","window","disconnect","removeEventListener","makeContainer","updateWidth","independentWidth","tip","bindTooltip","offsetParent","calc","makeChartArea","setupComponents","components","drawArea","render","setTimeout","update","renderLegend","setupNavigation","baseWidth","getComputedStyle","paddingLeft","paddingRight","clientWidth","svg","removeChild","C","svgDefs","titleEL","legendArea","updateTipOffset","Map","error","ut","make","updateNav","makeOverlay","bindUnits","bindOverlay","keyActions","onEnterKey","bind","onLeftArrow","onUpArrow","onRightArrow","onDownArrow","innerHeight","clientHeight","innerWidth","event","keyCode","Blob","URL","createObjectURL","href","download","click","revokeObjectURL","ht","be","formatTooltipY","tooltipOptions","maxSlices","maxLegendPoints","sliceTotals","labels","datasets","sort","grandTotal","center","legendTotals","cx","cy","dx","R","Pe","layerClass","layerTransform","makeElements","animateElements","store","layer","oldData","donutSlices","sliceStrings","strokeWidth","transition","pieSlices","percentageBars","xPositions","F","widths","barHeight","barDepth","yAxis","positions","U","xAxis","calcLabels","Z","yMarkers","labelPos","q","position","label","yRegions","X","startPos","endPos","et","heatDomain","colWidth","rowHeight","squareSize","radius","xTranslate","serializedSubDomains","cols","yyyyMmDd","dataValue","barGraph","unitType","units","yPositions","minHeight","J","barWidth","color","offsets","barsWidth","lineGraph","paths","hideLine","spline","heatline","path","regionFill","region","hideDots","K","valuesOverPoints","at","nt","Oe","barOptions","depth","target","indexOf","formattedLabels","setValues","showTip","Me","mouseMove","mouseLeave","hoverRadio","startAngle","clockWise","slicesProperties","startPosition","endPosition","E","total","endAngle","calTranslateByAngle","pageX","pageY","formatted_labels","curActiveSliceIndex","curActiveSlice","hoverSlice","Ce","countLabel","startSubDomain","startSubDomainIndex","discreteDomains","start","end","noOfWeeks","setFullYear","dataPoints","firstWeekStart","distribution","max","St","domainConfigs","getDomains","getDomainConfig","getCol","getSubDomainConfig","De","lineOptions","axisOptions","xAxisMode","yAxisMode","xIsSeries","shortenYAxisNumbers","formatTooltipX","chartType","_t","zt","calcXPositions","calcYAxisParameters","getAllYValues","makeDataByIndex","datasetLength","unitWidth","xOffset","unshift","reverse","Lt","Ct","Ot","calcDatasetPoints","calcYExtremes","calcYRegions","cumulativeYs","cumulativeYPos","stacked","yExtremes","Wt","spaceRatio","dotSize","dataUnitComponents","dataByIndex","yPos","formattedLabel","xPos","yExtreme","mapTooltipXPosition","Nt","I","overlayGuides","overlay","currentIndex","updateOverlay","setCurrentDataPoint","createEvent","initEvent","dispatchEvent","getDataPoint","splice","Ne","W","Se","_e","freeze","Chart","jt","PercentageChart","PieChart","Heatmap","AxisChart","ze","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","obj","prop","hasOwnProperty","toStringTag","flarum","reg","_typeof","_defineProperty","toPrimitive","MiniStatisticsWidget","super","oncreate","vnode","loadLifetimeData","loadingLifetime","redraw","method","url","attribute","params","period","lifetimeData","content","trans","entities","entity","totalCount","getTotalCount","display","StatisticsWidgetDateSelectionModal","inputs","startDateVal","endDateVal","ids","startDate","endDate","oninit","attrs","items","toArray","htmlFor","onchange","updateState","field","currentTarget","submitData","hour","minute","second","millisecond","onsubmit","preventDefault","alertAttrs","controls","onModalSubmit","hide","StatisticsWidget","acc","curr","loadTimedData","model","loadingTimed","timedData","todayDate","setUTCHours","today","periods","step","last_7_days","previous_7_days","last_28_days","previous_28_days","last_12_months","selectedPeriod","loadCustomRangeData","loadingCustom","range","customPeriod","dateRange","customPeriodData","_this$customPeriod","_this$customPeriod2","loadingSelectedEntity","selectedEntity","thisPeriod","size","disabled","buttonClassName","caretIcon","active","onclick","changePeriod","icon","dates","show","fromDate","thisPeriodCount","getPeriodCount","lastPeriodCount","getLastPeriod","periodChange","changeEntity","drawChart","onupdate","noData","text","chart","export","_this$customPeriod3","_this$customPeriod4","chartEntity","chartPeriod","periodLength","lastPeriod","compareDocumentPosition","dom","timed","count","time","StatisticsPage","page","widgets"],"sourceRoot":""}