From 24f3a6829f98852b821b1f1a5b6f12ae24e72f0d Mon Sep 17 00:00:00 2001 From: flarum-bot Date: Sat, 6 Apr 2024 13:55:44 +0000 Subject: [PATCH] Bundled output for commit bf523b2325309c8d27d2c5d9ee745e9486bed027 Includes transpiled JS/TS, and Typescript declaration files (typings). [skip ci] --- extensions/statistics/js/dist/admin.js | 2 +- extensions/statistics/js/dist/admin.js.map | 2 +- extensions/tags/js/dist/admin.js | 2 +- extensions/tags/js/dist/admin.js.map | 2 +- .../core/js/dist-typings/admin/admin.d.ts | 2 - .../admin/components/AdminPage.d.ts | 107 +------------ .../core/js/dist-typings/common/common.d.ts | 3 + .../common/components/FormGroup.d.ts | 140 ++++++++++++++++++ .../components/UploadImageButton.d.ts | 0 .../utils/generateElementId.d.ts | 0 framework/core/js/dist/admin.js | 2 +- framework/core/js/dist/admin.js.map | 2 +- framework/core/js/dist/forum.js | 2 +- framework/core/js/dist/forum.js.map | 2 +- 14 files changed, 154 insertions(+), 114 deletions(-) create mode 100644 framework/core/js/dist-typings/common/components/FormGroup.d.ts rename framework/core/js/dist-typings/{admin => common}/components/UploadImageButton.d.ts (100%) rename framework/core/js/dist-typings/{admin => common}/utils/generateElementId.d.ts (100%) diff --git a/extensions/statistics/js/dist/admin.js b/extensions/statistics/js/dist/admin.js index 3322a2c2d..51b563b96 100644 --- a/extensions/statistics/js/dist/admin.js +++ b/extensions/statistics/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,i="millisecond",n="second",s="minute",a="hour",r="day",o="week",l="month",u="quarter",c="year",h="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|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"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},v=function(t,e,i){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(i)+t},g={s:v,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),n=Math.floor(i/60),s=i%60;return(e<=0?"+":"-")+v(n,2,"0")+":"+v(s,2,"0")},m:function t(e,i){if(e.date()1)return t(r[0])}else{var o=e.name;b[o]=e,s=o}return!n&&s&&(y=s),s||!n&&y},w=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new M(i)},D=g;D.l=k,D.i=x,D.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var M=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var s=n[2]-1||0,a=(n[7]||"0").substring(0,3);return i?new Date(Date.UTC(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.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()},v.$utils=function(){return D},v.isValid=function(){return!(this.$d.toString()===d)},v.isSame=function(t,e){var i=w(t);return this.startOf(e)<=i&&i<=this.endOf(e)},v.isAfter=function(t,e){return w(t)=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function s(t){return t.titleHeight+t.margins.top+t.paddings.top}function a(t){return t.margins.left+t.paddings.left}function r(t){return t.margins.top+t.margins.bottom+t.paddings.top+t.paddings.bottom+t.titleHeight+t.legendHeight}function o(t){return t.margins.left+t.margins.right+t.paddings.left+t.paddings.right}function l(t){return parseFloat(t.toFixed(2))}function u(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var s=new Array(Math.abs(e)).fill(i);return n?s.concat(t):t.concat(s)}function c(t,e){return(t+"").length*e}function h(t,e){return{x:Math.sin(t*wt)*e,y:Math.cos(t*wt)*e}}function d(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(Number.isNaN(t)||void 0===t||!Number.isFinite(t)||e&&t<0)}function f(t){var e=void 0,i=void 0,n=void 0;if(t instanceof Date)return new Date(t.getTime());if("object"!==(void 0===t?"undefined":lt(t))||null===t)return t;for(n in e=Array.isArray(t)?[]:{},t)i=t[n],e[n]=f(i);return e}function p(t,e){var i=void 0,n=void 0;return t<=e?(i=e-t,n=t):(i=t-e,n=e),[i,n]}function m(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=u(t,i):e=u(e,i),[t,e]}function v(t,e){if(t)return t.length>e?t.slice(0,e-3)+"...":t}function g(t){var e=void 0;if("number"==typeof t)e=t;else if("string"==typeof t&&(e=Number(t),Number.isNaN(e)))return t;var i=Math.floor(Math.log10(Math.abs(e)));if(i<=2)return e;var n=Math.floor(i/3),s=Math.pow(10,i-3*n)*+(e/Math.pow(10,i)).toFixed(1);return Math.round(100*s)/100+" "+["","K","M","B","T"][n]}function y(t,e){for(var i=[],n=0;n255?255:t<0?0:t}function x(t,e){var i=Pt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var s=parseInt(i,16),a=b((s>>16)+e),r=b((s>>8&255)+e);return(n?"#":"")+(b((255&s)+e)|r<<8|a<<16).toString(16)}function k(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function w(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var n in e){var s=e[n];if("inside"===n)k(s).appendChild(i);else if("around"===n){var a=k(s);a.parentNode.insertBefore(i,a),i.appendChild(a)}else"styles"===n?"object"===(void 0===s?"undefined":lt(s))&&Object.keys(s).map((function(t){i.style[t]=s[t]})):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=s:i.setAttribute(n,s))}return i}function D(t,e){return w("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function M(t,e,i,n){return w("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function P(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i={className:t,transform:arguments.length>1&&void 0!==arguments[1]?arguments[1]:""};return e&&(i.inside=e),w("g",i)}function S(t){return w("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none","stroke-width":arguments.length>4&&void 0!==arguments[4]?arguments[4]:2}})}function A(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e+"-"+(i?"lighter":"default"),s=D(t,n),a=[1,.6,.2];return i&&(a=[.4,.2,0]),M(s,"0%",e,a[0]),M(s,"50%",e,a[1]),M(s,"100%",e,a[2]),n}function T(t,e,i,n,s){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},r={className:t,x:e,y:i,width:n,height:n,rx:s,fill:arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none"};return Object.keys(a).map((function(t){r[t]=a[t]})),w("rect",r)}function O(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=s.fontSize||Ot;return w("text",{className:t,x:e,y:i,dy:(void 0!==s.dy?s.dy:a/2)+"px","font-size":a+"px",fill:s.fill||Ct,"text-anchor":s.textAnchor||"start",innerHTML:n})}function L(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt);var a=w("line",{className:"line-vertical "+s.className,x1:0,x2:0,y1:i,y2:n,styles:{stroke:s.stroke}}),r=w("text",{x:0,y:i>n?i+At:i-At-Ot,dy:Ot+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:e+""}),o=w("g",{transform:"translate("+t+", 0)"});return o.appendChild(a),o.appendChild(r),o}function C(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt),s.lineType||(s.lineType=""),s.shortenNumbers&&(e=g(e));var a=w("line",{className:"line-horizontal "+s.className+("dashed"===s.lineType?"dashed":""),x1:i,x2:n,y1:0,y2:0,styles:{stroke:s.stroke}}),r=w("text",{x:i4&&void 0!==arguments[4]?arguments[4]:0,a=p(i,(arguments.length>5&&void 0!==arguments[5]?arguments[5]:{}).zeroLine),r=pt(a,2),o=r[0],l=r[1];return l-=s,"rect"!==t.nodeName?[[t.childNodes[0],{width:n,height:o},$t,zt],N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,l],Yt)]:[[t,{width:n,height:o,x:e,y:l},$t,zt]]}function E(t,e){return[t,{d:e},$t,zt]}function Y(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var u=void 0;u="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var c=a[l]||t.getAttribute(l),h=e[l],d={attributeName:l,from:c,to:h,begin:"0s",dur:i/1e3+"s",values:c+";"+h,keySplines:Ht[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};for(var f in s&&(d.type=s),d)u.setAttribute(f,d[f]);r.appendChild(u),s?o.setAttribute(l,"translate("+h+")"):o.setAttribute(l,h)}return[r,o]}function W(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function z(t,e){var i=[],n=[];e.map((function(t){var e,s,a=t[0],r=a.parentNode;t[0]=a;var o=Y.apply(void 0,mt(t)),l=pt(o,2);e=l[0],s=l[1],i.push(s),n.push([e,r]),r&&r.replaceChild(e,a)}));var s=t.cloneNode(!0);return n.map((function(t,n){t[1]&&(t[1].replaceChild(i[n],t[0]),e[n][0]=i[n])})),s}function H(t,e,i){if(0!==i.length){var n=z(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout((function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))}),Wt)}}function F(e){var i=e.cloneNode(!0);i.classList.add("chart-container"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");var n=t.create("style",{innerHTML:Ft});i.insertBefore(n,i.firstChild);var s=t.create("div");return s.appendChild(i),s.innerHTML}function j(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function I(t){var e=t.getDate(),i=t.getMonth()+1;return[t.getFullYear(),(i>9?"":"0")+i,(e>9?"":"0")+e].join("-")}function R(t){return new Date(t.getTime())}function U(t,e){var i=q(t);return Math.ceil(function(t,e){var i=Vt*Ut;return(j(e)-j(t))/i}(i,e)/Rt)}function V(t,e){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function B(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Bt[t];return e?i.slice(0,3):i}function G(t,e){return new Date(e,t+1,0)}function q(t){var e=R(t),i=e.getDay();return 0!==i&&J(e,-1*i),e}function J(t,e){t.setDate(t.getDate()+e)}function X(t,e,i){var n=Object.keys(Jt).filter((function(e){return t.includes(e)})),s=Jt[n[0]];return Object.assign(s,{constants:e,getData:i}),new qt(s)}function Z(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function K(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),s=i-n,a=s,r=1;s>5&&(s%2!=0&&(s=++i-n),a=s/2,r=2),s<=2&&(r=s/(a=4)),0===s&&(a=5,r=1);for(var o=[],l=0;l<=a;l++)o.push(n+r*l);return o}function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Z(t),n=pt(i,2),s=n[0],a=n[1],r=e?e/Math.pow(10,a):0,o=K(s=s.toFixed(6),r);return o.map((function(t){return t*Math.pow(10,a)}))}function tt(t){function e(t,e){for(var i=Q(t),n=i[1]-i[0],s=0,a=1;s1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,mt(t)),s=Math.min.apply(Math,mt(t)),a=[];if(n>=0&&s>=0)Z(n)[1],a=i?Q(n,s):Q(n);else if(n>0&&s<0){var r=Math.abs(s);n>=r?(Z(n)[1],a=e(n,r)):(Z(r)[1],a=e(r,n).reverse().map((function(t){return-1*t})))}else if(n<=0&&s<=0){var o=Math.abs(s),l=Math.abs(n);Z(o)[1],a=(a=i?Q(o,l):Q(o)).reverse().map((function(t){return-1*t}))}return a}function et(t){var e=it(t);return t.indexOf(0)>=0?t.indexOf(0):t[0]>0?-1*t[0]/e:-1*t[t.length-1]/e+(t.length-1)}function it(t){return t[1]-t[0]}function nt(t){return t[t.length-1]-t[0]}function st(t,e){return l(e.zeroLine-t*e.scaleMultiplier)}function at(t,e){return e.filter((function(e){return ei?n.slice(0,i):u(n,i-n.length,0),t.values=n}else t.values=s;t.chartType||(gt.includes(e),t.chartType=e)})),t.yRegions&&t.yRegions.map((function(t){if(t.end\n\t\t\t\t
    \n\t\t\t\t
    '}),this.hideTip(),this.title=this.container.querySelector(".title"),this.dataPointList=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",(function(){e.hideTip()}))}},{key:"fill",value:function(){var e,i=this;this.index&&this.container.setAttribute("data-point-index",this.index),e=this.titleValueFirst?""+this.titleValue+""+this.titleName:this.titleName+""+this.titleValue+"",this.title.innerHTML=e,this.dataPointList.innerHTML="",this.listValues.map((function(e,n){var s=i.colors[n]||"black",a=0===e.formatted||e.formatted?e.formatted:e.value,r=t.create("li",{styles:{"border-top":"3px solid "+s},innerHTML:''+(0===a||a?a:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});i.dataPointList.appendChild(r)}))}},{key:"calcPosition",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight-5,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,this.left=e}else i.style.left="50%"}},{key:"setValues",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;this.titleName=i.name,this.titleValue=i.value,this.listValues=n,this.x=t,this.y=e,this.titleValueFirst=i.valueFirst||0,this.index=s,this.refresh()}},{key:"hideTip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"showTip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),Mt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},Pt=function(t){return/rgb[a]{0,1}\([\d, ]+\)/gim.test(t)?/\D+(\d*)\D+(\d*)\D+(\d*)/gim.exec(t).map((function(t,e){return 0!==e?Number(t).toString(16):"#"})).reduce((function(t,e){return""+t+e})):Mt[t]||t},St=6,At=4,Tt=15,Ot=10,Lt="#dadada",Ct="#555b51",Nt={bar:function(t){var e=void 0;"rect"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode();return i.style.fill="#000000",i.style.opacity="0.4",e&&i.setAttribute("transform",e),i},dot:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i},heat_square:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i}},_t={bar:function(t,e){var i=void 0;"rect"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["x","y","width","height"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},dot:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},heat_square:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)}},$t=350,Et=350,Yt=$t,Wt=250,zt="easein",Ht={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},Ft=".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}",jt=function(){function e(t,i){if(ut(this,e),i=f(i),this.parent="string"==typeof t?document.querySelector(t):t,!(this.parent instanceof HTMLElement))throw new Error("No `parent` element to render on was provided.");this.rawChartArgs=i,this.title=i.title||"",this.type=i.type||"",this.realData=this.prepareData(i.data),this.data=this.prepareFirstData(this.realData),this.colors=this.validateColors(i.colors,this.type),this.config={showTooltip:1,showLegend:1,isNavigable:i.isNavigable||0,animate:void 0!==i.animate?i.animate:1,truncateLegends:i.truncateLegends||1},this.measures=JSON.parse(JSON.stringify(vt));var n=this.measures;this.setMeasures(i),this.title.length||(n.titleHeight=0),this.config.showLegend||(n.legendHeight=0),this.argHeight=i.height||n.baseHeight,this.state={},this.options={},this.initTimeout=700,this.config.isNavigable&&(this.overlays=[]),this.configure(i)}return ct(e,[{key:"prepareData",value:function(t){return t}},{key:"prepareFirstData",value:function(t){return t}},{key:"validateColors",value:function(t,e){var i=[];return(t=(t||[]).concat(kt[e])).forEach((function(t){var e=Pt(t);!function(t){return/(^\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i.test(t)||/(^\s*)(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(t)}(e)?console.warn('"'+t+'" is not a valid color.'):i.push(e)})),i}},{key:"setMeasures",value:function(){}},{key:"configure",value:function(){var t=this,e=this.argHeight;this.baseHeight=e,this.height=e-r(this.measures),this.boundDrawFn=function(){return t.draw(!0)},ResizeObserver&&(this.resizeObserver=new ResizeObserver(this.boundDrawFn),this.resizeObserver.observe(this.parent)),window.addEventListener("resize",this.boundDrawFn),window.addEventListener("orientationchange",this.boundDrawFn)}},{key:"destroy",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),window.removeEventListener("resize",this.boundDrawFn),window.removeEventListener("orientationchange",this.boundDrawFn)}},{key:"setup",value:function(){this.makeContainer(),this.updateWidth(),this.makeTooltip(),this.draw(!1,!0)}},{key:"makeContainer",value:function(){this.parent.innerHTML="";var e={inside:this.parent,className:"chart-container"};this.independentWidth&&(e.styles={width:this.independentWidth+"px"}),this.container=t.create("div",e)}},{key:"makeTooltip",value:function(){this.tip=new Dt({parent:this.container,colors:this.colors}),this.bindTooltip()}},{key:"bindTooltip",value:function(){}},{key:"draw",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&i(this.parent)||(this.updateWidth(),this.calc(e),this.makeChartArea(),this.setupComponents(),this.components.forEach((function(e){return e.setup(t.drawArea)})),this.render(this.components,!1),n&&(this.data=this.realData,setTimeout((function(){t.update(t.data)}),this.initTimeout)),this.renderLegend(),this.setupNavigation(n))}},{key:"calc",value:function(){}},{key:"updateWidth",value:function(){this.baseWidth=function(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}(this.parent),this.width=this.baseWidth-o(this.measures)}},{key:"makeChartArea",value:function(){this.svg&&this.container.removeChild(this.svg);var t=this.measures;this.svg=function(t,e,i,n){return w("svg",{className:e,inside:t,width:i,height:n})}(this.container,"frappe-chart chart",this.baseWidth,this.baseHeight),this.svgDefs=function(t){return w("defs",{inside:t})}(this.svg),this.title.length&&(this.titleEL=O("title",t.margins.left,t.margins.top,this.title,{fontSize:t.titleFontSize,fill:"#666666",dy:t.titleFontSize}));var e=s(t);this.drawArea=P(this.type+"-chart chart-draw-area","translate("+a(t)+", "+e+")"),this.config.showLegend&&(e+=this.height+t.paddings.bottom,this.legendArea=P("chart-legend","translate("+a(t)+", "+e+")")),this.title.length&&this.svg.appendChild(this.titleEL),this.svg.appendChild(this.drawArea),this.config.showLegend&&this.svg.appendChild(this.legendArea),this.updateTipOffset(a(t),s(t))}},{key:"updateTipOffset",value:function(t,e){this.tip.offset={x:t,y:e}}},{key:"setupComponents",value:function(){this.components=new Map}},{key:"update",value:function(t){t||console.error("No data to update."),this.data=this.prepareData(t),this.calc(),this.render(this.components,this.config.animate),this.renderLegend()}},{key:"render",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.components,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.config.isNavigable&&this.overlays.map((function(t){return t.parentNode.removeChild(t)}));var n=[];e.forEach((function(t){n=n.concat(t.update(i))})),n.length>0?(H(this.container,this.svg,n),setTimeout((function(){e.forEach((function(t){return t.make()})),t.updateNav()}),400)):(e.forEach((function(t){return t.make()})),this.updateNav())}},{key:"updateNav",value:function(){this.config.isNavigable&&(this.makeOverlay(),this.bindUnits())}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.config.isNavigable&&e&&(this.bindOverlay(),this.keyActions={13:this.onEnterKey.bind(this),37:this.onLeftArrow.bind(this),38:this.onUpArrow.bind(this),39:this.onRightArrow.bind(this),40:this.onDownArrow.bind(this)},document.addEventListener("keydown",(function(e){n(t.container)&&(e=e||window.event,t.keyActions[e.keyCode]&&t.keyActions[e.keyCode]())})))}},{key:"makeOverlay",value:function(){}},{key:"updateOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bindUnits",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"addDataPoint",value:function(){}},{key:"removeDataPoint",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"setCurrentDataPoint",value:function(){}},{key:"updateDataset",value:function(){}},{key:"export",value:function(){var t=F(this.svg);!function(t,e){var i=document.createElement("a");i.style="display: none";var n=new Blob(e,{type:"image/svg+xml; charset=utf-8"}),s=window.URL.createObjectURL(n);i.href=s,i.download=t,document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),300)}(this.title||"Chart",[t])}}]),e}(),It=function(t){function e(t,i){return ut(this,e),ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i))}return dt(e,t),ct(e,[{key:"configure",value:function(t){ht(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"configure",this).call(this,t),this.config.formatTooltipY=(t.tooltipOptions||{}).formatTooltipY,this.config.maxSlices=t.maxSlices||20,this.config.maxLegendPoints=t.maxLegendPoints||20}},{key:"calc",value:function(){var t=this,e=this.state,i=this.config.maxSlices;e.sliceTotals=[];var n=this.data.labels.map((function(e,i){var n=0;return t.data.datasets.map((function(t){n+=t.values[i]})),[n,e]})).filter((function(t){return t[0]>=0})),s=n;if(n.length>i){n.sort((function(t,e){return e[0]-t[0]})),s=n.slice(0,i-1);var a=0;n.slice(i-1).map((function(t){a+=t[0]})),s.push([a,"Rest"]),this.colors[i-1]="grey"}e.labels=[],s.map((function(t){e.sliceTotals.push(function(t){return Number(Math.round(t+"e4")+"e-4")}(t[0])),e.labels.push(t[1])})),e.grandTotal=e.sliceTotals.reduce((function(t,e){return t+e}),0),this.center={x:this.width/2,y:this.height/2}}},{key:"renderLegend",value:function(){var t=this,e=this.state;this.legendArea.textContent="",this.legendTotals=e.sliceTotals.slice(0,this.config.maxLegendPoints);var i=0,n=0;this.legendTotals.map((function(s,a){var r=150,l=Math.floor((t.width-o(t.measures))/r);t.legendTotals.lengthl&&(i=0,n+=20);var u=r*i+5,c=t.config.truncateLegends?v(e.labels[a],r/10):e.labels[a],h=t.config.formatTooltipY?t.config.formatTooltipY(s):s,d=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-dot",cx:0,cy:0,r:i,fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dx:Ot+"px",dy:Ot/3+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("circle",a)),o.appendChild(r),o}(u,n,5,t.colors[a],c+": "+h,!1);t.legendArea.appendChild(d),i++}))}}]),e}(jt),Rt=7,Ut=1e3,Vt=86400,Bt=["January","February","March","April","May","June","July","August","September","October","November","December"],Gt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],qt=function(){function t(e){var i=e.layerClass,n=void 0===i?"":i,s=e.layerTransform,a=void 0===s?"":s,r=e.constants,o=e.getData,l=e.makeElements,u=e.animateElements;ut(this,t),this.layerTransform=a,this.constants=r,this.makeElements=l,this.getData=o,this.animateElements=u,this.store=[],this.labels=[],this.layerClass=n,this.layerClass="function"==typeof this.layerClass?this.layerClass():this.layerClass,this.refresh()}return ct(t,[{key:"refresh",value:function(t){this.data=t||this.getData()}},{key:"setup",value:function(t){this.layer=P(this.layerClass,this.layerTransform,t)}},{key:"make",value:function(){this.render(this.data),this.oldData=this.data}},{key:"render",value:function(t){var e=this;this.store=this.makeElements(t),this.layer.textContent="",this.store.forEach((function(t){e.layer.appendChild(t)})),this.labels.forEach((function(t){e.layer.appendChild(t)}))}},{key:"update",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.refresh();var e=[];return t&&(e=this.animateElements(this.data)||[]),e}}]),t}(),Jt={donutSlices:{layerClass:"donut-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"donut-path",t.colors[i],"none",t.strokeWidth);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},pieSlices:{layerClass:"pie-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"pie-path","none",t.colors[i]);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},percentageBars:{layerClass:"percentage-bars",makeElements:function(t){var e=this;return t.xPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:yt,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none";return w("rect",{className:"percentage-bar",x:t,y:e,width:i,height:n,fill:a,styles:{stroke:x(a,-25),"stroke-dasharray":"0, "+(n+i)+", "+i+", "+n,"stroke-width":s}})}(i,0,t.widths[n],e.constants.barHeight,e.constants.barDepth,t.colors[n])}))},animateElements:function(t){if(t)return[]}},yAxis:{layerClass:"y axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="left"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=-1*St,a="span"===n.mode?i+St:0;return"tick"===n.mode&&"right"===n.pos&&(s=i+St,a=i),C(t,e,s+=n.offset,a+=n.offset,{stroke:n.stroke,className:n.className,lineType:n.lineType,shortenNumbers:n.shortenNumbers})}(i,t.labels[n],e.constants.width,{mode:e.constants.mode,pos:e.constants.pos,shortenNumbers:e.constants.shortenNumbers})}))},animateElements:function(t){var e=t.positions,i=t.labels,n=this.oldData.positions,s=this.oldData.labels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,labels:i}),this.store.map((function(t,i){return _(t,e[i],n[i])}))}},xAxis:{layerClass:"x axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="bottom"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=i+St,a="span"===n.mode?-1*St:i;return"tick"===n.mode&&"top"===n.pos&&(s=-1*St,a=0),L(t,e,s,a,{stroke:n.stroke,className:n.className,lineType:n.lineType})}(i,t.calcLabels[n],e.constants.height,{mode:e.constants.mode,pos:e.constants.pos})}))},animateElements:function(t){var e=t.positions,i=t.calcLabels,n=this.oldData.positions,s=this.oldData.calcLabels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,calcLabels:i}),this.store.map((function(t,i){return function(t,e,i){return N(t,[i,0],[e,0],Yt)}(t,e[i],n[i])}))}},yMarkers:{layerClass:"y-markers",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};n.labelPos||(n.labelPos="right");var s=w("text",{className:"chart-label",x:"left"===n.labelPos?At:i-c(e,5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:e+""}),a=C(t,"",0,i,{stroke:n.stroke||Lt,className:n.className||"",lineType:n.lineType});return a.appendChild(s),a}(t.position,t.label,e.constants.width,{labelPos:t.options.labelPos,mode:"span",lineType:"dashed"})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.position})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.options})),r=this.oldData.map((function(t){return t.position}));return this.render(r.map((function(t,e){return{position:r[e],label:s[e],options:a[e]}}))),this.store.map((function(t,e){return _(t,n[e],r[e])}))}},yRegions:{layerClass:"y-regions",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=t-e,r=w("rect",{className:"bar mini",styles:{fill:"rgba(228, 234, 239, 0.49)",stroke:Lt,"stroke-dasharray":i+", "+a},x:0,y:0,width:i,height:a});s.labelPos||(s.labelPos="right");var o=w("text",{className:"chart-label",x:"left"===s.labelPos?At:i-c(n+"",4.5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:n+""}),l=w("g",{transform:"translate(0, "+e+")"});return l.appendChild(r),l.appendChild(o),l}(t.startPos,t.endPos,e.constants.width,t.label,{labelPos:t.options.labelPos})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.endPos})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.startPos})),r=t.map((function(t){return t.options})),o=this.oldData.map((function(t){return t.endPos})),l=this.oldData.map((function(t){return t.startPos}));this.render(o.map((function(t,e){return{startPos:l[e],endPos:o[e],label:s[e],options:r[e]}})));var u=[];return this.store.map((function(t,e){u=u.concat(function(t,e,i,n){var s=e-i,a=t.childNodes[0];return[[a,{height:s,"stroke-dasharray":a.getAttribute("width")+", "+s},Yt,zt],N(t,[0,n],[0,i],Yt)]}(t,a[e],n[e],o[e]))})),u}},heatDomain:{layerClass:function(){return"heat-domain domain-"+this.constants.index},makeElements:function(t){var e=this,i=this.constants,n=i.index,s=i.colWidth,a=i.rowHeight,r=i.squareSize,o=i.radius,l=i.xTranslate,u=0;return this.serializedSubDomains=[],t.cols.map((function(t,i){1===i&&e.labels.push(O("domain-name",l,-12,B(n,!0).toUpperCase(),{fontSize:9})),t.map((function(t,i){if(t.fill){var n={"data-date":t.yyyyMmDd,"data-value":t.dataValue,"data-day":i},s=T("day",l,u,r,o,t.fill,n);e.serializedSubDomains.push(s)}u+=a})),u=0,l+=s})),this.serializedSubDomains},animateElements:function(t){if(t)return[]}},barGraph:{layerClass:function(){return"dataset-units dataset-bars dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="bar",this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},l=p(e,o.zeroLine),u=pt(l,2),c=u[0],h=u[1];h-=r,0===c&&(c=o.minHeight,h-=o.minHeight),d(t)||(t=0),d(h)||(h=0),d(c,!0)||(c=0),d(i,!0)||(i=0);var f=w("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:t,y:h,width:i,height:c});if((s+="")||s.length){f.setAttribute("y",0),f.setAttribute("x",0);var m=w("text",{className:"data-point-value",x:i/2,y:0,dy:Ot/2*-1+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),v=w("g",{"data-point-index":a,transform:"translate("+t+", "+h+")"});return v.appendChild(f),v.appendChild(m),v}return f}(t.xPositions[n],i,t.barWidth,e.color,t.labels[n],n,t.offsets[n],{zeroLine:t.zeroLine,barsWidth:t.barsWidth,minHeight:e.minHeight})})),this.units},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.offsets,s=t.labels,a=this.oldData.xPositions,r=this.oldData.yPositions,o=this.oldData.offsets,l=this.oldData.labels,u=m(a,e),c=pt(u,2);a=c[0],e=c[1];var h=m(r,i),d=pt(h,2);r=d[0],i=d[1];var f=m(o,n),p=pt(f,2);o=p[0],n=p[1];var v=m(l,s),g=pt(v,2);l=g[0],s=g[1],this.render({xPositions:a,yPositions:r,offsets:o,labels:s,zeroLine:this.oldData.zeroLine,barsWidth:this.oldData.barsWidth,barWidth:this.oldData.barWidth});var y=[];return this.store.map((function(s,a){y=y.concat($(s,e[a],i[a],t.barWidth,n[a],{zeroLine:t.zeroLine}))})),y}},lineGraph:{layerClass:function(){return"dataset-units dataset-line dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="dot",this.paths={},e.hideLine||(this.paths=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=e.map((function(e,i){return t[i]+","+e})).join("L");n.spline&&(a=y(t,e));var r=S("M"+a,"line-graph-path",i);if(n.heatline){var o=A(s.svgDefs,i);r.style.stroke="url(#"+o+")"}var l={path:r};if(n.regionFill){var u=A(s.svgDefs,i,!0),c="M"+t[0]+","+s.zeroLine+"L"+a+"L"+t.slice(-1)[0]+","+s.zeroLine;l.region=S(c,"region-fill","none","url(#"+u+")")}return l}(t.xPositions,t.yPositions,e.color,{heatline:e.heatline,regionFill:e.regionFill,spline:e.spline},{svgDefs:e.svgDefs,zeroLine:t.zeroLine})),this.units=[],e.hideDots||(this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=w("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i});if((s+="")||s.length){r.setAttribute("cy",0),r.setAttribute("cx",0);var o=w("text",{className:"data-point-value",x:0,y:0,dy:Ot/2*-1-i+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),l=w("g",{"data-point-index":a,transform:"translate("+t+", "+e+")"});return l.appendChild(r),l.appendChild(o),l}return r}(t.xPositions[n],i,t.radius,e.color,e.valuesOverPoints?t.values[n]:"",n)}))),Object.values(this.paths).concat(this.units)},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.values,s=this.oldData.xPositions,a=this.oldData.yPositions,r=this.oldData.values,o=m(s,e),l=pt(o,2);s=l[0],e=l[1];var u=m(a,i),c=pt(u,2);a=c[0],i=c[1];var h=m(r,n),d=pt(h,2);r=d[0],n=d[1],this.render({xPositions:s,yPositions:a,values:n,zeroLine:this.oldData.zeroLine,radius:this.oldData.radius});var f=[];return Object.keys(this.paths).length&&(f=f.concat(function(t,e,i,n,s){var a=[],r=i.map((function(t,i){return e[i]+","+t})).join("L");s&&(r=y(e,i));var o=[t.path,{d:"M"+r},Et,zt];if(a.push(o),t.region){var l=e[0]+","+n+"L",u="L"+e.slice(-1)[0]+", "+n,c=[t.region,{d:"M"+l+r+u},Et,zt];a.push(c)}return a}(this.paths,e,i,t.zeroLine,this.constants.spline))),this.units.length&&this.units.map((function(t,n){f=f.concat(function(t,e,i){return"circle"!==t.nodeName?[N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,i],Yt)]:[[t,{cx:e,cy:i},$t,zt]]}(t,e[n],i[n]))})),f}}},Xt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="percentage",n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(t){var e=this.measures;this.barOptions=t.barOptions||{};var i=this.barOptions;i.height=i.height||20,i.depth=i.depth||yt,e.paddings.right=30,e.legendHeight=60,e.baseHeight=8*(i.height+.5*i.depth)}},{key:"setupComponents",value:function(){var t=this.state,e=[["percentageBars",{barHeight:this.barOptions.height,barDepth:this.barOptions.depth},function(){return{xPositions:t.xPositions,widths:t.widths,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;e.xPositions=[],e.widths=[];var n=0;e.sliceTotals.map((function(i){var s=t.width*i/e.grandTotal;e.widths.push(s),e.xPositions.push(n),n+=s}))}},{key:"makeDataByIndex",value:function(){}},{key:"bindTooltip",value:function(){var t=this,i=this.state;this.container.addEventListener("mousemove",(function(n){var s=t.components.get("percentageBars").store,a=n.target;if(s.includes(a)){var r=s.indexOf(a),o=e(t.container),l=e(a),u=l.left-o.left+parseInt(a.getAttribute("width"))/2,c=l.top-o.top,h=(t.formattedLabels&&t.formattedLabels.length>0?t.formattedLabels[r]:t.state.labels[r])+": ",d=i.sliceTotals[r]/i.grandTotal;t.tip.setValues(u,c,{name:h,value:(100*d).toFixed(1)+"%"}),t.tip.showTip()}}))}}]),i}(It),Zt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="pie",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x:this.center.y;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*i.y,c=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z\n\t\tL"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+c+" z"}(g,y,t.center,t.radius,s,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z"}(g,y,t.center,t.radius,s,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["pieSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.fill=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.fill=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("pieSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),Kt=function(t){function e(t,i){ut(this,e);var n=ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));n.type="heatmap",n.countLabel=i.countLabel||"";var s=["Sunday","Monday"],a=s.includes(i.startSubDomain)?i.startSubDomain:"Sunday";return n.startSubDomainIndex=s.indexOf(a),n.setup(),n}return dt(e,t),ct(e,[{key:"setMeasures",value:function(t){var e=this.measures;this.discreteDomains=0===t.discreteDomains?0:1,e.paddings.top=36,e.paddings.bottom=0,e.legendHeight=24,e.baseHeight=12*Rt+r(e);var i=this.data,n=this.discreteDomains?12:0;this.independentWidth=12*(U(i.start,i.end)+n)+o(e)}},{key:"updateWidth",value:function(){var t=this.discreteDomains?12:0,e=this.state.noOfWeeks?this.state.noOfWeeks:52;this.baseWidth=12*(e+t)+o(this.measures)}},{key:"prepareData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data;if(t.start&&t.end&&t.start>t.end)throw new Error("Start date cannot be greater than end date.");if(t.start||(t.start=new Date,t.start.setFullYear(t.start.getFullYear()-1)),t.end||(t.end=new Date),t.dataPoints=t.dataPoints||{},parseInt(Object.keys(t.dataPoints)[0])>1e5){var e={};Object.keys(t.dataPoints).forEach((function(i){var n=new Date(i*Ut);e[I(n)]=t.dataPoints[i]})),t.dataPoints=e}return t}},{key:"calc",value:function(){var t=this.state;t.start=R(this.data.start),t.end=R(this.data.end),t.firstWeekStart=R(t.start),t.noOfWeeks=U(t.start,t.end),t.distribution=function(t,e){for(var i=Math.max.apply(Math,mt(t)),n=1/(e-1),s=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:"",i=[t.getMonth(),t.getFullYear()],n=i[0],s=i[1],a=q(t),r={index:n,cols:[]};J(e=R(e)||G(n,s),1);for(var o=U(a,e),l=[],u=void 0,c=0;c2&&void 0!==arguments[2]&&arguments[2],n=this.state,s=R(t),a=[],r=0;r=n.start&&s<=n.end;i||s.getMonth()!==e||!l?o.yyyyMmDd=I(s):o=this.getSubDomainConfig(s),a.push(o)}return a}},{key:"getSubDomainConfig",value:function(t){var e=I(t),i=this.data.dataPoints[e];return{yyyyMmDd:e,dataValue:i||0,fill:this.colors[at(i,this.state.distribution)]}}}]),e}(jt),Qt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.barOptions=e.barOptions||{},n.lineOptions=e.lineOptions||{},n.type=e.type||"line",n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(){this.data.datasets.length<=1&&(this.config.showLegend=0,this.measures.paddings.bottom=30)}},{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),t.axisOptions=t.axisOptions||{},t.tooltipOptions=t.tooltipOptions||{},this.config.xAxisMode=t.axisOptions.xAxisMode||"span",this.config.yAxisMode=t.axisOptions.yAxisMode||"span",this.config.xIsSeries=t.axisOptions.xIsSeries||0,this.config.shortenYAxisNumbers=t.axisOptions.shortenYAxisNumbers||0,this.config.formatTooltipX=t.tooltipOptions.formatTooltipX,this.config.formatTooltipY=t.tooltipOptions.formatTooltipY,this.config.valuesOverPoints=t.valuesOverPoints}},{key:"prepareData",value:function(){return rt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data,this.type)}},{key:"prepareFirstData",value:function(){return ot(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data)}},{key:"calc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.calcXPositions(),t||this.calcYAxisParameters(this.getAllYValues(),"line"===this.type),this.makeDataByIndex()}},{key:"calcXPositions",value:function(){var t=this.state,e=this.data.labels;t.datasetLength=e.length,t.unitWidth=this.width/t.datasetLength,t.xOffset=t.unitWidth/2,t.xAxis={labels:e,positions:e.map((function(e,i){return l(t.xOffset+i*t.unitWidth)}))}}},{key:"calcYAxisParameters",value:function(t){var e=tt(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"false"),i=this.height/nt(e),n=it(e)*i,s=this.height-et(e)*n;this.state.yAxis={labels:e,positions:e.map((function(t){return s-t*i})),scaleMultiplier:i,zeroLine:s},this.calcDatasetPoints(),this.calcYExtremes(),this.calcYRegions()}},{key:"calcDatasetPoints",value:function(){var t=this.state,e=function(e){return e.map((function(e){return st(e,t.yAxis)}))};t.datasets=this.data.datasets.map((function(t,i){var n=t.values,s=t.cumulativeYs||[];return{name:t.name&&t.name.replace(/<|>|&/g,(function(t){return"&"==t?"&":"<"==t?"<":">"})),index:i,chartType:t.chartType,values:n,yPositions:e(n),cumulativeYs:s,cumulativeYPos:e(s)}}))}},{key:"calcYExtremes",value:function(){var t=this.state;this.barOptions.stacked?t.yExtremes=t.datasets[t.datasets.length-1].cumulativeYPos:(t.yExtremes=new Array(t.datasetLength).fill(9999),t.datasets.map((function(e){e.yPositions.map((function(e,i){e1&&void 0!==arguments[1]?arguments[1]:[],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=t/e.length;n<=0&&(n=1);var s=n/bt,a=void 0;if(i){var r=Math.max.apply(Math,mt(e.map((function(t){return t.length}))));a=Math.ceil(r/s)}return e.map((function(t,e){return(t+="").length>s&&(i?e%a!=0&&(t=""):t=s-3>0?t.slice(0,s-3)+" ...":t.slice(0,s)+".."),t}))}(this.width,t.xAxis.labels,this.config.xIsSeries),t.xAxis}.bind(this)],["yRegions",{width:this.width,pos:"right"},function(){return this.state.yRegions}.bind(this)]],i=this.state.datasets.filter((function(t){return"bar"===t.chartType})),n=this.state.datasets.filter((function(t){return"line"===t.chartType})),s=i.map((function(e){var n=e.index;return["barGraph-"+e.index,{index:n,color:t.colors[n],stacked:t.barOptions.stacked,valuesOverPoints:t.config.valuesOverPoints,minHeight:0*t.height},function(){var t=this.state,e=t.datasets[n],s=this.barOptions.stacked,a=this.barOptions.spaceRatio||.5,r=t.unitWidth*(1-a),o=r/(s?1:i.length),l=t.xAxis.positions.map((function(t){return t-r/2}));s||(l=l.map((function(t){return t+o*n})));var u=new Array(t.datasetLength).fill("");this.config.valuesOverPoints&&(u=s&&e.index===t.datasets.length-1?e.cumulativeYs:e.values);var c=new Array(t.datasetLength).fill(0);return s&&(c=e.yPositions.map((function(t,i){return t-e.cumulativeYPos[i]}))),{xPositions:l,yPositions:e.yPositions,offsets:c,labels:u,zeroLine:t.yAxis.zeroLine,barsWidth:r,barWidth:o}}.bind(t)]})),a=n.map((function(e){var i=e.index;return["lineGraph-"+e.index,{index:i,color:t.colors[i],svgDefs:t.svgDefs,heatline:t.lineOptions.heatline,regionFill:t.lineOptions.regionFill,spline:t.lineOptions.spline,hideDots:t.lineOptions.hideDots,hideLine:t.lineOptions.hideLine,valuesOverPoints:t.config.valuesOverPoints},function(){var t=this.state,e=t.datasets[i],n=t.yAxis.positions[0]s(n)?t.mapTooltipXPosition(o):t.tip.hideTip()}))}},{key:"mapTooltipXPosition",value:function(t){var e=this.state;if(e.yExtremes){var i=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.reduce((function(e,i){return Math.abs(i-t)=0){var n=this.dataByIndex[i];this.tip.setValues(n.xPos+this.tip.offset.x,n.yExtreme+this.tip.offset.y,{name:n.formattedLabel,value:""},n.values,i),this.tip.showTip()}}}},{key:"renderLegend",value:function(){var t=this,e=this.data;e.datasets.length>1&&(this.legendArea.textContent="",e.datasets.map((function(e,i){var n=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-bar",x:0,y:0,width:i,height:"2px",fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dy:2*Ot+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("rect",a)),o.appendChild(r),o}(100*i,"0",100,t.colors[i],e.name,t.config.truncateLegends);t.legendArea.appendChild(n)})))}},{key:"makeOverlay",value:function(){var t=this;this.init?this.init=0:(this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)})),this.overlayGuides=this.dataUnitComponents.map((function(t){return{type:t.unitType,overlay:void 0,units:t.units}})),void 0===this.state.currentIndex&&(this.state.currentIndex=this.state.datasetLength-1),this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];e.overlay=Nt[e.type](i),t.drawArea.appendChild(e.overlay)})))}},{key:"updateOverlayGuides",value:function(){this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)}))}},{key:"bindOverlay",value:function(){var t=this;this.parent.addEventListener("data-select",(function(){t.updateOverlay()}))}},{key:"bindUnits",value:function(){var t=this;this.dataUnitComponents.map((function(e){e.units.map((function(e){e.addEventListener("click",(function(){var i=e.getAttribute("data-point-index");t.setCurrentDataPoint(i)}))}))})),this.tip.container.addEventListener("click",(function(){var e=t.tip.container.getAttribute("data-point-index");t.setCurrentDataPoint(e)}))}},{key:"updateOverlay",value:function(){var t=this;this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];_t[e.type](i,e.overlay)}))}},{key:"onLeftArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex-1)}},{key:"onRightArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex+1)}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.currentIndex,e=this.state;return{index:t,label:e.xAxis.labels[t],values:e.datasets.map((function(e){return e.values[t]}))}}},{key:"setCurrentDataPoint",value:function(t){var e=this.state;(t=parseInt(t))<0&&(t=0),t>=e.xAxis.labels.length&&(t=e.xAxis.labels.length-1),t!==e.currentIndex&&(e.currentIndex=t,function(t,e,i){var n=document.createEvent("HTMLEvents");for(var s in n.initEvent(e,!0,!0),i)n[s]=i[s];t.dispatchEvent(n)}(this.parent,"data-select",this.getDataPoint()))}},{key:"addDataPoint",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.state.datasetLength;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"addDataPoint",this).call(this,t,e,n),this.data.labels.splice(n,0,t),this.data.datasets.map((function(t,i){t.values.splice(n,0,e[i])})),this.update(this.data)}},{key:"removeDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.datasetLength-1;this.data.labels.length<=1||(ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"removeDataPoint",this).call(this,t),this.data.labels.splice(t,1),this.data.datasets.map((function(e){e.values.splice(t,1)})),this.update(this.data))}},{key:"updateDataset",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.data.datasets[e].values=t,this.update(this.data)}},{key:"updateDatasets",value:function(t){this.data.datasets.map((function(e,i){t[i]&&(e.values=t[i])})),this.update(this.data)}}]),i}(jt),te=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="donut",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1,this.strokeWidth=t.strokeWidth||30}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x-this.strokeWidth/2:this.center.y-this.strokeWidth/2;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*n+o;return"M"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+"\n\t\tM"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+(i.y+t.y)}(g,y,t.center,t.radius,t.clockWise,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;return"M"+(i.x+t.x)+" "+(i.y+t.y)+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+(i.x+e.x)+" "+(i.y+e.y)}(g,y,t.center,t.radius,t.clockWise,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["donutSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors,strokeWidth:this.strokeWidth}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.stroke=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.stroke=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("donutSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),ee={bar:Qt,line:Qt,percentage:Xt,heatmap:Kt,pie:Zt,donut:te},ie=Object.freeze({Chart:function t(e,i){return ut(this,t),function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1],i=arguments[2];return"axis-mixed"===t?(i.type="line",new Qt(e,i)):ee[t]?new ee[t](e,i):void console.error("Undefined chart type: "+t)}(i.type,e,i)},PercentageChart:Xt,PieChart:Zt,Heatmap:Kt,AxisChart:Qt});return Object.assign({},{NAME:"Frappe Charts",VERSION:"1.6.2"},ie)}()}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,i),a.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n);const t=flarum.reg.get("core","admin/app");var e=i.n(t);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/components/DashboardPage");var r=i.n(a);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function l(t,e,i){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}const u=flarum.reg.get("core","admin/components/DashboardWidget");var c=i.n(u);const h=flarum.reg.get("core","common/components/LoadingIndicator");var d=i.n(h);const f=flarum.reg.get("core","common/components/Link");var p=i.n(f);const v=flarum.reg.get("core","common/utils/abbreviateNumber");var g=i.n(v);class y extends(c()){constructor(){super(...arguments),l(this,"entities",["users","discussions","posts"]),l(this,"lifetimeData",void 0),l(this,"loadingLifetime",!0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}className(){return"StatisticsWidget StatisticsWidget--mini"}content(){return m("div",{className:"StatisticsWidget-table"},m("h4",{className:"StatisticsWidget-title"},e().translator.trans("flarum-statistics.admin.statistics.mini_heading")),m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label"))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t);return m("div",{className:"StatisticsWidget-entity"},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)))}))),m("div",{className:"StatisticsWidget-viewFull"},m(p(),{href:e().route("extension",{id:"flarum-statistics"})},e().translator.trans("flarum-statistics.admin.statistics.view_full"))))}getTotalCount(t){return this.lifetimeData[t]}}flarum.reg.add("flarum-statistics","admin/components/MiniStatisticsWidget",y);const b=flarum.reg.get("core","admin/components/ExtensionPage");var x=i.n(b);const k=flarum.reg.get("core","common/components/SelectDropdown");var w=i.n(k);const D=flarum.reg.get("core","common/components/Button");var M=i.n(D);const P=flarum.reg.get("core","common/utils/extractText");var S=i.n(P);const A=flarum.reg.get("core","common/components/Placeholder");var T=i.n(A);const O=flarum.reg.get("core","common/components/Icon");var L=i.n(O);const C=flarum.reg.get("core","common/utils/classList");var N=i.n(C);const _=flarum.reg.get("core","common/utils/ItemList");var $=i.n(_);const E=flarum.reg.get("core","admin/utils/generateElementId");var Y=i.n(E);const W=flarum.reg.get("core","common/components/FormModal");var z=i.n(W),H=i(860),F=i.n(H),j=i(329),I=i.n(j);F().extend(I());class R extends(z()){constructor(){super(...arguments),l(this,"state",{inputs:{startDateVal:F()().format("YYYY-MM-DD"),endDateVal:F()().format("YYYY-MM-DD")},ids:{startDate:Y()(),endDate:Y()()}})}oninit(t){super.oninit(t),this.attrs.value&&(this.state.inputs={startDateVal:F().utc(1e3*this.attrs.value.start).format("YYYY-MM-DD"),endDateVal:F().utc(1e3*this.attrs.value.end).format("YYYY-MM-DD")})}className(){return"StatisticsWidgetDateSelectionModal Modal--small"}title(){return e().translator.trans("flarum-statistics.admin.date_selection_modal.title")}content(){return m("div",{className:"Modal-body"},this.items().toArray())}items(){const t=new($());return t.add("intro",m("p",null,e().translator.trans("flarum-statistics.admin.date_selection_modal.description")),100),t.add("date_start",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.startDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.start_date")),m("input",{type:"date",id:this.state.ids.startDate,value:this.state.inputs.startDateVal,onchange:this.updateState("startDateVal"),className:"FormControl"})),90),t.add("date_end",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.endDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.end_date")),m("input",{type:"date",id:this.state.ids.endDate,value:this.state.inputs.endDateVal,onchange:this.updateState("endDateVal"),className:"FormControl"})),80),t.add("submit",m(M(),{className:"Button Button--primary",type:"submit"},e().translator.trans("flarum-statistics.admin.date_selection_modal.submit_button")),0),t}updateState(t){return e=>{this.state.inputs[t]=e.currentTarget.value}}submitData(){return{start:Math.floor(+F().utc(this.state.inputs.startDateVal+"Z")/1e3),end:Math.floor(+F().utc(this.state.inputs.endDateVal+"Z").hour(23).minute(59).second(59).millisecond(999)/1e3)}}onsubmit(t){t.preventDefault();const i=this.submitData();i.end(t[e]="unloaded",t)),{})),l(this,"loadingCustom",this.entities.reduce(((t,e)=>(t[e]="unloaded",t)),{})),l(this,"selectedEntity","users"),l(this,"selectedPeriod",void 0),l(this,"chartEntity",void 0),l(this,"chartPeriod",void 0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}async loadTimedData(t){this.loadingTimed[t]="loading",m.redraw();try{const i=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"timed",model:t}});this.timedData[t]=i,this.loadingTimed[t]="loaded";let n=new Date;n.setUTCHours(0,0,0,0);const s=n.getTime()/1e3;this.periods={today:{start:s,end:s+86400,step:3600},last_7_days:{start:s-604800,end:s,step:86400},previous_7_days:{start:s-1209600,end:s-604800,step:86400},last_28_days:{start:s-2419200,end:s,step:86400},previous_28_days:{start:s-4838400,end:s-2419200,step:86400},last_12_months:{start:s-31449600,end:s,step:604800}},this.selectedPeriod="last_7_days"}catch(e){console.error(e),this.loadingTimed[t]="fail"}m.redraw()}async loadCustomRangeData(t){this.loadingCustom[t]="loading",m.redraw();const i={...this.customPeriod};try{const n=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"custom",model:t,dateRange:{start:i.start,end:i.end}}});if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;this.customPeriodData[t]=n,this.loadingCustom[t]="loaded",m.redraw()}catch(e){if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;console.error(e),this.loadingCustom[t]="fail"}}className(){return"StatisticsWidget"}content(){var t,i;const n="loaded"!==("custom"===this.selectedPeriod?this.loadingCustom:this.loadingTimed)[this.selectedEntity],s=n?null:"custom"===this.selectedPeriod?{start:null==(t=this.customPeriod)?void 0:t.end,end:null==(i=this.customPeriod)?void 0:i.end,step:86400}:this.periods[this.selectedPeriod];return"custom"===this.selectedPeriod?this.customPeriodData[this.selectedEntity]||"unloaded"!==this.loadingCustom[this.selectedEntity]||this.loadCustomRangeData(this.selectedEntity):this.timedData[this.selectedEntity]||"unloaded"!==this.loadingTimed[this.selectedEntity]||this.loadTimedData(this.selectedEntity),m("div",{className:"StatisticsWidget-table"},m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label")),m("div",{className:"StatisticsWidget-label"},n?m(d(),{size:"small",display:"inline"}):m(w(),{disabled:n,buttonClassName:"Button Button--text",caretIcon:"fas fa-caret-down"},Object.keys(this.periods).map((t=>m(M(),{key:t,active:t===this.selectedPeriod,onclick:this.changePeriod.bind(this,t),icon:t!==this.selectedPeriod||"fas fa-check"},e().translator.trans("flarum-statistics.admin.statistics.".concat(t,"_label"))))).concat([m(M(),{key:"custom",active:"custom"===this.selectedPeriod,onclick:()=>{const t={onModalSubmit:t=>{JSON.stringify(t)!==JSON.stringify(this.customPeriod)&&(this.customPeriodData={},Object.keys(this.loadingCustom).forEach((t=>this.loadingCustom[t]="unloaded")),this.customPeriod=t,this.changePeriod("custom"))}};this.customPeriod&&(t.value=this.customPeriod),e().modal.show(R,t)},icon:"custom"!==this.selectedPeriod||"fas fa-check"},"custom"===this.selectedPeriod?S()(e().translator.trans("flarum-statistics.admin.statistics.custom_label_specified",{fromDate:F().utc(1e3*this.customPeriod.start).format("ll"),toDate:F().utc(1e3*this.customPeriod.end).format("ll")})):e().translator.trans("flarum-statistics.admin.statistics.custom_label"))])))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t),a=n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,s),r="custom"===this.selectedPeriod?null:n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,this.getLastPeriod(s)),o=n||0===r||null===r?0:(a-r)/r*100;return m("button",{className:N()("Button--ua-reset StatisticsWidget-entity",{active:this.selectedEntity===t}),onclick:this.changeEntity.bind(this,t)},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)),m("div",{className:"StatisticsWidget-period",title:a},n?m(d(),{display:"inline"}):g()(a),0!==o&&m("[",null," ",m("span",{className:"StatisticsWidget-change StatisticsWidget-change--"+(o>0?"up":"down")},m(L(),{name:"fas fa-arrow-"+(o>0?"up":"down")}),Math.abs(o).toFixed(1),"%"))))}))),m("[",null,n?m("div",{key:"loading",className:"StatisticsWidget-chart","data-loading":"true"},m(d(),{size:"large"})):m("div",{key:"loaded",className:"StatisticsWidget-chart","data-loading":"false",oncreate:this.drawChart.bind(this),onupdate:this.drawChart.bind(this)})),this.noData&&m(T(),{text:e().translator.trans("flarum-statistics.admin.statistics.no_data")}),!this.noData&&!!this.chart&&m(M(),{className:"StatisticsWidget-chartExport Button",icon:"fas fa-file-export",onclick:()=>{this.chart.export()}},e().translator.trans("flarum-statistics.admin.statistics.export_chart_button")))}drawChart(t){var i,n;if(this.chart&&this.chartEntity===this.selectedEntity&&this.chartPeriod===this.selectedPeriod)return;const s="custom"===this.selectedPeriod?{start:null==(i=this.customPeriod)?void 0:i.start,end:null==(n=this.customPeriod)?void 0:n.end,step:86400}:this.periods[this.selectedPeriod],a=s.end-s.start,r=[],o=[],l=[];for(let t=s.start;t86400&&(e+=" - "+F().unix(t+s.step-1).utc().format("D MMM"))),r.push(e),o.push(this.getPeriodCount(this.selectedEntity,{start:t,end:t+s.step})),l.push(this.getPeriodCount(this.selectedEntity,{start:t-a,end:t-a}))}if(0===o.length)return this.noData=!0,void m.redraw();this.noData=!1,m.redraw();const u={labels:r,datasets:[{name:S()(e().translator.trans("flarum-statistics.admin.statistics.current_period")),values:o},{name:S()(e().translator.trans("flarum-statistics.admin.statistics.previous_period")),values:l}]};this.chart&&16&document.compareDocumentPosition(this.chart.parent)?this.chart.update(u):this.chart=new B.Chart(t.dom,{data:u,type:"line",height:280,axisOptions:{xAxisMode:"tick",yAxisMode:"span",xIsSeries:!0},lineOptions:{hideDots:1,regionFill:1},colors:[e().forum.attribute("themePrimaryColor"),"black"]}),this.chartEntity=this.selectedEntity,this.chartPeriod=this.selectedPeriod}changeEntity(t){this.selectedEntity=t}changePeriod(t){this.selectedPeriod=t}getTotalCount(t){return this.lifetimeData[t]}getPeriodCount(t,e){const i=("custom"===this.selectedPeriod?this.customPeriodData:this.timedData)[t];let n=0;for(const t in i){const s=parseInt(t);s>=e.start&&s{(0,s.extend)(r().prototype,"availableWidgets",(function(t){t.add("statistics",m(y,null),20)})),e().extensionData.for("flarum-statistics").registerPage(q)}))})(),module.exports=n})(); +(()=>{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,i="millisecond",n="second",s="minute",a="hour",r="day",o="week",l="month",u="quarter",c="year",h="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|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"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},v=function(t,e,i){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(i)+t},g={s:v,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),n=Math.floor(i/60),s=i%60;return(e<=0?"+":"-")+v(n,2,"0")+":"+v(s,2,"0")},m:function t(e,i){if(e.date()1)return t(r[0])}else{var o=e.name;b[o]=e,s=o}return!n&&s&&(y=s),s||!n&&y},w=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new M(i)},D=g;D.l=k,D.i=x,D.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var M=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var s=n[2]-1||0,a=(n[7]||"0").substring(0,3);return i?new Date(Date.UTC(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.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()},v.$utils=function(){return D},v.isValid=function(){return!(this.$d.toString()===d)},v.isSame=function(t,e){var i=w(t);return this.startOf(e)<=i&&i<=this.endOf(e)},v.isAfter=function(t,e){return w(t)=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function s(t){return t.titleHeight+t.margins.top+t.paddings.top}function a(t){return t.margins.left+t.paddings.left}function r(t){return t.margins.top+t.margins.bottom+t.paddings.top+t.paddings.bottom+t.titleHeight+t.legendHeight}function o(t){return t.margins.left+t.margins.right+t.paddings.left+t.paddings.right}function l(t){return parseFloat(t.toFixed(2))}function u(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var s=new Array(Math.abs(e)).fill(i);return n?s.concat(t):t.concat(s)}function c(t,e){return(t+"").length*e}function h(t,e){return{x:Math.sin(t*wt)*e,y:Math.cos(t*wt)*e}}function d(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(Number.isNaN(t)||void 0===t||!Number.isFinite(t)||e&&t<0)}function f(t){var e=void 0,i=void 0,n=void 0;if(t instanceof Date)return new Date(t.getTime());if("object"!==(void 0===t?"undefined":lt(t))||null===t)return t;for(n in e=Array.isArray(t)?[]:{},t)i=t[n],e[n]=f(i);return e}function p(t,e){var i=void 0,n=void 0;return t<=e?(i=e-t,n=t):(i=t-e,n=e),[i,n]}function m(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=u(t,i):e=u(e,i),[t,e]}function v(t,e){if(t)return t.length>e?t.slice(0,e-3)+"...":t}function g(t){var e=void 0;if("number"==typeof t)e=t;else if("string"==typeof t&&(e=Number(t),Number.isNaN(e)))return t;var i=Math.floor(Math.log10(Math.abs(e)));if(i<=2)return e;var n=Math.floor(i/3),s=Math.pow(10,i-3*n)*+(e/Math.pow(10,i)).toFixed(1);return Math.round(100*s)/100+" "+["","K","M","B","T"][n]}function y(t,e){for(var i=[],n=0;n255?255:t<0?0:t}function x(t,e){var i=Pt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var s=parseInt(i,16),a=b((s>>16)+e),r=b((s>>8&255)+e);return(n?"#":"")+(b((255&s)+e)|r<<8|a<<16).toString(16)}function k(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function w(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var n in e){var s=e[n];if("inside"===n)k(s).appendChild(i);else if("around"===n){var a=k(s);a.parentNode.insertBefore(i,a),i.appendChild(a)}else"styles"===n?"object"===(void 0===s?"undefined":lt(s))&&Object.keys(s).map((function(t){i.style[t]=s[t]})):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=s:i.setAttribute(n,s))}return i}function D(t,e){return w("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function M(t,e,i,n){return w("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function P(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i={className:t,transform:arguments.length>1&&void 0!==arguments[1]?arguments[1]:""};return e&&(i.inside=e),w("g",i)}function S(t){return w("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none","stroke-width":arguments.length>4&&void 0!==arguments[4]?arguments[4]:2}})}function A(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e+"-"+(i?"lighter":"default"),s=D(t,n),a=[1,.6,.2];return i&&(a=[.4,.2,0]),M(s,"0%",e,a[0]),M(s,"50%",e,a[1]),M(s,"100%",e,a[2]),n}function T(t,e,i,n,s){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},r={className:t,x:e,y:i,width:n,height:n,rx:s,fill:arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none"};return Object.keys(a).map((function(t){r[t]=a[t]})),w("rect",r)}function O(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=s.fontSize||Ot;return w("text",{className:t,x:e,y:i,dy:(void 0!==s.dy?s.dy:a/2)+"px","font-size":a+"px",fill:s.fill||Ct,"text-anchor":s.textAnchor||"start",innerHTML:n})}function L(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt);var a=w("line",{className:"line-vertical "+s.className,x1:0,x2:0,y1:i,y2:n,styles:{stroke:s.stroke}}),r=w("text",{x:0,y:i>n?i+At:i-At-Ot,dy:Ot+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:e+""}),o=w("g",{transform:"translate("+t+", 0)"});return o.appendChild(a),o.appendChild(r),o}function C(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt),s.lineType||(s.lineType=""),s.shortenNumbers&&(e=g(e));var a=w("line",{className:"line-horizontal "+s.className+("dashed"===s.lineType?"dashed":""),x1:i,x2:n,y1:0,y2:0,styles:{stroke:s.stroke}}),r=w("text",{x:i4&&void 0!==arguments[4]?arguments[4]:0,a=p(i,(arguments.length>5&&void 0!==arguments[5]?arguments[5]:{}).zeroLine),r=pt(a,2),o=r[0],l=r[1];return l-=s,"rect"!==t.nodeName?[[t.childNodes[0],{width:n,height:o},$t,zt],N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,l],Yt)]:[[t,{width:n,height:o,x:e,y:l},$t,zt]]}function E(t,e){return[t,{d:e},$t,zt]}function Y(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var u=void 0;u="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var c=a[l]||t.getAttribute(l),h=e[l],d={attributeName:l,from:c,to:h,begin:"0s",dur:i/1e3+"s",values:c+";"+h,keySplines:Ht[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};for(var f in s&&(d.type=s),d)u.setAttribute(f,d[f]);r.appendChild(u),s?o.setAttribute(l,"translate("+h+")"):o.setAttribute(l,h)}return[r,o]}function W(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function z(t,e){var i=[],n=[];e.map((function(t){var e,s,a=t[0],r=a.parentNode;t[0]=a;var o=Y.apply(void 0,mt(t)),l=pt(o,2);e=l[0],s=l[1],i.push(s),n.push([e,r]),r&&r.replaceChild(e,a)}));var s=t.cloneNode(!0);return n.map((function(t,n){t[1]&&(t[1].replaceChild(i[n],t[0]),e[n][0]=i[n])})),s}function H(t,e,i){if(0!==i.length){var n=z(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout((function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))}),Wt)}}function F(e){var i=e.cloneNode(!0);i.classList.add("chart-container"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");var n=t.create("style",{innerHTML:Ft});i.insertBefore(n,i.firstChild);var s=t.create("div");return s.appendChild(i),s.innerHTML}function j(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function I(t){var e=t.getDate(),i=t.getMonth()+1;return[t.getFullYear(),(i>9?"":"0")+i,(e>9?"":"0")+e].join("-")}function R(t){return new Date(t.getTime())}function U(t,e){var i=q(t);return Math.ceil(function(t,e){var i=Vt*Ut;return(j(e)-j(t))/i}(i,e)/Rt)}function V(t,e){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function B(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Bt[t];return e?i.slice(0,3):i}function G(t,e){return new Date(e,t+1,0)}function q(t){var e=R(t),i=e.getDay();return 0!==i&&J(e,-1*i),e}function J(t,e){t.setDate(t.getDate()+e)}function X(t,e,i){var n=Object.keys(Jt).filter((function(e){return t.includes(e)})),s=Jt[n[0]];return Object.assign(s,{constants:e,getData:i}),new qt(s)}function Z(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function K(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),s=i-n,a=s,r=1;s>5&&(s%2!=0&&(s=++i-n),a=s/2,r=2),s<=2&&(r=s/(a=4)),0===s&&(a=5,r=1);for(var o=[],l=0;l<=a;l++)o.push(n+r*l);return o}function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Z(t),n=pt(i,2),s=n[0],a=n[1],r=e?e/Math.pow(10,a):0,o=K(s=s.toFixed(6),r);return o.map((function(t){return t*Math.pow(10,a)}))}function tt(t){function e(t,e){for(var i=Q(t),n=i[1]-i[0],s=0,a=1;s1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,mt(t)),s=Math.min.apply(Math,mt(t)),a=[];if(n>=0&&s>=0)Z(n)[1],a=i?Q(n,s):Q(n);else if(n>0&&s<0){var r=Math.abs(s);n>=r?(Z(n)[1],a=e(n,r)):(Z(r)[1],a=e(r,n).reverse().map((function(t){return-1*t})))}else if(n<=0&&s<=0){var o=Math.abs(s),l=Math.abs(n);Z(o)[1],a=(a=i?Q(o,l):Q(o)).reverse().map((function(t){return-1*t}))}return a}function et(t){var e=it(t);return t.indexOf(0)>=0?t.indexOf(0):t[0]>0?-1*t[0]/e:-1*t[t.length-1]/e+(t.length-1)}function it(t){return t[1]-t[0]}function nt(t){return t[t.length-1]-t[0]}function st(t,e){return l(e.zeroLine-t*e.scaleMultiplier)}function at(t,e){return e.filter((function(e){return ei?n.slice(0,i):u(n,i-n.length,0),t.values=n}else t.values=s;t.chartType||(gt.includes(e),t.chartType=e)})),t.yRegions&&t.yRegions.map((function(t){if(t.end\n\t\t\t\t
      \n\t\t\t\t
      '}),this.hideTip(),this.title=this.container.querySelector(".title"),this.dataPointList=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",(function(){e.hideTip()}))}},{key:"fill",value:function(){var e,i=this;this.index&&this.container.setAttribute("data-point-index",this.index),e=this.titleValueFirst?""+this.titleValue+""+this.titleName:this.titleName+""+this.titleValue+"",this.title.innerHTML=e,this.dataPointList.innerHTML="",this.listValues.map((function(e,n){var s=i.colors[n]||"black",a=0===e.formatted||e.formatted?e.formatted:e.value,r=t.create("li",{styles:{"border-top":"3px solid "+s},innerHTML:''+(0===a||a?a:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});i.dataPointList.appendChild(r)}))}},{key:"calcPosition",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight-5,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,this.left=e}else i.style.left="50%"}},{key:"setValues",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;this.titleName=i.name,this.titleValue=i.value,this.listValues=n,this.x=t,this.y=e,this.titleValueFirst=i.valueFirst||0,this.index=s,this.refresh()}},{key:"hideTip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"showTip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),Mt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},Pt=function(t){return/rgb[a]{0,1}\([\d, ]+\)/gim.test(t)?/\D+(\d*)\D+(\d*)\D+(\d*)/gim.exec(t).map((function(t,e){return 0!==e?Number(t).toString(16):"#"})).reduce((function(t,e){return""+t+e})):Mt[t]||t},St=6,At=4,Tt=15,Ot=10,Lt="#dadada",Ct="#555b51",Nt={bar:function(t){var e=void 0;"rect"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode();return i.style.fill="#000000",i.style.opacity="0.4",e&&i.setAttribute("transform",e),i},dot:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i},heat_square:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i}},_t={bar:function(t,e){var i=void 0;"rect"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["x","y","width","height"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},dot:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},heat_square:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)}},$t=350,Et=350,Yt=$t,Wt=250,zt="easein",Ht={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},Ft=".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}",jt=function(){function e(t,i){if(ut(this,e),i=f(i),this.parent="string"==typeof t?document.querySelector(t):t,!(this.parent instanceof HTMLElement))throw new Error("No `parent` element to render on was provided.");this.rawChartArgs=i,this.title=i.title||"",this.type=i.type||"",this.realData=this.prepareData(i.data),this.data=this.prepareFirstData(this.realData),this.colors=this.validateColors(i.colors,this.type),this.config={showTooltip:1,showLegend:1,isNavigable:i.isNavigable||0,animate:void 0!==i.animate?i.animate:1,truncateLegends:i.truncateLegends||1},this.measures=JSON.parse(JSON.stringify(vt));var n=this.measures;this.setMeasures(i),this.title.length||(n.titleHeight=0),this.config.showLegend||(n.legendHeight=0),this.argHeight=i.height||n.baseHeight,this.state={},this.options={},this.initTimeout=700,this.config.isNavigable&&(this.overlays=[]),this.configure(i)}return ct(e,[{key:"prepareData",value:function(t){return t}},{key:"prepareFirstData",value:function(t){return t}},{key:"validateColors",value:function(t,e){var i=[];return(t=(t||[]).concat(kt[e])).forEach((function(t){var e=Pt(t);!function(t){return/(^\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i.test(t)||/(^\s*)(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(t)}(e)?console.warn('"'+t+'" is not a valid color.'):i.push(e)})),i}},{key:"setMeasures",value:function(){}},{key:"configure",value:function(){var t=this,e=this.argHeight;this.baseHeight=e,this.height=e-r(this.measures),this.boundDrawFn=function(){return t.draw(!0)},ResizeObserver&&(this.resizeObserver=new ResizeObserver(this.boundDrawFn),this.resizeObserver.observe(this.parent)),window.addEventListener("resize",this.boundDrawFn),window.addEventListener("orientationchange",this.boundDrawFn)}},{key:"destroy",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),window.removeEventListener("resize",this.boundDrawFn),window.removeEventListener("orientationchange",this.boundDrawFn)}},{key:"setup",value:function(){this.makeContainer(),this.updateWidth(),this.makeTooltip(),this.draw(!1,!0)}},{key:"makeContainer",value:function(){this.parent.innerHTML="";var e={inside:this.parent,className:"chart-container"};this.independentWidth&&(e.styles={width:this.independentWidth+"px"}),this.container=t.create("div",e)}},{key:"makeTooltip",value:function(){this.tip=new Dt({parent:this.container,colors:this.colors}),this.bindTooltip()}},{key:"bindTooltip",value:function(){}},{key:"draw",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&i(this.parent)||(this.updateWidth(),this.calc(e),this.makeChartArea(),this.setupComponents(),this.components.forEach((function(e){return e.setup(t.drawArea)})),this.render(this.components,!1),n&&(this.data=this.realData,setTimeout((function(){t.update(t.data)}),this.initTimeout)),this.renderLegend(),this.setupNavigation(n))}},{key:"calc",value:function(){}},{key:"updateWidth",value:function(){this.baseWidth=function(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}(this.parent),this.width=this.baseWidth-o(this.measures)}},{key:"makeChartArea",value:function(){this.svg&&this.container.removeChild(this.svg);var t=this.measures;this.svg=function(t,e,i,n){return w("svg",{className:e,inside:t,width:i,height:n})}(this.container,"frappe-chart chart",this.baseWidth,this.baseHeight),this.svgDefs=function(t){return w("defs",{inside:t})}(this.svg),this.title.length&&(this.titleEL=O("title",t.margins.left,t.margins.top,this.title,{fontSize:t.titleFontSize,fill:"#666666",dy:t.titleFontSize}));var e=s(t);this.drawArea=P(this.type+"-chart chart-draw-area","translate("+a(t)+", "+e+")"),this.config.showLegend&&(e+=this.height+t.paddings.bottom,this.legendArea=P("chart-legend","translate("+a(t)+", "+e+")")),this.title.length&&this.svg.appendChild(this.titleEL),this.svg.appendChild(this.drawArea),this.config.showLegend&&this.svg.appendChild(this.legendArea),this.updateTipOffset(a(t),s(t))}},{key:"updateTipOffset",value:function(t,e){this.tip.offset={x:t,y:e}}},{key:"setupComponents",value:function(){this.components=new Map}},{key:"update",value:function(t){t||console.error("No data to update."),this.data=this.prepareData(t),this.calc(),this.render(this.components,this.config.animate),this.renderLegend()}},{key:"render",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.components,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.config.isNavigable&&this.overlays.map((function(t){return t.parentNode.removeChild(t)}));var n=[];e.forEach((function(t){n=n.concat(t.update(i))})),n.length>0?(H(this.container,this.svg,n),setTimeout((function(){e.forEach((function(t){return t.make()})),t.updateNav()}),400)):(e.forEach((function(t){return t.make()})),this.updateNav())}},{key:"updateNav",value:function(){this.config.isNavigable&&(this.makeOverlay(),this.bindUnits())}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.config.isNavigable&&e&&(this.bindOverlay(),this.keyActions={13:this.onEnterKey.bind(this),37:this.onLeftArrow.bind(this),38:this.onUpArrow.bind(this),39:this.onRightArrow.bind(this),40:this.onDownArrow.bind(this)},document.addEventListener("keydown",(function(e){n(t.container)&&(e=e||window.event,t.keyActions[e.keyCode]&&t.keyActions[e.keyCode]())})))}},{key:"makeOverlay",value:function(){}},{key:"updateOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bindUnits",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"addDataPoint",value:function(){}},{key:"removeDataPoint",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"setCurrentDataPoint",value:function(){}},{key:"updateDataset",value:function(){}},{key:"export",value:function(){var t=F(this.svg);!function(t,e){var i=document.createElement("a");i.style="display: none";var n=new Blob(e,{type:"image/svg+xml; charset=utf-8"}),s=window.URL.createObjectURL(n);i.href=s,i.download=t,document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),300)}(this.title||"Chart",[t])}}]),e}(),It=function(t){function e(t,i){return ut(this,e),ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i))}return dt(e,t),ct(e,[{key:"configure",value:function(t){ht(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"configure",this).call(this,t),this.config.formatTooltipY=(t.tooltipOptions||{}).formatTooltipY,this.config.maxSlices=t.maxSlices||20,this.config.maxLegendPoints=t.maxLegendPoints||20}},{key:"calc",value:function(){var t=this,e=this.state,i=this.config.maxSlices;e.sliceTotals=[];var n=this.data.labels.map((function(e,i){var n=0;return t.data.datasets.map((function(t){n+=t.values[i]})),[n,e]})).filter((function(t){return t[0]>=0})),s=n;if(n.length>i){n.sort((function(t,e){return e[0]-t[0]})),s=n.slice(0,i-1);var a=0;n.slice(i-1).map((function(t){a+=t[0]})),s.push([a,"Rest"]),this.colors[i-1]="grey"}e.labels=[],s.map((function(t){e.sliceTotals.push(function(t){return Number(Math.round(t+"e4")+"e-4")}(t[0])),e.labels.push(t[1])})),e.grandTotal=e.sliceTotals.reduce((function(t,e){return t+e}),0),this.center={x:this.width/2,y:this.height/2}}},{key:"renderLegend",value:function(){var t=this,e=this.state;this.legendArea.textContent="",this.legendTotals=e.sliceTotals.slice(0,this.config.maxLegendPoints);var i=0,n=0;this.legendTotals.map((function(s,a){var r=150,l=Math.floor((t.width-o(t.measures))/r);t.legendTotals.lengthl&&(i=0,n+=20);var u=r*i+5,c=t.config.truncateLegends?v(e.labels[a],r/10):e.labels[a],h=t.config.formatTooltipY?t.config.formatTooltipY(s):s,d=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-dot",cx:0,cy:0,r:i,fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dx:Ot+"px",dy:Ot/3+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("circle",a)),o.appendChild(r),o}(u,n,5,t.colors[a],c+": "+h,!1);t.legendArea.appendChild(d),i++}))}}]),e}(jt),Rt=7,Ut=1e3,Vt=86400,Bt=["January","February","March","April","May","June","July","August","September","October","November","December"],Gt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],qt=function(){function t(e){var i=e.layerClass,n=void 0===i?"":i,s=e.layerTransform,a=void 0===s?"":s,r=e.constants,o=e.getData,l=e.makeElements,u=e.animateElements;ut(this,t),this.layerTransform=a,this.constants=r,this.makeElements=l,this.getData=o,this.animateElements=u,this.store=[],this.labels=[],this.layerClass=n,this.layerClass="function"==typeof this.layerClass?this.layerClass():this.layerClass,this.refresh()}return ct(t,[{key:"refresh",value:function(t){this.data=t||this.getData()}},{key:"setup",value:function(t){this.layer=P(this.layerClass,this.layerTransform,t)}},{key:"make",value:function(){this.render(this.data),this.oldData=this.data}},{key:"render",value:function(t){var e=this;this.store=this.makeElements(t),this.layer.textContent="",this.store.forEach((function(t){e.layer.appendChild(t)})),this.labels.forEach((function(t){e.layer.appendChild(t)}))}},{key:"update",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.refresh();var e=[];return t&&(e=this.animateElements(this.data)||[]),e}}]),t}(),Jt={donutSlices:{layerClass:"donut-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"donut-path",t.colors[i],"none",t.strokeWidth);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},pieSlices:{layerClass:"pie-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"pie-path","none",t.colors[i]);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},percentageBars:{layerClass:"percentage-bars",makeElements:function(t){var e=this;return t.xPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:yt,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none";return w("rect",{className:"percentage-bar",x:t,y:e,width:i,height:n,fill:a,styles:{stroke:x(a,-25),"stroke-dasharray":"0, "+(n+i)+", "+i+", "+n,"stroke-width":s}})}(i,0,t.widths[n],e.constants.barHeight,e.constants.barDepth,t.colors[n])}))},animateElements:function(t){if(t)return[]}},yAxis:{layerClass:"y axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="left"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=-1*St,a="span"===n.mode?i+St:0;return"tick"===n.mode&&"right"===n.pos&&(s=i+St,a=i),C(t,e,s+=n.offset,a+=n.offset,{stroke:n.stroke,className:n.className,lineType:n.lineType,shortenNumbers:n.shortenNumbers})}(i,t.labels[n],e.constants.width,{mode:e.constants.mode,pos:e.constants.pos,shortenNumbers:e.constants.shortenNumbers})}))},animateElements:function(t){var e=t.positions,i=t.labels,n=this.oldData.positions,s=this.oldData.labels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,labels:i}),this.store.map((function(t,i){return _(t,e[i],n[i])}))}},xAxis:{layerClass:"x axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="bottom"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=i+St,a="span"===n.mode?-1*St:i;return"tick"===n.mode&&"top"===n.pos&&(s=-1*St,a=0),L(t,e,s,a,{stroke:n.stroke,className:n.className,lineType:n.lineType})}(i,t.calcLabels[n],e.constants.height,{mode:e.constants.mode,pos:e.constants.pos})}))},animateElements:function(t){var e=t.positions,i=t.calcLabels,n=this.oldData.positions,s=this.oldData.calcLabels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,calcLabels:i}),this.store.map((function(t,i){return function(t,e,i){return N(t,[i,0],[e,0],Yt)}(t,e[i],n[i])}))}},yMarkers:{layerClass:"y-markers",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};n.labelPos||(n.labelPos="right");var s=w("text",{className:"chart-label",x:"left"===n.labelPos?At:i-c(e,5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:e+""}),a=C(t,"",0,i,{stroke:n.stroke||Lt,className:n.className||"",lineType:n.lineType});return a.appendChild(s),a}(t.position,t.label,e.constants.width,{labelPos:t.options.labelPos,mode:"span",lineType:"dashed"})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.position})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.options})),r=this.oldData.map((function(t){return t.position}));return this.render(r.map((function(t,e){return{position:r[e],label:s[e],options:a[e]}}))),this.store.map((function(t,e){return _(t,n[e],r[e])}))}},yRegions:{layerClass:"y-regions",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=t-e,r=w("rect",{className:"bar mini",styles:{fill:"rgba(228, 234, 239, 0.49)",stroke:Lt,"stroke-dasharray":i+", "+a},x:0,y:0,width:i,height:a});s.labelPos||(s.labelPos="right");var o=w("text",{className:"chart-label",x:"left"===s.labelPos?At:i-c(n+"",4.5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:n+""}),l=w("g",{transform:"translate(0, "+e+")"});return l.appendChild(r),l.appendChild(o),l}(t.startPos,t.endPos,e.constants.width,t.label,{labelPos:t.options.labelPos})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.endPos})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.startPos})),r=t.map((function(t){return t.options})),o=this.oldData.map((function(t){return t.endPos})),l=this.oldData.map((function(t){return t.startPos}));this.render(o.map((function(t,e){return{startPos:l[e],endPos:o[e],label:s[e],options:r[e]}})));var u=[];return this.store.map((function(t,e){u=u.concat(function(t,e,i,n){var s=e-i,a=t.childNodes[0];return[[a,{height:s,"stroke-dasharray":a.getAttribute("width")+", "+s},Yt,zt],N(t,[0,n],[0,i],Yt)]}(t,a[e],n[e],o[e]))})),u}},heatDomain:{layerClass:function(){return"heat-domain domain-"+this.constants.index},makeElements:function(t){var e=this,i=this.constants,n=i.index,s=i.colWidth,a=i.rowHeight,r=i.squareSize,o=i.radius,l=i.xTranslate,u=0;return this.serializedSubDomains=[],t.cols.map((function(t,i){1===i&&e.labels.push(O("domain-name",l,-12,B(n,!0).toUpperCase(),{fontSize:9})),t.map((function(t,i){if(t.fill){var n={"data-date":t.yyyyMmDd,"data-value":t.dataValue,"data-day":i},s=T("day",l,u,r,o,t.fill,n);e.serializedSubDomains.push(s)}u+=a})),u=0,l+=s})),this.serializedSubDomains},animateElements:function(t){if(t)return[]}},barGraph:{layerClass:function(){return"dataset-units dataset-bars dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="bar",this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},l=p(e,o.zeroLine),u=pt(l,2),c=u[0],h=u[1];h-=r,0===c&&(c=o.minHeight,h-=o.minHeight),d(t)||(t=0),d(h)||(h=0),d(c,!0)||(c=0),d(i,!0)||(i=0);var f=w("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:t,y:h,width:i,height:c});if((s+="")||s.length){f.setAttribute("y",0),f.setAttribute("x",0);var m=w("text",{className:"data-point-value",x:i/2,y:0,dy:Ot/2*-1+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),v=w("g",{"data-point-index":a,transform:"translate("+t+", "+h+")"});return v.appendChild(f),v.appendChild(m),v}return f}(t.xPositions[n],i,t.barWidth,e.color,t.labels[n],n,t.offsets[n],{zeroLine:t.zeroLine,barsWidth:t.barsWidth,minHeight:e.minHeight})})),this.units},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.offsets,s=t.labels,a=this.oldData.xPositions,r=this.oldData.yPositions,o=this.oldData.offsets,l=this.oldData.labels,u=m(a,e),c=pt(u,2);a=c[0],e=c[1];var h=m(r,i),d=pt(h,2);r=d[0],i=d[1];var f=m(o,n),p=pt(f,2);o=p[0],n=p[1];var v=m(l,s),g=pt(v,2);l=g[0],s=g[1],this.render({xPositions:a,yPositions:r,offsets:o,labels:s,zeroLine:this.oldData.zeroLine,barsWidth:this.oldData.barsWidth,barWidth:this.oldData.barWidth});var y=[];return this.store.map((function(s,a){y=y.concat($(s,e[a],i[a],t.barWidth,n[a],{zeroLine:t.zeroLine}))})),y}},lineGraph:{layerClass:function(){return"dataset-units dataset-line dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="dot",this.paths={},e.hideLine||(this.paths=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=e.map((function(e,i){return t[i]+","+e})).join("L");n.spline&&(a=y(t,e));var r=S("M"+a,"line-graph-path",i);if(n.heatline){var o=A(s.svgDefs,i);r.style.stroke="url(#"+o+")"}var l={path:r};if(n.regionFill){var u=A(s.svgDefs,i,!0),c="M"+t[0]+","+s.zeroLine+"L"+a+"L"+t.slice(-1)[0]+","+s.zeroLine;l.region=S(c,"region-fill","none","url(#"+u+")")}return l}(t.xPositions,t.yPositions,e.color,{heatline:e.heatline,regionFill:e.regionFill,spline:e.spline},{svgDefs:e.svgDefs,zeroLine:t.zeroLine})),this.units=[],e.hideDots||(this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=w("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i});if((s+="")||s.length){r.setAttribute("cy",0),r.setAttribute("cx",0);var o=w("text",{className:"data-point-value",x:0,y:0,dy:Ot/2*-1-i+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),l=w("g",{"data-point-index":a,transform:"translate("+t+", "+e+")"});return l.appendChild(r),l.appendChild(o),l}return r}(t.xPositions[n],i,t.radius,e.color,e.valuesOverPoints?t.values[n]:"",n)}))),Object.values(this.paths).concat(this.units)},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.values,s=this.oldData.xPositions,a=this.oldData.yPositions,r=this.oldData.values,o=m(s,e),l=pt(o,2);s=l[0],e=l[1];var u=m(a,i),c=pt(u,2);a=c[0],i=c[1];var h=m(r,n),d=pt(h,2);r=d[0],n=d[1],this.render({xPositions:s,yPositions:a,values:n,zeroLine:this.oldData.zeroLine,radius:this.oldData.radius});var f=[];return Object.keys(this.paths).length&&(f=f.concat(function(t,e,i,n,s){var a=[],r=i.map((function(t,i){return e[i]+","+t})).join("L");s&&(r=y(e,i));var o=[t.path,{d:"M"+r},Et,zt];if(a.push(o),t.region){var l=e[0]+","+n+"L",u="L"+e.slice(-1)[0]+", "+n,c=[t.region,{d:"M"+l+r+u},Et,zt];a.push(c)}return a}(this.paths,e,i,t.zeroLine,this.constants.spline))),this.units.length&&this.units.map((function(t,n){f=f.concat(function(t,e,i){return"circle"!==t.nodeName?[N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,i],Yt)]:[[t,{cx:e,cy:i},$t,zt]]}(t,e[n],i[n]))})),f}}},Xt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="percentage",n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(t){var e=this.measures;this.barOptions=t.barOptions||{};var i=this.barOptions;i.height=i.height||20,i.depth=i.depth||yt,e.paddings.right=30,e.legendHeight=60,e.baseHeight=8*(i.height+.5*i.depth)}},{key:"setupComponents",value:function(){var t=this.state,e=[["percentageBars",{barHeight:this.barOptions.height,barDepth:this.barOptions.depth},function(){return{xPositions:t.xPositions,widths:t.widths,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;e.xPositions=[],e.widths=[];var n=0;e.sliceTotals.map((function(i){var s=t.width*i/e.grandTotal;e.widths.push(s),e.xPositions.push(n),n+=s}))}},{key:"makeDataByIndex",value:function(){}},{key:"bindTooltip",value:function(){var t=this,i=this.state;this.container.addEventListener("mousemove",(function(n){var s=t.components.get("percentageBars").store,a=n.target;if(s.includes(a)){var r=s.indexOf(a),o=e(t.container),l=e(a),u=l.left-o.left+parseInt(a.getAttribute("width"))/2,c=l.top-o.top,h=(t.formattedLabels&&t.formattedLabels.length>0?t.formattedLabels[r]:t.state.labels[r])+": ",d=i.sliceTotals[r]/i.grandTotal;t.tip.setValues(u,c,{name:h,value:(100*d).toFixed(1)+"%"}),t.tip.showTip()}}))}}]),i}(It),Zt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="pie",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x:this.center.y;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*i.y,c=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z\n\t\tL"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+c+" z"}(g,y,t.center,t.radius,s,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z"}(g,y,t.center,t.radius,s,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["pieSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.fill=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.fill=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("pieSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),Kt=function(t){function e(t,i){ut(this,e);var n=ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));n.type="heatmap",n.countLabel=i.countLabel||"";var s=["Sunday","Monday"],a=s.includes(i.startSubDomain)?i.startSubDomain:"Sunday";return n.startSubDomainIndex=s.indexOf(a),n.setup(),n}return dt(e,t),ct(e,[{key:"setMeasures",value:function(t){var e=this.measures;this.discreteDomains=0===t.discreteDomains?0:1,e.paddings.top=36,e.paddings.bottom=0,e.legendHeight=24,e.baseHeight=12*Rt+r(e);var i=this.data,n=this.discreteDomains?12:0;this.independentWidth=12*(U(i.start,i.end)+n)+o(e)}},{key:"updateWidth",value:function(){var t=this.discreteDomains?12:0,e=this.state.noOfWeeks?this.state.noOfWeeks:52;this.baseWidth=12*(e+t)+o(this.measures)}},{key:"prepareData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data;if(t.start&&t.end&&t.start>t.end)throw new Error("Start date cannot be greater than end date.");if(t.start||(t.start=new Date,t.start.setFullYear(t.start.getFullYear()-1)),t.end||(t.end=new Date),t.dataPoints=t.dataPoints||{},parseInt(Object.keys(t.dataPoints)[0])>1e5){var e={};Object.keys(t.dataPoints).forEach((function(i){var n=new Date(i*Ut);e[I(n)]=t.dataPoints[i]})),t.dataPoints=e}return t}},{key:"calc",value:function(){var t=this.state;t.start=R(this.data.start),t.end=R(this.data.end),t.firstWeekStart=R(t.start),t.noOfWeeks=U(t.start,t.end),t.distribution=function(t,e){for(var i=Math.max.apply(Math,mt(t)),n=1/(e-1),s=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:"",i=[t.getMonth(),t.getFullYear()],n=i[0],s=i[1],a=q(t),r={index:n,cols:[]};J(e=R(e)||G(n,s),1);for(var o=U(a,e),l=[],u=void 0,c=0;c2&&void 0!==arguments[2]&&arguments[2],n=this.state,s=R(t),a=[],r=0;r=n.start&&s<=n.end;i||s.getMonth()!==e||!l?o.yyyyMmDd=I(s):o=this.getSubDomainConfig(s),a.push(o)}return a}},{key:"getSubDomainConfig",value:function(t){var e=I(t),i=this.data.dataPoints[e];return{yyyyMmDd:e,dataValue:i||0,fill:this.colors[at(i,this.state.distribution)]}}}]),e}(jt),Qt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.barOptions=e.barOptions||{},n.lineOptions=e.lineOptions||{},n.type=e.type||"line",n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(){this.data.datasets.length<=1&&(this.config.showLegend=0,this.measures.paddings.bottom=30)}},{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),t.axisOptions=t.axisOptions||{},t.tooltipOptions=t.tooltipOptions||{},this.config.xAxisMode=t.axisOptions.xAxisMode||"span",this.config.yAxisMode=t.axisOptions.yAxisMode||"span",this.config.xIsSeries=t.axisOptions.xIsSeries||0,this.config.shortenYAxisNumbers=t.axisOptions.shortenYAxisNumbers||0,this.config.formatTooltipX=t.tooltipOptions.formatTooltipX,this.config.formatTooltipY=t.tooltipOptions.formatTooltipY,this.config.valuesOverPoints=t.valuesOverPoints}},{key:"prepareData",value:function(){return rt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data,this.type)}},{key:"prepareFirstData",value:function(){return ot(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data)}},{key:"calc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.calcXPositions(),t||this.calcYAxisParameters(this.getAllYValues(),"line"===this.type),this.makeDataByIndex()}},{key:"calcXPositions",value:function(){var t=this.state,e=this.data.labels;t.datasetLength=e.length,t.unitWidth=this.width/t.datasetLength,t.xOffset=t.unitWidth/2,t.xAxis={labels:e,positions:e.map((function(e,i){return l(t.xOffset+i*t.unitWidth)}))}}},{key:"calcYAxisParameters",value:function(t){var e=tt(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"false"),i=this.height/nt(e),n=it(e)*i,s=this.height-et(e)*n;this.state.yAxis={labels:e,positions:e.map((function(t){return s-t*i})),scaleMultiplier:i,zeroLine:s},this.calcDatasetPoints(),this.calcYExtremes(),this.calcYRegions()}},{key:"calcDatasetPoints",value:function(){var t=this.state,e=function(e){return e.map((function(e){return st(e,t.yAxis)}))};t.datasets=this.data.datasets.map((function(t,i){var n=t.values,s=t.cumulativeYs||[];return{name:t.name&&t.name.replace(/<|>|&/g,(function(t){return"&"==t?"&":"<"==t?"<":">"})),index:i,chartType:t.chartType,values:n,yPositions:e(n),cumulativeYs:s,cumulativeYPos:e(s)}}))}},{key:"calcYExtremes",value:function(){var t=this.state;this.barOptions.stacked?t.yExtremes=t.datasets[t.datasets.length-1].cumulativeYPos:(t.yExtremes=new Array(t.datasetLength).fill(9999),t.datasets.map((function(e){e.yPositions.map((function(e,i){e1&&void 0!==arguments[1]?arguments[1]:[],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=t/e.length;n<=0&&(n=1);var s=n/bt,a=void 0;if(i){var r=Math.max.apply(Math,mt(e.map((function(t){return t.length}))));a=Math.ceil(r/s)}return e.map((function(t,e){return(t+="").length>s&&(i?e%a!=0&&(t=""):t=s-3>0?t.slice(0,s-3)+" ...":t.slice(0,s)+".."),t}))}(this.width,t.xAxis.labels,this.config.xIsSeries),t.xAxis}.bind(this)],["yRegions",{width:this.width,pos:"right"},function(){return this.state.yRegions}.bind(this)]],i=this.state.datasets.filter((function(t){return"bar"===t.chartType})),n=this.state.datasets.filter((function(t){return"line"===t.chartType})),s=i.map((function(e){var n=e.index;return["barGraph-"+e.index,{index:n,color:t.colors[n],stacked:t.barOptions.stacked,valuesOverPoints:t.config.valuesOverPoints,minHeight:0*t.height},function(){var t=this.state,e=t.datasets[n],s=this.barOptions.stacked,a=this.barOptions.spaceRatio||.5,r=t.unitWidth*(1-a),o=r/(s?1:i.length),l=t.xAxis.positions.map((function(t){return t-r/2}));s||(l=l.map((function(t){return t+o*n})));var u=new Array(t.datasetLength).fill("");this.config.valuesOverPoints&&(u=s&&e.index===t.datasets.length-1?e.cumulativeYs:e.values);var c=new Array(t.datasetLength).fill(0);return s&&(c=e.yPositions.map((function(t,i){return t-e.cumulativeYPos[i]}))),{xPositions:l,yPositions:e.yPositions,offsets:c,labels:u,zeroLine:t.yAxis.zeroLine,barsWidth:r,barWidth:o}}.bind(t)]})),a=n.map((function(e){var i=e.index;return["lineGraph-"+e.index,{index:i,color:t.colors[i],svgDefs:t.svgDefs,heatline:t.lineOptions.heatline,regionFill:t.lineOptions.regionFill,spline:t.lineOptions.spline,hideDots:t.lineOptions.hideDots,hideLine:t.lineOptions.hideLine,valuesOverPoints:t.config.valuesOverPoints},function(){var t=this.state,e=t.datasets[i],n=t.yAxis.positions[0]s(n)?t.mapTooltipXPosition(o):t.tip.hideTip()}))}},{key:"mapTooltipXPosition",value:function(t){var e=this.state;if(e.yExtremes){var i=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.reduce((function(e,i){return Math.abs(i-t)=0){var n=this.dataByIndex[i];this.tip.setValues(n.xPos+this.tip.offset.x,n.yExtreme+this.tip.offset.y,{name:n.formattedLabel,value:""},n.values,i),this.tip.showTip()}}}},{key:"renderLegend",value:function(){var t=this,e=this.data;e.datasets.length>1&&(this.legendArea.textContent="",e.datasets.map((function(e,i){var n=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-bar",x:0,y:0,width:i,height:"2px",fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dy:2*Ot+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("rect",a)),o.appendChild(r),o}(100*i,"0",100,t.colors[i],e.name,t.config.truncateLegends);t.legendArea.appendChild(n)})))}},{key:"makeOverlay",value:function(){var t=this;this.init?this.init=0:(this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)})),this.overlayGuides=this.dataUnitComponents.map((function(t){return{type:t.unitType,overlay:void 0,units:t.units}})),void 0===this.state.currentIndex&&(this.state.currentIndex=this.state.datasetLength-1),this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];e.overlay=Nt[e.type](i),t.drawArea.appendChild(e.overlay)})))}},{key:"updateOverlayGuides",value:function(){this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)}))}},{key:"bindOverlay",value:function(){var t=this;this.parent.addEventListener("data-select",(function(){t.updateOverlay()}))}},{key:"bindUnits",value:function(){var t=this;this.dataUnitComponents.map((function(e){e.units.map((function(e){e.addEventListener("click",(function(){var i=e.getAttribute("data-point-index");t.setCurrentDataPoint(i)}))}))})),this.tip.container.addEventListener("click",(function(){var e=t.tip.container.getAttribute("data-point-index");t.setCurrentDataPoint(e)}))}},{key:"updateOverlay",value:function(){var t=this;this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];_t[e.type](i,e.overlay)}))}},{key:"onLeftArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex-1)}},{key:"onRightArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex+1)}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.currentIndex,e=this.state;return{index:t,label:e.xAxis.labels[t],values:e.datasets.map((function(e){return e.values[t]}))}}},{key:"setCurrentDataPoint",value:function(t){var e=this.state;(t=parseInt(t))<0&&(t=0),t>=e.xAxis.labels.length&&(t=e.xAxis.labels.length-1),t!==e.currentIndex&&(e.currentIndex=t,function(t,e,i){var n=document.createEvent("HTMLEvents");for(var s in n.initEvent(e,!0,!0),i)n[s]=i[s];t.dispatchEvent(n)}(this.parent,"data-select",this.getDataPoint()))}},{key:"addDataPoint",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.state.datasetLength;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"addDataPoint",this).call(this,t,e,n),this.data.labels.splice(n,0,t),this.data.datasets.map((function(t,i){t.values.splice(n,0,e[i])})),this.update(this.data)}},{key:"removeDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.datasetLength-1;this.data.labels.length<=1||(ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"removeDataPoint",this).call(this,t),this.data.labels.splice(t,1),this.data.datasets.map((function(e){e.values.splice(t,1)})),this.update(this.data))}},{key:"updateDataset",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.data.datasets[e].values=t,this.update(this.data)}},{key:"updateDatasets",value:function(t){this.data.datasets.map((function(e,i){t[i]&&(e.values=t[i])})),this.update(this.data)}}]),i}(jt),te=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="donut",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1,this.strokeWidth=t.strokeWidth||30}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x-this.strokeWidth/2:this.center.y-this.strokeWidth/2;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*n+o;return"M"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+"\n\t\tM"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+(i.y+t.y)}(g,y,t.center,t.radius,t.clockWise,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;return"M"+(i.x+t.x)+" "+(i.y+t.y)+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+(i.x+e.x)+" "+(i.y+e.y)}(g,y,t.center,t.radius,t.clockWise,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["donutSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors,strokeWidth:this.strokeWidth}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.stroke=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.stroke=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("donutSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),ee={bar:Qt,line:Qt,percentage:Xt,heatmap:Kt,pie:Zt,donut:te},ie=Object.freeze({Chart:function t(e,i){return ut(this,t),function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1],i=arguments[2];return"axis-mixed"===t?(i.type="line",new Qt(e,i)):ee[t]?new ee[t](e,i):void console.error("Undefined chart type: "+t)}(i.type,e,i)},PercentageChart:Xt,PieChart:Zt,Heatmap:Kt,AxisChart:Qt});return Object.assign({},{NAME:"Frappe Charts",VERSION:"1.6.2"},ie)}()}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,i),a.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n);const t=flarum.reg.get("core","admin/app");var e=i.n(t);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/components/DashboardPage");var r=i.n(a);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function l(t,e,i){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}const u=flarum.reg.get("core","admin/components/DashboardWidget");var c=i.n(u);const h=flarum.reg.get("core","common/components/LoadingIndicator");var d=i.n(h);const f=flarum.reg.get("core","common/components/Link");var p=i.n(f);const v=flarum.reg.get("core","common/utils/abbreviateNumber");var g=i.n(v);class y extends(c()){constructor(){super(...arguments),l(this,"entities",["users","discussions","posts"]),l(this,"lifetimeData",void 0),l(this,"loadingLifetime",!0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}className(){return"StatisticsWidget StatisticsWidget--mini"}content(){return m("div",{className:"StatisticsWidget-table"},m("h4",{className:"StatisticsWidget-title"},e().translator.trans("flarum-statistics.admin.statistics.mini_heading")),m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label"))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t);return m("div",{className:"StatisticsWidget-entity"},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)))}))),m("div",{className:"StatisticsWidget-viewFull"},m(p(),{href:e().route("extension",{id:"flarum-statistics"})},e().translator.trans("flarum-statistics.admin.statistics.view_full"))))}getTotalCount(t){return this.lifetimeData[t]}}flarum.reg.add("flarum-statistics","admin/components/MiniStatisticsWidget",y);const b=flarum.reg.get("core","admin/components/ExtensionPage");var x=i.n(b);const k=flarum.reg.get("core","common/components/SelectDropdown");var w=i.n(k);const D=flarum.reg.get("core","common/components/Button");var M=i.n(D);const P=flarum.reg.get("core","common/utils/extractText");var S=i.n(P);const A=flarum.reg.get("core","common/components/Placeholder");var T=i.n(A);const O=flarum.reg.get("core","common/components/Icon");var L=i.n(O);const C=flarum.reg.get("core","common/utils/classList");var N=i.n(C);const _=flarum.reg.get("core","common/utils/ItemList");var $=i.n(_);const E=flarum.reg.get("core","common/utils/generateElementId");var Y=i.n(E);const W=flarum.reg.get("core","common/components/FormModal");var z=i.n(W),H=i(860),F=i.n(H),j=i(329),I=i.n(j);F().extend(I());class R extends(z()){constructor(){super(...arguments),l(this,"state",{inputs:{startDateVal:F()().format("YYYY-MM-DD"),endDateVal:F()().format("YYYY-MM-DD")},ids:{startDate:Y()(),endDate:Y()()}})}oninit(t){super.oninit(t),this.attrs.value&&(this.state.inputs={startDateVal:F().utc(1e3*this.attrs.value.start).format("YYYY-MM-DD"),endDateVal:F().utc(1e3*this.attrs.value.end).format("YYYY-MM-DD")})}className(){return"StatisticsWidgetDateSelectionModal Modal--small"}title(){return e().translator.trans("flarum-statistics.admin.date_selection_modal.title")}content(){return m("div",{className:"Modal-body"},this.items().toArray())}items(){const t=new($());return t.add("intro",m("p",null,e().translator.trans("flarum-statistics.admin.date_selection_modal.description")),100),t.add("date_start",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.startDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.start_date")),m("input",{type:"date",id:this.state.ids.startDate,value:this.state.inputs.startDateVal,onchange:this.updateState("startDateVal"),className:"FormControl"})),90),t.add("date_end",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.endDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.end_date")),m("input",{type:"date",id:this.state.ids.endDate,value:this.state.inputs.endDateVal,onchange:this.updateState("endDateVal"),className:"FormControl"})),80),t.add("submit",m(M(),{className:"Button Button--primary",type:"submit"},e().translator.trans("flarum-statistics.admin.date_selection_modal.submit_button")),0),t}updateState(t){return e=>{this.state.inputs[t]=e.currentTarget.value}}submitData(){return{start:Math.floor(+F().utc(this.state.inputs.startDateVal+"Z")/1e3),end:Math.floor(+F().utc(this.state.inputs.endDateVal+"Z").hour(23).minute(59).second(59).millisecond(999)/1e3)}}onsubmit(t){t.preventDefault();const i=this.submitData();i.end(t[e]="unloaded",t)),{})),l(this,"loadingCustom",this.entities.reduce(((t,e)=>(t[e]="unloaded",t)),{})),l(this,"selectedEntity","users"),l(this,"selectedPeriod",void 0),l(this,"chartEntity",void 0),l(this,"chartPeriod",void 0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}async loadTimedData(t){this.loadingTimed[t]="loading",m.redraw();try{const i=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"timed",model:t}});this.timedData[t]=i,this.loadingTimed[t]="loaded";let n=new Date;n.setUTCHours(0,0,0,0);const s=n.getTime()/1e3;this.periods={today:{start:s,end:s+86400,step:3600},last_7_days:{start:s-604800,end:s,step:86400},previous_7_days:{start:s-1209600,end:s-604800,step:86400},last_28_days:{start:s-2419200,end:s,step:86400},previous_28_days:{start:s-4838400,end:s-2419200,step:86400},last_12_months:{start:s-31449600,end:s,step:604800}},this.selectedPeriod="last_7_days"}catch(e){console.error(e),this.loadingTimed[t]="fail"}m.redraw()}async loadCustomRangeData(t){this.loadingCustom[t]="loading",m.redraw();const i={...this.customPeriod};try{const n=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"custom",model:t,dateRange:{start:i.start,end:i.end}}});if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;this.customPeriodData[t]=n,this.loadingCustom[t]="loaded",m.redraw()}catch(e){if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;console.error(e),this.loadingCustom[t]="fail"}}className(){return"StatisticsWidget"}content(){var t,i;const n="loaded"!==("custom"===this.selectedPeriod?this.loadingCustom:this.loadingTimed)[this.selectedEntity],s=n?null:"custom"===this.selectedPeriod?{start:null==(t=this.customPeriod)?void 0:t.end,end:null==(i=this.customPeriod)?void 0:i.end,step:86400}:this.periods[this.selectedPeriod];return"custom"===this.selectedPeriod?this.customPeriodData[this.selectedEntity]||"unloaded"!==this.loadingCustom[this.selectedEntity]||this.loadCustomRangeData(this.selectedEntity):this.timedData[this.selectedEntity]||"unloaded"!==this.loadingTimed[this.selectedEntity]||this.loadTimedData(this.selectedEntity),m("div",{className:"StatisticsWidget-table"},m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label")),m("div",{className:"StatisticsWidget-label"},n?m(d(),{size:"small",display:"inline"}):m(w(),{disabled:n,buttonClassName:"Button Button--text",caretIcon:"fas fa-caret-down"},Object.keys(this.periods).map((t=>m(M(),{key:t,active:t===this.selectedPeriod,onclick:this.changePeriod.bind(this,t),icon:t!==this.selectedPeriod||"fas fa-check"},e().translator.trans("flarum-statistics.admin.statistics.".concat(t,"_label"))))).concat([m(M(),{key:"custom",active:"custom"===this.selectedPeriod,onclick:()=>{const t={onModalSubmit:t=>{JSON.stringify(t)!==JSON.stringify(this.customPeriod)&&(this.customPeriodData={},Object.keys(this.loadingCustom).forEach((t=>this.loadingCustom[t]="unloaded")),this.customPeriod=t,this.changePeriod("custom"))}};this.customPeriod&&(t.value=this.customPeriod),e().modal.show(R,t)},icon:"custom"!==this.selectedPeriod||"fas fa-check"},"custom"===this.selectedPeriod?S()(e().translator.trans("flarum-statistics.admin.statistics.custom_label_specified",{fromDate:F().utc(1e3*this.customPeriod.start).format("ll"),toDate:F().utc(1e3*this.customPeriod.end).format("ll")})):e().translator.trans("flarum-statistics.admin.statistics.custom_label"))])))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t),a=n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,s),r="custom"===this.selectedPeriod?null:n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,this.getLastPeriod(s)),o=n||0===r||null===r?0:(a-r)/r*100;return m("button",{className:N()("Button--ua-reset StatisticsWidget-entity",{active:this.selectedEntity===t}),onclick:this.changeEntity.bind(this,t)},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)),m("div",{className:"StatisticsWidget-period",title:a},n?m(d(),{display:"inline"}):g()(a),0!==o&&m("[",null," ",m("span",{className:"StatisticsWidget-change StatisticsWidget-change--"+(o>0?"up":"down")},m(L(),{name:"fas fa-arrow-"+(o>0?"up":"down")}),Math.abs(o).toFixed(1),"%"))))}))),m("[",null,n?m("div",{key:"loading",className:"StatisticsWidget-chart","data-loading":"true"},m(d(),{size:"large"})):m("div",{key:"loaded",className:"StatisticsWidget-chart","data-loading":"false",oncreate:this.drawChart.bind(this),onupdate:this.drawChart.bind(this)})),this.noData&&m(T(),{text:e().translator.trans("flarum-statistics.admin.statistics.no_data")}),!this.noData&&!!this.chart&&m(M(),{className:"StatisticsWidget-chartExport Button",icon:"fas fa-file-export",onclick:()=>{this.chart.export()}},e().translator.trans("flarum-statistics.admin.statistics.export_chart_button")))}drawChart(t){var i,n;if(this.chart&&this.chartEntity===this.selectedEntity&&this.chartPeriod===this.selectedPeriod)return;const s="custom"===this.selectedPeriod?{start:null==(i=this.customPeriod)?void 0:i.start,end:null==(n=this.customPeriod)?void 0:n.end,step:86400}:this.periods[this.selectedPeriod],a=s.end-s.start,r=[],o=[],l=[];for(let t=s.start;t86400&&(e+=" - "+F().unix(t+s.step-1).utc().format("D MMM"))),r.push(e),o.push(this.getPeriodCount(this.selectedEntity,{start:t,end:t+s.step})),l.push(this.getPeriodCount(this.selectedEntity,{start:t-a,end:t-a}))}if(0===o.length)return this.noData=!0,void m.redraw();this.noData=!1,m.redraw();const u={labels:r,datasets:[{name:S()(e().translator.trans("flarum-statistics.admin.statistics.current_period")),values:o},{name:S()(e().translator.trans("flarum-statistics.admin.statistics.previous_period")),values:l}]};this.chart&&16&document.compareDocumentPosition(this.chart.parent)?this.chart.update(u):this.chart=new B.Chart(t.dom,{data:u,type:"line",height:280,axisOptions:{xAxisMode:"tick",yAxisMode:"span",xIsSeries:!0},lineOptions:{hideDots:1,regionFill:1},colors:[e().forum.attribute("themePrimaryColor"),"black"]}),this.chartEntity=this.selectedEntity,this.chartPeriod=this.selectedPeriod}changeEntity(t){this.selectedEntity=t}changePeriod(t){this.selectedPeriod=t}getTotalCount(t){return this.lifetimeData[t]}getPeriodCount(t,e){const i=("custom"===this.selectedPeriod?this.customPeriodData:this.timedData)[t];let n=0;for(const t in i){const s=parseInt(t);s>=e.start&&s{(0,s.extend)(r().prototype,"availableWidgets",(function(t){t.add("statistics",m(y,null),20)})),e().extensionData.for("flarum-statistics").registerPage(q)}))})(),module.exports=n})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/statistics/js/dist/admin.js.map b/extensions/statistics/js/dist/admin.js.map index 14a62d773..8c395f134 100644 --- a/extensions/statistics/js/dist/admin.js.map +++ b/extensions/statistics/js/dist/admin.js.map @@ -1 +1 @@ -{"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/../src/js/utils/axis-chart-utils.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/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/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/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', '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', 'admin/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/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\",f=\"month\",h=\"quarter\",c=\"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()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}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(O.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.$x=t.x||{},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 O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\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 {\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","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","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: `\n\t\t\t\t
        \n\t\t\t\t
        `\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 = `${this.titleValue}${this.titleName}`;\n\t\t} else {\n\t\t\ttitle = `${this.titleName}${this.titleValue}`;\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: `${ value === 0 || value ? value : '' }\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 == '&' ? '&' : char == '<' ? '<' : '>'),\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 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(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\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(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\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', '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', 'admin/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/admin/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 app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport DashboardPage from 'flarum/admin/components/DashboardPage';\nimport MiniStatisticsWidget from './components/MiniStatisticsWidget';\nimport StatisticsPage from './components/StatisticsPage';\napp.initializers.add('flarum-statistics', () => {\n extend(DashboardPage.prototype, 'availableWidgets', function (widgets) {\n widgets.add('statistics', m(MiniStatisticsWidget, null), 20);\n });\n app.extensionData.for('flarum-statistics').registerPage(StatisticsPage);\n});"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","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","args","arguments","O","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","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","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","offsetParent","bottom","window","innerHeight","clientHeight","right","innerWidth","clientWidth","titleHeight","margins","paddings","legendHeight","parseFloat","toFixed","fill","concat","sin","Zt","cos","isNaN","isFinite","Ft","isArray","b","log10","pow","k","push","sqrt","angle","atan2","PI","reduce","ie","parseInt","createElementNS","appendChild","parentNode","insertBefore","Object","keys","map","style","textContent","setAttribute","inside","id","x1","x2","y1","y2","offset","N","className","transform","styles","stroke","j","width","height","rx","Y","fontSize","re","dy","le","textAnchor","innerHTML","B","oe","ae","V","lineType","shortenNumbers","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","ut","removeChild","setTimeout","fe","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","Pt","Tt","Lt","unshift","max","reverse","Ot","Mt","indexOf","Ct","Dt","scaleMultiplier","Et","_t","labels","datasets","chartType","Xt","yRegions","end","start","zt","yMarkers","value","label","insertAt","head","getElementsByTagName","createElement","styleSheet","cssText","createTextNode","Symbol","iterator","constructor","Ht","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","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","ne","se","ue","dot","heat_square","he","attributes","specified","nodeValue","de","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","disconnect","removeEventListener","makeContainer","updateWidth","independentWidth","tip","bindTooltip","calc","makeChartArea","setupComponents","components","drawArea","render","update","renderLegend","setupNavigation","baseWidth","getComputedStyle","paddingLeft","paddingRight","svg","C","svgDefs","titleEL","legendArea","updateTipOffset","Map","error","make","updateNav","makeOverlay","bindUnits","bindOverlay","keyActions","onEnterKey","bind","onLeftArrow","onUpArrow","onRightArrow","onDownArrow","event","keyCode","Blob","URL","createObjectURL","href","download","click","revokeObjectURL","ht","be","formatTooltipY","tooltipOptions","maxSlices","maxLegendPoints","sliceTotals","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","pos","mode","U","xAxis","G","calcLabels","labelPos","q","position","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","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","noOfWeeks","setFullYear","dataPoints","firstWeekStart","distribution","St","domainConfigs","getDomains","getDomainConfig","getCol","getSubDomainConfig","De","lineOptions","axisOptions","xAxisMode","yAxisMode","xIsSeries","shortenYAxisNumbers","formatTooltipX","calcXPositions","calcYAxisParameters","getAllYValues","makeDataByIndex","datasetLength","unitWidth","xOffset","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","input","hint","prim","toPrimitive","res","toPropertyKey","MiniStatisticsWidget","super","oncreate","vnode","loadLifetimeData","async","loadingLifetime","redraw","method","url","params","period","lifetimeData","content","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","model","loadingTimed","timedData","todayDate","setUTCHours","today","periods","step","last_7_days","previous_7_days","last_28_days","previous_28_days","last_12_months","selectedPeriod","loadingCustom","range","customPeriod","dateRange","customPeriodData","_this$customPeriod","_this$customPeriod2","loadingSelectedEntity","selectedEntity","thisPeriod","loadCustomRangeData","loadTimedData","size","disabled","buttonClassName","caretIcon","active","onclick","changePeriod","icon","dates","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","widgets","registerPage"],"sourceRoot":""} \ No newline at end of file +{"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/../src/js/utils/axis-chart-utils.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/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/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/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', '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/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\",f=\"month\",h=\"quarter\",c=\"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()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}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(O.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.$x=t.x||{},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 O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\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 {\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","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","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: `\n\t\t\t\t
          \n\t\t\t\t
          `\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 = `${this.titleValue}${this.titleName}`;\n\t\t} else {\n\t\t\ttitle = `${this.titleName}${this.titleValue}`;\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: `${ value === 0 || value ? value : '' }\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 == '&' ? '&' : char == '<' ? '<' : '>'),\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 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(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\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(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\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', '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 app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport DashboardPage from 'flarum/admin/components/DashboardPage';\nimport MiniStatisticsWidget from './components/MiniStatisticsWidget';\nimport StatisticsPage from './components/StatisticsPage';\napp.initializers.add('flarum-statistics', () => {\n extend(DashboardPage.prototype, 'availableWidgets', function (widgets) {\n widgets.add('statistics', m(MiniStatisticsWidget, null), 20);\n });\n app.extensionData.for('flarum-statistics').registerPage(StatisticsPage);\n});"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","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","args","arguments","O","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","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","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","offsetParent","bottom","window","innerHeight","clientHeight","right","innerWidth","clientWidth","titleHeight","margins","paddings","legendHeight","parseFloat","toFixed","fill","concat","sin","Zt","cos","isNaN","isFinite","Ft","isArray","b","log10","pow","k","push","sqrt","angle","atan2","PI","reduce","ie","parseInt","createElementNS","appendChild","parentNode","insertBefore","Object","keys","map","style","textContent","setAttribute","inside","id","x1","x2","y1","y2","offset","N","className","transform","styles","stroke","j","width","height","rx","Y","fontSize","re","dy","le","textAnchor","innerHTML","B","oe","ae","V","lineType","shortenNumbers","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","ut","removeChild","setTimeout","fe","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","Pt","Tt","Lt","unshift","max","reverse","Ot","Mt","indexOf","Ct","Dt","scaleMultiplier","Et","_t","labels","datasets","chartType","Xt","yRegions","end","start","zt","yMarkers","value","label","insertAt","head","getElementsByTagName","createElement","styleSheet","cssText","createTextNode","Symbol","iterator","constructor","Ht","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","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","ne","se","ue","dot","heat_square","he","attributes","specified","nodeValue","de","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","disconnect","removeEventListener","makeContainer","updateWidth","independentWidth","tip","bindTooltip","calc","makeChartArea","setupComponents","components","drawArea","render","update","renderLegend","setupNavigation","baseWidth","getComputedStyle","paddingLeft","paddingRight","svg","C","svgDefs","titleEL","legendArea","updateTipOffset","Map","error","make","updateNav","makeOverlay","bindUnits","bindOverlay","keyActions","onEnterKey","bind","onLeftArrow","onUpArrow","onRightArrow","onDownArrow","event","keyCode","Blob","URL","createObjectURL","href","download","click","revokeObjectURL","ht","be","formatTooltipY","tooltipOptions","maxSlices","maxLegendPoints","sliceTotals","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","pos","mode","U","xAxis","G","calcLabels","labelPos","q","position","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","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","noOfWeeks","setFullYear","dataPoints","firstWeekStart","distribution","St","domainConfigs","getDomains","getDomainConfig","getCol","getSubDomainConfig","De","lineOptions","axisOptions","xAxisMode","yAxisMode","xIsSeries","shortenYAxisNumbers","formatTooltipX","calcXPositions","calcYAxisParameters","getAllYValues","makeDataByIndex","datasetLength","unitWidth","xOffset","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","input","hint","prim","toPrimitive","res","toPropertyKey","MiniStatisticsWidget","super","oncreate","vnode","loadLifetimeData","async","loadingLifetime","redraw","method","url","params","period","lifetimeData","content","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","model","loadingTimed","timedData","todayDate","setUTCHours","today","periods","step","last_7_days","previous_7_days","last_28_days","previous_28_days","last_12_months","selectedPeriod","loadingCustom","range","customPeriod","dateRange","customPeriodData","_this$customPeriod","_this$customPeriod2","loadingSelectedEntity","selectedEntity","thisPeriod","loadCustomRangeData","loadTimedData","size","disabled","buttonClassName","caretIcon","active","onclick","changePeriod","icon","dates","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","widgets","registerPage"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/admin.js b/extensions/tags/js/dist/admin.js index 668be4a39..c640422ad 100644 --- a/extensions/tags/js/dist/admin.js +++ b/extensions/tags/js/dist/admin.js @@ -1,3 +1,3 @@ /*! For license information please see admin.js.LICENSE.txt */ -(()=>{var t,e,n={659:(t,e,n)=>{"use strict";n.d(e,{l:()=>Sn});const o=flarum.reg.get("core","admin/app");var r=n.n(o);const a=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),h=n(645),g=n.n(h),p=n(149),f=n.n(p),v=n(924),b=n(974),y=n(648);function w(){app.extensionData.for("flarum-tags").registerPermission({icon:"fas fa-tag",label:app.translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"},"moderate",95).registerPermission({icon:"fas fa-tags",label:app.translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"},"start",89)}const _=flarum.reg.get("core","admin/components/BasicsPage");var T=n.n(_);function S(){(0,a.extend)(T().prototype,"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const E=flarum.reg.get("core","admin/components/SettingDropdown");var D=n.n(E);const C=flarum.reg.get("core","admin/components/AdminPage");var x=n.n(C),N=n(905),O=n(433),P=n.n(O),I=(n(780),n(836)),M=n.n(I);function A(t,e){void 0===e&&(e={});const n=[],{link:o,...r}=e;return r.className=M()("TagsLabel",r.className),t?(0,y.Z)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.Z)(e,{link:o}))})):n.push((0,v.Z)()),m("span",r,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",A);class k extends(P()){constructor(){super(...arguments),(0,N.Z)(this,"tags",[]),(0,N.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||r().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(g(),{className:"Button Button--text",onclick:()=>r().modal.show((()=>n.e(162).then(n.bind(n,610))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?A(this.tags):m("span",{className:"TagLabel untagged"},r().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function L(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Y(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",k),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal");var Z=Y(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),H=Y(/Edge/i),G=Y(/firefox/i),W=Y(/safari/i)&&!Y(/chrome/i)&&!Y(/android/i),q=Y(/iP(ad|od|hone)/i),z=Y(/chrome/i)&&Y(/android/i),V={capture:!1,passive:!1};function U(t,e,n){t.addEventListener(e,n,!Z&&V)}function K(t,e,n){t.removeEventListener(e,n,!Z&&V)}function J(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function Q(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function tt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&J(t,e):J(t,e))||o&&t===n)return t;if(t===n)break}while(t=Q(t))}return null}var et,nt=/\s+/g;function ot(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(nt," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(nt," ")}}function rt(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function at(t,e){var n="";if("string"==typeof t)n=t;else do{var o=rt(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var r=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return r&&new r(n)}function it(t,e,n){if(t){var o=t.getElementsByTagName(e),r=0,a=o.length;if(n)for(;r=a:r<=a))return o;if(o===st())break;o=gt(o,!1)}return!1}function ut(t,e,n,o){for(var r=0,a=0,i=t.children;a2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,r=X(n,St);Tt.pluginEvent.bind(fe)(t,e,L({dragEl:Ct,parentEl:xt,ghostEl:Nt,rootEl:Ot,nextEl:Pt,lastDownEl:It,cloneEl:Mt,cloneHidden:At,dragStarted:qt,putSortable:jt,activeSortable:fe.active,originalEvent:o,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt,hideGhostForTarget:me,unhideGhostForTarget:he,cloneNowHidden:function(){At=!0},cloneNowShown:function(){At=!1},dispatchSortableEvent:function(t){Dt({sortable:e,name:t,originalEvent:o})}},r))};function Dt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,r=t.targetEl,a=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,h=t.putSortable,g=t.extraEventProperties;if(e=e||n&&n[yt]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||Z||H?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=r||n,p.clone=a,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=L(L({},g),Tt.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(L({putSortable:jt,cloneEl:Mt,targetEl:Ct,rootEl:Ot,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt},t))}var Ct,xt,Nt,Ot,Pt,It,Mt,At,kt,Ft,Lt,Bt,Rt,jt,Xt,Yt,Zt,Ht,Gt,Wt,qt,zt,Vt,Ut,$t,Kt=!1,Jt=!1,Qt=[],te=!1,ee=!1,ne=[],oe=!1,re=[],ae="undefined"!=typeof document,ie=q,se=H||Z?"cssFloat":"float",le=ae&&!z&&!q&&"draggable"in document.createElement("div"),ce=function(){if(ae){if(Z)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),ue=function(t,e){var n=rt(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),r=ut(t,0,e),a=ut(t,1,e),i=r&&rt(r),s=a&&rt(a),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+lt(r).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+lt(a).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(r&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!a||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return r&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[se]||a&&"none"===n[se]&&l+c>o)?"vertical":"horizontal"},de=function(t){function e(t,n){return function(o,r,a,i){var s=o.options.group.name&&r.options.group.name&&o.options.group.name===r.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,r,a,i),n)(o,r,a,i);var l=(n?o:r).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==B(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},me=function(){!ce&&Nt&&rt(Nt,"display","none")},he=function(){!ce&&Nt&&rt(Nt,"display","")};ae&&!z&&document.addEventListener("click",(function(t){if(Jt)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Jt=!1,!1}),!0);var ge=function(t){if(Ct){t=t.touches?t.touches[0]:t;var e=(r=t.clientX,a=t.clientY,Qt.some((function(t){var e=t[yt].options.emptyInsertThreshold;if(e&&!dt(t)){var n=lt(t),o=r>=n.left-e&&r<=n.right+e,s=a>=n.top-e&&a<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[yt]._onDragOver(n)}}var r,a,i},pe=function(t){Ct&&Ct.parentNode[yt]._isOutsideThisEl(t.target)};function fe(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=j({},e),t[yt]=this;var n,o,r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return ue(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==fe.supportPointer&&"PointerEvent"in window&&!W,emptyInsertThreshold:5};for(var a in Tt.initializePlugins(this,t,r),r)!(a in e)&&(e[a]=r[a]);for(var i in de(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&le,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?U(t,"pointerdown",this._onTapStart):(U(t,"mousedown",this._onTapStart),U(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(U(t,"dragover",this),U(t,"dragenter",this)),Qt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),j(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==rt(t,"display")&&t!==fe.ghost){o.push({target:t,rect:lt(t)});var e=L({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=at(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var r=!1,a=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=lt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=at(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&pt(l,s)&&!pt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),pt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(r=!0,a=Math.max(a,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),r?n=setTimeout((function(){"function"==typeof t&&t()}),a):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){rt(t,"transition",""),rt(t,"transform","");var r=at(this.el),a=r&&r.a,i=r&&r.d,s=(e.left-n.left)/(a||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,rt(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),rt(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),rt(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){rt(t,"transition",""),rt(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function ve(t,e,n,o,r,a,i,s){var l,c,u=t[yt],d=u.options.onMove;return!window.CustomEvent||Z||H?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=r||e,l.relatedRect=a||lt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function be(t){t.draggable=!1}function ye(){oe=!1}function we(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function _e(t){return setTimeout(t,0)}function Te(t){return clearTimeout(t)}fe.prototype={constructor:fe,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(zt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Ct):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,r=o.preventOnFilter,a=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){re.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&re.push(o)}}(n),!Ct&&!(/mousedown|pointerdown/.test(a)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!W||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=tt(s,o.draggable,n,!1))&&s.animated||It===s)){if(kt=mt(s),Lt=mt(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Dt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Et("filter",e,{evt:t}),void(r&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=tt(l,o.trim(),n,!1))return Dt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Et("filter",e,{evt:t}),!0}))))return void(r&&t.cancelable&&t.preventDefault());o.handle&&!tt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,r=this,a=r.el,i=r.options,s=a.ownerDocument;if(n&&!Ct&&n.parentNode===a){var l=lt(n);if(Ot=a,xt=(Ct=n).parentNode,Pt=Ct.nextSibling,It=n,Rt=i.group,fe.dragged=Ct,Xt={target:Ct,clientX:(e||t).clientX,clientY:(e||t).clientY},Gt=Xt.clientX-l.left,Wt=Xt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Ct.style["will-change"]="all",o=function(){Et("delayEnded",r,{evt:t}),fe.eventCanceled?r._onDrop():(r._disableDelayedDragEvents(),!G&&r.nativeDraggable&&(Ct.draggable=!0),r._triggerDragStart(t,e),Dt({sortable:r,name:"choose",originalEvent:t}),ot(Ct,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){it(Ct,t.trim(),be)})),U(s,"dragover",ge),U(s,"mousemove",ge),U(s,"touchmove",ge),U(s,"mouseup",r._onDrop),U(s,"touchend",r._onDrop),U(s,"touchcancel",r._onDrop),G&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Ct.draggable=!0),Et("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(H||Z))o();else{if(fe.eventCanceled)return void this._onDrop();U(s,"mouseup",r._disableDelayedDrag),U(s,"touchend",r._disableDelayedDrag),U(s,"touchcancel",r._disableDelayedDrag),U(s,"mousemove",r._delayedDragTouchMoveHandler),U(s,"touchmove",r._delayedDragTouchMoveHandler),i.supportPointer&&U(s,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Ct&&be(Ct),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._disableDelayedDrag),K(t,"touchend",this._disableDelayedDrag),K(t,"touchcancel",this._disableDelayedDrag),K(t,"mousemove",this._delayedDragTouchMoveHandler),K(t,"touchmove",this._delayedDragTouchMoveHandler),K(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?U(document,"pointermove",this._onTouchMove):U(document,e?"touchmove":"mousemove",this._onTouchMove):(U(Ct,"dragend",this),U(Ot,"dragstart",this._onDragStart));try{document.selection?_e((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(Kt=!1,Ot&&Ct){Et("dragStarted",this,{evt:e}),this.nativeDraggable&&U(document,"dragover",pe);var n=this.options;!t&&ot(Ct,n.dragClass,!1),ot(Ct,n.ghostClass,!0),fe.active=this,t&&this._appendGhost(),Dt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(Yt){this._lastX=Yt.clientX,this._lastY=Yt.clientY,me();for(var t=document.elementFromPoint(Yt.clientX,Yt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Yt.clientX,Yt.clientY))!==e;)e=t;if(Ct.parentNode[yt]._isOutsideThisEl(t),e)do{if(e[yt]&&e[yt]._onDragOver({clientX:Yt.clientX,clientY:Yt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);he()}},_onTouchMove:function(t){if(Xt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,r=t.touches?t.touches[0]:t,a=Nt&&at(Nt,!0),i=Nt&&a&&a.a,s=Nt&&a&&a.d,l=ie&&$t&&ht($t),c=(r.clientX-Xt.clientX+o.x)/(i||1)+(l?l[0]-ne[0]:0)/(i||1),u=(r.clientY-Xt.clientY+o.y)/(s||1)+(l?l[1]-ne[1]:0)/(s||1);if(!fe.active&&!Kt){if(n&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(t,r,this)&&!p.animated){if(p===Ct)return I(!1);if(p&&a===t.target&&(i=p),i&&(n=lt(i)),!1!==ve(Ot,a,Ct,e,i,n,t,!!i))return P(),p&&p.nextSibling?a.insertBefore(Ct,p.nextSibling):a.appendChild(Ct),xt=a,M(),I(!0)}else if(p&&function(t,e,n){var o=lt(ut(n.el,0,n.options,!0));return e?t.clientXu+c*a/2:ld-Ut)return-Vt}else if(l>u+c*(1-r)/2&&ld-c*a/2)?l>u+c/2?1:-1:0}(t,i,n,r,_?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,ee,zt===i),0!==v){var D=mt(Ct);do{D-=v,y=xt.children[D]}while(y&&("none"===rt(y,"display")||y===Nt))}if(0===v||y===i)return I(!1);zt=i,Vt=v;var C=i.nextElementSibling,x=!1,N=ve(Ot,a,Ct,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),oe=!0,setTimeout(ye,30),P(),x&&!C?a.appendChild(Ct):i.parentNode.insertBefore(Ct,x?C:i),S&&vt(S,0,E-S.scrollTop),xt=Ct.parentNode,void 0===b||ee||(Ut=Math.abs(b-lt(i)[T])),M(),I(!0)}if(a.contains(Ct))return I(!1)}return!1}function O(s,l){Et(s,h,L({evt:t,isOwner:u,axis:r?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return ve(Ot,a,Ct,e,n,lt(n),t,o)},changed:M},l))}function P(){O("dragOverAnimationCapture"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function I(e){return O("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(h),h!==m&&(ot(Ct,jt?jt.options.ghostClass:c.options.ghostClass,!1),ot(Ct,s.ghostClass,!0)),jt!==h&&h!==fe.active?jt=h:h===fe.active&&jt&&(jt=null),m===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){O("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Ct&&!Ct.animated||i===a&&!i.animated)&&(zt=null),s.dragoverBubble||t.rootEl||i===document||(Ct.parentNode[yt]._isOutsideThisEl(t.target),!e&&ge(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function M(){Ft=mt(Ct),Bt=mt(Ct,s.draggable),Dt({sortable:h,name:"change",toEl:a,newIndex:Ft,newDraggableIndex:Bt,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){K(document,"mousemove",this._onTouchMove),K(document,"touchmove",this._onTouchMove),K(document,"pointermove",this._onTouchMove),K(document,"dragover",ge),K(document,"mousemove",ge),K(document,"touchmove",ge)},_offUpEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._onDrop),K(t,"touchend",this._onDrop),K(t,"pointerup",this._onDrop),K(t,"touchcancel",this._onDrop),K(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;Ft=mt(Ct),Bt=mt(Ct,n.draggable),Et("drop",this,{evt:t}),xt=Ct&&Ct.parentNode,Ft=mt(Ct),Bt=mt(Ct,n.draggable),fe.eventCanceled||(Kt=!1,ee=!1,te=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Te(this.cloneId),Te(this._dragStartId),this.nativeDraggable&&(K(document,"drop",this),K(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),W&&rt(document.body,"user-select",""),rt(Ct,"transform",""),t&&(qt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Nt&&Nt.parentNode&&Nt.parentNode.removeChild(Nt),(Ot===xt||jt&&"clone"!==jt.lastPutMode)&&Mt&&Mt.parentNode&&Mt.parentNode.removeChild(Mt),Ct&&(this.nativeDraggable&&K(Ct,"dragend",this),be(Ct),Ct.style["will-change"]="",qt&&!Kt&&ot(Ct,jt?jt.options.ghostClass:this.options.ghostClass,!1),ot(Ct,this.options.chosenClass,!1),Dt({sortable:this,name:"unchoose",toEl:xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),Ot!==xt?(Ft>=0&&(Dt({rootEl:xt,name:"add",toEl:xt,fromEl:Ot,originalEvent:t}),Dt({sortable:this,name:"remove",toEl:xt,originalEvent:t}),Dt({rootEl:xt,name:"sort",toEl:xt,fromEl:Ot,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),jt&&jt.save()):Ft!==kt&&Ft>=0&&(Dt({sortable:this,name:"update",toEl:xt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),fe.active&&(null!=Ft&&-1!==Ft||(Ft=kt,Bt=Lt),Dt({sortable:this,name:"end",toEl:xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Et("nulling",this),Ot=Ct=xt=Nt=Pt=Mt=It=At=Xt=Yt=qt=Ft=Bt=kt=Lt=zt=Vt=jt=Rt=fe.dragged=fe.ghost=fe.clone=fe.active=null,re.forEach((function(t){t.checked=!0})),re.length=Zt=Ht=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Ct&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,r=n.length,a=this.options;o{const e=t.target;this.name(e.value),this.slug((0,$e.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(ze(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),r().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(g(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},r().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),primary:this.primary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(tn()(r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=r().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1},relationships:{parent:null}}))),m.redraw()})),this.hide()}}}flarum.reg.add("flarum-tags","admin/components/EditTagModal",en);class nn{constructor(){(0,N.Z)(this,"element",void 0),(0,N.Z)(this,"attrs",void 0),(0,N.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}function on(t){var e,n,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;er().modal.show(en,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(r().store.all("tags")).filter((e=>e.parent()===t)).map(cn)))}flarum.reg.add("flarum-tags","../../../../framework/core/js/src/admin/components/FormSectionGroup",sn);class un extends(je()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,r().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),a=(0,y.Z)(r().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(sn,null,m(ln,{className:"TagGroup",label:r().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},a.filter((t=>null!==t.position()&&!t.isChild())).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!0})},r().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(ln,{className:"TagGroup TagGroup--secondary",label:r().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},a.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!1})},r().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(ln,{label:r().translator.trans("flarum-tags.admin.tags.settings_heading")},m(He(),null,m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:Ye()("value",this.setMinTags.bind(this,t,e))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:Ye()("value",this.setMinTags.bind(this,n,o))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,r().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Be.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&r().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=r().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{r().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),r().request({url:r().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",un);var dn=n(351),mn=n.n(dn);class hn{constructor(){(0,N.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(mn().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),mn().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",hn);const gn=flarum.reg.get("core","common/extenders");var pn=n.n(gn);const fn=flarum.reg.get("core","common/utils/computed");var vn=n.n(fn);const bn=flarum.reg.get("core","common/Model");var yn=n.n(bn);class wn extends(yn()){name(){return yn().attribute("name").call(this)}slug(){return yn().attribute("slug").call(this)}description(){return yn().attribute("description").call(this)}color(){return yn().attribute("color").call(this)}backgroundUrl(){return yn().attribute("backgroundUrl").call(this)}backgroundMode(){return yn().attribute("backgroundMode").call(this)}icon(){return yn().attribute("icon").call(this)}position(){return yn().attribute("position").call(this)}parent(){return yn().hasOne("parent").call(this)}children(){return yn().hasMany("children").call(this)}defaultSort(){return yn().attribute("defaultSort").call(this)}isChild(){return yn().attribute("isChild").call(this)}isHidden(){return yn().attribute("isHidden").call(this)}discussionCount(){return yn().attribute("discussionCount").call(this)}lastPostedAt(){return yn().attribute("lastPostedAt",yn().transformDate).call(this)}lastPostedDiscussion(){return yn().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return yn().attribute("isRestricted").call(this)}canStartDiscussion(){return yn().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return yn().attribute("canAddToDiscussion").call(this)}isPrimary(){return vn()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",wn);const _n=flarum.reg.get("core","common/query/IGambit");class Tn extends _n.KeyValueGambit{constructor(){super(...arguments),(0,N.Z)(this,"predicates",!0)}key(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",Tn);const Sn=[(new(pn().Store)).add("tags",wn),(new(pn().Search)).gambit("discussions",Tn)];r().initializers.add("flarum-tags",(t=>{t.tagList=new hn,t.extensionData.for("flarum-tags").registerPage(un),(0,a.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,a.extend)(s().prototype,"oncreate",(function(){r().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,a.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,a.override)(r(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,a.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(r().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.Z)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:"tag".concat(e.id(),".").concat(t.permission),allowGuest:t.allowGuest}):null})))})),(0,a.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(r().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:r().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(g(),{icon:!0,onclick:()=>t.save({isRestricted:!0})},[(0,b.Z)(t,{className:"Button-icon"})," ",t.name()])))))})),w(),S(),(0,a.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:r().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(r().data.settings.allow_tag_change,10);return m(D(),{defaultLabel:t?r().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:r().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:r().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,a.extend)(x().prototype,"customSettingComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(k,Object.assign({},t,{settingValue:this.settings[t.setting]}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var o=n(836),r=n.n(o);function a(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:a=!0}=n;return e.className=r()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&a?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",a)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var o=n(780),r=n.n(o),a=n(678),i=n.n(a),s=n(836),l=n.n(s),c=n(679),u=n.n(c),d=n(974);function h(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=r()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",h)},270:()=>{},648:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const r=t.parent(),a=e.parent();return r===a?n-o:r&&a?r.position()-a.position():r?r===e?1:r.position()-o:a?a===t?-1:n-a.position():0}))}n.d(e,{Z:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},905:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function r(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e);if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{Z:()=>r})}},o={};function r(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return n[t](a,a.exports,r),a.exports}r.m=n,r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.f={},r.e=t=>Promise.all(Object.keys(r.f).reduce(((e,n)=>(r.f[n](t,e),e)),[])),r.u=t=>"common/components/TagSelectionModal.js",r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",r.l=(n,o,a,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var r=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((t=>t(o))),e)return e(o)},h=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.f.compat=(t,e)=>{const n=r.l;r.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};r.f.j=(e,n)=>{var o=r.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var a=new Promise(((n,r)=>o=t[e]=[n,r]));n.push(o[2]=a);var i=r.p+r.u(e),s=new Error;r.l(i,(n=>{if(r.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var a=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,a,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);l&&l(r)}for(e&&e(n);c{"use strict";r.r(a),r.d(a,{extend:()=>n.l});var t=r(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);r.d(a,e);var n=r(659)})(),module.exports=a})(); +(()=>{var t,e,n={110:(t,e,n)=>{"use strict";n.d(e,{l:()=>Sn});const o=flarum.reg.get("core","admin/app");var r=n.n(o);const a=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),h=n(645),g=n.n(h),p=n(149),f=n.n(p),v=n(924),b=n(974),y=n(648);function w(){app.extensionData.for("flarum-tags").registerPermission({icon:"fas fa-tag",label:app.translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"},"moderate",95).registerPermission({icon:"fas fa-tags",label:app.translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"},"start",89)}const _=flarum.reg.get("core","admin/components/BasicsPage");var T=n.n(_);function S(){(0,a.extend)(T().prototype,"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const E=flarum.reg.get("core","admin/components/SettingDropdown");var D=n.n(E),C=n(905),x=n(433),N=n.n(x),O=(n(780),n(836)),P=n.n(O);function I(t,e){void 0===e&&(e={});const n=[],{link:o,...r}=e;return r.className=P()("TagsLabel",r.className),t?(0,y.Z)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.Z)(e,{link:o}))})):n.push((0,v.Z)()),m("span",r,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",I);class M extends(N()){constructor(){super(...arguments),(0,C.Z)(this,"tags",[]),(0,C.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||r().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(g(),{className:"Button Button--text",onclick:()=>r().modal.show((()=>n.e(162).then(n.bind(n,610))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?I(this.tags):m("span",{className:"TagLabel untagged"},r().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",M),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal");const A=flarum.reg.get("core","common/components/FormGroup");var k=n.n(A);function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function L(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Y(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var Z=Y(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),H=Y(/Edge/i),G=Y(/firefox/i),W=Y(/safari/i)&&!Y(/chrome/i)&&!Y(/android/i),q=Y(/iP(ad|od|hone)/i),z=Y(/chrome/i)&&Y(/android/i),V={capture:!1,passive:!1};function U(t,e,n){t.addEventListener(e,n,!Z&&V)}function K(t,e,n){t.removeEventListener(e,n,!Z&&V)}function J(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function Q(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function tt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&J(t,e):J(t,e))||o&&t===n)return t;if(t===n)break}while(t=Q(t))}return null}var et,nt=/\s+/g;function ot(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(nt," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(nt," ")}}function rt(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function at(t,e){var n="";if("string"==typeof t)n=t;else do{var o=rt(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var r=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return r&&new r(n)}function it(t,e,n){if(t){var o=t.getElementsByTagName(e),r=0,a=o.length;if(n)for(;r=a:r<=a))return o;if(o===st())break;o=gt(o,!1)}return!1}function ut(t,e,n,o){for(var r=0,a=0,i=t.children;a2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,r=X(n,St);Tt.pluginEvent.bind(fe)(t,e,L({dragEl:Ct,parentEl:xt,ghostEl:Nt,rootEl:Ot,nextEl:Pt,lastDownEl:It,cloneEl:Mt,cloneHidden:At,dragStarted:qt,putSortable:jt,activeSortable:fe.active,originalEvent:o,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt,hideGhostForTarget:me,unhideGhostForTarget:he,cloneNowHidden:function(){At=!0},cloneNowShown:function(){At=!1},dispatchSortableEvent:function(t){Dt({sortable:e,name:t,originalEvent:o})}},r))};function Dt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,r=t.targetEl,a=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,h=t.putSortable,g=t.extraEventProperties;if(e=e||n&&n[yt]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||Z||H?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=r||n,p.clone=a,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=L(L({},g),Tt.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(L({putSortable:jt,cloneEl:Mt,targetEl:Ct,rootEl:Ot,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt},t))}var Ct,xt,Nt,Ot,Pt,It,Mt,At,kt,Ft,Lt,Bt,Rt,jt,Xt,Yt,Zt,Ht,Gt,Wt,qt,zt,Vt,Ut,$t,Kt=!1,Jt=!1,Qt=[],te=!1,ee=!1,ne=[],oe=!1,re=[],ae="undefined"!=typeof document,ie=q,se=H||Z?"cssFloat":"float",le=ae&&!z&&!q&&"draggable"in document.createElement("div"),ce=function(){if(ae){if(Z)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),ue=function(t,e){var n=rt(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),r=ut(t,0,e),a=ut(t,1,e),i=r&&rt(r),s=a&&rt(a),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+lt(r).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+lt(a).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(r&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!a||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return r&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[se]||a&&"none"===n[se]&&l+c>o)?"vertical":"horizontal"},de=function(t){function e(t,n){return function(o,r,a,i){var s=o.options.group.name&&r.options.group.name&&o.options.group.name===r.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,r,a,i),n)(o,r,a,i);var l=(n?o:r).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==B(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},me=function(){!ce&&Nt&&rt(Nt,"display","none")},he=function(){!ce&&Nt&&rt(Nt,"display","")};ae&&!z&&document.addEventListener("click",(function(t){if(Jt)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Jt=!1,!1}),!0);var ge=function(t){if(Ct){t=t.touches?t.touches[0]:t;var e=(r=t.clientX,a=t.clientY,Qt.some((function(t){var e=t[yt].options.emptyInsertThreshold;if(e&&!dt(t)){var n=lt(t),o=r>=n.left-e&&r<=n.right+e,s=a>=n.top-e&&a<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[yt]._onDragOver(n)}}var r,a,i},pe=function(t){Ct&&Ct.parentNode[yt]._isOutsideThisEl(t.target)};function fe(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=j({},e),t[yt]=this;var n,o,r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return ue(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==fe.supportPointer&&"PointerEvent"in window&&!W,emptyInsertThreshold:5};for(var a in Tt.initializePlugins(this,t,r),r)!(a in e)&&(e[a]=r[a]);for(var i in de(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&le,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?U(t,"pointerdown",this._onTapStart):(U(t,"mousedown",this._onTapStart),U(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(U(t,"dragover",this),U(t,"dragenter",this)),Qt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),j(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==rt(t,"display")&&t!==fe.ghost){o.push({target:t,rect:lt(t)});var e=L({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=at(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var r=!1,a=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=lt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=at(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&pt(l,s)&&!pt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),pt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(r=!0,a=Math.max(a,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),r?n=setTimeout((function(){"function"==typeof t&&t()}),a):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){rt(t,"transition",""),rt(t,"transform","");var r=at(this.el),a=r&&r.a,i=r&&r.d,s=(e.left-n.left)/(a||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,rt(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),rt(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),rt(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){rt(t,"transition",""),rt(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function ve(t,e,n,o,r,a,i,s){var l,c,u=t[yt],d=u.options.onMove;return!window.CustomEvent||Z||H?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=r||e,l.relatedRect=a||lt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function be(t){t.draggable=!1}function ye(){oe=!1}function we(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function _e(t){return setTimeout(t,0)}function Te(t){return clearTimeout(t)}fe.prototype={constructor:fe,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(zt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Ct):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,r=o.preventOnFilter,a=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){re.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&re.push(o)}}(n),!Ct&&!(/mousedown|pointerdown/.test(a)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!W||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=tt(s,o.draggable,n,!1))&&s.animated||It===s)){if(kt=mt(s),Lt=mt(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Dt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Et("filter",e,{evt:t}),void(r&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=tt(l,o.trim(),n,!1))return Dt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Et("filter",e,{evt:t}),!0}))))return void(r&&t.cancelable&&t.preventDefault());o.handle&&!tt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,r=this,a=r.el,i=r.options,s=a.ownerDocument;if(n&&!Ct&&n.parentNode===a){var l=lt(n);if(Ot=a,xt=(Ct=n).parentNode,Pt=Ct.nextSibling,It=n,Rt=i.group,fe.dragged=Ct,Xt={target:Ct,clientX:(e||t).clientX,clientY:(e||t).clientY},Gt=Xt.clientX-l.left,Wt=Xt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Ct.style["will-change"]="all",o=function(){Et("delayEnded",r,{evt:t}),fe.eventCanceled?r._onDrop():(r._disableDelayedDragEvents(),!G&&r.nativeDraggable&&(Ct.draggable=!0),r._triggerDragStart(t,e),Dt({sortable:r,name:"choose",originalEvent:t}),ot(Ct,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){it(Ct,t.trim(),be)})),U(s,"dragover",ge),U(s,"mousemove",ge),U(s,"touchmove",ge),U(s,"mouseup",r._onDrop),U(s,"touchend",r._onDrop),U(s,"touchcancel",r._onDrop),G&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Ct.draggable=!0),Et("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(H||Z))o();else{if(fe.eventCanceled)return void this._onDrop();U(s,"mouseup",r._disableDelayedDrag),U(s,"touchend",r._disableDelayedDrag),U(s,"touchcancel",r._disableDelayedDrag),U(s,"mousemove",r._delayedDragTouchMoveHandler),U(s,"touchmove",r._delayedDragTouchMoveHandler),i.supportPointer&&U(s,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Ct&&be(Ct),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._disableDelayedDrag),K(t,"touchend",this._disableDelayedDrag),K(t,"touchcancel",this._disableDelayedDrag),K(t,"mousemove",this._delayedDragTouchMoveHandler),K(t,"touchmove",this._delayedDragTouchMoveHandler),K(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?U(document,"pointermove",this._onTouchMove):U(document,e?"touchmove":"mousemove",this._onTouchMove):(U(Ct,"dragend",this),U(Ot,"dragstart",this._onDragStart));try{document.selection?_e((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(Kt=!1,Ot&&Ct){Et("dragStarted",this,{evt:e}),this.nativeDraggable&&U(document,"dragover",pe);var n=this.options;!t&&ot(Ct,n.dragClass,!1),ot(Ct,n.ghostClass,!0),fe.active=this,t&&this._appendGhost(),Dt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(Yt){this._lastX=Yt.clientX,this._lastY=Yt.clientY,me();for(var t=document.elementFromPoint(Yt.clientX,Yt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Yt.clientX,Yt.clientY))!==e;)e=t;if(Ct.parentNode[yt]._isOutsideThisEl(t),e)do{if(e[yt]&&e[yt]._onDragOver({clientX:Yt.clientX,clientY:Yt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);he()}},_onTouchMove:function(t){if(Xt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,r=t.touches?t.touches[0]:t,a=Nt&&at(Nt,!0),i=Nt&&a&&a.a,s=Nt&&a&&a.d,l=ie&&$t&&ht($t),c=(r.clientX-Xt.clientX+o.x)/(i||1)+(l?l[0]-ne[0]:0)/(i||1),u=(r.clientY-Xt.clientY+o.y)/(s||1)+(l?l[1]-ne[1]:0)/(s||1);if(!fe.active&&!Kt){if(n&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(t,r,this)&&!p.animated){if(p===Ct)return I(!1);if(p&&a===t.target&&(i=p),i&&(n=lt(i)),!1!==ve(Ot,a,Ct,e,i,n,t,!!i))return P(),p&&p.nextSibling?a.insertBefore(Ct,p.nextSibling):a.appendChild(Ct),xt=a,M(),I(!0)}else if(p&&function(t,e,n){var o=lt(ut(n.el,0,n.options,!0));return e?t.clientXu+c*a/2:ld-Ut)return-Vt}else if(l>u+c*(1-r)/2&&ld-c*a/2)?l>u+c/2?1:-1:0}(t,i,n,r,_?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,ee,zt===i),0!==v){var D=mt(Ct);do{D-=v,y=xt.children[D]}while(y&&("none"===rt(y,"display")||y===Nt))}if(0===v||y===i)return I(!1);zt=i,Vt=v;var C=i.nextElementSibling,x=!1,N=ve(Ot,a,Ct,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),oe=!0,setTimeout(ye,30),P(),x&&!C?a.appendChild(Ct):i.parentNode.insertBefore(Ct,x?C:i),S&&vt(S,0,E-S.scrollTop),xt=Ct.parentNode,void 0===b||ee||(Ut=Math.abs(b-lt(i)[T])),M(),I(!0)}if(a.contains(Ct))return I(!1)}return!1}function O(s,l){Et(s,h,L({evt:t,isOwner:u,axis:r?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return ve(Ot,a,Ct,e,n,lt(n),t,o)},changed:M},l))}function P(){O("dragOverAnimationCapture"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function I(e){return O("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(h),h!==m&&(ot(Ct,jt?jt.options.ghostClass:c.options.ghostClass,!1),ot(Ct,s.ghostClass,!0)),jt!==h&&h!==fe.active?jt=h:h===fe.active&&jt&&(jt=null),m===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){O("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Ct&&!Ct.animated||i===a&&!i.animated)&&(zt=null),s.dragoverBubble||t.rootEl||i===document||(Ct.parentNode[yt]._isOutsideThisEl(t.target),!e&&ge(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function M(){Ft=mt(Ct),Bt=mt(Ct,s.draggable),Dt({sortable:h,name:"change",toEl:a,newIndex:Ft,newDraggableIndex:Bt,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){K(document,"mousemove",this._onTouchMove),K(document,"touchmove",this._onTouchMove),K(document,"pointermove",this._onTouchMove),K(document,"dragover",ge),K(document,"mousemove",ge),K(document,"touchmove",ge)},_offUpEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._onDrop),K(t,"touchend",this._onDrop),K(t,"pointerup",this._onDrop),K(t,"touchcancel",this._onDrop),K(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;Ft=mt(Ct),Bt=mt(Ct,n.draggable),Et("drop",this,{evt:t}),xt=Ct&&Ct.parentNode,Ft=mt(Ct),Bt=mt(Ct,n.draggable),fe.eventCanceled||(Kt=!1,ee=!1,te=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Te(this.cloneId),Te(this._dragStartId),this.nativeDraggable&&(K(document,"drop",this),K(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),W&&rt(document.body,"user-select",""),rt(Ct,"transform",""),t&&(qt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Nt&&Nt.parentNode&&Nt.parentNode.removeChild(Nt),(Ot===xt||jt&&"clone"!==jt.lastPutMode)&&Mt&&Mt.parentNode&&Mt.parentNode.removeChild(Mt),Ct&&(this.nativeDraggable&&K(Ct,"dragend",this),be(Ct),Ct.style["will-change"]="",qt&&!Kt&&ot(Ct,jt?jt.options.ghostClass:this.options.ghostClass,!1),ot(Ct,this.options.chosenClass,!1),Dt({sortable:this,name:"unchoose",toEl:xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),Ot!==xt?(Ft>=0&&(Dt({rootEl:xt,name:"add",toEl:xt,fromEl:Ot,originalEvent:t}),Dt({sortable:this,name:"remove",toEl:xt,originalEvent:t}),Dt({rootEl:xt,name:"sort",toEl:xt,fromEl:Ot,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),jt&&jt.save()):Ft!==kt&&Ft>=0&&(Dt({sortable:this,name:"update",toEl:xt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),fe.active&&(null!=Ft&&-1!==Ft||(Ft=kt,Bt=Lt),Dt({sortable:this,name:"end",toEl:xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Et("nulling",this),Ot=Ct=xt=Nt=Pt=Mt=It=At=Xt=Yt=qt=Ft=Bt=kt=Lt=zt=Vt=jt=Rt=fe.dragged=fe.ghost=fe.clone=fe.active=null,re.forEach((function(t){t.checked=!0})),re.length=Zt=Ht=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Ct&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,r=n.length,a=this.options;o{const e=t.target;this.name(e.value),this.slug((0,$e.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(ze(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),r().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(g(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},r().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),primary:this.primary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(tn()(r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=r().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1},relationships:{parent:null}}))),m.redraw()})),this.hide()}}}flarum.reg.add("flarum-tags","admin/components/EditTagModal",en);class nn{constructor(){(0,C.Z)(this,"element",void 0),(0,C.Z)(this,"attrs",void 0),(0,C.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}function on(t){var e,n,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;er().modal.show(en,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(r().store.all("tags")).filter((e=>e.parent()===t)).map(cn)))}flarum.reg.add("flarum-tags","../../../../framework/core/js/src/admin/components/FormSectionGroup",sn);class un extends(je()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,r().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),a=(0,y.Z)(r().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(sn,null,m(ln,{className:"TagGroup",label:r().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},a.filter((t=>null!==t.position()&&!t.isChild())).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!0})},r().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(ln,{className:"TagGroup TagGroup--secondary",label:r().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},a.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!1})},r().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(ln,{label:r().translator.trans("flarum-tags.admin.tags.settings_heading")},m(He(),null,m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:Ye()("value",this.setMinTags.bind(this,t,e))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:Ye()("value",this.setMinTags.bind(this,n,o))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,r().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Be.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&r().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=r().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{r().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),r().request({url:r().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",un);var dn=n(351),mn=n.n(dn);class hn{constructor(){(0,C.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(mn().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),mn().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",hn);const gn=flarum.reg.get("core","common/extenders");var pn=n.n(gn);const fn=flarum.reg.get("core","common/utils/computed");var vn=n.n(fn);const bn=flarum.reg.get("core","common/Model");var yn=n.n(bn);class wn extends(yn()){name(){return yn().attribute("name").call(this)}slug(){return yn().attribute("slug").call(this)}description(){return yn().attribute("description").call(this)}color(){return yn().attribute("color").call(this)}backgroundUrl(){return yn().attribute("backgroundUrl").call(this)}backgroundMode(){return yn().attribute("backgroundMode").call(this)}icon(){return yn().attribute("icon").call(this)}position(){return yn().attribute("position").call(this)}parent(){return yn().hasOne("parent").call(this)}children(){return yn().hasMany("children").call(this)}defaultSort(){return yn().attribute("defaultSort").call(this)}isChild(){return yn().attribute("isChild").call(this)}isHidden(){return yn().attribute("isHidden").call(this)}discussionCount(){return yn().attribute("discussionCount").call(this)}lastPostedAt(){return yn().attribute("lastPostedAt",yn().transformDate).call(this)}lastPostedDiscussion(){return yn().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return yn().attribute("isRestricted").call(this)}canStartDiscussion(){return yn().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return yn().attribute("canAddToDiscussion").call(this)}isPrimary(){return vn()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",wn);const _n=flarum.reg.get("core","common/query/IGambit");class Tn extends _n.KeyValueGambit{constructor(){super(...arguments),(0,C.Z)(this,"predicates",!0)}key(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",Tn);const Sn=[(new(pn().Store)).add("tags",wn),(new(pn().Search)).gambit("discussions",Tn)];r().initializers.add("flarum-tags",(t=>{t.tagList=new hn,t.extensionData.for("flarum-tags").registerPage(un),(0,a.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,a.extend)(s().prototype,"oncreate",(function(){r().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,a.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,a.override)(r(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,a.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(r().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.Z)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:"tag".concat(e.id(),".").concat(t.permission),allowGuest:t.allowGuest}):null})))})),(0,a.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(r().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:r().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(g(),{icon:!0,onclick:()=>t.save({isRestricted:!0})},[(0,b.Z)(t,{className:"Button-icon"})," ",t.name()])))))})),w(),S(),(0,a.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:r().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(r().data.settings.allow_tag_change,10);return m(D(),{defaultLabel:t?r().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:r().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:r().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,a.extend)(k().prototype,"customFieldComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(M,Object.assign({},t,{settingValue:t.bidi}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var o=n(836),r=n.n(o);function a(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:a=!0}=n;return e.className=r()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&a?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",a)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var o=n(780),r=n.n(o),a=n(678),i=n.n(a),s=n(836),l=n.n(s),c=n(679),u=n.n(c),d=n(974);function h(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=r()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",h)},270:()=>{},648:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const r=t.parent(),a=e.parent();return r===a?n-o:r&&a?r.position()-a.position():r?r===e?1:r.position()-o:a?a===t?-1:n-a.position():0}))}n.d(e,{Z:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},905:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function r(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e);if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{Z:()=>r})}},o={};function r(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return n[t](a,a.exports,r),a.exports}r.m=n,r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.f={},r.e=t=>Promise.all(Object.keys(r.f).reduce(((e,n)=>(r.f[n](t,e),e)),[])),r.u=t=>"common/components/TagSelectionModal.js",r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",r.l=(n,o,a,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var r=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((t=>t(o))),e)return e(o)},h=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.f.compat=(t,e)=>{const n=r.l;r.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};r.f.j=(e,n)=>{var o=r.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var a=new Promise(((n,r)=>o=t[e]=[n,r]));n.push(o[2]=a);var i=r.p+r.u(e),s=new Error;r.l(i,(n=>{if(r.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var a=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,a,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);l&&l(r)}for(e&&e(n);c{"use strict";r.r(a),r.d(a,{extend:()=>n.l});var t=r(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);r.d(a,e);var n=r(110)})(),module.exports=a})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/admin.js.map b/extensions/tags/js/dist/admin.js.map index a3a391115..23f12dbac 100644 --- a/extensions/tags/js/dist/admin.js.map +++ b/extensions/tags/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/./src/admin/addTagPermission.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/AdminPage')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/../../../framework/core/js/src/common/Component.ts","webpack://@flarum/tags/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/tags/../../../framework/core/js/src/common/utils/classList.ts","webpack://@flarum/tags/../../../framework/core/js/src/admin/components/FormSectionGroup.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\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/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","export default function () {\n app.extensionData.for('flarum-tags').registerPermission({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n }, 'moderate', 95).registerPermission({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n }, 'start', 89);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage.prototype, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/AdminPage');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('162', '610', 'flarum-tags', 'common/components/TagSelectionModal');","/**!\n * Sortable 1.15.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\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\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"primary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.primary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: \"https://fontawesome.com/icons?m=free\",\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n primary: this.primary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n },\n // @deprecated. Temporary hack for type safety, remove before v1.3.\n relationships: {\n parent: null\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Component` class defines a user interface 'building block'. A component\n * generates a virtual DOM to be rendered on each redraw.\n *\n * Essentially, this is a wrapper for Mithril's components that adds several useful features:\n *\n * - In the `oninit` and `onbeforeupdate` lifecycle hooks, we store vnode attrs in `this.attrs.\n * This allows us to use attrs across components without having to pass the vnode to every single\n * method.\n * - The static `initAttrs` method allows a convenient way to provide defaults (or to otherwise modify)\n * the attrs that have been passed into a component.\n * - When the component is created in the DOM, we store its DOM element under `this.element`; this lets\n * us use jQuery to modify child DOM state from internal methods via the `this.$()` method.\n * - A convenience `component` method, which serves as an alternative to hyperscript and JSX.\n *\n * As with other Mithril components, components extending Component can be initialized\n * and nested using JSX, hyperscript, or a combination of both. The `component` method can also\n * be used.\n *\n * @example\n * return m('div',

          Hello World

          );\n *\n * @example\n * return m('div', MyComponent.component({foo: 'bar'), m('p', 'Hello World!'));\n *\n * @see https://mithril.js.org/components.html\n */\nexport default class Component {\n constructor() {\n /**\n * The root DOM element for the component.\n */\n _defineProperty(this, \"element\", void 0);\n /**\n * The attributes passed into the component.\n *\n * @see https://mithril.js.org/components.html#passing-data-to-components\n */\n _defineProperty(this, \"attrs\", void 0);\n /**\n * Class component state that is persisted between redraws.\n *\n * Updating this will **not** automatically trigger a redraw, unlike\n * other frameworks.\n *\n * This is different to Vnode state, which is always an instance of your\n * class component.\n *\n * This is `undefined` by default.\n */\n _defineProperty(this, \"state\", void 0);\n }\n /**\n * @inheritdoc\n */\n /**\n * @inheritdoc\n */\n oninit(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n oncreate(vnode) {\n this.element = vnode.dom;\n }\n\n /**\n * @inheritdoc\n */\n onbeforeupdate(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n onupdate(vnode) {}\n\n /**\n * @inheritdoc\n */\n onbeforeremove(vnode) {}\n\n /**\n * @inheritdoc\n */\n onremove(vnode) {}\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Convenience method to attach a component without JSX.\n * Has the same effect as calling `m(THIS_CLASS, attrs, children)`.\n *\n * @see https://mithril.js.org/hyperscript.html#mselector,-attributes,-children\n */\n static component(attrs, children) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (children === void 0) {\n children = null;\n }\n const componentAttrs = {\n ...attrs\n };\n return m(this, componentAttrs, children);\n }\n\n /**\n * Saves a reference to the vnode attrs after running them through initAttrs,\n * and checking for common issues.\n */\n setAttrs(attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n this.constructor.initAttrs(attrs);\n if (attrs) {\n if ('children' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] The \\\"children\\\" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute\"));\n }\n if ('tag' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] You cannot use the \\\"tag\\\" attribute name with Mithril 2.\"));\n }\n }\n this.attrs = attrs;\n }\n\n /**\n * Initialize the component's attrs.\n *\n * This can be used to assign default values for missing, optional attrs.\n */\n static initAttrs(attrs) {}\n}\nflarum.reg.add('flarum-tags', '../../../../framework/core/js/src/common/Component', Component);","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimary() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagPermission from './addTagPermission';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagsPage from './components/TagsPage';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from '../common/extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n app.extensionData.for('flarum-tags').registerPage(TagsPage);\n addTagsPermissionScope();\n addTagPermission();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: \"tag\".concat(tag.id(), \".\").concat(item.permission),\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--text\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: true,\n onclick: () => tag.save({\n isRestricted: true\n })\n }, [tagIcon(tag, {\n className: 'Button-icon'\n }), ' ', tag.name()]))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport AdminPage from 'flarum/admin/components/AdminPage';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nexport default function () {\n extend(AdminPage.prototype, 'customSettingComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: this.settings[attrs.setting]\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\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(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// 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](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t328: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","app","extensionData","for","registerPermission","icon","label","translator","trans","permission","extend","items","add","path","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","then","filter","includes","id","redraw","help","onclick","selectedTags","onsubmit","stringify","map","options","size","display","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","call","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","match","addChunkModule","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","name","state","classList","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","_this","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","bind","dragEl","parentEl","ghostEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","rect","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","child","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","Array","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","slug","description","color","isHidden","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","tabindex","loading","exists","delete","hide","confirm","pushData","isChild","relationships","Component","setAttrs","oncreate","onbeforeupdate","onupdate","onbeforeremove","onremove","$element","static","componentAttrs","initAttrs","Error","r","t","isArray","FormSectionGroup","FormSection","tagItem","tagIcon","position","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","onListOnCreate","localeCompare","min","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","j","url","method","TagListState","async","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","Set","Tag","backgroundUrl","backgroundMode","defaultSort","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimary","TagGambit","KeyValueGambit","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","filterValueToGambitValue","gambit","tagList","registerPage","override","original","tagPrefix","required","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagPermission","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","chunkId","all","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","toStringTag","scriptUrl","importScripts","location","currentScript","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/./src/admin/addTagPermission.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/../../../framework/core/js/src/common/Component.ts","webpack://@flarum/tags/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/tags/../../../framework/core/js/src/common/utils/classList.ts","webpack://@flarum/tags/../../../framework/core/js/src/admin/components/FormSectionGroup.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\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/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","export default function () {\n app.extensionData.for('flarum-tags').registerPermission({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n }, 'moderate', 95).registerPermission({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n }, 'start', 89);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage.prototype, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('162', '610', 'flarum-tags', 'common/components/TagSelectionModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","/**!\n * Sortable 1.15.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\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\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"primary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.primary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: \"https://fontawesome.com/icons?m=free\",\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n primary: this.primary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n },\n // @deprecated. Temporary hack for type safety, remove before v1.3.\n relationships: {\n parent: null\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Component` class defines a user interface 'building block'. A component\n * generates a virtual DOM to be rendered on each redraw.\n *\n * Essentially, this is a wrapper for Mithril's components that adds several useful features:\n *\n * - In the `oninit` and `onbeforeupdate` lifecycle hooks, we store vnode attrs in `this.attrs.\n * This allows us to use attrs across components without having to pass the vnode to every single\n * method.\n * - The static `initAttrs` method allows a convenient way to provide defaults (or to otherwise modify)\n * the attrs that have been passed into a component.\n * - When the component is created in the DOM, we store its DOM element under `this.element`; this lets\n * us use jQuery to modify child DOM state from internal methods via the `this.$()` method.\n * - A convenience `component` method, which serves as an alternative to hyperscript and JSX.\n *\n * As with other Mithril components, components extending Component can be initialized\n * and nested using JSX, hyperscript, or a combination of both. The `component` method can also\n * be used.\n *\n * @example\n * return m('div',

          Hello World

          );\n *\n * @example\n * return m('div', MyComponent.component({foo: 'bar'), m('p', 'Hello World!'));\n *\n * @see https://mithril.js.org/components.html\n */\nexport default class Component {\n constructor() {\n /**\n * The root DOM element for the component.\n */\n _defineProperty(this, \"element\", void 0);\n /**\n * The attributes passed into the component.\n *\n * @see https://mithril.js.org/components.html#passing-data-to-components\n */\n _defineProperty(this, \"attrs\", void 0);\n /**\n * Class component state that is persisted between redraws.\n *\n * Updating this will **not** automatically trigger a redraw, unlike\n * other frameworks.\n *\n * This is different to Vnode state, which is always an instance of your\n * class component.\n *\n * This is `undefined` by default.\n */\n _defineProperty(this, \"state\", void 0);\n }\n /**\n * @inheritdoc\n */\n /**\n * @inheritdoc\n */\n oninit(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n oncreate(vnode) {\n this.element = vnode.dom;\n }\n\n /**\n * @inheritdoc\n */\n onbeforeupdate(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n onupdate(vnode) {}\n\n /**\n * @inheritdoc\n */\n onbeforeremove(vnode) {}\n\n /**\n * @inheritdoc\n */\n onremove(vnode) {}\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Convenience method to attach a component without JSX.\n * Has the same effect as calling `m(THIS_CLASS, attrs, children)`.\n *\n * @see https://mithril.js.org/hyperscript.html#mselector,-attributes,-children\n */\n static component(attrs, children) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (children === void 0) {\n children = null;\n }\n const componentAttrs = {\n ...attrs\n };\n return m(this, componentAttrs, children);\n }\n\n /**\n * Saves a reference to the vnode attrs after running them through initAttrs,\n * and checking for common issues.\n */\n setAttrs(attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n this.constructor.initAttrs(attrs);\n if (attrs) {\n if ('children' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] The \\\"children\\\" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute\"));\n }\n if ('tag' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] You cannot use the \\\"tag\\\" attribute name with Mithril 2.\"));\n }\n }\n this.attrs = attrs;\n }\n\n /**\n * Initialize the component's attrs.\n *\n * This can be used to assign default values for missing, optional attrs.\n */\n static initAttrs(attrs) {}\n}\nflarum.reg.add('flarum-tags', '../../../../framework/core/js/src/common/Component', Component);","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimary() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagPermission from './addTagPermission';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagsPage from './components/TagsPage';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from '../common/extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n app.extensionData.for('flarum-tags').registerPage(TagsPage);\n addTagsPermissionScope();\n addTagPermission();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: \"tag\".concat(tag.id(), \".\").concat(item.permission),\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--text\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: true,\n onclick: () => tag.save({\n isRestricted: true\n })\n }, [tagIcon(tag, {\n className: 'Button-icon'\n }), ' ', tag.name()]))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nimport FormGroup from 'flarum/common/components/FormGroup';\nexport default function () {\n extend(FormGroup.prototype, 'customFieldComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: attrs.bidi\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\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(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// 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](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t328: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","app","extensionData","for","registerPermission","icon","label","translator","trans","permission","extend","items","add","path","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","then","filter","includes","id","redraw","help","onclick","selectedTags","onsubmit","stringify","map","options","size","display","addChunkModule","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","call","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","name","state","classList","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","_this","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","bind","dragEl","parentEl","ghostEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","rect","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","child","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","Array","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","slug","description","color","isHidden","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","tabindex","loading","exists","delete","hide","confirm","pushData","isChild","relationships","Component","setAttrs","oncreate","onbeforeupdate","onupdate","onbeforeremove","onremove","$element","static","componentAttrs","initAttrs","Error","r","t","isArray","FormSectionGroup","FormSection","tagItem","tagIcon","position","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","onListOnCreate","localeCompare","min","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","j","url","method","TagListState","async","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","Set","Tag","backgroundUrl","backgroundMode","defaultSort","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimary","TagGambit","KeyValueGambit","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","filterValueToGambitValue","gambit","tagList","registerPage","override","original","tagPrefix","required","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagPermission","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","chunkId","all","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","toStringTag","scriptUrl","importScripts","location","currentScript","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/framework/core/js/dist-typings/admin/admin.d.ts b/framework/core/js/dist-typings/admin/admin.d.ts index d3c4fcaa3..36d3cb49f 100644 --- a/framework/core/js/dist-typings/admin/admin.d.ts +++ b/framework/core/js/dist-typings/admin/admin.d.ts @@ -3,7 +3,6 @@ import './utils/saveSettings'; import './utils/ExtensionData'; import './utils/isExtensionEnabled'; import './utils/getCategorizedExtensions'; -import './utils/generateElementId'; import './components/SettingDropdown'; import './components/EditCustomFooterModal'; import './components/SessionDropdown'; @@ -20,7 +19,6 @@ import './components/ExtensionLinkButton'; import './components/PermissionGrid'; import './components/ExtensionPermissionGrid'; import './components/MailPage'; -import './components/UploadImageButton'; import './components/LoadingModal'; import './components/DashboardPage'; import './components/BasicsPage'; diff --git a/framework/core/js/dist-typings/admin/components/AdminPage.d.ts b/framework/core/js/dist-typings/admin/components/AdminPage.d.ts index 308a3c366..3da6e56f1 100644 --- a/framework/core/js/dist-typings/admin/components/AdminPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/AdminPage.d.ts @@ -1,8 +1,7 @@ import type Mithril from 'mithril'; import Page, { IPageAttrs } from '../../common/components/Page'; import Stream from '../../common/utils/Stream'; -import ItemList from '../../common/utils/ItemList'; -import type { IUploadImageButtonAttrs } from './UploadImageButton'; +import { FieldComponentOptions } from '../../common/components/FormGroup'; export interface AdminHeaderOptions { title: Mithril.Children; description: Mithril.Children; @@ -14,78 +13,9 @@ export interface AdminHeaderOptions { */ className: string; } -/** - * A type that matches any valid value for the `type` attribute on an HTML `` element. - * - * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-type - * - * Note: this will be exported from a different location in the future. - * - * @see https://github.com/flarum/core/issues/3039 - */ -export declare type HTMLInputTypes = 'button' | 'checkbox' | 'color' | 'date' | 'datetime-local' | 'email' | 'file' | 'hidden' | 'image' | 'month' | 'number' | 'password' | 'radio' | 'range' | 'reset' | 'search' | 'submit' | 'tel' | 'text' | 'time' | 'url' | 'week'; -export interface CommonSettingsItemOptions extends Mithril.Attributes { +export declare type SettingsComponentOptions = FieldComponentOptions & { setting: string; - label?: Mithril.Children; - help?: Mithril.Children; - className?: string; -} -/** - * Valid options for the setting component builder to generate an HTML input element. - */ -export interface HTMLInputSettingsComponentOptions extends CommonSettingsItemOptions { - /** - * Any valid HTML input `type` value. - */ - type: HTMLInputTypes; -} -declare const BooleanSettingTypes: readonly ["bool", "checkbox", "switch", "boolean"]; -declare const SelectSettingTypes: readonly ["select", "dropdown", "selectdropdown"]; -declare const TextareaSettingTypes: readonly ["textarea"]; -declare const ColorPreviewSettingType: "color-preview"; -declare const ImageUploadSettingType: "image-upload"; -/** - * Valid options for the setting component builder to generate a Switch. - */ -export interface SwitchSettingComponentOptions extends CommonSettingsItemOptions { - type: typeof BooleanSettingTypes[number]; -} -/** - * Valid options for the setting component builder to generate a Select dropdown. - */ -export interface SelectSettingComponentOptions extends CommonSettingsItemOptions { - type: typeof SelectSettingTypes[number]; - /** - * Map of values to their labels - */ - options: { - [value: string]: Mithril.Children; - }; - default: string; -} -/** - * Valid options for the setting component builder to generate a Textarea. - */ -export interface TextareaSettingComponentOptions extends CommonSettingsItemOptions { - type: typeof TextareaSettingTypes[number]; -} -/** - * Valid options for the setting component builder to generate a ColorPreviewInput. - */ -export interface ColorPreviewSettingComponentOptions extends CommonSettingsItemOptions { - type: typeof ColorPreviewSettingType; -} -export interface ImageUploadSettingComponentOptions extends CommonSettingsItemOptions, IUploadImageButtonAttrs { - type: typeof ImageUploadSettingType; -} -export interface CustomSettingComponentOptions extends CommonSettingsItemOptions { - type: string; - [key: string]: unknown; -} -/** - * All valid options for the setting component builder. - */ -export declare type SettingsComponentOptions = HTMLInputSettingsComponentOptions | SwitchSettingComponentOptions | SelectSettingComponentOptions | TextareaSettingComponentOptions | ColorPreviewSettingComponentOptions | ImageUploadSettingComponentOptions | CustomSettingComponentOptions; +}; /** * Valid attrs that can be returned by the `headerInfo` function */ @@ -117,36 +47,6 @@ export default abstract class AdminPage { - * return ( - *
          - * - * {attrs.help &&

          {attrs.help}

          } - * - * My setting component! - *
          - * ); - * }) - * }) - * ``` - */ - customSettingComponents(): ItemList<(attributes: CommonSettingsItemOptions) => Mithril.Children>; /** * `buildSettingComponent` takes a settings object and turns it into a component. * Depending on the type of input, you can set the type to 'bool', 'select', or @@ -208,4 +108,3 @@ export default abstract class AdminPage; modelLocale(): Record; } -export {}; diff --git a/framework/core/js/dist-typings/common/common.d.ts b/framework/core/js/dist-typings/common/common.d.ts index 72c2c7db7..52185f669 100644 --- a/framework/core/js/dist-typings/common/common.d.ts +++ b/framework/core/js/dist-typings/common/common.d.ts @@ -34,6 +34,7 @@ import './utils/withAttr'; import './utils/focusTrap'; import './utils/isDark'; import './utils/KeyboardNavigatable'; +import './utils/generateElementId'; import './models/Notification'; import './models/User'; import './models/Post'; @@ -72,6 +73,8 @@ import './components/TextEditorButton'; import './components/Tooltip'; import './components/AutocompleteDropdown'; import './components/GambitsAutocompleteDropdown'; +import './components/UploadImageButton'; +import './components/FormGroup'; import './helpers/fullTime'; import './components/Avatar'; import './helpers/humanTime'; diff --git a/framework/core/js/dist-typings/common/components/FormGroup.d.ts b/framework/core/js/dist-typings/common/components/FormGroup.d.ts new file mode 100644 index 000000000..0515eed84 --- /dev/null +++ b/framework/core/js/dist-typings/common/components/FormGroup.d.ts @@ -0,0 +1,140 @@ +import Component from '../Component'; +import Stream from '../utils/Stream'; +import ItemList from '../utils/ItemList'; +import type { IUploadImageButtonAttrs } from './UploadImageButton'; +import type { ComponentAttrs } from '../Component'; +import type Mithril from 'mithril'; +/** + * A type that matches any valid value for the `type` attribute on an HTML `` element. + * + * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-type + * + * Note: this will be exported from a different location in the future. + * + * @see https://github.com/flarum/core/issues/3039 + */ +export declare type HTMLInputTypes = 'button' | 'checkbox' | 'color' | 'date' | 'datetime-local' | 'email' | 'file' | 'hidden' | 'image' | 'month' | 'number' | 'password' | 'radio' | 'range' | 'reset' | 'search' | 'submit' | 'tel' | 'text' | 'time' | 'url' | 'week'; +export interface CommonFieldOptions extends Mithril.Attributes { + label?: Mithril.Children; + help?: Mithril.Children; + className?: string; +} +/** + * Valid options for the setting component builder to generate an HTML input element. + */ +export interface HTMLInputFieldComponentOptions extends CommonFieldOptions { + /** + * Any valid HTML input `type` value. + */ + type: HTMLInputTypes; +} +declare const BooleanSettingTypes: readonly ["bool", "checkbox", "switch", "boolean"]; +declare const SelectSettingTypes: readonly ["select", "dropdown", "selectdropdown"]; +declare const TextareaSettingTypes: readonly ["textarea"]; +declare const ColorPreviewSettingType: "color-preview"; +declare const ImageUploadSettingType: "image-upload"; +/** + * Valid options for the setting component builder to generate a Switch. + */ +export interface SwitchFieldComponentOptions extends CommonFieldOptions { + type: typeof BooleanSettingTypes[number]; +} +/** + * Valid options for the setting component builder to generate a Select dropdown. + */ +export interface SelectFieldComponentOptions extends CommonFieldOptions { + type: typeof SelectSettingTypes[number]; + /** + * Map of values to their labels + */ + options: { + [value: string]: Mithril.Children; + }; + default: string; +} +/** + * Valid options for the setting component builder to generate a Textarea. + */ +export interface TextareaFieldComponentOptions extends CommonFieldOptions { + type: typeof TextareaSettingTypes[number]; +} +/** + * Valid options for the setting component builder to generate a ColorPreviewInput. + */ +export interface ColorPreviewFieldComponentOptions extends CommonFieldOptions { + type: typeof ColorPreviewSettingType; +} +export interface ImageUploadFieldComponentOptions extends CommonFieldOptions, IUploadImageButtonAttrs { + type: typeof ImageUploadSettingType; +} +export interface CustomFieldComponentOptions extends CommonFieldOptions { + type: string; + [key: string]: unknown; +} +/** + * All valid options for the setting component builder. + */ +export declare type FieldComponentOptions = HTMLInputFieldComponentOptions | SwitchFieldComponentOptions | SelectFieldComponentOptions | TextareaFieldComponentOptions | ColorPreviewFieldComponentOptions | ImageUploadFieldComponentOptions | CustomFieldComponentOptions; +export declare type IFormGroupAttrs = ComponentAttrs & FieldComponentOptions & { + bidi?: Stream; +}; +/** + * Builds a field component based on the provided attributes. + * Depending on the type of input, you can set the type to 'bool', 'select', or + * any standard type. Any values inside the 'extra' object will be added + * to the component as an attribute. + * + * Alternatively, you can pass a callback that will be executed in ExtensionPage's + * context to include custom JSX elements. + * + * @example + * + * + * + * @example + * + * + */ +export default class FormGroup extends Component { + view(vnode: Mithril.Vnode): Mithril.Children; + /** + * A list of extension-defined custom setting components to be available. + * + * The ItemList key represents the value for the `type` attribute. + * All attributes passed are provided as arguments to the function added to the ItemList. + * + * ItemList priority has no effect here. + * + * @example + * ```tsx + * extend(AdminPage.prototype, 'customFieldComponents', function (items) { + * // You can access the AdminPage instance with `this` to access its `settings` property. + * + * // Prefixing the key with your extension ID is recommended to avoid collisions. + * items.add('my-ext.setting-component', (attrs) => { + * return ( + *
          + * + * {attrs.help &&

          {attrs.help}

          } + * + * My setting component! + *
          + * ); + * }) + * }) + * ``` + */ + customFieldComponents(): ItemList<(attributes: CustomAttrs) => Mithril.Children>; +} +export {}; diff --git a/framework/core/js/dist-typings/admin/components/UploadImageButton.d.ts b/framework/core/js/dist-typings/common/components/UploadImageButton.d.ts similarity index 100% rename from framework/core/js/dist-typings/admin/components/UploadImageButton.d.ts rename to framework/core/js/dist-typings/common/components/UploadImageButton.d.ts diff --git a/framework/core/js/dist-typings/admin/utils/generateElementId.d.ts b/framework/core/js/dist-typings/common/utils/generateElementId.d.ts similarity index 100% rename from framework/core/js/dist-typings/admin/utils/generateElementId.d.ts rename to framework/core/js/dist-typings/common/utils/generateElementId.d.ts diff --git a/framework/core/js/dist/admin.js b/framework/core/js/dist/admin.js index db66f023a..938087062 100644 --- a/framework/core/js/dist/admin.js +++ b/framework/core/js/dist/admin.js @@ -1,3 +1,3 @@ /*! For license information please see admin.js.LICENSE.txt */ -(()=>{var t,e,n={1207:(t,e,n)=>{"use strict";n.d(e,{Z:()=>j});var r=n(7905),s=n(7465),o=n(4041),i=n(8312),a=n(7224),l=n(8588),c=n(406),u=n(4153);function d(t){return Array.isArray(t.data)}class h{constructor(t){(0,r.Z)(this,"data",{}),(0,r.Z)(this,"models",void 0),this.models=t}pushPayload(t){t.included&&t.included.map(this.pushObject.bind(this));const e=t.data instanceof Array?t.data.map((t=>this.pushObject(t))):this.pushObject(t.data);return e.payload=t,e}pushObject(t){if(!this.models[t.type])return setTimeout((()=>{throw new Error("Pushing object of type `".concat(t.type,"` not allowed, as type not yet registered in the store."))})),null;const e=this.data[t.type]=this.data[t.type]||{},n=e[t.id],r=n?n.pushData(t):this.createRecord(t.type,t);return e[t.id]=r,r.exists=!0,r}async find(t,e,n,r){var o,i;void 0===n&&(n={}),void 0===r&&(r={});let a=n,l=s.Z.forum.attribute("apiUrl")+"/"+t;return e instanceof Array?l+="?filter[id]="+e.join(","):"object"==typeof e?a=e:e&&(l+="/"+e),"filter"in a&&null!=(o=a)&&null!=(i=o.filter)&&i.q&&(a.filter=s.Z.search.gambits.apply(t,a.filter)),s.Z.request({method:"GET",url:l,params:a,...r}).then((t=>(d(t),this.pushPayload(t))))}getById(t,e){var n,r;return null==(n=this.data)||null==(r=n[t])?void 0:r[e]}getBy(t,e,n){return this.all(t).filter((t=>t[e]()===n))[0]}all(t){const e=this.data[t];return e?Object.values(e):[]}remove(t){delete this.data[t.data.type][t.id()]}createRecord(t,e){return void 0===e&&(e={}),e.type=e.type||t,new this.models[t](e,this)}}flarum.reg.add("core","common/Store",h);class p{constructor(t,e){(0,r.Z)(this,"user",void 0),(0,r.Z)(this,"csrfToken",void 0),this.user=t,this.csrfToken=e}login(t,e){return void 0===e&&(e={}),s.Z.request({method:"POST",url:"".concat(s.Z.forum.attribute("baseUrl"),"/login"),body:t,...e})}logout(){window.location.href="".concat(s.Z.forum.attribute("baseUrl"),"/logout?token=").concat(this.csrfToken)}}flarum.reg.add("core","common/Session",p);var f=n(6786),g=n(1552),v=n(7569),b=n(4430),y=n(6386),w=n(4718),Z=n(9423);function x(){$("[data-humantime]").each((function(){const t=$(this),e=(0,Z.Z)(t.attr("datetime"));t.html(e)}))}function N(){setInterval(x,1e4)}flarum.reg.add("core","common/utils/liveHumanTimes",N);var k=n(8134),_=n(3813),C=n(7498),E=n(6322),S=n(4125),T=n(7645),P=n(5788),A=n(5013),D=n(5123),I=n(5278);function L(t,e,n){var r,o;console.group("%c".concat(e),"background-color: #d83e3e; color: #ffffff; font-weight: bold;"),console.error(n),console.groupEnd(),null!=(r=s.Z.session)&&null!=(o=r.user)&&o.isAdmin()&&s.Z.alerts.show({type:"error"},"".concat(t))}flarum.reg.add("core","common/helpers/fireApplicationError",L);var O=n(9175);class M extends O.Z{token(){return O.Z.attribute("token").call(this)}userId(){return O.Z.attribute("userId").call(this)}title(){return O.Z.attribute("title").call(this)}type(){return O.Z.attribute("type").call(this)}createdAt(){return O.Z.attribute("createdAt",O.Z.transformDate).call(this)}lastActivityAt(){return O.Z.attribute("lastActivityAt",O.Z.transformDate).call(this)}lastIpAddress(){return O.Z.attribute("lastIpAddress").call(this)}device(){return O.Z.attribute("device").call(this)}isCurrent(){return O.Z.attribute("isCurrent").call(this)}isSessionToken(){return O.Z.attribute("isSessionToken").call(this)}}flarum.reg.add("core","common/models/AccessToken",M);class j{constructor(){(0,r.Z)(this,"forum",void 0),(0,r.Z)(this,"routes",{}),(0,r.Z)(this,"initializers",new o.Z),(0,r.Z)(this,"session",void 0),(0,r.Z)(this,"translator",new u.Z),(0,r.Z)(this,"store",new h({"access-tokens":M,forums:_.Z,users:C.Z,discussions:E.Z,posts:S.Z,groups:T.Z,notifications:P.Z})),(0,r.Z)(this,"search",void 0),(0,r.Z)(this,"cache",{}),(0,r.Z)(this,"booted",!1),(0,r.Z)(this,"current",new A.Z(null)),(0,r.Z)(this,"previous",new A.Z(null)),(0,r.Z)(this,"modal",new D.Z),(0,r.Z)(this,"alerts",new I.Z),(0,r.Z)(this,"drawer",void 0),(0,r.Z)(this,"history",null),(0,r.Z)(this,"pane",null),(0,r.Z)(this,"data",void 0),(0,r.Z)(this,"_title",""),(0,r.Z)(this,"_titleCount",0),(0,r.Z)(this,"requestErrorAlert",null),(0,r.Z)(this,"initialRoute",void 0)}set title(t){this._title=t}get title(){return this._title}set titleCount(t){this._titleCount=t}get titleCount(){return this._titleCount}load(t){this.data=t,this.translator.setLocale(t.locale)}boot(){var t;const e=[];this.initializers.toArray().forEach((t=>{try{t(this)}catch(n){const r=t.itemName.includes("/")?t.itemName.replace(/(\/flarum-ext-)|(\/flarum-)/g,"-"):t.itemName;e.push((()=>L((0,g.Z)(s.Z.translator.trans("core.lib.error.extension_initialiation_failed_message",{extension:r})),"".concat(r," failed to initialize"),n)))}})),this.store.pushPayload({data:this.data.resources}),this.forum=this.store.getById("forums","1"),this.session=new p(null!=(t=this.store.getById("users",String(this.data.session.userId)))?t:null,this.data.session.csrfToken),this.mount(),this.initialRoute=window.location.href,e.forEach((t=>t()))}bootExtensions(t){Object.keys(t).forEach((e=>{const n=t[e];if(!n.extend)return;const r=n.extend.flat(1/0);for(const t of r)t.extend(this,{name:e,exports:n})}))}mount(t){void 0===t&&(t=""),m.mount(document.getElementById("modal"),{view:()=>m(a.Z,{state:this.modal})}),m.mount(document.getElementById("alerts"),{view:()=>m(l.Z,{state:this.alerts})}),this.drawer=new v.Z,m.route(document.getElementById("content"),t+"/",(0,b.Z)(this.routes,t));const e=document.getElementById("app"),n=document.querySelector(".App-header"),r=new w.Z((t=>{const r=e.getBoundingClientRect().top+document.body.scrollTop;e.classList.toggle("affix",t>=r),e.classList.toggle("scrolled",t>r),n.classList.toggle("navbar-fixed-top",t>=r)}));r.start(),r.update(),document.body.classList.add("ontouchstart"in window?"touch":"no-touch"),N()}preloadedApiDocument(){if(this.data.apiDocument&&window.location.href===this.initialRoute){const t=(d(this.data.apiDocument),this.store.pushPayload(this.data.apiDocument));return this.data.apiDocument=null,t}return null}screen(){return getComputedStyle(document.documentElement).getPropertyValue("--flarum-screen")}setTitle(t){this.title=t,this.updateTitle()}setTitleCount(t){this.titleCount=t,this.updateTitle()}updateTitle(){const t=this.titleCount?"(".concat(this.titleCount,") "):"",e=m.route.get()===this.forum.attribute("basePath")+"/",n={pageTitle:this.title,forumName:this.forum.attribute("title"),pageNumber:1};let r=e||!this.title?(0,g.Z)(s.Z.translator.trans("core.lib.meta_titles.without_page_title",n)):(0,g.Z)(s.Z.translator.trans("core.lib.meta_titles.with_page_title",n));r=t+r;const o=new DOMParser;document.title=o.parseFromString(r,"text/html").body.innerText}transformRequestOptions(t){const{background:e,deserialize:n,modifyText:r,...o}={...t},i={background:null==e||e,deserialize:null!=n?n:t=>t,...o};if((0,k.l)(i,"config",((t,e)=>{e.setRequestHeader("X-CSRF-Token",this.session.csrfToken)})),i.method&&!["GET","POST"].includes(i.method)){const t=i.method;(0,k.l)(i,"config",((e,n)=>{n.setRequestHeader("X-HTTP-Method-Override",t)})),i.method="POST"}return i.extract=t=>{let e;e=r?r(t.responseText):t.responseText;const n=t.status;if(n<200||n>299)throw new y.Z(n,"".concat(e),i,t);if(t.getResponseHeader){const e=t.getResponseHeader("X-CSRF-Token");e&&(s.Z.session.csrfToken=e)}try{return""===e?null:JSON.parse(e)}catch(n){throw new y.Z(500,"".concat(e),i,t)}},i}request(t){const e=this.transformRequestOptions(t);return this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),m.request(e).catch((e=>this.requestErrorCatch(e,t.errorHandler)))}requestErrorCatch(t,e){var n,r,o;const a=null!=(n=null==(r=t.response)||null==(o=r.errors)?void 0:o.map((t=>{var e;return decodeURI(null!=(e=t.detail)?e:"")})))?n:[];let l;switch(t.status){case 422:l=a.map((t=>[t,m("br",null)])).flat().slice(0,-1);break;case 401:case 403:l=s.Z.translator.trans("core.lib.error.permission_denied_message");break;case 404:case 410:l=s.Z.translator.trans("core.lib.error.not_found_message");break;case 413:l=s.Z.translator.trans("core.lib.error.payload_too_large_message");break;case 429:l=s.Z.translator.trans("core.lib.error.rate_limit_exceeded_message");break;default:l=this.requestWasCrossOrigin(t)?s.Z.translator.trans("core.lib.error.generic_cross_origin_message"):s.Z.translator.trans("core.lib.error.generic_message")}const c=s.Z.forum.attribute("debug");return t.alert={type:"error",content:l,controls:c&&[m(i.Z,{className:"Button Button--link",onclick:this.showDebug.bind(this,t,a)},s.Z.translator.trans("core.lib.debug_button"))]},e?e(t):this.requestErrorDefaultHandler(t,c,a),Promise.reject(t)}requestWasCrossOrigin(t){return new URL(t.options.url,document.baseURI).origin!==window.location.origin}requestErrorDefaultHandler(t,e,n){if(!(t instanceof y.Z))throw t;if(e&&t.xhr){const{method:e,url:r}=t.options,{status:s=""}=t.xhr;console.group("".concat(e," ").concat(r," ").concat(s)),n.length?console.error(...n):console.error(t),console.groupEnd()}500===t.status&&e?s.Z.modal.show(c.Z,{error:t,formattedError:n}):t.alert&&(this.requestErrorAlert=this.alerts.show(t.alert,t.alert.content))}showDebug(t,e){null!==this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),this.modal.show(c.Z,{error:t,formattedError:e})}route(t,e){void 0===e&&(e={});const n=this.routes[t];if(!n)throw new Error("Route '".concat(t,"' does not exist"));const r=n.path.replace(/:([^\/]+)/g,((t,n)=>"".concat((0,f.Z)(e,n))));for(const t in e)e.hasOwnProperty(t)&&!e[t]&&delete e[t];const s=m.buildQueryString(e);return(""===m.route.prefix?this.forum.attribute("basePath"):"")+r+(s?"?"+s:"")}}flarum.reg.add("core","common/Application",j)},2190:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7905);class s{constructor(){(0,r.Z)(this,"element",void 0),(0,r.Z)(this,"attrs",void 0),(0,r.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}flarum.reg.add("core","common/Component",s)},9175:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7905),s=n(7465);class o{constructor(t,e){void 0===t&&(t={}),void 0===e&&(e=s.Z.store),(0,r.Z)(this,"data",{}),(0,r.Z)(this,"freshness",new Date),(0,r.Z)(this,"exists",!1),(0,r.Z)(this,"store",void 0),this.data=t,this.store=e}id(){return"id"in this.data?this.data.id:void 0}attribute(t){var e,n;return null==(e=this.data)||null==(n=e.attributes)?void 0:n[t]}pushData(t){if("id"in t&&(this.data.id=t.id),"type"in t&&(this.data.type=t.type),"attributes"in t){var e;(e=this.data).attributes||(e.attributes={});for(const e in t.attributes){const n=t.attributes[e];n&&n instanceof o&&delete t.attributes[e]}Object.assign(this.data.attributes,t.attributes)}if("relationships"in t){var n;const e=null!=(n=this.data.relationships)?n:{};for(const n in t.relationships){const r=t.relationships[n];if(null===r){delete e[n],delete t.relationships[n];continue}let s;s=r instanceof o?{data:o.getIdentifier(r)}:r instanceof Array?{data:r.map(o.getIdentifier)}:r,t.relationships[n]=s,e[n]=s}this.data.relationships=e}return this.freshness=new Date,this}pushAttributes(t){this.pushData({attributes:t})}save(t,e){void 0===e&&(e={});const n={type:this.data.type,attributes:t};if("id"in this.data&&(n.id=this.data.id),t.relationships){n.relationships={};for(const e in t.relationships){const r=t.relationships[e];null!==r&&(n.relationships[e]={data:r instanceof Array?r.map(o.getIdentifier):o.getIdentifier(r)})}delete t.relationships}const r=this.copyData();this.pushData(n);const i={data:n,meta:e.meta||void 0};return s.Z.request({method:this.exists?"PATCH":"POST",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:i,...e}).then((t=>this.store.pushPayload(t)),(t=>{throw this.pushData(r),m.redraw(),t}))}delete(t,e){return void 0===t&&(t={}),void 0===e&&(e={}),this.exists?s.Z.request({method:"DELETE",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:t,...e}).then((()=>{this.exists=!1,this.store.remove(this)})):Promise.resolve()}apiEndpoint(){return"/"+this.data.type+("id"in this.data?"/"+this.data.id:"")}copyData(){return JSON.parse(JSON.stringify(this.data))}rawRelationship(t){var e,n;return null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data}static attribute(t,e){return function(){return e?e(this.attribute(t)):this.attribute(t)}}static hasOne(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&r instanceof Array)throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is plural, so the hasOne method cannot be used to access it."));return!!r&&this.store.getById(r.type,r.id)}}static hasMany(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&!(r instanceof Array))throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is singular, so the hasMany method cannot be used to access it."));return!!r&&r.map((t=>this.store.getById(t.type,t.id)))}}static transformDate(t){return null!=t?new Date(t):t}static getIdentifier(t){return t&&"id"in t.data?{type:t.data.type,id:t.data.id}:null}}flarum.reg.add("core","common/Model",o)},8740:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(7905),s=n(7465),o=n(1586);class i extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.author.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.author.hint",{},!0)}filterKey(){return"author"}}flarum.reg.add("core","common/query/discussions/AuthorGambit",i);class a extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.created.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.created.hint",{},!0)}valuePattern(){return"(\\d{4}\\-\\d\\d\\-\\d\\d(?:\\.\\.(\\d{4}\\-\\d\\d\\-\\d\\d))?)"}filterKey(){return"created"}}flarum.reg.add("core","common/query/discussions/CreatedGambit",a);class l extends o.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.hidden.key",{},!0)}filterKey(){return"hidden"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/HiddenGambit",l);class c extends o.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.unread.key",{},!0)}filterKey(){return"unread"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/UnreadGambit",c);class u extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.email.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.email.hint",{},!0)}filterKey(){return"email"}enabled(){return!(!s.Z.session.user||!s.Z.forum.attribute("canEditUserCredentials"))}}flarum.reg.add("core","common/query/users/EmailGambit",u);class d extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.group.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.group.hint",{},!0)}filterKey(){return"group"}}flarum.reg.add("core","common/query/users/GroupGambit",d);class m{constructor(){(0,r.Z)(this,"gambits",{discussions:[i,a,l,c],users:[u,d]})}apply(t,e){return e.q=this.match(t,e.q,((t,n,r)=>{const s=t.toFilter(n,r);Object.keys(s).forEach((n=>{n in e&&t.predicates&&Array.isArray(s[n])?e[n]=e[n].concat(s[n]):e[n]=s[n]}))})),e}match(t,e,n){const r=this.for(t).filter((t=>t.enabled()));if(0===r.length)return e;const s=e.split(" ");for(const t of r)for(const r of s){const s="^(-?)".concat(t.pattern(),"$");let o=r.match(s);if(o){const s="-"===o[1];o.splice(1,1),n(t,o,s,r),e=e.replace(r,"")}}return e.trim().replace(/\s+/g," ")}from(t,e,n){const r=this.for(t);return 0===r.length||Object.keys(n).forEach((t=>{for(const s of r){const r="-"===t[0];r&&(t=t.substring(1)),s.filterKey()===t&&(e+=" ".concat(s.fromFilter(n[t],r)))}})),e}for(t){return(this.gambits[t]||[]).map((t=>new t))}}flarum.reg.add("core","common/GambitManager",m);class h{constructor(t){(0,r.Z)(this,"state",void 0),(0,r.Z)(this,"gambits",new m),this.state=t}}(0,r.Z)(h,"MIN_SEARCH_LEN",3),flarum.reg.add("core","common/SearchManager",h)},4153:(t,e,n)=>{"use strict";n.d(e,{Z:()=>V});var r,s=n(7905),o=n(6880),i=n.n(o),a=n(6353),l=n.n(a),c=n(2512),u=n.n(c),d=n(8328),h=n.n(d),p=n(9939),f=n.n(p),g=n(1627),v=n.n(g),b=n(871),y=n.n(b);function w(t){return t.reduce((function(t,e){return t.concat(Array.isArray(e)?w(e):e)}),[])}function Z(t){var e={};return function(){for(var n=arguments.length,r=new Array(n),s=0;s3&&void 0!==arguments[3]?arguments[3]:[];if(!t)return r;if(1===n)return r.push(t),r;var s=t.indexOf(e);if(-1===s)return r.push(t),r;var o=t.substring(0,s).trim(),i=t.substring(s+e.length+1).trim();return r.push(o),_(i,e,n-1,r)}function C(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function E(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,i=x(e),a=i.args,l=i.cases,c=parseInt(t);a.forEach((function(t){t.startsWith("offset:")&&(c-=parseInt(t.slice("offset:".length)))}));var u=[];if("PluralRules"in Intl){void 0!==r&&r.resolvedOptions().locale===n||(r=new Intl.PluralRules(n));var d=r.select(c);d!==T&&u.push(d)}1===c&&u.push("one"),u.push("=".concat(c),T);for(var m=0;m1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0,s=x(e),o=s.cases;return t in o?r(o[t],n):D in o?r(o.other,n):t}function L(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=[],o=function(r,o,i,a,l,c){if(o)return{break:!0};var u=O(t,i,a,l);if(!u)return s;var d=u.segmentIndex===a,m=t[u.segmentIndex],h=[];if(d)h.push(r.slice(l+1,u.segmentStart));else{h.push(r.slice(l+1));for(var p=a+1;p"===a[m]){var h=a.slice(c+1+l,m),p=s(a,l,h,i,m,c);if(p.exit)return;if(p.newSegmentIndex&&(i=p.newSegmentIndex),p.processedSegment&&(d=!0),p.break)break;l=!1,c=null,u=!1}else u&&(o=a[m],!/[a-zA-Z-_]/.test(o))&&(l=!1,c=null,u=!1);else c=m,u=!0,"/"===a[m+1]&&(l=!0,m++);d||r.push(a)}else r.push(a)}}function j(t){return Object.keys(t).reduce((function(e,n){return e[n]=R(t[n]),e}),{})}function B(t){return"string"!=typeof t?t:t.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}function R(t){return"string"==typeof t||t instanceof String?t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"):Array.isArray(t)?t.map(R):t}function $(t,e,n){return"<".concat(t,">").concat(B(n),"")}var H=function(t){h()(s,t);var e,n,r=(e=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,r=v()(e);if(n){var s=v()(this).constructor;t=Reflect.construct(r,arguments,s)}else t=r.apply(this,arguments);return f()(this,t)});function s(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return l()(this,s),(e=r.call(this,t,n)).richHandler=o||$,e}return u()(s,[{key:"rich",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=j(e),r=w(this.process(t,n)),s=Math.random().toString(36)+Math.random().toString(36)+Math.random().toString(36),o=Object.fromEntries(Object.entries(e).map((function(t){var e=i()(t,2),n=e[0];return e[1],[n,s]}))),a=w(this.process(t,o)),l=L(a,o,(function(){return s})),c=l.map((function(t,e){return t===s?null:e})).filter((function(t){return null!==t}));return L(r,n,this.richHandler,c)}}]),s}(function(){function t(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};l()(this,t),y()(this,"format",Z((function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(n.process(t,e)).join("")}))),this.locale=e,this.typeHandlers=r}return u()(t,[{key:"process",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return[];var n=t.indexOf("{");if(-1!==n){var r=N(t,n);if(-1===r)throw new Error('Unbalanced curly braces in string: "'.concat(t,'"'));var s=t.substring(n,r+1);if(s){var o=[],a=t.substring(0,n);a&&o.push(a);var l=k(s),c=i()(l,3),u=c[0],d=c[1],m=c[2],h=e[u];null==h&&(h="");var p=d&&this.typeHandlers[d];o.push(p?p(h,m,this.locale,e,this.process.bind(this)):h);var f=t.substring(r+1);return f&&o.push(this.process(f,e)),o}}return[t]}}]),t}());function U(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function F(t){for(var e=1;e{"use strict";n.d(e,{Z:()=>o});const r=window,s=new Proxy({},{get:(t,e)=>Reflect.get(r.app,e,r.app),set:(t,e,n)=>Reflect.set(r.app,e,n,r.app)}),o=s;flarum.reg.add("core","common/app",s)},3817:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(8312),o=n(1268),i=n(6786),a=n(3344),l=n(7465),c=n(9133);class u extends r.Z{view(t){const e=Object.assign({},this.attrs),n=(0,i.Z)(e,"type");e.className=(0,a.Z)("Alert","Alert--".concat(n),e.className);const r=(0,i.Z)(e,"title"),u=(0,i.Z)(e,"icon"),d=(0,i.Z)(e,"content")||t.children,h=(0,i.Z)(e,"controls")||[],p=(0,i.Z)(e,"dismissible"),f=(0,i.Z)(e,"ondismiss"),g=[];return(p||void 0===p)&&g.push(m(s.Z,{"aria-label":l.Z.translator.trans("core.lib.alert.dismiss_a11y_label"),icon:"fas fa-times",className:"Button Button--link Button--icon Alert-dismiss",onclick:f})),m("div",e,m("div",{className:(0,a.Z)("Alert-container",e.containerClassName)},!!r&&m("div",{className:"Alert-title"},!!u&&m("span",{className:"Alert-title-icon"},m(c.Z,{name:u})),m("span",{className:"Alert-title-text"},r)),m("span",{className:"Alert-body"},d),m("ul",{className:"Alert-controls"},(0,o.Z)(h.concat(g)))))}}flarum.reg.add("core","common/components/Alert",u)},8588:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(2190);class s extends r.Z{oninit(t){super.oninit(t),this.state=this.attrs.state}view(){const t=this.state.getActiveAlerts();return m("div",{className:"AlertManager"},Object.keys(t).map(Number).map((e=>{const n=t[e],r="error"===n.attrs.type;return m("div",{className:"AlertManager-alert",role:"alert","aria-live":r?"assertive":"polite"},m(n.componentClass,Object.assign({},n.attrs,{ondismiss:this.state.dismiss.bind(this.state,e)}),n.children))})))}}flarum.reg.add("core","common/components/AlertManager",s)},7323:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3344),s=n(2190);class o extends s.Z{view(t){const{user:e,...n}=t.attrs;n.className=(0,r.Z)("Avatar",n.className),null!=n.loading||(n.loading="lazy");let s="";const o="undefined"===n.title||n.title;if(o||delete n.title,e){const t=e.displayName()||"?",r=e.avatarUrl();if(o&&(n.title=n.title||t),r)return m("img",Object.assign({},n,{src:r,alt:""}));s=t.charAt(0).toUpperCase(),n.style={"--avatar-bg":e.color()}}return m("span",n,s)}}flarum.reg.add("core","common/components/Avatar",o)},3804:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(6439),s=n(2190),o=n(3344),i=n(9215),a=n(9133);class l extends s.Z{view(){const{type:t,icon:e,label:n,color:s,style:l={},...c}=this.attrs,u=(0,o.Z)("Badge",[t&&"Badge--".concat(t)],c.className,(0,i.Z)(s)),d=e?m(a.Z,{name:e,className:"Badge-icon"}):m.trust(" "),h={...l,"--badge-bg":s},p={...c,className:u,style:h},f=m("div",p,d);return n?m(r.Z,{text:n},f):f}}flarum.reg.add("core","common/components/Badge",l)},8312:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(7465);function o(){s.Z.forum.attribute("debug")&&console.warn(...arguments)}flarum.reg.add("core","common/helpers/fireDebugWarning",o);var i=n(3344),a=n(1552),l=n(5226),c=n(9133);class u extends r.Z{view(t){let{type:e,"aria-label":n,icon:r,disabled:s,loading:o,className:l,class:c,...u}=this.attrs;e||(e="button"),"object"==typeof n&&(n=(0,a.Z)(n)),(s||o)&&delete u.onclick,l=(0,i.Z)(c,l,{hasIcon:r,disabled:s||o,loading:o});const d={disabled:s,className:l,type:e,"aria-label":n,...u};return m("button",d,this.getButtonContent(t.children))}oncreate(t){var e,n;super.oncreate(t);const{"aria-label":r}=this.attrs;this.view!==u.prototype.view||r||(0,a.Z)(t.children)||null!=(e=this.element)&&null!=(n=e.getAttribute)&&n.call(e,"aria-label")||o('[Flarum Accessibility Warning] Button has no content and no accessible label. This means that screen-readers will not be able to interpret its meaning and just read "Button". Consider providing accessible text via the `aria-label` attribute. https://web.dev/button-name',this.element)}getButtonContent(t){const e=this.attrs.icon;return[e&&m(c.Z,{name:e,className:"Button-icon"}),t&&m("span",{className:"Button-label"},t),this.attrs.loading&&m(l.Z,{size:"small",display:"inline"})]}}flarum.reg.add("core","common/components/Button",u)},7298:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(2190),s=n(5226),o=n(3344),i=n(7669),a=n(9133);class l extends r.Z{view(t){const e=(0,o.Z)(["Checkbox",this.attrs.state?"on":"off",this.attrs.className,this.attrs.loading&&"loading",this.attrs.disabled&&"disabled"]);return m("label",{className:e},m("input",{type:"checkbox",checked:this.attrs.state,disabled:this.attrs.disabled,onchange:(0,i.Z)("checked",this.onchange.bind(this))}),m("div",{className:"Checkbox-display","aria-hidden":"true"},this.getDisplay()),t.children)}getDisplay(){return this.attrs.loading?m(s.Z,{display:"unset",size:"small"}):m(a.Z,{name:this.attrs.state?"fas fa-check":"fas fa-times"})}onchange(t){this.attrs.onchange&&this.attrs.onchange(t,this)}}flarum.reg.add("core","common/components/Checkbox",l)},344:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(7905),s=n(7465),o=n(2190),i=n(1268),a=n(1552),l=n(6439),c=n(9133);class u extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"showing",!1)}static initAttrs(t){t.className||(t.className=""),t.buttonClassName||(t.buttonClassName=""),t.menuClassName||(t.menuClassName=""),t.label||(t.label=""),null!=t.caretIcon||(t.caretIcon="fas fa-caret-down"),t.accessibleToggleLabel||(t.accessibleToggleLabel=(0,a.Z)(s.Z.translator.trans("core.lib.dropdown.toggle_dropdown_accessible_label")))}view(t){const e=t.children?(0,i.Z)(t.children):[],n=!this.attrs.lazyDraw||this.showing;return m("div",{className:"ButtonGroup Dropdown dropdown "+this.attrs.className+" itemCount"+e.length+(this.showing?" open":"")},this.getButton(t.children),n&&this.getMenu(e))}oncreate(t){super.oncreate(t),this.$().on("shown.bs.dropdown",(()=>{var t,e,n,r,s,o,i,a,l,c,u;const{lazyDraw:d,onshow:h}=this.attrs;this.showing=!0,d&&m.redraw.sync(),"function"==typeof h&&h(),d||m.redraw();const p=this.$(".Dropdown-menu"),f=p.hasClass("Dropdown-menu--right"),g=null!=(t=null==(e=p.offset())?void 0:e.top)?t:0,v=null!=(n=p.height())?n:0,b=null!=(r=$(window).scrollTop())?r:0,y=null!=(s=$(window).height())?s:0;p.removeClass("Dropdown-menu--top Dropdown-menu--right"),p.toggleClass("Dropdown-menu--top",g+v>b+y),((null==(o=p.offset())?void 0:o.top)||0)<0&&p.removeClass("Dropdown-menu--top");const w=null!=(i=null==(a=p.offset())?void 0:a.left)?i:0,Z=null!=(l=p.width())?l:0,x=null!=(c=$(window).scrollLeft())?c:0,N=null!=(u=$(window).width())?u:0;p.toggleClass("Dropdown-menu--right",f||w+Z>x+N)})),this.$().on("hidden.bs.dropdown",(()=>{this.showing=!1,this.attrs.onhide&&this.attrs.onhide(),m.redraw()}))}getButton(t){let e=m("button",{className:"Dropdown-toggle "+this.attrs.buttonClassName,"aria-haspopup":"menu","aria-label":this.attrs.accessibleToggleLabel,"data-toggle":"dropdown",onclick:this.attrs.onclick},this.getButtonContent(t));return this.attrs.tooltip&&(e=m(l.Z,{text:this.attrs.tooltip,position:"bottom"},e)),e}getButtonContent(t){return[this.attrs.icon?m(c.Z,{name:this.attrs.icon,className:"Button-icon"}):"",m("span",{className:"Button-label"},this.attrs.label),this.attrs.caretIcon?m(c.Z,{name:this.attrs.caretIcon,className:"Button-caret"}):""]}getMenu(t){return m("ul",{className:"Dropdown-menu dropdown-menu "+this.attrs.menuClassName},t)}}flarum.reg.add("core","common/components/Dropdown",u)},8034:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(2190),s=n(3344);class o extends r.Z{view(t){return m("div",{className:(0,s.Z)("FieldSet",this.attrs.className),role:"group","aria-label":this.attrs.label,"aria-disabled":!1},m("label",{className:"FieldSet-label","aria-hidden":"true"},this.attrs.label),this.attrs.description?m("div",{className:"FieldSet-description helpText"},this.attrs.description):null,m("div",{className:"FieldSet-items"},t.children))}}flarum.reg.add("core","common/components/FieldSet",o)},6352:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(2190),s=n(3344);class o extends r.Z{view(t){const{label:e,description:n,className:r,...o}=t.attrs;return m("div",Object.assign({className:(0,s.Z)("Form",r)},o),m("div",{className:"Form-header"},e&&m("label",null,e),n&&m("p",{className:"helpText"},n)),m("div",{className:"Form-body"},t.children))}}flarum.reg.add("core","common/components/Form",o)},899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7108);class s extends r.Z{wrapper(t){return m("form",{onsubmit:this.onsubmit.bind(this)},t)}onsubmit(t){}onready(){this.$().find("input, select, textarea").first().trigger("focus").trigger("select")}onerror(t){var e;this.alertAttrs=t.alert,m.redraw(),422===t.status&&null!=(e=t.response)&&e.errors?this.$("form [name="+t.response.errors[0].source.pointer.replace("/data/attributes/","")+"]").trigger("select"):this.onready()}}flarum.reg.add("core","common/components/FormModal",s)},6697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(3804);class s extends r.Z{static initAttrs(t){super.initAttrs(t),t.group&&(t.icon=t.group.icon()||"",t.color=t.group.color()||"",t.label=void 0===t.label?t.group.nameSingular():t.label,t.type="group--"+t.group.id(),delete t.group)}}flarum.reg.add("core","common/components/GroupBadge",s)},9133:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3344),s=n(2190);class o extends s.Z{view(t){const{name:e,...n}=t.attrs;return n.className=(0,r.Z)("icon",e,n.className),m("i",Object.assign({"aria-hidden":"true"},n))}}flarum.reg.add("core","common/components/Icon",o)},3986:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(2190),s=n(9133),o=n(3344);class i extends r.Z{view(t){const{icon:e,className:n,...r}=t.attrs;return m("div",Object.assign({className:(0,o.Z)("InfoTile",n)},r),this.icon(),m("div",{className:"InfoTile-text"},t.children))}icon(){return this.attrs.iconElement?this.attrs.iconElement:this.attrs.icon?m(s.Z,{name:(0,o.Z)(this.attrs.icon,"InfoTile-icon")}):null}}flarum.reg.add("core","common/components/InfoTile",i)},9908:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(6789),s=n(2190),o=n(9133),i=n(5226),a=n(3344),l=n(8312);class c extends s.Z{oninit(t){super.oninit(t)}view(t){var e,n;const{className:s,...c}=this.attrs.inputAttrs||{},u=this.attrs.value||(null==(e=(n=this.attrs).stream)?void 0:e.call(n))||"";return m("div",{className:(0,a.Z)("Input",this.attrs.className,{"Input--withPrefix":this.attrs.prefixIcon,"Input--withClear":this.attrs.clearable})},this.attrs.prefixIcon&&m(o.Z,{name:(0,a.Z)(this.attrs.prefixIcon,"Input-prefix-icon")}),this.input({inputClassName:s,value:u,inputAttrs:c}),this.attrs.loading&&m(i.Z,{size:"small",display:"inline",containerClassName:"Button Button--icon Button--link"}),this.attrs.clearable&&u&&!this.attrs.loading&&m(l.Z,{className:"Input-clear Button Button--icon Button--link",onclick:this.clear.bind(this),"aria-label":this.attrs.clearLabel||r.Z.translator.trans("core.lib.input.clear_button"),type:"button",icon:"fas fa-times-circle"}))}input(t){let{inputClassName:e,value:n,inputAttrs:r}=t;const s={className:(0,a.Z)("FormControl",e),type:this.attrs.type||"text",value:n,oninput:t=>{var e;return null==(e=this.onchange)?void 0:e.call(this,t.target.value)},"aria-label":this.attrs.ariaLabel,placeholder:this.attrs.placeholder,readonly:this.attrs.readonly||void 0,disabled:this.attrs.disabled||void 0,...r};return this.attrs.renderInput?this.attrs.renderInput(s):m("input",s)}onchange(t){var e,n;this.attrs.stream?this.attrs.stream(t):null==(e=(n=this.attrs).onchange)||e.call(n,t)}clear(){this.onchange("")}}flarum.reg.add("core","common/components/Input",c)},5226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7465),s=n(2190),o=n(3344);class i extends s.Z{view(){const{display:t="block",size:e="medium",containerClassName:n,className:s,...i}=this.attrs,a=(0,o.Z)("LoadingIndicator",s),l=(0,o.Z)("LoadingIndicator-container","unset"!==t&&"LoadingIndicator-container--".concat(t),e&&"LoadingIndicator-container--".concat(e),n);return m("div",Object.assign({"aria-label":r.Z.translator.trans("core.lib.loading_indicator.accessible_label"),role:"status"},i.containerAttrs,{"data-size":e,className:l}),m("div",Object.assign({"aria-hidden":"true",className:a},i)))}}flarum.reg.add("core","common/components/LoadingIndicator",i)},7108:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(7905),s=n(7465),o=n(2190),i=n(3817),a=n(8312),l=n(3344);class c extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"loading",!1),(0,r.Z)(this,"alertAttrs",null)}static get dismissibleOptions(){return{viaCloseButton:this.isDismissibleViaCloseButton,viaEscKey:this.isDismissibleViaEscKey,viaBackdropClick:this.isDismissibleViaBackdropClick}}oncreate(t){super.oncreate(t),this.attrs.animateShow((()=>this.onready()))}onbeforeremove(t){if(super.onbeforeremove(t),!this.attrs.state.modal)return new Promise((t=>setTimeout(t,300)))}view(){return this.alertAttrs&&(this.alertAttrs.dismissible=!1),m("div",{className:(0,l.Z)("Modal modal-dialog fade",this.className())},m("div",{className:"Modal-content"},this.dismissibleOptions.viaCloseButton&&m("div",{className:"Modal-close App-backControl"},m(a.Z,{icon:"fas fa-times",onclick:()=>this.hide(),className:"Button Button--icon Button--link","aria-label":s.Z.translator.trans("core.lib.modal.close")})),this.wrapper(this.inner())))}wrapper(t){return m("[",null,t)}inner(){return m("[",null,m("div",{className:"Modal-header"},m("h3",{className:"App-titleControl App-titleControl--text"},this.title())),!!this.alertAttrs&&m("div",{className:"Modal-alert"},m(i.Z,this.alertAttrs)),this.content())}onready(){}hide(){this.attrs.animateHide()}loaded(){this.loading=!1,m.redraw()}get dismissibleOptions(){return this.constructor.dismissibleOptions}}(0,r.Z)(c,"isDismissibleViaCloseButton",!0),(0,r.Z)(c,"isDismissibleViaEscKey",!0),(0,r.Z)(c,"isDismissibleViaBackdropClick",!0),flarum.reg.add("core","common/components/Modal",c)},7224:(t,e,n)=>{"use strict";n.d(e,{Z:()=>w});var r=n(7905),s=n(2190),o=n(7835),i=!1;if("undefined"!=typeof window){var a={get passive(){i=!0}};window.addEventListener("testPassive",null,a),window.removeEventListener("testPassive",null,a)}var l="undefined"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||"MacIntel"===window.navigator.platform&&window.navigator.maxTouchPoints>1),c=[],u=!1,d=-1,h=void 0,p=void 0,f=void 0,g=function(t){return c.some((function(e){return!(!e.options.allowTouchMove||!e.options.allowTouchMove(t))}))},v=function(t){var e=t||window.event;return!!g(e.target)||e.touches.length>1||(e.preventDefault&&e.preventDefault(),!1)},b=function(){l&&(c.forEach((function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null})),u&&(document.removeEventListener("touchmove",v,i?{passive:!1}:void 0),u=!1),d=-1),l?function(){if(void 0!==p){var t=-parseInt(document.body.style.top,10),e=-parseInt(document.body.style.left,10);document.body.style.position=p.position,document.body.style.top=p.top,document.body.style.left=p.left,window.scrollTo(e,t),p=void 0}}():(void 0!==f&&(document.body.style.paddingRight=f,f=void 0),void 0!==h&&(document.body.style.overflow=h,h=void 0)),c=[]},y=n(5226);class w extends s.Z{constructor(){super(...arguments),(0,r.Z)(this,"focusTrap",void 0),(0,r.Z)(this,"lastSetFocusTrap",void 0),(0,r.Z)(this,"modalClosing",!1),(0,r.Z)(this,"keyUpListener",null)}view(t){return m("[",null,this.attrs.state.modalList.map(((t,e)=>{const n=null==t?void 0:t.componentClass;return m("div",{key:t.key,className:"ModalManager modal","data-modal-key":t.key,"data-modal-number":e,role:"dialog","aria-modal":"true",style:{"--modal-number":e},"aria-hidden":this.attrs.state.modal!==t&&"true"},!!n&&[m(n,Object.assign({key:t.key},t.attrs,{animateShow:this.animateShow.bind(this),animateHide:this.animateHide.bind(this),state:this.attrs.state})),m("div",{key:t.key,className:"ModalManager-invisibleBackdrop",onclick:this.handlePossibleBackdropClick.bind(this)})])})),(this.attrs.state.backdropShown||this.attrs.state.loadingModal)&&m("div",{className:"Modal-backdrop backdrop",ontransitionend:this.onBackdropTransitionEnd.bind(this),"data-showing":!!this.attrs.state.modalList.length||this.attrs.state.loadingModal,style:{"--modal-count":this.attrs.state.modalList.length+Number(this.attrs.state.loadingModal)}},this.attrs.state.loadingModal&&m(y.Z,null)))}oncreate(t){super.oncreate(t),this.keyUpListener=this.handleEscPress.bind(this),document.body.addEventListener("keyup",this.keyUpListener)}onbeforeremove(t){super.onbeforeremove(t),this.keyUpListener&&document.body.removeEventListener("keyup",this.keyUpListener),this.keyUpListener=null}onupdate(t){super.onupdate(t),requestAnimationFrame((()=>{try{var t,e,n,r;if(!this.attrs.state.isModalOpen())return null==(e=document.getElementById("app"))||e.setAttribute("aria-hidden","false"),null==(n=(r=this.focusTrap).deactivate)||n.call(r),void b();null==(t=document.getElementById("app"))||t.setAttribute("aria-hidden","true");const w=this.attrs.state.modal.key;var s,a,m,y;this.focusTrap&&this.lastSetFocusTrap!==w&&(null==(s=(a=this.focusTrap).deactivate)||s.call(a),b()),this.activeDialogElement&&this.lastSetFocusTrap!==w&&(this.focusTrap=(0,o.v)(this.activeDialogElement,{allowOutsideClick:!0}),null==(m=(y=this.focusTrap).activate)||m.call(y),function(t,e){if(t){if(!c.some((function(e){return e.targetElement===t}))){var n={targetElement:t,options:e||{}};c=[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=r&&(document.body.style.top=-(e+t))}))}),300)}})):function(t){if(void 0===f){var e=!!t&&!0===t.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(e&&n>0){var r=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);f=document.body.style.paddingRight,document.body.style.paddingRight=r+n+"px"}}void 0===h&&(h=document.body.style.overflow,document.body.style.overflow="hidden")}(e),l&&(t.ontouchstart=function(t){1===t.targetTouches.length&&(d=t.targetTouches[0].clientY)},t.ontouchmove=function(e){1===e.targetTouches.length&&function(t,e){var n=t.targetTouches[0].clientY-d;!g(t.target)&&(e&&0===e.scrollTop&&n>0||function(t){return!!t&&t.scrollHeight-t.scrollTop<=t.clientHeight}(e)&&n<0?v(t):t.stopPropagation())}(e,t)},u||(document.addEventListener("touchmove",v,i?{passive:!1}:void 0),u=!0))}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")}(this.activeDialogManagerElement,{reserveScrollBarGap:!0})),this.lastSetFocusTrap=w}catch{}}))}get activeDialogElement(){var t;return document.body.querySelector('.ModalManager[data-modal-key="'.concat(null==(t=this.attrs.state.modal)?void 0:t.key,'"] .Modal'))}get activeDialogManagerElement(){var t;return document.body.querySelector('.ModalManager[data-modal-key="'.concat(null==(t=this.attrs.state.modal)?void 0:t.key,'"]'))}animateShow(t){void 0===t&&(t=()=>{}),this.attrs.state.modal&&(this.activeDialogElement.addEventListener("transitionend",(()=>{t()}),{once:!0}),requestAnimationFrame((()=>{this.activeDialogElement.classList.add("in")})))}animateHide(t){void 0===t&&(t=()=>{}),this.modalClosing||(this.modalClosing=!0,this.activeDialogElement.addEventListener("transitionend",(()=>{this.modalClosing=!1,this.attrs.state.close(),t()}),{once:!0}),this.activeDialogElement.classList.remove("in"),this.activeDialogElement.classList.add("out"))}handleEscPress(t){if(!this.attrs.state.modal)return;const e=this.attrs.state.modal.componentClass.dismissibleOptions;"Escape"===t.key&&e.viaEscKey&&(t.preventDefault(),this.animateHide())}handlePossibleBackdropClick(t){this.attrs.state.modal&&this.attrs.state.modal.componentClass.dismissibleOptions.viaBackdropClick&&this.animateHide()}onBackdropTransitionEnd(t){"opacity"===t.propertyName&&null===t.currentTarget.getAttribute("data-showing")&&(this.attrs.state.backdropShown=!1,m.redraw())}}flarum.reg.add("core","common/components/ModalManager",w)},5386:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(7465),s=n(2190),o=n(8312),i=n(2360),a=n(3344);class l extends s.Z{view(){const{history:t,pane:e}=r.Z;return m("div",{className:(0,a.Z)("Navigation ButtonGroup",this.attrs.className),onmouseenter:e&&e.show.bind(e),onmouseleave:e&&e.onmouseleave.bind(e)},null!=t&&t.canGoBack()?[this.getBackButton(),this.getPaneButton()]:this.getDrawerButton())}getBackButton(){const{history:t}=r.Z,e=null==t?void 0:t.getPrevious();return m(i.Z,{className:"Button Navigation-back Button--icon",href:null==t?void 0:t.backUrl(),icon:"fas fa-chevron-left","aria-label":null==e?void 0:e.title,onclick:e=>{e.shiftKey||e.ctrlKey||e.metaKey||2===e.which||(e.preventDefault(),null==t||t.back())}})}getPaneButton(){const{pane:t}=r.Z;return t&&t.active?m(o.Z,{className:(0,a.Z)("Button Button--icon Navigation-pin",{active:t.pinned}),onclick:t.togglePinned.bind(t),icon:"fas fa-thumbtack"}):null}getDrawerButton(){if(!this.attrs.drawer)return null;const{drawer:t}=r.Z,e=r.Z.session.user;return m(o.Z,{className:(0,a.Z)("Button Button--icon Navigation-drawer",{new:null==e?void 0:e.newNotificationCount()}),onclick:e=>{e.stopPropagation(),t.show()},icon:"fas fa-bars","aria-label":r.Z.translator.trans("core.lib.nav.drawer_button")})}}flarum.reg.add("core","common/components/Navigation",l)},4661:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(7905),s=n(7465),o=n(2190),i=n(5013);class a extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"bodyClass",""),(0,r.Z)(this,"scrollTopOnCreate",!0),(0,r.Z)(this,"useBrowserScrollRestoration",!0)}oninit(t){super.oninit(t),s.Z.previous=s.Z.current,s.Z.current=new i.Z(this.constructor,{routeName:this.attrs.routeName}),s.Z.drawer.hide(),s.Z.modal.close()}oncreate(t){super.oncreate(t),this.bodyClass&&$("#app").addClass(this.bodyClass),this.scrollTopOnCreate&&$(window).scrollTop(0),"scrollRestoration"in history&&(history.scrollRestoration=this.useBrowserScrollRestoration?"auto":"manual")}onremove(t){super.onremove(t),this.bodyClass&&$("#app").removeClass(this.bodyClass)}}flarum.reg.add("core","common/components/Page",a)},406:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7108);class s extends r.Z{className(){return"RequestErrorModal Modal--large"}title(){return!!this.attrs.error.xhr&&"".concat(this.attrs.error.xhr.status," ").concat(this.attrs.error.xhr.statusText)}content(){var t;const{error:e,formattedError:n}=this.attrs;let r;return r=n.length?n.join("\n\n"):e.response?JSON.stringify(e.response,null,2):e.responseText,null!=(t=r)&&t.includes("