const zt=(v,t,s,i)=>({linear:(e,n,o,c)=>o*e/c+n,easeInOutQuad:(e,n,o,c)=>(e/=c*.5,e<1?o*.5*e*e+n:(e--,-o/2*(e*(e-2)-1)+n))})[i](s,v,t-v,1);class Yt{constructor(t){this.queue={},this.queueSize=0,this.step=()=>{const s=[],i=+new Date;let a,e,n,o,c;const r={top:!1,bottom:!1};for(const h in this.queue){a=this.queue[h],e=i,n=a.endDt-a.startDt,c=a.state[h];const m=ea.endDt&&(e=a.endDt),o=n?(e-a.startDt)/n:m?0:1;let l;o<1?a.tween==="exp"?l=c+(a.end-c)*a.speed:l=zt(a.start,a.end,o,a.tween):l=a.end,l!==c?(a.state[h]=l,r.top=r.top||a.group.top,r.bottom=r.bottom||a.group.bottom):l===a.end&&s.push(h)}let d=0;for(;dv.slice(0,3)),Ct=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Nt=Ct.map(v=>v.slice(0,3));function Ot(v,t){return Ft(v,t)}let St;function Ft(v,t){return St===void 0&&(St=new Date().getTimezoneOffset()*6e4),t.getLabelTime(864e5+ +v*36e5+St)}function Et(v,t){return t.getLabelDate(v,{isShort:!0,displayYear:!1})}function Pt(v,t){return t.getLabelTime(v)}function Xt(v,{isShort:t,isMonthShort:s=!0,displayWeekDay:i,displayYear:a=!0,displayHours:e}={}){const n=new Date(v),o=t?Nt:Ct;let c=`${n.getUTCDate()} ${(s?Ht:kt)[n.getUTCMonth()]}`;return i&&(c=`${o[n.getUTCDay()]}, `+c),a&&(c+=` ${n.getUTCFullYear()}`),e&&(c+=`, ${("0"+n.getUTCHours()).slice(-2)}:${("0"+n.getUTCMinutes()).slice(-2)}`),c}function Gt(v){return new Date(v).toString().match(/(\d+:\d+):/)[1]}Math.log2||(Math.log2=function(v){return Math.log(v)*Math.LOG2E});Math.log10||(Math.log10=function(v){return Math.log(v)*Math.LOG10E});function Bt(v,t,s,i,a,e,n,o,c){const r=(o-n)/c,d=[],h=[];if(r<=1)return{xInd1:n,xInd2:o,x:t,ys:s};{let m=0,l=-999999999;const p=e.length;let g;for(let f=n;f<=o;f++){const $=t[f]*i+a<<0,u=$>l;u?(d[m]=t[f],m++):g++;for(let x=0;x1&&(u&&(h[_].y[m-2]/=g),f===o&&(h[_].y[m-1]/=g))}u&&(g=1),l=$}return n=0,o=m-1,{isOptimized:r>1,xInd1:0,xInd2:m-1,x:d,ys:h}}}function ft(v){const t=v.getBoundingClientRect();return{x:t.left+(window.pageXOffset||document.documentElement.scrollLeft),y:t.top+(window.pageYOffset||document.documentElement.scrollTop)}}function J(v,t,s){let i=0,a=v.length-1;for(s||(tv[a]&&(t=v[a]));Math.abs(i-a)>1;){const e=Math.round((i+a)/2);t>=v[i]&&t<=v[e]?a=e:i=e}return i+(t-v[i])/(v[a]-v[i])}function bt(v,t){typeof window.CustomEvent=="function"&&document.dispatchEvent(new CustomEvent(v,{detail:t||null}))}function $t(){const v=" -webkit- -moz- -o- -ms- ".split(" "),t=i=>window.matchMedia(i).matches;if("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)return!0;const s=["(",v.join("touch-enabled),("),"heartz",")"].join("");return t(s)}function vt(v,t,s,i,a,e,n){s*=t,i*=t,a*=t,e*=t,typeof n=="number"&&(n=[n,n,n,n]),n[0]*=t,n[1]*=t,n[2]*=t,n[3]*=t,v.beginPath(),v.moveTo(a+n[0],e),v.lineTo(a+s-n[1],e),v.quadraticCurveTo(a+s,e,a+s,e+n[1]),v.lineTo(a+s,e+i-n[2]),v.quadraticCurveTo(a+s,e+i,a+s-n[2],e+i),v.lineTo(a+n[3],e+i),v.quadraticCurveTo(a,e+i,a,e+i-n[3]),v.lineTo(a,e+n[0]),v.quadraticCurveTo(a,e,a+n[0],e),v.closePath()}function Wt(v,t,s,i,a,e,n){s*=t,i*=t,a*=t,e*=t,n*=t,s<2*n&&(n=s/2),i<2*n&&(n=i/2),v.beginPath(),v.moveTo(a+n,e),v.arcTo(a+s,e,a+s,e+i,n),v.arcTo(a+s,e+i,a,e+i,n),v.arcTo(a,e+i,a,e,n),v.arcTo(a,e,a+s,e,n),v.closePath()}function lt(v,t,s){const a=(s&&s>.5&&t.details?t.details:t)[v],e={statsFormatDayHourFull:o=>Ft(o,t),statsFormatDayHour:o=>Ot(o,t),"statsFormat('week')":o=>Et(o,t),"statsFormat('day')":o=>Et(o,t),"statsFormat('hour')":o=>Pt(o,t),"statsFormat('5min')":o=>Pt(o,t),statsFormatTooltipValue:Ut,"statsTooltipFormat('week')":o=>t.getLabelDate(o),"statsTooltipFormat('day')":o=>t.getLabelDate(o),"statsTooltipFormat('hour')":o=>t.getLabelTime(o),"statsTooltipFormat('5min')":o=>t.getLabelTime(o),null:o=>""+o};let n=e[a]||e.null;return a==="null"&&(n={xRangeFormatter:c=>t.getLabelDate(c,{isShort:!1,isMonthShort:!1}),yTickFormatter:Vt}[v]||n),n}function Vt(v,t,s){return v===0?"0":t<1e3?""+Math.floor(v):t>=1e3&&t<1e6?s?Math.floor(10*v/1e3)/10+"K":Math.round(v/1e3)+"K":s?Math.floor(10*v/1e6)/10+"M":Math.round(v/1e6)+"M"}function Ut(v){return typeof v!="number"?typeof v=="string"?v:"?":Zt(v)}function Zt(v,t,s){if(v===0)return"0";t===void 0&&(t=Jt(v));const i=qt(v,t);return s===void 0&&(s=jt(i)),i.toFixed(s)+t}function qt(v,t){switch(t){case"K":return v/1e3;case"M":return v/1e6;case"B":return v/1e9;case"T":return v/1e12}return v}function jt(v){var t=Math.abs(v);return t>10?0:t>=1?Math.abs(t-Math.floor(t))<.001?0:1:2}function Jt(v){var t=Math.abs(v);return t>=1e12?"T":t>=1e9?"B":t>=1e6?"M":t>=2e3?"K":""}function Kt(v,t,s,i){Math.abs(t-v)<1&&(v-=v/10,t+=t/10);const a=m=>{const l=o*m,p=Math.floor(v/l)*l,g=p+s*Math.ceil((t-p)*e/l)*l;return{good:g<=r&&p>=c,yMin:Math.round(p),yMax:Math.round(g),yMinOrig:v,yMaxOrig:t}},e=1/s,n=(t-v)*e;let o=Math.max(Math.pow(10,Math.floor(Math.log10(n))),1);const c=v-n*.5,r=t+n*.5;let d,h=1;for(;d=a(5),!(d.good||(d=a(2),d.good)||(d=a(1),d.good));)if(o*=.1,h++,h>10)return{yMinOrig:v,yMaxOrig:t,yMin:v,yMax:t};return d}class Qt{constructor(t){this.opts=t,t.additional.mini&&(this.$canvas=document.createElement("canvas"),this.ctx=this.$canvas.getContext("2d",{alpha:!0}))}onResize(){if(this.opts.additional.mini){var t=this.opts.settings.dpi,s=this.opts.additional.mini?this.opts.state.dims.mini:this.opts.state.dims.graph;this.$canvas.width=s.w*t,this.$canvas.height=s.h*t,this.cached=""}}setDarkMode(t){this.isDarkMode=t}render(){let t,s,i,a,e;const n=this.opts,o=n.data.ys,c=n.state,r=n.additional.mini,d=r?c.xg1:c.x1,h=r?c.xg2:c.x2,m=n.settings,l=m[`PADD${r?"_MINI_AREA":""}`][0],p=m[`PADD${r?"_MINI_AREA":""}`][1],g=m[`PADD${r?"_MINI_AREA":""}`][2],f=m[`PADD${r?"_MINI_AREA":""}`][3],$=n.data.x,u=n.settings.dpi,x=r?this.ctx:this.opts.ctx,_=[],T=[],R=0,S=r?c.dims.mini:c.dims.graph,D=c.zoomMorph===void 0?0:c.zoomMorph;let w=D;c.zoomMode;const L=o.length;if(r){const et=[S.w,S.h,c.xg1,c.xg2,this.isDarkMode,c.zoomMode,D];for(t=0;t0&&(z=a),a>0&&(A.push(t),F.push(a),a===1&&c[`e_${t}`]&&(K++,Q=A.length-1));const X=A.length;z=K===1?z:1,r?c.y1m:c.y1,r?c.y2m:c.y2;const it=Bt("line",$,o,e,I,A,M,b,S.w-p-f);M=it.xInd1,b=it.xInd2;const k=it.x,Z=it.ys;let H=!1;for(s=M;s<=b;s++){for(_[s]=0,T[s]=0,t=0;t0&&!r){w===1&&(this.savedX1=d,this.savedX2=h);let et,q;if(w<1){const P=this.opts.animator.get("x1"),O=this.opts.animator.get("x2"),tt=P?P.end:this.opts.state.x1,st=O?O.end:this.opts.state.x2;et=J($,this.opts.state.zoomDir===-1?this.savedX1:tt,!0),q=J($,this.opts.state.zoomDir===-1?this.savedX2:st,!0)}else et=J($,d,!0),q=J($,h,!0);q--;var B=Math.floor(et),rt=Math.ceil(et),ct=Math.floor(q),xt=Math.ceil(q),ht=0,ut=[];for(t=0;t0)for(x.moveTo(k[b]*e+I<<0,y-_[b]+R<<0),s=b-1;s>=M;s--)x.lineTo(k[s]*e+I<<0,y-_[s]+R<<0);else x.moveTo(k[b]*e+I<<0,y<<0),x.lineTo(k[M]*e+I<<0,y<<0);if(Vgt&&(W=gt),x.lineTo(k[s]*e+I<<0,y-W<<0),_[s]+=j}else x.lineTo(k[M]*e+I<<0,y-gt<<0),x.lineTo(k[b]*e+I<<0,y-gt<<0)}else{const q=(O,tt,st,nt)=>{let dt=0,Mt=0;pt&&K>1&&(dt=Math.cos(E[V].mid)*pt*8*u,Mt=-Math.sin(E[V].mid)*pt*8*u),nt>N&&(nt=N);let mt=Math.atan2(G-tt,O-C);mt=mt<0?Math.PI*2+mt:mt;const _t=Math.pow((G-tt)*(G-tt)+(O-C)*(O-C),.5);Math.abs(st-mt)>Math.PI*(X===1?1.5:1)&&(st-=Math.PI*2),st<-Math.PI*2&&(st-=-Math.PI*2);const Tt=mt+w*(st-mt),At=_t+w*(nt-_t);return[C+Math.cos(Tt)*At+dt,G-Math.sin(Tt)*At+Mt]},j=D<1?4:E[V].additionalPoints;let W,at=!1,ot=!1,U;var pt=c[`pieInd_${A[V]}`]||0;E[V].percentage===0&&(x.globalAlpha=0);let P=q(k[b]*e+I,y-_[b],E[0].st,N);if(x.moveTo(P[0],P[1]),V>0)for(s=b-1;s>=M;s--){if(U=k[s]*e+I,U===C&&(at=!0),U>=C)W=(U-C)/(S.w*u/2),w===0&&(W=0),P=q(U,y-_[s]+R,E[0].st,N*W);else{if(!at){at=!0;const O=(C-U)/(k[s+1]*e+I-U),tt=y-_[s]+R,st=y-_[s+1]+R;P=q(C,tt+O*(st-tt),E[V].st,0),x.lineTo(P[0],P[1])}W=(C-U)/(S.w*u/2),P=q(U,y-_[s]+R,E[V].st,N*W)}x.lineTo(P[0],P[1])}else P=q(k[M]*e+I,y,E[0].st,N),x.lineTo(P[0],P[1]);if(V0)for(x.lineTo(k[b]*e+I,y-_[b]),s=b;s>=M+1;s--)x.lineTo(k[s]*e+I,y-(_[s]+w*(_[s-1]-_[s]))+R),x.lineTo(k[s-1]*e+I,y-_[s-1]+R);else x.lineTo(k[M]*e+I,y);let j;if(V0&&E[V].percentageText){const q=Math.pow(w,this.opts.state.zoomDir===1?4:20)*a*(c[`f_${t}`]*.9+.1);let j=Math.max(Math.min(E[V].percentage*2,26),10);const W=m.PIE_RADIUS;let at=W*2/3;const ot=Math.cos(E[V].mid),U=Math.sin(E[V].mid),P=E[V].percentage1&&(O=ot*pt*8*u,tt=-U*pt*8*u),x.fillStyle="white",x.textAlign="center",x.globalAlpha=q,E[V].percentage{delete this.items[s.ind]},this.opts=t,this.ctx=t.ctx,this.items={},this.setAnimation(!1)}onResize(){this.setAnimation(!1)}setDarkMode(t){this.isDarkMode=t}setAnimation(t){this.noAnimation=!t}hideItem(t,s){this.items[t].tp=2,this.opts.animator.add([{prop:`ox_${t}`,state:this.items[t].state,end:0,duration:this.noAnimation?0:200*s,tween:"linear",group:{top:!0},cbEnd:this.deleteItem}])}render(t){const s=this.opts,i=s.settings.dpi,a=s.data.x,e=s.state,n=s.settings.PADD[1],o=s.settings.PADD[3],c=s.animator;a.length;const r=this.opts.state.dims.axisX,d=this.opts.state.dims.dates,h=e.zoomMode,m=e.zoomMorph===void 0?0:e.zoomMorph,l=Math.floor(J(a,e.x1)),p=Math.ceil(J(a,e.x2));let g=l,f=p;const $=s.graphStyle==="bar"||s.graphStyle==="step",u=(e.zoomMode&&s.data.details?s.data.details.maxXTickLength:s.data.maxXTickLength)*9,x=$?this.opts.data.mainPeriodLen:0,_=$?this.opts.data.detailPeriodLen:0,T=x+(_-x)*m,R=x*(1-m),S=(r.w-n-o)/Math.round((e.x2-e.x1+x)/this.opts.data.mainPeriodLen),D=(r.w-n-o)/Math.round((e.x2-e.x1+_)/this.opts.data.detailPeriodLen),w=S+(D-S)*m;let L=Math.pow(2,Math.ceil(Math.log2(u/S))),M=Math.pow(2,Math.ceil(Math.log2(u/D)));const b=(r.w-o-n)/(e.x2-e.x1+R);L<1&&(L=1),M<1&&(M=1),this.ctx.font=`${this.opts.settings.FONT.normal} ${11*i}px ${this.opts.settings.FONT.family}`,this.ctx.textAlign="center",this.ctx.fillStyle=this.opts.settings.COLORS.axis.x;const I=this.prevXStep?this.prevXStep>S?this.prevXStep/S:S/this.prevXStep:1;let y=1/Math.pow(I,5);h&&m===1&&(y/=2),this.prevXStep=S;const A=Math.max(l-Math.ceil((o+u*.5)/w),0),F=Math.min(p+Math.ceil((n+u*.5)/w),a.length-1);if(h){const Y=this.opts.animator.get("x1"),X=this.opts.animator.get("x2");g=Y?Y.end:this.opts.state.x1,f=X?X.end:this.opts.state.x2,g=Math.floor(J(a,g)),f=Math.floor(J(a,f))}let z;if(h){const Y=Math.max(a[this.opts.state.detailInd1],this.opts.state.xMainMin),X=Math.min(a[this.opts.state.detailInd2],this.opts.state.xMainMax);z=Math.round((X-Y)/this.opts.data.mainPeriodLen)+($?0:1)}for(let Y=A;Y<=F;Y++){let X=Y%L===0,it="m";h&&(Y0){const H=(Z.xi-e.x1+T/2)*b+o;if(this.ctx.globalAlpha=Z.state[`ox_${k}`]*t,H+u/2>=r.l&&H-u/2<=r.l+r.w){const E=(H+r.l)*i;this.ctx.fillText(s.data.datesShort[Y],E,(r.t+9)*i)}}}for(const Y in this.items){const X=this.items[Y];X.tp===1&&(X.xie.x2+n/b)&&this.hideItem(Y,y)}if(this.ctx.globalAlpha=1,!s.data.subchart.show)return;let K;h&&m===1&&f--,f{delete this.items[s.id]},this.opts=t,this.ctx=t.ctx,this.uuid=1,this.items={},this.setAnimation(!1),this.setForceUpdate(!1)}onResize(){this.setAnimation(!1),this.setForceUpdate(!1)}setDarkMode(t){this.isDarkMode=t}setAnimation(t){this.noAnimation=!t}setForceUpdate(t){this.forceUpdate=t}render(t){let s,i;this.opts.pairY?(s=this.calcAxisData("y1_0","y2_0"),i=this.calcAxisData("y1_1","y2_1"),i.needAnimation&&!s.needAnimation||this.opts.state.o_0<1?this.updateAxisState("y1_1","y2_1","numRight",i,s,i):this.updateAxisState("y1_0","y2_0","numLeft",s,s,i)):(s=this.calcAxisData("y1","y2"),this.updateAxisState("y1","y2","numLeft",s,s,s)),this.renderState(t)}calcAxisData(t,s){const i=this.opts.state,a=this.opts.settings.PADD[0],e=this.opts.settings.PADD[2];Math.floor(this.opts.settings.Y_AXIS_RANGE);let n=!1;const o=this.opts.animator.get(t),c=this.opts.animator.get(s),r=o?o.end:i[t],d=c?c.end:i[s],h=Math.round((d-r)/this.opts.settings.Y_AXIS_RANGE),m=r,l=i[s]-i[t],p=i[t]>r?i[t]/r:r/i[t],g=i[s]>d?i[s]/d:d/i[s],f=d-r,$=(this.opts.state.dims.axisYLines.h-a-e)/l,u=(this.opts.state.dims.axisYLines.h-a-e)/f;return(p>1.05||g>1.05||this.forceUpdate)&&(n=!0),n=this.items[0]&&n&&!this.noAnimation&&!this.animationInProgress,{needAnimation:n,y1:r,y2:d,yRealStep:h,yRealStart:m,yScaleCur:$,yScaleEnd:u}}updateAxisState(t,s,i,a,e,n){const o=this.opts;o.settings,o.settings.dpi;const c=o.state;o.settings.PADD[0];const r=o.settings.PADD[2];o.settings.PADD[3],o.settings.PADD[1];const d=o.animator;let h;const m=Math.floor(o.settings.Y_AXIS_RANGE);let l=!1;const p=this.opts.state.dims.axisYLines;a.needAnimation&&(this.animationInProgress=!0);for(let g=0;g<=m;++g){const f=a.yRealStart+Math.round(a.yRealStep*g),$=e.yRealStart+Math.round(e.yRealStep*g),u=n.yRealStart+Math.round(n.yRealStep*g),x=lt("yTickFormatter",o.data,c.zoomMorph),_=x($,e.yRealStep),T=x(Math.max(u,0),n.yRealStep,!0);if(a.needAnimation){const R=p.t+p.h-r-(f-a.y1)*a.yScaleEnd,S=p.t+p.h-r-(this.items[g][i]-a.y1)*a.yScaleEnd,D=p.t+p.h-r-(f-c[t])*a.yScaleCur,w=p.t+p.h-r-(f-a.y1)*a.yScaleEnd;if(Math.abs(S-w)<1)this.items[g]={numLeft:$,strLeft:_,numRight:u,strRight:T,y:w};else{l=!0,this.uuid++,h={animated:!0,strLeft:this.items[g].strLeft,strRight:this.items[g].strRight,oProp:`oyt_${this.uuid}`,yProp:`yyt_${this.uuid}`,state:{id:`t_${this.uuid}`}},h.state[h.oProp]=1,h.state[h.yProp]=R,this.items[h.state.id]=h,d.add([{prop:h.oProp,state:h.state,end:0,duration:this.noAnimation?0:200,tween:"linear",group:{top:!0}},{prop:h.yProp,state:h.state,end:S,duration:this.noAnimation?0:this.forceUpdate?333:500,fixed:!this.forceUpdate,tween:this.forceUpdate?null:"exp",speed:.18,group:{top:!0},cbEnd:this.deleteItem}]),delete this.items[g],this.uuid++,h={animated:!0,strLeft:_,strRight:T,oProp:`oy_${g}`,yProp:`yy_${g}`,state:{id:g,numLeft:$,strLeft:_,numRight:u,strRight:T}},h.state[h.oProp]=0,h.state[h.yProp]=D,this.items[h.state.id]=h;const L=[{prop:h.oProp,state:h.state,end:1,duration:this.noAnimation?0:200,tween:"linear",group:{top:!0}},{prop:h.yProp,state:h.state,end:w,duration:this.noAnimation?0:this.forceUpdate?333:500,fixed:!this.forceUpdate,tween:this.forceUpdate?null:"exp",speed:.18,group:{top:!0},cbEnd:M=>{this.items[M.id]={numLeft:M.numLeft,strLeft:M.strLeft,numRight:M.numRight,strRight:M.strRight,y:M[`yy_${M.id}`]},clearTimeout(this.animationEndTimeout),this.animationEndTimeout=window.setTimeout(()=>{this.animationInProgress=!1},30)}}];d.add(L)}}else this.items[g]&&this.items[g].animated?(this.items[g].numLeft=$,this.items[g].strLeft=_,this.items[g].numRight=u,this.items[g].strRight=T,this.items[g].state.numLeft=$,this.items[g].state.strLeft=_,this.items[g].state.numRight=u,this.items[g].state.strRight=T):this.items[g]={numLeft:$,strLeft:_,numRight:u,strRight:T,y:p.t+p.h-r-(f-a.y1)*a.yScaleEnd}}a.needAnimation&&!l&&(this.animationInProgress=!1),this.forceUpdate=!1}renderState(t){const s=this.opts.settings.dpi,i=this.opts.state.dims.axisYLeft,a=this.opts.state.dims.axisYRight,e=this.opts.state.dims.axisYLines,n=this.opts.data.ys;this.ctx.font=`${this.opts.settings.FONT.normal} ${11*s}px ${this.opts.settings.FONT.family}`,this.ctx.strokeStyle=this.opts.settings.COLORS.grid,this.ctx.lineWidth=1*s,this.ctx.lineCap="square",this.ctx.lineJoin="square";for(const o in this.items){const c=this.items[o];let r,d;c.animated?(d=c.state[c.yProp],r=c.state[c.oProp]):(d=c.y,r=1),d-6>=0&&d-16<=i.h&&(this.ctx.globalAlpha=r*(this.opts.pairY?this.opts.state.o_0:1)*t,this.ctx.textAlign="left",this.opts.pairY?this.ctx.fillStyle=this.isDarkMode?n[0].colors_n[1]:n[0].colors_d[1]:this.ctx.fillStyle=this.opts.settings.COLORS.axis.y,this.ctx.fillText(c.strLeft,i.l*s,(d-7)*s),this.opts.pairY&&(this.ctx.globalAlpha=r*this.opts.state.o_1*t,this.ctx.textAlign="right",this.ctx.fillStyle=this.isDarkMode?n[1].colors_n[1]:n[1].colors_d[1],this.ctx.fillText(c.strRight,(a.l+a.w)*s,(d-7)*s))),d=(d<<0)-.5,d>=0&&d<=i.h&&(this.ctx.beginPath(),this.ctx.globalAlpha=r*t,this.ctx.moveTo(e.l*s,d*s),this.ctx.lineTo((e.l+e.w)*s,d*s),this.ctx.stroke())}this.ctx.globalAlpha=1}}class es{constructor(t){this.opts=t,this.filteredX1=[],this.filteredX2=[],this.filteredJ=[],this.prevY=[],this.$canvas=document.createElement("canvas"),this.ctx=this.$canvas.getContext("2d",{alpha:!1})}onResize(){const t=this.opts.settings.dpi,s=this.opts.additional.mini?this.opts.state.dims.mini:this.opts.state.dims.graph;this.$canvas.width=s.w*t,this.$canvas.height=s.h*t,this.cached=""}setDarkMode(t){this.isDarkMode=t}render(){let t,s,i,a,e,n,o,c,r,d;const h=this.opts,m=h.data.ys,l=h.state,p=h.additional.mini,g=p?l.xg1:l.x1,f=p?l.xg2:l.x2,$=h.settings;this.w,this.h;const u=$[`PADD${p?"_MINI_BAR":""}`][0],x=$[`PADD${p?"_MINI_BAR":""}`][1],_=$[`PADD${p?"_MINI_BAR":""}`][2],T=$[`PADD${p?"_MINI_BAR":""}`][3],R=h.data.x,S=h.settings.dpi;let D,w;const L=this.ctx,M=p?l.dims.mini:l.dims.graph,b=l.zoomMode,I=l.detailInd1,y=l.detailInd2,A=l.zoomMorph===void 0?0:l.zoomMorph,F=this.filteredX1,z=this.filteredX2,K=this.filteredJ,Q=this.prevY,Y=m.length,X=[M.w,M.h,p?l.xg1:l.x1,p?l.xg2:l.x2,this.isDarkMode,b];for(p||(X.push(l.y1),X.push(l.y2)),t=0;tthis.opts.state.xg2Ind&&(w=this.opts.state.xg2Ind-1)),o*=S;const k=T*S-g*o,Z=(M.h-_)*S,H=this.opts.data.mainPeriodLen*o,E=this.opts.data.detailPeriodLen*o;if(it!==this.cached){L.fillStyle=this.opts.settings.COLORS.background,L.fillRect(0,0,M.w*S,M.h*S);let N=0;for(s=D;s<=w;s++){let C;b&&s>=I&&s<=y?C=E:C=H;const G=Math.round(R[s]*o+k),B=Math.round(R[s]*o+k+C);B-G>0&&(F[N]=G,z[N]=B,K[N]=s,Q[N]=0,N++)}for(t=0;t0){i=m[t].y,d=m[t].yFrom,e=p?l.y1m:l.y1,n=p?l.y2m:l.y2,c=S*(M.h-u-_)/(n-e),r=(M.h-_)*S+e*c;const C=a*c;L.fillStyle=this.isDarkMode?m[t].colors_n[0]:m[t].colors_d[0],L.globalAlpha=l[`f_${t}`]*.9+.1;let G;if(L.beginPath(),L.moveTo(Math.round(R[w]*o+k+(A===1?E:H)),Math.round(Z)),t>0)for(s=N-1;s>=0;s--){const B=Z-Q[s];L.lineTo(z[s],Math.round(B)),L.lineTo(F[s],Math.round(B))}else L.lineTo(Math.round(R[D]*o+k),Math.round(Z));for(s=0;s=I&&B<=y?G=d[B]+A*(i[B]-d[B]):G=i[B]+A*(i[I]-i[B]):G=i[B],G=G||0;const rt=r-G*C,ct=Z-rt;Q[s]+=ct,L.lineTo(F[s],Math.round(Z-Q[s])),L.lineTo(z[s],Math.round(Z-Q[s]))}L.closePath(),L.fill()}L.globalAlpha=1,this.opts.ctx.drawImage(this.$canvas,M.l*S,M.t*S)}if(l.barInd>-1&&!p){this.opts.ctx.fillStyle=this.opts.settings.COLORS.barsSelectionBackground,this.opts.ctx.globalAlpha=l.barO,this.opts.ctx.fillRect(0,0,M.w*S,M.h*S);let N=0;for(t=0;t0){i=m[t].y,d=m[t].yFrom,e=l.y1,n=l.y2,c=S*(M.h-u-_)/(n-e),r=(M.h-_)*S+e*c;const C=a*c;this.opts.ctx.fillStyle=this.isDarkMode?m[t].colors_n[0]:m[t].colors_d[0],this.opts.ctx.globalAlpha=l[`f_${t}`]*.9+.1;let G,B;b?l.barInd>=I&&l.barInd<=y?(G=d[l.barInd]+A*(i[l.barInd]-d[l.barInd]),B=E):(B=H,G=i[l.barInd]+A*(i[I]-i[l.barInd])):(G=i[l.barInd],B=H),G=G||0;const rt=Z-(r-G*C)+N;this.opts.ctx.fillRect(Math.round(R[l.barInd]*o+k),Math.round(Z-N+M.t*S),Math.max(Math.round(B),1),Math.round(N)-Math.round(rt)),N=rt}L.globalAlpha=1}this.cached=it}}class is{constructor(t){this.opts=t,this.$canvas=document.createElement("canvas"),this.$canvas.className="tchart--graph-canvas",this.ctx=this.$canvas.getContext("2d"),t.$parent.appendChild(this.$canvas),this.deviceSpeed=void 0}onResize(){const t=this.opts.settings.dpi,s=this.opts.state.dims.composer;this.$canvas.width=s.w*t,this.$canvas.height=s.h*t,this.render({top:!0,bottom:!0})}setDarkMode(t){this.isDarkMode=t,this.onResize()}render(t){if(this.deviceSpeed===void 0){const s=performance.now(),i=this.opts.state.x1;this.opts.state.x1=this.opts.state.xMainMin,this.renderInner(t);const a=performance.now();this.opts.state.x1=i,this.deviceSpeed=(a-s)/(this.opts.graphStyle==="line"||this.opts.graphStyle==="step"?1.5:2)/(this.opts.data.x.length*this.opts.data.ys.length),this.opts.state.deviceSpeed=this.deviceSpeed}this.renderInner(t)}renderInner(t){const s=this.opts.state.dims,i=this.opts.state,a=this.ctx,e=this.opts.settings.dpi,n=this.opts.settings,o=n.PADD,c=i.zoomMorph===void 0?0:i.zoomMorph,r=this.opts.graphStyle==="area"&&i.zoomMode&&c<1,d=this.opts.graphStyle==="area"&&i.zoomMode&&c===1;if(this.opts.data.master&&(this.$canvas.style.opacity=""+i.masterVisibility),this.opts.data.slave&&(this.$canvas.style.opacity=""+i.slaveVisibility,this.opts.chart.$el.style.visibility=i.slaveVisibility>0?"visible":"hidden"),t.top){if(a.clearRect(s.dates.l*e,s.dates.t*e,s.dates.w*e,s.dates.h*e),(this.opts.graphStyle==="line"||this.opts.graphStyle==="step"||this.opts.graphStyle==="area"&&c>0||this.opts.data.slave&&i.slaveVisibility<1||this.opts.data.master&&i.masterVisibility<1)&&(d?a.clearRect(s.graph.l*e,(s.graph.t-18)*e,s.graph.w*e,(s.graph.h+30)*e):a.clearRect(s.graph.l*e,s.graph.t*e,s.graph.w*e,s.graph.h*e)),(this.opts.graphStyle==="area"&&c===0||this.opts.graphStyle==="bar")&&(a.clearRect(s.graph.l*e,s.graph.t*e,s.graph.w*e,(n.PADD[0]+4)*e),a.clearRect(s.graph.l*e,(s.graph.t+o[0])*e,o[3]*e,(s.graph.h-o[0]-o[2])*e),a.clearRect(s.graph.l*e,(s.graph.t+s.graph.h-o[2])*e,s.graph.w*e,o[2]*e),a.clearRect((s.graph.l+s.graph.w-o[1]-1)*e,(s.graph.t+o[0])*e,(o[1]+1)*e,(s.graph.h-o[0]-o[2])*e)),!r&&!d&&(a.save(),a.beginPath(),a.rect(s.graph.l*e,s.graph.t*e,s.graph.w*e,s.graph.h*e),a.clip()),this.opts.data.master&&i.masterVisibility<1){a.save();const m=(1-i.masterVisibility)*5+1;a.translate(s.graph.w*i.zoomSpecialOrigin*(1-m),0),a.scale(m,1)}if(this.opts.data.slave&&i.slaveVisibility<1){a.save();const m=i.slaveVisibility;a.translate(s.graph.w*i.zoomSpecialOrigin*(1-m),0),a.scale(m,1)}let h=1;if(this.opts.graphStyle==="area"&&i.zoomMode&&(h=1-c),r){a.save();const m=n.PIE_RADIUS,l=s.graph.w+c*(m*2-s.graph.w),p=s.graph.h-42+c*(m*2-s.graph.h+42);Wt(a,e,l,p,(s.graph.w-l)/2+s.graph.l,(s.graph.h-42-p)/2+s.graph.t+23,c*m),a.clip()}this.opts.chart.graph.render(),r&&a.restore(),this.opts.data.master&&i.masterVisibility<1&&a.restore(),this.opts.data.slave&&i.slaveVisibility<1&&a.restore(),this.opts.chart.axisY.render(h),this.opts.chart.fade.render(),!r&&!d&&a.restore(),this.opts.chart.axisX.render(h)}if(t.bottom){a.clearRect(s.graph.l*e,(s.handle.t-1)*e,s.graph.w*e,(s.handle.h+2)*e);let h=this.opts.data.subchart.show;const m=!this.opts.data.master&&!this.opts.data.slave&&this.opts.data.details&&this.opts.data.subchart.show!==this.opts.data.details.subchart.show;m&&(h?h=c<1:h=c>0),h&&(a.save(),vt(a,e,s.mini.w,s.mini.h,s.mini.l,s.mini.t,7),a.clip(),this.opts.chart.mini.render(),a.restore(),this.opts.chart.handle.render()),m&&c>0&&c<1&&(a.fillStyle=this.opts.settings.COLORS.background,a.globalAlpha=this.opts.data.subchart.show?c:1-c,a.fillRect(s.graph.l*e,(s.handle.t-1)*e,s.graph.w*e,(s.handle.h+2)*e),a.globalAlpha=1)}}}class as{constructor(t){this.opts=t,this.ctx=t.ctx,this.opts.graphStyle!=="area"&&(this.$fadeTop=document.createElement("canvas"),this.ctxFadeTop=this.$fadeTop.getContext("2d"),this.opts.graphStyle!=="bar"&&(this.$fadeBottom=document.createElement("canvas"),this.ctxFadeBottom=this.$fadeBottom.getContext("2d")))}onResize(){const t=this.opts.settings.dpi,s=this.opts.state.dims.fadeTop,i=this.opts.state.dims.fadeBottom,a=this.opts.settings.COLORS.backgroundRgb.join(", ");if(this.opts.graphStyle!=="area"){const e=this.ctxFadeTop.createLinearGradient(0,0,0,s.h*t);if(e.addColorStop(0,`rgba(${a}, 1)`),e.addColorStop(1,`rgba(${a}, 0)`),this.$fadeTop.width=s.w*t,this.$fadeTop.height=s.h*t,this.ctxFadeTop.fillStyle=e,this.ctxFadeTop.fillRect(0,0,s.w*t,s.h*t),this.opts.graphStyle!=="bar"){const n=this.ctxFadeBottom.createLinearGradient(0,0,0,i.h*t);n.addColorStop(0,`rgba(${a}, 0)`),n.addColorStop(1,`rgba(${a}, 1)`),this.$fadeBottom.width=i.w*t,this.$fadeBottom.height=i.h*t,this.ctxFadeBottom.fillStyle=n,this.ctxFadeBottom.fillRect(0,0,i.w*t,i.h*t)}}}setDarkMode(t){this.isDarkMode=t,this.onResize()}render(){const t=this.opts.settings.dpi,s=this.opts.state.dims.fadeTop,i=this.opts.state.dims.fadeBottom;this.$fadeTop&&this.ctx.drawImage(this.$fadeTop,s.l*t,s.t*t),this.$fadeBottom&&this.ctx.drawImage(this.$fadeBottom,i.l*t,i.t*t)}}class Dt{constructor(t){this.onDragStart=i=>{this.skipMoveEnd=!0,clearTimeout(this.pointerTimeout),!(this.isTouch&&i.touches.length>1||(this.scroll=void 0,this.x=this.isTouch?i.touches[0].pageX:i.pageX,this.y=this.isTouch?i.touches[0].pageY:i.pageY,this.dX=0,this.dY=0,this.pageX=this.x,this.pageY=this.y,delete this.prevDx,delete this.prevDy,this.opts.onDragStart({pageX:this.x,pageY:this.y,isTouch:this.isTouch})))&&(this.skipMoveEnd=!1)},this.onDragMove=i=>{if(this.skipMoveEnd||this.scroll==="v")return;const a=this.isTouch?i.touches[0].pageX:i.pageX,e=this.isTouch?i.touches[0].pageY:i.pageY;this.dX=a-this.x,this.dY=e-this.y,this.pageX=a,this.pageY=e,this.isTouch&&(this.scroll==="h"?!this.opts.noPrevent&&i.preventDefault():(Math.abs(this.dX)>5||Math.abs(this.dY)>5)&&(this.scroll=Math.abs(this.dX)>Math.abs(this.dY)?"h":"v")),(this.prevDx!==this.dX||this.prevDy!==this.dY)&&(this.opts.onDragMove&&this.opts.onDragMove({canceled:this.scroll==="v",d:this.dX,pageX:this.pageX,pageY:this.pageY,isTouch:this.isTouch}),this.prevDx=this.dX,this.prevDy=this.dY)},this.onDragEnd=i=>{this.skipMoveEnd||(this.skipMoveEnd=!0,this.opts.onDragEnd&&this.opts.onDragEnd({isTouch:this.isTouch,e:i}))},this.opts=t,this.isTouch=$t(),this.skipMoveEnd=!0;const s=t.useElForMove?t.$el:window;t.$el.addEventListener(this.isTouch?"touchstart":"mousedown",this.onDragStart,{passive:!1}),s.addEventListener(this.isTouch?"touchmove":"mousemove",this.onDragMove,{passive:!1}),s.addEventListener(this.isTouch?"touchend":"mouseup",this.onDragEnd,{passive:!1})}}class os{constructor(t){this.onMouseLeave=()=>{this.$canvas.classList.remove("tchart--graph-canvas__handle-pointer"),this.$canvas.classList.remove("tchart--graph-canvas__handle-grab"),this.$canvas.classList.remove("tchart--graph-canvas__handle-col-resize"),delete this.canvasPos},this.onMouseMove=s=>{this.canvasPos=this.canvasPos||ft(this.$canvas);const i=s.pageX-this.canvasPos.x,a=s.pageY-this.canvasPos.y,e=this.getTp(i-this.opts.settings.PADD[3],a-(this.opts.state.dims.composer.h-this.opts.settings.MINI_GRAPH_HEIGHT-this.opts.settings.MINI_GRAPH_BOTTOM),!1),n={"":"",both:this.opts.settings.isIE?"pointer":"grab",start:"col-resize",end:"col-resize"};this.onMouseLeave(),n[e]&&this.$canvas.classList.add("tchart--graph-canvas__handle-"+n[e])},this.opts=t,this.ctx=t.ctx,this.isTouch=$t(),this.$canvas=t.$canvas,this.drag=new Dt({$el:this.$canvas,onDragStart:s=>{this.canvasPos=ft(this.$canvas);const i=s.pageX-this.canvasPos.x,a=s.pageY-this.canvasPos.y;return this._x1=t.state.x1,this._x2=t.state.x2,this.constrainHandleSize(!1),this.tp=this.getTp(i-t.settings.PADD[3],a-(this.opts.state.dims.composer.h-t.settings.MINI_GRAPH_HEIGHT-t.settings.MINI_GRAPH_BOTTOM),s.isTouch),this.firstMove=!0,!this.tp},onDragMove:s=>{this.onDragMove(s.d),this.firstMove=!1},onDragEnd:s=>{}}),this.trackMouse(!0)}getTp(t,s,i){const a=this.opts.state.dims.handle,e=this.opts.state,n=this.opts.state.zoomMode;if(s<0||s>a.h)return"";let o=i?a.w*.3:10;i&&o<14&&(o=14),i&&o>30&&(o=30);const c=this.prevX1+(i?e.x1===e.xg1?-5:-15:0);let r=c+o;const d=this.prevX2+(i?e.x2===e.xg2?5:15:0);let h=d-o;return Math.abs(e.x2-e.x1-(n?this.opts.data.mainPeriodLen:this.minRange))<.01&&(e.x2===e.xg2&&(h=d+1),e.x1===e.xg1&&(r=c-1)),t>r&&t=c&&t<=r?"start":t>=h&&t<=d?"end":""}trackMouse(t){this.isTouch||(this.$canvas.addEventListener("mousemove",this.onMouseMove),this.$canvas.addEventListener("mouseleave",this.onMouseLeave))}onResize(t){this.constrainHandleSize(!0)}setDarkMode(t){this.isDarkMode=t}constrainHandleSize(t){const a=32/(this.opts.state.dims.handle.w/(this.opts.state.xg2-this.opts.state.xg1));let e=this.opts.state.x1,n=this.opts.state.x2;this.opts.state.xg1;const o=this.opts.state.xg2;this.minRange=a,n-eo&&(n=o,e=n-a),t&&this.opts.additional.cb(e,n,"constraint"))}onDragMove(t){const s=this.opts.state.dims.handle,i=this.tp,a=this.opts.state,e=t/s.w*(a.xg2-a.xg1);let n,o;const c=this._x1,r=this._x2;i==="both"&&(n=c+e,o=r+e,na.xg2&&(n=a.xg2-(r-c),o=a.xg2)),i==="start"&&(o=a.x2,n=Math.min(Math.max(c+e,a.xg1),o-this.minRange)),i==="end"&&(n=a.x1,o=Math.max(Math.min(r+e,a.xg2),n+this.minRange)),!(a.x1===n&&a.x2===o)&&this.opts.additional.cb(n,o,i,this.firstMove)}render(){const t=this.opts.state.dims.handle,s=this.opts.settings.dpi,i=this.opts.state,a=1/(i.xg2-i.xg1),e=Math.round((i.x1-i.xg1)*a*t.w),n=Math.round((i.x2-i.xg1)*a*t.w),o=this.ctx;o.fillStyle=this.opts.settings.COLORS.miniMask,vt(o,s,e+4,t.h-2,t.l,t.t+1,[7,0,0,7]),o.fill(),vt(o,s,t.w-n+4,t.h-2,t.l+n-4,t.t+1,[0,7,7,0]),o.fill(),o.fillStyle=this.opts.settings.COLORS.miniFrame,vt(o,s,10,t.h,t.l+e,t.t,[7,0,0,7]),o.fill(),vt(o,s,10,t.h,t.l+n-10,t.t,[0,7,7,0]),o.fill(),o.fillRect((t.l+e+10)*s,t.t*s,(n-e-20)*s,s),o.fillRect((t.l+e+10)*s,(t.t+t.h-1)*s,(n-e-20)*s,s),o.strokeStyle="#fff",this.ctx.lineCap="round",this.ctx.lineJoin="round",this.ctx.lineWidth=2*s,o.beginPath(),o.moveTo((t.l+e+5)*s,(t.t+17)*s),o.lineTo((t.l+e+5)*s,(t.t+25)*s),o.moveTo((t.l+n-5)*s,(t.t+17)*s),o.lineTo((t.l+n-5)*s,(t.t+25)*s),o.stroke(),this.prevX1=e,this.prevX2=n}}class Rt{constructor(t){this.opts=t,this.$canvas=document.createElement("canvas"),this.ctx=this.$canvas.getContext("2d",{alpha:!0})}onResize(){const t=this.opts.settings.dpi,s=this.opts.additional.mini?this.opts.state.dims.mini:this.opts.state.dims.graph;this.$canvas.width=s.w*t,this.$canvas.height=s.h*t,this.cached="",this.ctx.fillStyle=this.opts.settings.COLORS.background,this.ctx.fillRect(0,0,s.w*t,s.h*t)}setDarkMode(t){this.isDarkMode=t}render(){let t,s,i,a,e,n,o,c,r,d,h;const m=this.opts,l=m.data.ys,p=m.state,g=m.additional.mini,f=g||m.data.master&&p.masterVisibility<1&&p.masterVisibility>0||m.data.slave&&p.slaveVisibility<1&&p.slaveVisibility>0,$=g?p.xg1:p.x1,u=g?p.xg2:p.x2,x=m.settings,_=x[`PADD${g?"_MINI":""}`][0],T=x[`PADD${g?"_MINI":""}`][1],R=x[`PADD${g?"_MINI":""}`][2],S=x[`PADD${g?"_MINI":""}`][3],D=m.data.x,w=m.settings.dpi;let L,M;const b=f?this.ctx:this.opts.ctx,I=g?p.dims.mini:p.dims.graph,y=p.zoomMode,A=p.detailInd1,F=p.detailInd2,z=p.zoomMorph===void 0?0:p.zoomMorph,K=l.length,Q=m.graphStyle==="step";o=(I.w-T-S)/(u-$+(Q?this.opts.data.mainPeriodLen*(1-z):0)),L=Math.floor(J(D,$-S/o)),M=Math.ceil(J(D,u+T/o)),o*=w;const Y=(S+(f?0:I.l))*w-$*o;Q&&y&&z===1&&(Lthis.opts.state.xg2Ind&&(M=this.opts.state.xg2Ind-1));let X;const it=this.opts.data.mainPeriodLen*o,k=this.opts.data.detailPeriodLen*o;if(f){const E=[I.w,I.h,g?p.xg1:p.x1,g?p.xg2:p.x2,this.isDarkMode,y];for(g||(E.push(p.y1),E.push(p.y2)),t=0;t5?1:2:m.data.strokeWidth)*w,H=Z%2===0?0:.5;for(b.lineWidth=Z,b.lineCap=m.additional.mini?"square":"round",b.lineJoin=m.additional.mini?"square":"round",t=0;t=A&&s<=F?(E=h[s]+z*(i[s]-h[s]),X=k):(E=i[s]+z*(i[A]-i[s]),X=it):(E=i[s],X=it),isNaN(E)){xt=!0;continue}N=D[s]*o+Y<<0;const ht=r-E*c<<0;N>B||Q&&s===F+1?(ct&&(rt===C?(b.moveTo(B+H,G-H),b.lineTo(B+H,C-H)):(b.moveTo(B+H,C-H),b.lineTo(B+H,G-H),rt!==G&&b.moveTo(B+H,rt-H)),ct=!1),xt&&(b.moveTo(N+H,ht-H),xt=!1),C=ht,G=ht,b.lineTo(N+H,ht-H),Q&&b.lineTo((D[s]*o+X+Y<<0)+H,ht-H)):(C=Math.min(C,ht),G=Math.max(G,ht),ct=!0),B=N,rt=ht}ct&&(b.moveTo(B+H,C-H),b.lineTo(B+H,G-H)),b.stroke()}b.globalAlpha=1,f&&this.opts.ctx.drawImage(this.$canvas,I.l*w,I.t*w)}}class hs{constructor(t){this.preventClick=!1,this.opts=t,this.isTouch=$t(),this.enabled=t.data.ys.length,this.enabled===1&&!t.data.forceLegend&&(t.$parent.style.display="none"),this.switchers=t.data.ys.map((s,i,a)=>{const e=document.createElement("div");e.className="tchart--switcher",i===0?e.classList.add("tchart--switcher__first"):i===a.length-1&&e.classList.add("tchart--switcher__last"),t.state[`e_${i}`]?e.classList.toggle("tchart--switcher__active"):this.enabled--,e.setAttribute("data-label",s.label),t.$parent.appendChild(e);const n=document.createElement("span");n.className="tchart--switcher-text",n.textContent=s.label,e.appendChild(n),this.isTouch||(e.addEventListener("mouseenter",()=>{t.state[`e_${i}`]&&t.additional.onEnter(i)}),e.addEventListener("mouseleave",()=>{t.state[`e_${i}`]&&t.additional.onLeave(i)})),e.addEventListener("click",d=>{if(this.preventClick){this.preventClick=!1;return}const h=e.classList.contains("tchart--switcher__active");if(h&&this.enabled===1){e.classList.add("tchart--switcher__denied"),clearTimeout(this.timeout),this.timeout=setTimeout(()=>{e.classList.remove("tchart--switcher__denied")},500);return}this.isTouch||(h?t.additional.onLeave(i):t.additional.onEnter(i)),t.additional.onClick(!h,i)});let o,c,r;return this.drag=new Dt({$el:e,noPrevent:!0,useElForMove:!0,onDragStart:d=>{o=d.pageX,c=d.pageY,r=setTimeout(()=>{this.preventClick=!0,this.isTouch||t.additional.onEnter(i),t.additional.onLongTap(i)},500)},onDragMove:d=>{(Math.abs(o-d.pageX)>5||Math.abs(c-d.pageY)>5)&&clearTimeout(r)},onDragEnd:d=>{clearTimeout(r)}}),e}),this.updateColors()}onResize(){}updateColors(){const t=this.opts.data.ys;for(let s=0;s{if(this.prevXInd===void 0||!this.opts.additional.onClick||!this.opts.data.hasDetail||this.opts.state.zoomMode||this.opts.state.zoomModeSpecial||(s.stopPropagation(),this.$tip.classList.contains("tchart--tip__loading")))return;const i=this.opts.data.x[this.prevXInd];if(!this.opts.data.detailsFunc){this.toggle(!1,!0),this.opts.additional.onClick(!0,i);return}if(this.$tip.classList.remove("tchart--tip__error"),this.$tip.classList.add("tchart--tip__loading"),this.cache[i]){this.toggle(!1,!0),this.opts.additional.onClick(!0,i,this.cache[i]),this.$tip.classList.remove("tchart--tip__loading");return}this.abortDetailCallbacks();const a=this.opts.data.detailsFunc(i);this.detailCallbacks=this.detailCallbacks||[];const e=o=>{if(!e.cancelled){if(this.$tip.classList.remove("tchart--tip__loading"),!o||!o.columns){this.$tip.classList.add("tchart--tip__error");return}this.toggle(!1,!0),this.opts.additional.onClick(!0,i,o),this.cache[i]=o}},n=o=>{n.cancelled||(console.log("error:",o),this.$tip.classList.remove("tchart--tip__loading"),this.$tip.classList.add("tchart--tip__error"))};this.detailCallbacks.push(e),this.detailCallbacks.push(n),a.then(e).catch(n)},this.onMouseLeave=()=>{this.$canvas.classList.remove("tchart--graph-canvas__tip-pointer"),delete this.canvasPos},this.onMouseMove=s=>{this.canvasPos=this.canvasPos||ft(this.$canvas);const i=s.pageX-this.canvasPos.x,a=s.pageY-this.canvasPos.y,e=this.opts.state.dims.tip,n=this.getTp(i,a-e.t,!1);this.onMouseLeave(),n&&this.$canvas.classList.add("tchart--graph-canvas__tip-pointer")},this.onBodyClick=s=>{s.target!==this.$canvas&&this.toggle(!1)},this.updateTipScrollClasses=()=>{this.$tipScroller.scrollHeight>this.$tipScroller.offsetHeight?this.$tip.classList.add("tchart--tip__scroll"):this.$tip.classList.remove("tchart--tip__scroll"),this.$tipScroller.scrollTop<=0?this.$tip.classList.remove("tchart--tip__has_less"):this.$tip.classList.add("tchart--tip__has_less"),this.$tipScroller.scrollTop>=this.$tipScroller.scrollHeight-this.$tipScroller.offsetHeight?this.$tip.classList.remove("tchart--tip__has_more"):this.$tip.classList.add("tchart--tip__has_more")},this.opts=t,this.shown=!1,this.isTouch=$t(),this.$canvas=t.$canvas,this.cache={},this.$tip=document.createElement("div"),this.$tip.className="tchart--tip",t.$parent.appendChild(this.$tip),this.$tipDt=document.createElement("h6"),this.$tipDt.className="tchart--tip-header",this.$tip.appendChild(this.$tipDt),this.$tipDtText=document.createTextNode(""),this.$tipDt.appendChild(this.$tipDtText),this.$tipDtText.nodeValue=".",this.$tipArrow=document.createElement("div"),this.$tipArrow.className="tchart--tip-arrow",this.$tip.appendChild(this.$tipArrow),this.$tipLoader=document.createElement("div"),this.$tipLoader.className="tchart--tip-loader",this.$tip.appendChild(this.$tipLoader),this.$tipScrollerWrapper=document.createElement("div"),this.$tipScrollerWrapper.className="tchart--tip-scroller-wrapper",this.$tip.appendChild(this.$tipScrollerWrapper),this.$tipScroller=document.createElement("div"),this.$tipScroller.className="tchart--tip-scroller",this.$tipScrollerWrapper.appendChild(this.$tipScroller),this.$tipScroller.addEventListener("scroll",this.updateTipScrollClasses),this.labels=[],t.data.ys.forEach(s=>{this.labels.push(this.addLabel(s))}),t.graphStyle==="bar"&&t.data.ys.length>1&&(this.allLabel=this.addLabel({label:t.settings.ALL_LABEL,outside:!0})),t.graphStyle==="area"&&(this.pieLabel=this.addLabel({label:"pie",outside:!0})),this.tooltipOnHover=this.isTouch?!1:t.data.tooltipOnHover,t.graphStyle!=="bar"?(this.$line=document.createElement("div"),this.$line.className="tchart--line",t.$parent.appendChild(this.$line),this.$lineFill=document.createElement("div"),this.$lineFill.className="tchart--line-fill",this.$line.appendChild(this.$lineFill),t.graphStyle!=="area"&&(this.points=t.data.ys.map(()=>{const s=document.createElement("span");return s.className="tchart--line-point",this.$line.appendChild(s),s}))):(t.state.barInd=-1,t.state.barO=0),this.tooltipOnHover?(this.$canvas.addEventListener("mousemove",s=>{this.canvasPos=this.canvasPos||ft(this.$canvas),this.dx=s.pageX-this.canvasPos.x,this.dy=s.pageY-this.canvasPos.y;const i=this.opts.state.dims.tip;this.tp=this.getTp(this.dx,this.dy-i.t,this.isTouch),this.tp?this.shown?this.render({isMove:!0}):(delete this.prevXInd,this.toggle(!0),this.render({})):this.toggle(!1)}),this.$canvas.addEventListener("mouseleave",()=>{delete this.canvasPos,this.toggle(!1)}),this.$canvas.addEventListener("click",s=>{this.shown&&this.onTipClick(s)}),this.$tip.style.pointerEvents="none"):(this.drag=new Dt({$el:this.$canvas,onDragStart:s=>{this.canvasPos=ft(this.$canvas),this.dx=s.pageX-this.canvasPos.x,this.dy=s.pageY-this.canvasPos.y;const i=this.opts.state.dims.tip;return this.tp=this.getTp(this.dx,this.dy-i.t,s.isTouch),delete this.prevXInd,clearTimeout(this.showTimeout),this.showTimeout=window.setTimeout(()=>{this.toggle(!!this.tp),this.tp&&this.render()},this.isTouch?100:30),document.body.removeEventListener("click",this.onBodyClick),!this.tp},onDragMove:s=>{if(s.canceled){clearTimeout(this.showTimeout),this.toggle(!1);return}this.canvasPos=this.canvasPos||ft(this.$canvas),this.dx=s.pageX-this.canvasPos.x,this.dy=s.pageY-this.canvasPos.y,this.render({isMove:!0})},onDragEnd:()=>{delete this.canvasPos,this.bodyTimeout=window.setTimeout(()=>{document.body.addEventListener("click",this.onBodyClick)},140)}}),this.$tip.addEventListener("click",this.onTipClick)),this.trackMouse(!0),this.updateColors()}onResize(t){const s=this.opts.state.dims.tip;if(this.$line){const i=this.opts.graphStyle==="area"?25:16;this.$line.style.top=s.t+"px",this.$line.style.height=s.h+"px",this.$lineFill.style.top=i+"px",this.$lineFill.style.bottom=this.opts.settings.PADD[2]+1+"px"}this.render()}abortDetailCallbacks(){this.detailCallbacks&&(this.detailCallbacks.forEach(t=>{t.cancelled=!0}),delete this.detailCallbacks)}updateColors(){const t=this.opts.data.ys;this.labels.forEach((s,i)=>{this.points&&(this.points[i].style.borderColor=this.isDarkMode?t[i].colors_n[0]:t[i].colors_d[0]),s.$value.style.color=this.isDarkMode?t[i].colors_n[2]:t[i].colors_d[2]}),this.allLabel&&(this.allLabel.$value.style.color="var(--tchart-text-color)"),this.$lineFill&&(this.$lineFill.style.backgroundColor=this.opts.settings.COLORS.grid)}setDarkMode(t){this.isDarkMode=t,this.updateColors()}addLabel(t){const s=document.createElement("div");s.className="tchart--tip-row",t.outside?(this.$tip.appendChild(s),s.classList.add("tchart--tip-row__outside")):this.$tipScroller.appendChild(s);const i=document.createElement("span");i.className="tchart--tip-row-label",s.appendChild(i);const a=document.createTextNode("");a.nodeValue=t.label,i.appendChild(a);let e,n;this.opts.graphStyle==="area"&&(n=document.createElement("p"),n.className="tchart--tip-row-per",s.appendChild(n),e=document.createTextNode(""),n.appendChild(e));const o=document.createElement("div");o.className="tchart--tip-row-value",s.appendChild(o);const c=document.createTextNode("");return o.appendChild(c),{$row:s,$value:o,$valueText:c,$label:i,$labelText:a,$per:n,$perText:e}}getTp(t,s,i){if(this.opts.graphStyle==="area"&&this.opts.state.zoomMode){const a=this.opts.state.dims.graph,e=a.w/2,n=a.h/2;return Math.pow((n-s)*(n-s)+(t-e)*(t-e),.5)<=this.opts.settings.PIE_RADIUS?"graph":""}else{const a=this.opts.state.dims.tip;return s<0||s>a.h?"":"graph"}}trackMouse(t,s){this.isTouch||(this.$canvas.addEventListener("mousemove",this.onMouseMove),this.$canvas.addEventListener("mouseleave",this.onMouseLeave))}toggle(t,s){const i=this.opts,a=i.state;if(t&&!this.shown&&(this.$tip.classList.add("tchart--tip__visible"),this.opts.data.hasDetail&&!(this.opts.state.zoomMode||this.opts.state.zoomModeSpecial)?this.$tip.classList.add("tchart--tip__has-zoom"):this.$tip.classList.remove("tchart--tip__has-zoom"),this.$tip.classList.remove("tchart--tip__shiftHide"),this.$line&&this.$line.classList.add("tchart--line__visible"),bt("chart-hide-tips",{except:this.opts.chart})),!t&&this.shown){if(delete this.lastCurPieItemInd,i.graphStyle==="area"&&a.zoomMode){const e=[];for(let n=0;n=_.ed&&(g=_),p-2*Math.PI<=_.st&&p-2*Math.PI>=_.ed&&(g=_)}if(this.lastCurPieItemInd!==g.ind){const x=[];for(let _=0;_{x.$row.style.display="none"}),this.pieLabel.$labelText.nodeValue=g.label,this.pieLabel.$valueText.nodeValue=isNaN(g.value)?"n/a":l(g.value),this.pieLabel.$value.style.color=g.color,this.$tip.classList.add("tchart--tip__piemode"),this.$line&&this.$line.classList.add("tchart--line__piemode"),this.tipH=this.$tip.offsetHeight,this.tipW=this.$tip.offsetWidth;const f=20;let $=this.dx-this.tipW/2,u=Math.min(this.dy-f-this.tipH,d.t+d.h-this.tipH-o);ul.w-1&&T--}else(this.opts.state.zoomMode||this.opts.state.zoomModeSpecial)&&(Ts.state.detailInd2&&T--);if(s.graphStyle==="bar"&&s.animator.add([{prop:"barInd",state:s.state,end:T,duration:0,tween:"linear",group:{top:!0}},{prop:"barO",state:this.opts.state,end:1,duration:150,tween:"exp",speed:.3,group:{top:!0}}]),this.prevXInd!==T||!t.isMove){this.$tip.classList.remove("tchart--tip__piemode"),this.$line&&this.$line.classList.remove("tchart--line__piemode"),this.labels.forEach((F,z)=>{const K=s.state[`e_${z}`]&&!isNaN(s.data.ys[z].y[T])?"block":"none";F.$row.style.display=K,this.points&&(this.points[z].style.display=K),m+=K==="block"?1:0}),this.itemsVisible=m,this.allLabel&&(this.allLabel.$row.style.display=m>1?"block":"none"),this.itemsVisible?(this.$tip.classList.remove("tchart--tip__has_no_items"),this.$line&&this.$line.classList.remove("tchart--line__has_no_items")):(this.$tip.classList.add("tchart--tip__has_no_items"),this.$line&&this.$line.classList.add("tchart--line__has_no_items"));let L=0;s.graphStyle==="step"&&(this.opts.state.zoomMode?L=s.data.detailPeriodLen:L=s.data.mainPeriodLen);const b=(s.data.x[T]-i.x1+L/2)/(i.x2-i.x1+$)*(l.w-c-n)+c<<0;this.$line&&(this.$line.style.transform="translateX("+b+"px)"),this.$line&&(this.$line.style.webkitTransform="translateX("+b+"px)"),this.$tipDtText.nodeValue=s.data.dates[T];let I=0;if(s.data.ys.forEach((F,z)=>{if(s.state[`e_${z}`]&&!isNaN(F.y[T])&&(this.labels[z].$valueText.nodeValue=p(F.y[T]),I+=F.y[T]||0,this.points)){r=this.points[z],s.pairY?(d=i[`y1_${z}`],h=i[`y2_${z}`]):(d=i.y1,h=i.y2);const K=(F.y[T]-d)/(h-d);r.style.transform="translateY("+(l.h-K*(l.h-e-o)-o<<0)+"px)",r.style.webkitTransform="translateY("+(l.h-K*(l.h-e-o)-o<<0)+"px)"}}),this.allLabel&&(this.allLabel.$valueText.nodeValue=p(I)),!t.isMove){this.maxLabelWidth=0,this.maxValueWidth=0,this.maxPercentageWidth=0,this.maxDateWidth=0;const F=window.getComputedStyle(this.$tip);this.rowPaddings=parseInt(F.getPropertyValue("padding-left"),10)+parseInt(F.getPropertyValue("padding-right"),10)}s.graphStyle==="area"&&this.fillPercentages(T,I),this.labels.forEach((F,z)=>{if(s.state[`e_${z}`]&&!isNaN(s.data.ys[z].y[T])){const Q=F.$label.offsetWidth;Q>this.maxLabelWidth&&(this.maxLabelWidth=Q);const Y=F.$value.offsetWidth;Y>this.maxValueWidth&&(this.maxValueWidth=Y)}});let y=this.rowPaddings+this.maxLabelWidth+20+this.maxValueWidth;y+=s.graphStyle==="area"?this.maxPercentageWidth:0;const A=this.rowPaddings+this.$tipDt.offsetWidth+20;A>this.maxDateWidth&&(this.maxDateWidth=A),y=Math.max(y,this.maxDateWidth),this.$tip.style.width=y+"px",this.tipH=this.$tip.offsetHeight,this.tipW=this.$tip.offsetWidth}let R=this.itemsVisible<=2?"center":"side";const S=20;let D,w;R==="center"&&(D=this.dx-this.tipW/2,w=Math.min(this.dy-S-this.tipH,l.t+l.h-this.tipH-o),wl.w/2?D=this.dx-this.tipW-S:D=this.dx+S,w=Math.min(Math.max(this.dy-this.tipH/2,l.t+e),l.t+l.h-this.tipH-o)),D=Math.min(Math.max(D,c/2),l.w-this.tipW-n/2),this.$tip.style.transform="translate("+(D<<0)+"px,"+(w<<0)+"px)",this.$tip.style.webkitTransform="translate("+(D<<0)+"px,"+(w<<0)+"px)",this.lastTipLeft=D<<0,this.lastTipTop=w<<0,this.prevXInd=T,this.updateTipScrollClasses()}fillPercentages(t,s){const i=this.opts,a=[];let e=2;i.data.ys.forEach((n,o)=>{i.state[`e_${o}`]&&(a[o]=Math.max(Math.round(100*n.y[t]/s),0),(isNaN(n.y[t])||s===0)&&(a[o]=0),a[o]===100&&(e=3))}),i.data.ys.forEach((n,o)=>{if(i.state[`e_${o}`]){const c=e*8+17;this.labels[o].$label.style.transform="translateX("+c+"px)",this.labels[o].$label.style.webkitTransform="translateX("+c+"px)",this.labels[o].$perText.nodeValue=a[o]+"%",this.labels[o].$per.style.width=c-7+"px",c>this.maxPercentageWidth&&(this.maxPercentageWidth=c)}})}}class wt{constructor(t){this.onResize=()=>{const r=Math.min(window.devicePixelRatio||1,2);if(this.ww===window.innerWidth&&r===this.settings.dpi)return;if(this.settings.dpi=r,this.ww=window.innerWidth,this.data.sideLegend){this.$switchers.classList.remove("tchart--switchers__no-space");const l=this.getGraphWidth(!0);l.hasSpaceForLegend?this.$graph.style.width=l.width+"px":(this.$switchers.classList.add("tchart--switchers__no-space"),this.$graph.style.width=l.width+"px")}const d=this.$graph.getBoundingClientRect(),h=this.settings,m=d.height-h.DATES_HEIGHT-h.MINI_GRAPH_HEIGHT-h.MINI_GRAPH_TOP-h.MINI_GRAPH_BOTTOM;this.state.dims={composer:{w:d.width,h:d.height,l:0,t:0},graph:{w:d.width,h:m,l:0,t:h.DATES_HEIGHT},axisYLeft:{w:h.Y_LABELS_WIDTH,h:m,l:h.PADD[3],t:h.DATES_HEIGHT},axisYRight:{w:h.Y_LABELS_WIDTH,h:m,l:d.width-h.PADD[1]-h.Y_LABELS_WIDTH,t:h.DATES_HEIGHT},axisYLines:{w:d.width-h.PADD[1]-h.PADD[3],h:m,l:h.PADD[3],t:h.DATES_HEIGHT},fadeTop:{w:d.width,h:h.FADE_HEIGHT,l:0,t:h.DATES_HEIGHT},fadeBottom:{w:d.width,h:h.FADE_HEIGHT,l:0,t:h.DATES_HEIGHT+m-h.FADE_HEIGHT},axisX:{w:d.width,h:h.X_LABELS_HEIGHT,l:0,t:h.DATES_HEIGHT+m-h.X_LABELS_HEIGHT},dates:{w:h.DATES_WIDTH,h:h.DATES_HEIGHT,l:this.opts.settings.DATES_SIDE==="right"?d.width-h.DATES_WIDTH-h.PADD[1]:h.PADD[1],t:0},mini:{w:d.width-h.PADD[1]-h.PADD[3],h:h.MINI_GRAPH_HEIGHT,l:h.PADD[3],t:h.DATES_HEIGHT+m+h.MINI_GRAPH_TOP},handle:{w:d.width-h.PADD[1]-h.PADD[3],h:h.MINI_GRAPH_HEIGHT+2,l:h.PADD[3],t:h.DATES_HEIGHT+m+h.MINI_GRAPH_TOP-1},tip:{w:d.width,h:m,l:0,t:h.DATES_HEIGHT}},this.graph.onResize(),this.axisY.onResize(),this.fade.onResize(),this.axisX.onResize(),this.mini.onResize(),this.handle.onResize(),this.tip.onResize(),this.composer.onResize()},this.onHandleMove=(r,d,h,m)=>{let l=this.state.zoomMode;if(this.updateSpeed(),l=!1,l){const f=this.data.mainPeriodLen;r=Math.round(r/f)*f,d=Math.round(d/f)*f,r=Math.min(Math.max(r,this.state.xg1),this.state.xg2-f),d=Math.min(Math.max(d,this.state.xg1+f),this.state.xg2),d<=r&&(d=r+f);const $=this.animator.get("x1"),u=this.animator.get("x2"),x=$?$.end:this.state.x1,_=u?u.end:this.state.x2;if(r===x&&d===_)return}const p=[],g=this.getYMinMax(r,d,!1,!0);this.axisX.setAnimation(l||h!=="both"),this.axisY.setAnimation(!0),this.axisY.setForceUpdate(!1),m&&bt("chart-hide-tips",{except:null}),p.push({prop:"x1",state:this.state,end:r,fixed:!0,duration:l?250:0,group:{top:!0,bottom:!0}}),p.push({prop:"x2",state:this.state,end:d,fixed:!0,duration:l?250:0,group:{top:!0,bottom:!0}});for(let f=0;f{clearTimeout(this.switcherLeaveTimeout);const d=[];for(let h=0;h{clearTimeout(this.switcherLeaveTimeout),this.switcherLeaveTimeout=window.setTimeout(()=>{const d=[];for(let h=0;h{var h,m,l,p=[],g,f=[],$=[],u,x;if(this.updateSpeed(),typeof r!="boolean")for(u=!0,d=r,x=!0,l=0;l{if(h&&this.specialZoomTransition===void 0&&(h.columns.length!==this.data.ys.length+1&&(this.specialZoomTransition=!0),this.specialZoomTransition||h.columns.forEach(M=>{const b=M[0],I=h.types[b],y=h.names[b],A=this.data.yIds[b];if(A!==void 0){const F=this.data.ys[A].tp,z=this.data.ys[A].label;(F!==I||z!==y)&&(this.specialZoomTransition=!0)}else b!=="x"&&(this.specialZoomTransition=!0)}),this.specialZoomTransition===void 0&&(this.specialZoomTransition=!1)),this.specialZoomTransition&&(this.data.master=!0,this.$el.classList.add("tchart__master"),!this.slaveChart)){const M=JSON.parse(JSON.stringify(h));M.yTickFormatter=h.yTickFormatter,M.yTooltipFormatter=h.yTooltipFormatter,M.xTickFormatter=h.xTickFormatter,M.xTooltipFormatter=h.xTooltipFormatter,M.xRangeFormatter=h.xRangeFormatter,M.sideLegend=this.data.sideLegend,M.getLabelDate=this.data.getLabelDate,M.getLabelTime=this.data.getLabelTime,this.slaveChart=new wt({container:this.opts.container,slave:!0,data:M}),this.slaveChart.setDarkMode(this.darkMode)}if(h&&!h.details&&(h.details={y:[],names:[]},h.columns.forEach(M=>{const b=M.shift(),I=h.types[b],y=h.names[b];I==="x"?h.details.x=M:this.specialZoomTransition?(h.details.y.push(M),h.details.names.push(y)):h.details.y[this.data.yIds[b]]=M})),h&&(h.subchart={show:h.subchart&&h.subchart.show!==void 0?h.subchart.show:!0,defaultZoom:h.subchart&&h.subchart.defaultZoom},h.details.subchart=h.subchart,h.details.hidden=h.hidden||[]),this.specialZoomTransition){this.toggleZoomSpecial(r,d,h&&h.details);return}const m=h&&h.details;var l,p,g=[];if(this.state.zoomMode===r)return;if(r){if(this.state.zoomMode=!0,this.state.zoomDir=1,this.$h1.classList.add("tchart--header__hidden"),this.$zoom.classList.add("tchart--zoom__visible"),this.zoomEnterSpeed=this.updateSpeed(),h&&(this.data.details={yTickFormatter:h.yTickFormatter,yTooltipFormatter:h.yTooltipFormatter,xTickFormatter:h.xTickFormatter,xTooltipFormatter:h.xTooltipFormatter,xRangeFormatter:h.xRangeFormatter,subchart:h.subchart,hidden:h.hidden||[]}),!this.hasSavedData){this.data.saved={},this.data.saved.x=this.data.x.slice(),this.data.saved.dates=this.data.dates.slice(),this.data.saved.datesShort=this.data.datesShort.slice(),this.data.saved.datesRange=this.data.datesRange.slice(),this.data.saved.y=[];for(let M=0;Mthis.data.x[this.data.x.length-1]&&(T=this.data.x[this.data.x.length-1]+f)):T>this.data.x[this.data.x.length-1]&&(T=this.data.x[this.data.x.length-1]+f,_=T-R,_{r||(this.state.zoomMode=!1,this.graphStyle!=="area"&&this.revertDetails()),document.body.style.pointerEvents="",this.composer.render({top:!0,bottom:!0})},S+20+(this.graphStyle==="area"?S*.9:0)),this.state.zoomMorph=r?0:1,g.push({prop:"zoomMorph",state:this.state,end:r?1:0,duration:S,delay:w,group:{top:!0,bottom:!0}}),g.push({prop:"x1",state:this.state,end:$,delay:D,duration:S,group:{top:!0,bottom:!0}}),g.push({prop:"x2",state:this.state,end:u,delay:D,duration:S,group:{top:!0,bottom:!0}}),g.push({prop:"xg1",state:this.state,end:_,delay:D,duration:S,group:{top:!0,bottom:!0}}),g.push({prop:"xg2",state:this.state,end:T,delay:D,duration:S,group:{top:!0,bottom:!0}});for(let M=0;M<(this.pairY?this.data.ys.length:1);M++)(this.graphStyle==="line"||this.graphStyle==="step")&&g.push({prop:this.pairY?`y1_${M}`:"y1",state:this.state,end:this.pairY?l.min[M]:l.min,delay:D,duration:S,group:{top:!0}}),this.graphStyle!=="area"&&g.push({prop:this.pairY?`y2_${M}`:"y2",state:this.state,end:this.pairY?l.max[M]:l.max,delay:D,duration:S,group:{top:!0}}),(this.graphStyle==="line"||this.graphStyle==="step")&&g.push({prop:this.pairY?`y1m_${M}`:"y1m",state:this.state,end:this.pairY?p.min[M]:p.min,delay:D,duration:S,group:{bottom:!0}}),this.graphStyle!=="area"&&g.push({prop:this.pairY?`y2m_${M}`:"y2m",state:this.state,end:this.pairY?p.max[M]:p.max,delay:D,duration:S,group:{bottom:!0}});this.animator.add(g)},this.state={},this.state.masterVisibility=1,this.state.slaveVisibility=0,this.specialZoomTransition=void 0;const s=(!!window.ActiveXObject&&+/msie\s(\d+)/i.exec(navigator.userAgent)[1]||NaN-0)<11,i=navigator.userAgent.indexOf("Trident/")!==-1&&(navigator.userAgent.indexOf("rv:")!==-1||navigator.appName.indexOf("Netscape")!==-1),a={background:"#FFFFFF",backgroundRgb:[255,255,255],text:"#000000",dates:"#000",grid:"rgba(24, 45, 59, 0.1)",axis:{x:"rgba(37,37,41,0.5)",y:"rgba(37,37,41,0.5)"},barsSelectionBackground:"rgba(255, 255, 255, 0.5)",miniMask:"rgba(226, 238, 249, 0.6)",miniFrame:"#C0D1E1"},e={background:"#242F3E",backgroundRgb:[36,47,62],text:"#FFFFFF",dates:"#fff",grid:"rgba(255, 255, 255, 0.1)",axis:{x:"rgba(163,177,194,0.6)",y:"rgba(236,242,248,0.5)"},barsSelectionBackground:"rgba(36, 47, 62, 0.5)",miniMask:"rgba(48, 66, 89, 0.6)",miniFrame:"#56626D"},n=!!document.documentElement.classList.contains("dark");this.settings={isIE:s||i,isEdge:/Edge\/\d./i.test(navigator.userAgent),dpi:Math.min(window.devicePixelRatio||1,2),darkMode:n,ALL_LABEL:"All",Y_AXIS_RANGE:5.3,PADD:[20,16,20,16],PADD_MINI:[2,0,2,0],PADD_MINI_BAR:[0,0,0,0],PADD_MINI_AREA:[0,0,0,0],Y_LABELS_WIDTH:50,X_LABELS_HEIGHT:12,DATES_HEIGHT:18,DATES_WIDTH:300,DATES_SIDE:"right",DATES_WEIGHT:"bold",ZOOM_TEXT:"Zoom Out",MINI_GRAPH_HEIGHT:40,MINI_GRAPH_TOP:14,MINI_GRAPH_BOTTOM:2,FADE_HEIGHT:16,PIE_RADIUS:130,FONT:{family:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',bold:"bold",normal:"normal"},COLORS:n?e:a,...t.settings||{}},this.data={caption:t.data.title,detailsFunc:t.data.x_on_zoom,hasDetail:!!t.data.x_on_zoom,slave:t.slave,yTickFormatter:t.data.yTickFormatter,yTooltipFormatter:t.data.yTooltipFormatter,yMinStep:t.data.yMinStep,xTickFormatter:t.data.xTickFormatter,xTooltipFormatter:t.data.xTooltipFormatter,xRangeFormatter:t.data.xRangeFormatter,strokeWidth:t.data.strokeWidth||"auto",hidden:t.data.hidden||[],tooltipOnHover:!!t.data.tooltipOnHover,forceLegend:t.data.forceLegend,sideLegend:t.data.sideLegend||!1,pieZoomRange:t.data.pieZoomRange||7*86400*1e3,pieLabelsPercentages:{outboard:t.data.pieLabelsPercentages&&t.data.pieLabelsPercentages.outboard!==void 0?t.data.pieLabelsPercentages.outboard:5,hoverOnly:t.data.pieLabelsPercentages&&t.data.pieLabelsPercentages.hoverOnly!==void 0?t.data.pieLabelsPercentages.hoverOnly:2},subchart:{show:t.data.subchart&&t.data.subchart.show!==void 0?t.data.subchart.show:!0,defaultZoom:t.data.subchart&&t.data.subchart.defaultZoom},getLabelDate:t.data.getLabelDate||Xt,getLabelTime:t.data.getLabelTime||Gt},t.data.y_scaled&&(this.pairY=!0),this.graphStyle="line";const o=this.settings;t.data.columns.forEach(r=>{const d=r.shift(),h=t.data.types[d];if(h==="x"){this.data.x=r,this.state.xCount=r.length,this.state.x1=r[r.length*.75<<0],this.state.x2=r[r.length-1],this.state.xg1=r[0],this.state.xg2=r[r.length-1],this.state.xg1Ind=0,this.state.xg2Ind=r.length-1,this.state.xMainMin=r[0],this.state.xMainMax=r[this.state.xg2Ind],this.state.xgMin=r[0],this.state.xgMax=r[this.state.xg2Ind];const m=this.getDefaultZoom({x1:this.state.x1,x2:this.state.x2,xg1:this.state.xg1,xg2:this.state.xg2,default:this.data.subchart.defaultZoom});this.state.x1=m.x1,this.state.x2=m.x2,this.data.mainPeriodLen=this.data.x[1]-this.data.x[0],this.data.detailPeriodLen=this.data.mainPeriodLen,this.data.dates=[],this.data.datesShort=[],this.data.datesRange=[];const l=lt("xTooltipFormatter",this.data,0),p=lt("xTickFormatter",this.data,0),g=this.data.subchart.show?lt("xRangeFormatter",this.data,0):void 0;let f=0;r.forEach(($,u)=>{this.data.dates[u]=l($,!1),this.data.datesShort[u]=p($,!1),g&&(this.data.datesRange[u]=g($,!1)),this.data.datesShort[u].length>f&&(f=this.data.datesShort[u].length)}),this.data.maxXTickLength=f}else{this.data.ys=this.data.ys||[],this.data.yIds=this.data.yIds||{};const m=t.data.colors[d];this.data.ys.push({colors_d:[m,m,m],colors_n:[m,m,m],label:t.data.names[d],y:r,tp:h,id:d});const l=this.data.ys.length-1,p=this.data.hidden.indexOf(d)===-1;this.data.yIds[d]=l,this.state[`e_${l}`]=p,this.state[`o_${l}`]=p?1:0,this.state[`om_${l}`]=p?1:0,this.state[`pieInd_${l}`]=0,this.state[`f_${l}`]=1,this.graphStyle=h}}),this.state.activeColumnsCount=this.data.ys.length,this.updateSpeed(),this.graphStyle==="area"&&(o.Y_AXIS_RANGE=4.06,this.data.hasDetail=!0);const c=this.reduceGlobalRange({});c.isReduced&&(this.state.x1=c.x1,this.state.x2=c.x2,this.state.xg1=c.xg1,this.state.xg2=c.xg2,this.state.xg1Ind=c.xg1Ind,this.state.xg2Ind=c.xg2Ind),this.createDOM(t.container),window.addEventListener("resize",this.onResize),document.addEventListener("darkmode",()=>{this.setDarkMode(!this.darkMode)},!1),document.addEventListener("chart-hide-tips",r=>{r.detail.except!==this&&this.tip.toggle(!1)},!1),this.opts=t,this.onResize(),this.darkMode&&this.setDarkMode(this.darkMode),window.matchMedia("(-webkit-min-device-pixel-ratio: 1), (min-resolution: 96dpi)").addListener(this.onResize),window.matchMedia("(-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi)").addListener(this.onResize),window.matchMedia("(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)").addListener(this.onResize),window.matchMedia("(-webkit-min-device-pixel-ratio: 3), (min-resolution: 288dpi)").addListener(this.onResize)}static render(t){const s=document.createElement("div");s.className="tchart--wrapper",t.container.appendChild(s),t.container=s;const i=new wt(t);return i.$wrapper=s,i}get darkMode(){return this.settings.darkMode}reduceGlobalRange(t){let s=t.x1===void 0?this.state.x1:t.x1,i=t.x2===void 0?this.state.x2:t.x2;const a=t.xg1===void 0?this.state.xg1:t.xg1,e=t.xg2===void 0?this.state.xg2:t.xg2,n=t.useSaved?this.data.saved.x:this.data.x,o=Math.floor(J(n,this.state.xgMin)),c=Math.ceil(J(n,this.state.xgMax));let r=c,d=o,h=this.state.zoomMode?this.graphStyle==="bar"||this.graphStyle==="step"?1:2:0;if(this.graphStyle==="area"&&(h=0),this.data.ys.forEach((p,g)=>{var f=t.useSaved?this.data.saved.y[g]:p.y;if(this.state[`e_${g}`])for(let $=o;$<=c-h;++$)f[$]!==void 0&&(r=Math.min(r,$),d=Math.max(d,$))}),d+h===c&&(d=c-Math.max(h-1,0)),r>=d)return{isReduced:!1};const m=n[r],l=n[d];return a===m&&e===l?{isReduced:!1}:(i>l?(s=l-(i-s),i=l,sl&&(i=l)),{isReduced:!0,x1:s,x2:i,xg1:m,xg2:l,xg1Ind:r,xg2Ind:d})}getDefaultZoom(t){if(!t.default)return{x1:t.x1,x2:t.x2};const s={};return s.x1=t.default[0],s.x2=t.default[1],s.x1=Math.max(s.x1,t.xg1),s.x2=Math.min(s.x2,t.xg2),s.x1>=s.x2&&(s.x1=t.xg1,s.x2=t.xg2),s}updateSpeed(t){const s=this.state.activeColumnsCount*this.state.xCount*Math.pow((this.state.x2-this.state.x1)/(this.state.xMainMax-this.state.xMainMin),.5),i=this.state.deviceSpeed*s/16.66<<0;let a=Math.max(1-.25*i,0);return a=Math.pow(a,.85),this.state.deviceSpeed===void 0&&(t=1),t=1,this.state.speed=t===void 0?a:t,this.state.speed}getYMinMax(t,s,i,a,e){if(this.graphStyle==="area")return{min:0,max:102};const n=this.state.dims?this.state.dims.graph.w:this.getGraphWidth(this.data.sideLegend).width;let o=Number.MAX_VALUE,c=-Number.MAX_VALUE;const r=(s-t)/n;let d=J(e?this.data.saved.x:this.data.x,t-r*this.settings.PADD[3]),h=J(e?this.data.saved.x:this.data.x,s+r*this.settings.PADD[1]);const m=this.data.yMinStep||1,l=[],p=[],g=this.settings,f=this.state;let $,u;!e&&this.state.zoomMode?(d=Math.max(d,this.state.detailInd1),h=Math.min(h,this.state.detailInd2)):(d=Math.max(d,0),h=Math.min(h,this.data.x.length-1));const x=Math.floor(d),_=Math.ceil(d),T=Math.floor(h),R=Math.ceil(h),S=(D,w,L,M)=>{let b;return D===Number.MAX_VALUE?i?L===void 0?(D=f.y1m,w=f.y2m):(D=f[`y1m_${L}`],w=f[`y2m_${L}`]):L===void 0?(D=f.y1,w=f.y2):(D=f[`y1_${L}`],w=f[`y2_${L}`]):(this.graphStyle==="bar"&&(D=0),D=Math.floor(D),w=Math.ceil(w),a&&(b=Kt(D,w,g.Y_AXIS_RANGE),D=b.yMin,w=b.yMax,Math.abs(D-w){const L=e?this.data.saved.y[w]:D.y,M=this.graphStyle==="step"?x:_,b=this.graphStyle==="step"?R:T;if(f[`e_${w}`]||w===0&&this.pairY){let I;for(let y=M;y<=b;y++)I=L[y],I!==void 0&&(Ic&&(c=I));this.graphStyle==="line"&&(L[x]!==void 0&&L[_]!==void 0&&($=L[x]+(d-x)*(L[_]-L[x]),$c&&(c=$)),L[T]!==void 0&&L[R]!==void 0&&(u=L[T]+(h-T)*(L[R]-L[T]),uc&&(c=u)))}if(this.pairY){const I=S(o,c,w);l[w]=I.min,p[w]=I.max,o=Number.MAX_VALUE,c=-Number.MAX_VALUE}}),this.graphStyle==="bar"){const D=[];for(let L=0;Lc&&(c=M)}o=0}if(this.pairY)return isNaN(l[0])&&(l[0]=l[1]),isNaN(l[1])&&(l[1]=l[0]),isNaN(p[0])&&(p[0]=p[1]),isNaN(p[1])&&(p[1]=p[0]),{min:l,max:p};{const D=S(o,c);return{min:D.min,max:D.max}}}setDarkMode(t,s){this.settings.darkMode=t,s&&(this.settings.COLORS=s),this.graph.setDarkMode(t),this.axisY.setDarkMode(t),this.fade.setDarkMode(t),this.axisX.setDarkMode(t),this.mini.setDarkMode(t),this.handle.setDarkMode(t),this.tip.setDarkMode(t),this.switchers.setDarkMode(t),this.composer.setDarkMode(t)}getGraphWidth(t){const s=this.$el.getBoundingClientRect();if(t){const i=this.$switchers.getBoundingClientRect();return s.width-i.width>=500?{hasSpaceForLegend:!0,width:Math.max(s.width-i.width,1)}:{hasSpaceForLegend:!1,width:s.width}}else return{width:s.width}}createDOM(t){const s=this.settings;this.$el=document.createElement("div"),this.$el.className="tchart",this.data.subchart.show||this.$el.classList.add("tchart__no-subchart"),this.data.slave&&this.$el.classList.add("tchart__slave"),this.$h1=document.createElement("h1"),this.$h1.className="tchart--header",this.$h1.textContent=this.data.caption,this.$el.appendChild(this.$h1),this.$zoom=document.createElement("div"),this.$zoom.className="tchart--zoom",this.$el.appendChild(this.$zoom);const i=document.createElement("div");i.className="tchart--zoom-icon",this.$zoom.appendChild(i);const a=document.createElement("span");a.textContent=this.settings.ZOOM_TEXT,this.$zoom.appendChild(a),this.$zoom.addEventListener("click",()=>{this.toggleZoom(!1)}),this.$graph=document.createElement("div"),this.$graph.className="tchart--graph",this.$el.appendChild(this.$graph),this.$switchers=document.createElement("div"),this.$switchers.className="tchart--switchers",this.data.sideLegend&&this.$switchers.classList.add("tchart--switchers__side-legend"),this.$el.appendChild(this.$switchers),t.appendChild(this.$el);const e=this.getYMinMax(this.state.x1,this.state.x2,!1,!0),n=this.getYMinMax(this.state.xg1,this.state.xg2,!0);if(this.pairY)for(let r=0;r{const d={animator:this.animator,$canvas:this.composer.$canvas,ctx:this.composer.ctx,graphStyle:this.graphStyle,chart:this,pairY:this.pairY,state:this.state,data:this.data,$parent:r[2],settings:s,additional:r[3]||{}};this[r[0]]=new r[1](d),this[r[0]].id=r[0]})}toggleSlave(t,s,i,a){const e=[];if(this.updateSpeed(a),this.state.zoomModeSlave===t)return;if(this.state.zoomSpecialOrigin=s,t){this.state.zoomModeSlave=!0,this.switchers.switchers.forEach((u,x)=>{u.classList.add("tchart--switcher__visible"),u.getElementsByTagName("span")[0].textContent=i.names[x]}),this.tip.labels.forEach((u,x)=>{u.$label.textContent=i.names[x]}),this.data.x=i.x;const o=[];for(let u=0;ul&&(l=this.data.datesShort[u].length);this.data.maxXTickLength=l,this.data.subchart=i.subchart,this.data.hidden=i.hidden;const p=this.getDefaultZoom({x1:c,x2:r,xg1:c,xg2:r,default:this.data.subchart.defaultZoom});this.state.x1=p.x1,this.state.x2=p.x2,this.state.xCount=this.data.x.length,this.state.xg1=c,this.state.xg2=r,this.state.xg1Ind=0,this.state.xg2Ind=this.data.x.length-1,this.state.xMainMin=c,this.state.xMainMax=r,this.state.xgMin=c,this.state.xgMax=r;const g=this.reduceGlobalRange({});g.isReduced&&(this.state.x1=g.x1,this.state.x2=g.x2,this.state.xg1=g.xg1,this.state.xg2=g.xg2,this.state.xg1Ind=g.xg1Ind,this.state.xg2Ind=g.xg2Ind);const f=this.getYMinMax(this.state.x1,this.state.x2,!1,!0),$=this.getYMinMax(c,r,!0);this.state.y1=f.min,this.state.y2=f.max,this.state.y1m=$.min,this.state.y2m=$.max}else this.switchers.switchers.forEach(o=>{o.classList.remove("tchart--switcher__visible")});const n=450;setTimeout(()=>{t||(this.state.zoomModeSlave=!1)},n+20),this.state.slaveVisibility=t?0:1,e.push({prop:"slaveVisibility",state:this.state,end:t?1:0,duration:n,group:{top:!0,bottom:!0}}),this.animator.add(e)}toggleZoomSpecial(t,s,i){var a=[];if(this.state.zoomModeSpecial!==t){var e=this.updateSpeed();if(t){var n=(this.state.x2-this.state.x1)/(this.state.dims.graph.w-this.settings.PADD[3]-this.settings.PADD[1]),o=this.settings.PADD[3]*n,c=this.settings.PADD[1]*n;this.state.zoomSpecialOrigin=(s-this.state.x1+o)/(this.state.x2-this.state.x1+o+c),this.state.zoomModeSpecial=!0,this.$h1.classList.add("tchart--header__hidden"),this.$zoom.classList.add("tchart--zoom__visible"),this.switchers.switchers.forEach(d=>{d.classList.remove("tchart--switcher__visible")}),this.slaveChart.toggleSlave(!0,this.state.zoomSpecialOrigin,i,e)}else this.$h1.classList.remove("tchart--header__hidden"),this.$zoom.classList.remove("tchart--zoom__visible"),this.switchers.switchers.forEach(d=>{d.classList.add("tchart--switcher__visible")}),this.slaveChart.toggleSlave(!1,this.state.zoomSpecialOrigin,null,e);var r=450;document.body.style.pointerEvents="none",setTimeout(()=>{t||(this.state.zoomModeSpecial=!1),document.body.style.pointerEvents=""},r+20),this.state.masterVisibility=t?1:0,a.push({prop:"masterVisibility",state:this.state,end:t?0:1,duration:r,group:{top:!0,bottom:!0}}),this.animator.add(a)}}insertDetails(t,s,i){const a=Math.ceil(J(this.data.x,t));let e=Math.ceil(J(this.data.x,s));const n=0,o=i.x.length-1;s>this.data.x[e]&&e++;const c=0,r=a,d=e-(this.graphStyle==="bar"||this.graphStyle==="step"?1:0),h=this.data.x.length-1,m=[],l=[],p=[],g=[];let f,$,u,x,_;const T=[],R=[];for(let y=c;yI&&(I=p[f].length);const A=J(this.data.x,m[f]);S[y]=A,D[y]=Math.floor(A),w[y]=Math.ceil(A)}this.data.details.maxXTickLength=I;for(let y=0;y