3 lines
83 KiB
JavaScript
3 lines
83 KiB
JavaScript
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=e<a.startDt;e<a.startDt?e=a.startDt:e>a.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(;d<s.length;)this.queue[s[d]].cbEnd&&this.queue[s[d]].cbEnd(this.queue[s[d]].state),delete this.queue[s[d]],d++;this.queueSize-=s.length,this.composer.render(r),this.queueSize?this.animFrame=requestAnimationFrame(this.step):delete this.animFrame},this.composer=t.composer,this.state=t.state}add(t){let s=0;const i=+new Date;let a,e,n;const o=this.queue;for(;s<t.length;){if(e=t[s],a=o[e.prop],!a){if(e.end===e.state[e.prop]){e.cbEnd&&e.cbEnd(e.state),s++;continue}a={lastStart:1},o[e.prop]=a,this.queueSize++}n=i-a.lastStart,e.duration*=this.state.speed,e.delay*=this.state.speed,a.cbEnd=e.cbEnd,a.state=e.state,a.lastStart=i,a.start=e.state[e.prop],a.end=e.end,a.startDt=i+(e.delay||0),a.endDt=a.startDt+(e.duration||0)-(e.fixed?0:Math.max(e.duration-n,0)),a.tween=e.tween||"easeInOutQuad",a.speed=e.speed,a.group=e.group,s++}this.animFrame||(this.animFrame=requestAnimationFrame(this.step))}get(t){return this.queue[t]}}const kt=["January","February","March","April","May","June","July","August","September","October","November","December"],Ht=kt.map(v=>v.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;x<p;x++){const _=e[x];h[_]=h[_]||{y:[]};const T=h[_].y[m-1],R=s[_].y[f];T===void 0?h[_].y[m-1]=R:h[_].y[m-1]+=R,m>1&&(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||(t<v[i]?t=v[i]:t>v[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;t<L;t++)et.push(c[`om_${t}`]),et.push(c[`f_${t}`]);const q=et.join(",");if(q===this.cached){this.opts.ctx.drawImage(this.$canvas,S.l*u,S.t*u);return}this.cached=q}e=(S.w-p-f)/(h-d);let M=Math.floor(J($,d-f/e)),b=Math.ceil(J($,h+p/e));e*=u;const I=(f+(r?0:S.l))*u-d*e,y=(S.h-g+(r?0:S.t))*u,A=[],F=[];let z=0,K=0,Q=0,Y=!1;for(t=0;t<L;t++)a=r?c[`om_${t}`]:c[`o_${t}`],Y=Y||c[`f_${t}`]<1,a<1&&a>0&&(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;t<X;t++)T[s]+=(Z[A[t]].y[s]||0)*F[t];T[s]===0&&(H=!0)}(H||Y)&&(x.fillStyle=this.opts.settings.COLORS.background,x.fillRect(0,0,S.w*u,S.h*u));let E,N,C,G;if(D>0&&!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;t<X;t++){ut[t]=0;const P=o[A[t]].y;let O;for(s=rt;s<=ct;s++)O=(P[s]||0)*F[t],ut[t]+=O,ht+=O;O=(rt-et)*(P[B]||0)*F[t],ut[t]+=O,ht+=O,O=(q-ct)*(P[xt]||0)*F[t],ut[t]+=O,ht+=O}const j=this.opts.state.zoomDir===1?Math.pow(Math.min(Math.max(w<.85?(w-.65)/.2:1-(w-.9)/.15,0),1),.8):this.prevElastic;let W=2*Math.PI-Math.PI/(7-w)-Math.PI/8*j;const at=W;this.opts.state.zoomDir===1?(w=Math.min(Math.max((w-.25)/.4,0),1),this.prevElastic=j):w=Math.min(Math.max(w*2.4-1.4,0),1),E=[],N=m.PIE_RADIUS*(D<1?2.31:1)*u,C=u*(S.w/2+S.l),G=u*(S.h/2+S.t+2);const ot=2*Math.PI*N/u,U=1/13;for(t=0;t<X;t++){let P=ut[t]/ht;P=P||0;const O=2*Math.PI*P;let tt=W-O;const st=Math.round(P*ot*U);t===X-1&&(tt=at-2*Math.PI);const nt=Math.PI*2*.1/ot,dt=o[A[t]];E.push({st:W+nt,ed:tt-nt,mid:W-O/2-nt/2,additionalPoints:Math.max(st,4),percentage:P===0?0:Math.max(Math.round(P*100),1),percentageText:P===0?"":P<.01?"<1%":Math.round(P*100)+"%",ind:A[t],value:ut[t],label:dt.label,color:this.isDarkMode?dt.colors_n[2]:dt.colors_d[2]}),W=tt}c.pieAngles=E}const gt=u*(S.h-l-g+(r?0:-4)),yt=(S.h-g+(r?0:S.t))*u;let V=0;for(t=0;t<L;t++){if(a=r?c[`om_${t}`]:c[`o_${t}`],a<=0)continue;i=Z[t].y;const et=a*gt;if(x.fillStyle=this.isDarkMode?o[t].colors_n[0]:o[t].colors_d[0],x.globalAlpha=c[`f_${t}`]*.9+.1,x.beginPath(),D===0||!r)if(D===0){if(t>0)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(V<X-1||H)for(s=M;s<=b;s++){const q=yt-(i[s]*et/T[s]||0),j=y-q;let W=_[s]+j;W>gt&&(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(V<X-1){let O;for(s=0;s<=j;s++){const tt=yt-(i[M]*et/T[M]||0),st=y-tt;O=y-_[M]+R;const nt=y-_[M]-st;P=q(k[M]*e+I,O+s/j*(nt-O),E[V].st+s/j*(E[V].ed-E[V].st),N),x.lineTo(P[0],P[1])}for(s=M;s<=b;s++){const tt=yt-(i[s]*et/T[s]||0),st=y-tt;if(U=k[s]*e+I,U===C&&(ot=!0),U<=C){W=(C-U)/(S.w*u/2);var Lt=U,It=y-_[s]-st;P=q(U,It,E[V].ed,N*W)}else{if(!ot){ot=!0;const nt=(C-Lt)/(U-Lt);O=It;const dt=y-_[s]-st;P=q(C,O+nt*(dt-O),E[V].ed,0),x.lineTo(P[0],P[1])}W=(U-C)/(S.w*u/2),w===0&&(W=0),P=q(U,y-_[s]-st,E[0].st,N*W)}x.lineTo(P[0],P[1]),_[s]+=st}U<C&&(ot||(P=q(C,O,E[V].ed,0),x.lineTo(P[0],P[1])))}else for(s=0;s<=j;s++)P=q((k[M]+s/j*(k[b]-k[M]))*e+I,0,E[V].st+s/j*(E[0].st-2*Math.PI-E[V].st),N),x.lineTo(P[0],P[1])}else{const q=this.opts.data.mainPeriodLen*e;if(x.moveTo(k[b]*e+q+I,y-_[b]),t>0)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(V<X-1)for(s=M;s<=b-1;s++){let W=yt-(i[s]*et/T[s]||0);const at=y-W;s===M&&x.lineTo(k[M]*e+I,y-_[M]-at),W=yt-(i[s+1]*et/T[s+1]||0),j=y-W;const ot=_[s]+at,U=_[s+1]+j;x.lineTo(k[s+1]*e+I,y-(U+w*(ot-U))),x.lineTo(k[s+1]*e+I,y-U),s===b-1&&x.lineTo(k[b]*e+q+I,y-_[b]-j),_[s]+=at}else x.lineTo(k[M]*e+I<<0,y-gt<<0),x.lineTo(k[b]*e+I<<0,y-gt<<0);_[b]+=j}if(x.closePath(),x.fill(),!r&&D>0&&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].percentage<n.data.pieLabelsPercentages.outboard;let O=0,tt=0;if(pt&&K>1&&(O=ot*pt*8*u,tt=-U*pt*8*u),x.fillStyle="white",x.textAlign="center",x.globalAlpha=q,E[V].percentage<n.data.pieLabelsPercentages.hoverOnly&&(x.globalAlpha=pt*q),P){j=Math.max(j,14),at=W+j/3+13,x.fillStyle=this.isDarkMode?o[t].colors_n[0]:o[t].colors_d[0],x.lineWidth=1,x.strokeStyle=this.isDarkMode?o[t].colors_n[0]:o[t].colors_d[0];const Mt=C+O+ot*(W-1)*u,mt=G+tt-U*(W-1)*u,_t=C+O+ot*(W+6*(1-pt)-1)*u,Tt=G+tt-U*(W+6*(1-pt)-1)*u;x.beginPath(),x.moveTo(Mt,mt),x.lineTo(_t,Tt),x.stroke()}const st=ot*at*(Q===V?z:1),nt=C+O+st*u+(P?j/4*E[V].percentageText.length*st/at*u:0),dt=G+tt-U*at*(Q===V?z:1)*u;x.font=`${n.settings.FONT.bold} ${j*u}px ${n.settings.FONT.family}`,x.fillText(E[V].percentageText,nt,dt+j*u/2.9),x.globalAlpha=1}V++}x.globalAlpha=1,r&&this.opts.ctx.drawImage(this.$canvas,S.l*u,S.t*u)}}class ts{constructor(t){this.deleteItem=s=>{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&&(Y<this.opts.state.detailInd1?X=Y%L===0&&m<1:Y<=this.opts.state.detailInd2?(X=Math.max(Y-this.opts.state.detailInd1,0)%M===0,it="d"):X=Math.max(Y-(this.opts.state.detailInd2-this.opts.state.detailInd1+1-z),0)%L===0&&m<1);const k=a[Y]+it;let Z=this.items[k];if(X?Z?Z.tp===2&&(Z.tp=1,c.add([{prop:`ox_${k}`,state:Z.state,end:1,duration:this.noAnimation?0:200*y,tween:"linear",group:{top:!0}}])):(Z={tp:1,xi:a[Y],i:Y,state:{ind:k}},Z.state[`ox_${k}`]=0,this.items[k]=Z,c.add([{prop:`ox_${k}`,state:Z.state,end:1,duration:this.noAnimation?0:200*y,tween:"linear",group:{top:!0}}])):Z&&Z.tp===1&&this.hideItem(k,y),Z&&Z.state[`ox_${k}`]>0){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.xi<e.x1-o/b||X.xi>e.x2+n/b)&&this.hideItem(Y,y)}if(this.ctx.globalAlpha=1,!s.data.subchart.show)return;let K;h&&m===1&&f--,f<g&&(f=g),s.data.datesRange[g]===s.data.datesRange[f]?K=s.data.datesRange[g]:K=s.data.datesRange[g]+" — "+s.data.datesRange[f];let Q=s.settings.DATES_FONT_SIZE;Q||(Q=13,r.w<375&&(Q=11)),this.ctx.font=`${s.settings.FONT[s.settings.DATES_WEIGHT]} ${Q*i}px ${s.settings.FONT.family}`,this.ctx.textAlign=s.settings.DATES_SIDE,this.ctx.fillStyle=s.settings.COLORS.dates,this.ctx.fillText(K,(d.l+(s.settings.DATES_SIDE==="right"?d.w:0))*i,(d.t+d.h-7)*i)}}class ss{constructor(t){this.deleteItem=s=>{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;t<Y;t++)X.push(p?l[`om_${t}`]:l[`o_${t}`]),X.push(l[`f_${t}`]);const it=X.join(",");if(it===this.cached&&(this.opts.ctx.drawImage(this.$canvas,M.l*S,M.t*S),p))return;o=(M.w-x-T)/(f-g+this.opts.data.mainPeriodLen*(1-A)),D=Math.floor(J(R,g-T/o)),w=Math.ceil(J(R,f+x/o)),b&&A===1&&(D<this.opts.state.xg1Ind&&(D=this.opts.state.xg1Ind),w>this.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;t<Y;t++)if(a=p?l[`om_${t}`]:l[`o_${t}`],a>0){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<N;s++){const B=K[s];b?B>=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;t<Y;t++)if(a=l[`o_${t}`],a>0){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<h?"both":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-e<a&&(n=e+a,n>o&&(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,n<a.xg1&&(n=a.xg1,o=a.xg1+r-c),o>a.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&&(L<this.opts.state.xg1Ind&&(L=this.opts.state.xg1Ind),M>this.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;t<K;t++)E.push(g?p[`om_${t}`]:p[`o_${t}`]),E.push(p[`f_${t}`]);const N=E.join(",");if(N===this.cached){this.opts.ctx.drawImage(this.$canvas,I.l*w,I.t*w);return}this.cached=N,b.clearRect(0,0,I.w*w,I.w*w)}const Z=(m.additional.mini?1:m.data.strokeWidth==="auto"?K>5?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<K;t++){if(a=g?p[`om_${t}`]:p[`o_${t}`],d=p[`e_${t}`],a<=0)continue;i=l[t].y,h=l[t].yFrom,m.pairY?(e=g?p[`y1m_${t}`]:p[`y1_${t}`],n=g?p[`y2m_${t}`]:p[`y2_${t}`]):g?d&&a<1?(e=p.y1m_show,n=p.y2m_show):!d&&a<1?(e=p.y1m_hidd,n=p.y2m_hidd):(e=p.y1m,n=p.y2m):(e=p.y1,n=p.y2),c=w*(I.h-_-R)/(n-e),r=(I.h-R+(f?0:I.t))*w+e*c,b.beginPath(),b.strokeStyle=this.isDarkMode?l[t].colors_n[0]:l[t].colors_d[0],b.globalAlpha=a*(p[`f_${t}`]*.9+.1);let E,N,C=Number.MAX_VALUE,G=-Number.MAX_VALUE,B=-Number.MAX_VALUE,rt,ct=!1,xt=!0;for(s=L;s<=M;s++){if(y?s>=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<this.switchers.length;s++)this.switchers[s].style.color=this.isDarkMode?t[s].colors_n[1]:t[s].colors_d[1]}setDarkMode(t){this.isDarkMode=t,this.updateColors()}render(t){this.enabled=0;for(let s=0;s<this.switchers.length;s++)t[s]?(this.enabled++,this.switchers[s].classList.add("tchart--switcher__active")):this.switchers[s].classList.remove("tchart--switcher__active")}}class ns{constructor(t){this.onTipClick=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<a.pieAngles.length;n++){const o=a.pieAngles[n];e.push({prop:`pieInd_${o.ind}`,state:i.state,end:0,duration:350,tween:"exp",speed:.2,group:{top:!0}})}i.animator.add(e)}s&&(this.$tip.classList.add("tchart--tip__shiftHide"),this.lastTipTop-=12,this.lastTipLeft=this.lastTipLeft<this.opts.state.dims.tip.w/2?this.lastTipLeft-12:this.lastTipLeft+12,this.$tip.style.transform="translate("+this.lastTipLeft+"px,"+this.lastTipTop+"px)",this.$tip.style.webkitTransform="translate("+this.lastTipLeft+"px,"+this.lastTipTop+"px)"),this.$tip.classList.remove("tchart--tip__visible"),this.$line&&this.$line.classList.remove("tchart--line__visible"),this.abortDetailCallbacks(),this.$tip.classList.remove("tchart--tip__error"),this.$tip.classList.remove("tchart--tip__loading"),this.opts.graphStyle==="bar"&&this.opts.animator.add([{prop:"barInd",state:this.opts.state,end:-1,duration:0,delay:150,tween:"linear",group:{top:!0}},{prop:"barO",state:this.opts.state,end:0,duration:150,tween:"exp",speed:.3,group:{top:!0}}]),document.body.removeEventListener("click",this.onBodyClick)}this.shown=t}renderPieTooltip(t){const s=this.opts,i=s.state,a=this.opts.settings,e=a.PADD[0],n=a.PADD[1],o=a.PADD[2],c=a.PADD[3],r=i.dims.graph,d=i.dims.tip,h=r.w/2,m=r.h/2,l=lt("yTooltipFormatter",s.data,i.zoomMorph);let p=Math.atan2(m-this.dy+r.t,this.dx-h);p=p<0?Math.PI*2+p:p;let g;for(let x=0;x<i.pieAngles.length;x++){const _=i.pieAngles[x];p<=_.st&&p>=_.ed&&(g=_),p-2*Math.PI<=_.st&&p-2*Math.PI>=_.ed&&(g=_)}if(this.lastCurPieItemInd!==g.ind){const x=[];for(let _=0;_<i.pieAngles.length;_++){const T=i.pieAngles[_];x.push({prop:`pieInd_${T.ind}`,state:s.state,end:T===g?1:0,duration:350,tween:"exp",speed:.2,group:{top:!0}})}s.animator.add(x)}this.pieLabel.$row.style.display="block",this.labels.forEach(x=>{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);u<d.t+e&&(u=d.t+e),$=Math.min(Math.max($,c/2),d.w-this.tipW-n/2),this.$tip.style.transform="translate("+($<<0)+"px,"+(u<<0)+"px)",this.$tip.style.webkitTransform="translate("+($<<0)+"px,"+(u<<0)+"px)",this.lastCurPieItemInd=g.ind,this.updateTipScrollClasses()}render(t={}){if(!this.shown)return;const s=this.opts,i=s.state,a=this.opts.settings,e=a.PADD[0],n=a.PADD[1],o=a.PADD[2],c=a.PADD[3];let r,d,h,m=0;const l=this.opts.state.dims.tip,p=lt("yTooltipFormatter",s.data,i.zoomMorph),g=i.zoomMorph===void 0?0:i.zoomMorph,$=(s.graphStyle==="bar"||s.graphStyle==="step"?this.opts.data.mainPeriodLen:0)*(1-g);if(this.abortDetailCallbacks(),this.$tip.classList.remove("tchart--tip__error"),this.$tip.classList.remove("tchart--tip__loading"),s.graphStyle==="area"&&i.zoomMode){this.renderPieTooltip(t);return}else this.pieLabel&&(this.pieLabel.$row.style.display="none");const u=Math.max(Math.min(this.dx,l.w-1),0),x=i.x1+(i.x2-i.x1+$)*((u-c)/(l.w-n-c)),_=J(s.data.x,x);let T=s.graphStyle==="bar"||s.graphStyle==="step"?Math.floor(_):Math.round(_);if(s.graphStyle!=="bar"&&s.graphStyle!=="step"){const M=(s.data.x[T]-i.x1)/(i.x2-i.x1+$)*(l.w-c-n)+c<<0;M<0&&T++,M>l.w-1&&T--}else(this.opts.state.zoomMode||this.opts.state.zoomModeSpecial)&&(T<s.state.detailInd1&&T++,T>s.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),w<l.t+e&&(R="side")),R==="side"&&(this.dx>l.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<this.data.ys.length;f++)(this.graphStyle==="line"||this.graphStyle==="step")&&p.push({prop:this.pairY?`y1_${f}`:"y1",state:this.state,end:this.pairY?g.min[f]:g.min,duration:500,fixed:!0,tween:"exp",speed:.25,group:{top:!0}}),this.graphStyle!=="area"&&p.push({prop:this.pairY?`y2_${f}`:"y2",state:this.state,end:this.pairY?g.max[f]:g.max,duration:500,fixed:!0,tween:"exp",speed:.25,group:{top:!0}});this.animator.add(p)},this.onSwitcherEnter=r=>{clearTimeout(this.switcherLeaveTimeout);const d=[];for(let h=0;h<this.data.ys.length;h++)d.push({prop:`f_${h}`,state:this.state,end:r===h?1:0,duration:300,tween:"exp",speed:.15,group:{top:!0,bottom:!0}}),d.push({prop:`pieInd_${h}`,state:this.state,end:r===h?1:0,duration:300,tween:"exp",speed:.15,group:{top:!0,bottom:!0}});this.animator.add(d)},this.onSwitcherLeave=r=>{clearTimeout(this.switcherLeaveTimeout),this.switcherLeaveTimeout=window.setTimeout(()=>{const d=[];for(let h=0;h<this.data.ys.length;h++)d.push({prop:`f_${h}`,state:this.state,end:1,duration:300,tween:"exp",speed:.15,group:{top:!0,bottom:!0}}),d.push({prop:`pieInd_${h}`,state:this.state,end:0,duration:300,tween:"exp",speed:.15,group:{top:!0,bottom:!0}});this.animator.add(d)},300)},this.onSwitcherChange=(r,d)=>{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<this.data.ys.length;l++)x=x&&(l===d?this.state[`e_${l}`]:!this.state[`e_${l}`]);var _=0;for(l=0;l<this.data.ys.length;l++)g=l===d,$[l]=this.state[`e_${l}`],u?this.state[`e_${l}`]=g:g&&(this.state[`e_${l}`]=!!r),x&&u&&(this.state[`e_${l}`]=!0),f[l]=this.state[`e_${l}`],f[l]&&(_=Math.max(_,this.data.ys[l].y.length));var T=this.reduceGlobalRange({});for(T.isReduced?(p.push({prop:"x1",state:this.state,end:T.x1,duration:333,group:{top:!0,bottom:!0}}),p.push({prop:"x2",state:this.state,end:T.x2,duration:333,group:{top:!0,bottom:!0}}),p.push({prop:"xg1",state:this.state,end:T.xg1,duration:333,group:{top:!0,bottom:!0}}),p.push({prop:"xg2",state:this.state,end:T.xg2,duration:333,group:{top:!0,bottom:!0}}),this.state.xg1Ind=T.xg1Ind,this.state.xg2Ind=T.xg2Ind,h=this.getYMinMax(T.x1,T.x2,!1,!0),m=this.getYMinMax(T.xg1,T.xg2,!0)):(h=this.getYMinMax(this.state.x1,this.state.x2,!1,!0),m=this.getYMinMax(this.state.xg1,this.state.xg2,!0)),bt("chart-hide-tips",{except:null}),this.axisY.setForceUpdate(!0),this.axisY.setAnimation(!0),this.state.activeColumnsCount=0,l=0;l<f.length;l++)f[l]&&this.state.activeColumnsCount++,$[l]!==f[l]&&(p.push({prop:`o_${l}`,state:this.state,end:f[l]?1:0,duration:300,group:{top:!0}}),p.push({prop:`om_${l}`,state:this.state,end:f[l]?1:0,duration:this.graphStyle==="line"||this.graphStyle==="step"?166:300,delay:f[l]&&this.graphStyle==="line"||this.graphStyle==="step"?200:0,tween:"linear",group:{bottom:!0}}));for(l=0;l<(this.pairY?f.length:1);l++)(this.graphStyle==="line"||this.graphStyle==="step")&&p.push({prop:this.pairY?`y1_${l}`:"y1",state:this.state,end:this.pairY?h.min[l]:h.min,duration:this.pairY?0:333,group:{top:!0}}),this.graphStyle!=="area"&&p.push({prop:this.pairY?`y2_${l}`:"y2",state:this.state,end:this.pairY?h.max[l]:h.max,duration:this.pairY?0:333,group:{top:!0}}),(this.graphStyle==="line"||this.graphStyle==="step")&&p.push({prop:this.pairY?`y1m_${l}`:"y1m",state:this.state,end:this.pairY?m.min[l]:m.min,duration:this.pairY?0:316,group:{bottom:!0}}),this.graphStyle!=="area"&&p.push({prop:this.pairY?`y2m_${l}`:"y2m",state:this.state,end:this.pairY?m.max[l]:m.max,duration:this.pairY?0:316,group:{bottom:!0}});this.state.y1m_hidd=this.state.y1m,this.state.y2m_hidd=this.state.y2m,this.state.y1m_show=m.min,this.state.y2m_show=m.max,this.switchers.render(f),this.animator.add(p)},this.toggleZoom=(r,d,h)=>{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;M<this.data.ys.length;M++)this.data.saved.y[M]=this.data.ys[M].y.slice();this.hasSavedData=!0}this.data.details&&this.data.details.subchart&&(this.data.details.subchart.show?this.$el.classList.remove("tchart__no-subchart"):this.$el.classList.add("tchart__no-subchart")),this.state.zoomSaved={x1:this.state.x1,x2:this.state.x2,xg1:this.state.xg1,xg2:this.state.xg2,xgMin:this.state.xgMin,xgMax:this.state.xgMax};var f=this.data.mainPeriodLen,$=d,u=d+f;if(this.data.details)var x=this.getDefaultZoom({x1:$,x2:u,xg1:m.x[0],xg2:m.x[m.x.length-1],default:this.data.details.subchart.defaultZoom}),$=x.x1,u=x.x2;var _,T;if(this.graphStyle!=="area")this.data.detailPeriodLen=m.x[1]-m.x[0],_=m.x[0],T=m.x[m.x.length-1];else{this.data.detailPeriodLen=f;var R=this.data.pieZoomRange;_=$-(R-f)/2,T=_+R,u=$+Math.round(R/7/f)*f,_<this.data.x[0]?(_=this.data.x[0],T=_+R,T>this.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,_<this.data.x[0]&&(_=this.data.x[0]))}_=Math.round(_/f)*f,T=Math.round(T/f)*f,this.graphStyle!=="area"&&this.insertDetails(_,T,m),this.state.xgMin=_,this.state.xgMax=T}else this.updateSpeed(this.zoomEnterSpeed/(this.graphStyle==="area"?2:1)),this.$h1.classList.remove("tchart--header__hidden"),this.$zoom.classList.remove("tchart--zoom__visible"),this.data.details&&(this.data.subchart.show?this.$el.classList.remove("tchart__no-subchart"):this.$el.classList.add("tchart__no-subchart")),this.state.zoomDir=-1,$=this.state.zoomSaved.x1,u=this.state.zoomSaved.x2,_=this.state.zoomSaved.xg1,T=this.state.zoomSaved.xg2,this.state.xgMin=this.state.zoomSaved.xgMin,this.state.xgMax=this.state.zoomSaved.xgMax;this.axisY.setForceUpdate(!0),this.axisY.setAnimation(!0),this.axisX.setAnimation(!0);let S=450,D=0,w=0;this.graphStyle==="area"&&(S=350,r?w=S*.95:D=S*.95);const L=this.reduceGlobalRange({x1:$,x2:u,xg1:_,xg2:T,useSaved:!r});L.isReduced&&($=L.x1,u=L.x2,_=L.xg1,T=L.xg2),this.state.xg1Ind=Math.floor(J(r?this.data.x:this.data.saved.x,_)),this.state.xg2Ind=Math.ceil(J(r?this.data.x:this.data.saved.x,T)),l=this.getYMinMax($,u,!1,!0,!r),p=this.getYMinMax(_,T,!0,!1,!r),document.body.style.pointerEvents="none",setTimeout(()=>{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,s<m&&(s=m)):s<m&&(i=m+(i-s),s=m,i>l&&(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)<g.Y_AXIS_RANGE*m&&(w=D+Math.floor(g.Y_AXIS_RANGE*m)))),Math.abs(D-w)<.1&&w++,{min:D,max:w,range:b}};if((this.graphStyle==="line"||this.graphStyle==="step")&&this.data.ys.forEach((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&&(I<o&&(o=I),I>c&&(c=I));this.graphStyle==="line"&&(L[x]!==void 0&&L[_]!==void 0&&($=L[x]+(d-x)*(L[_]-L[x]),$<o&&(o=$),$>c&&(c=$)),L[T]!==void 0&&L[R]!==void 0&&(u=L[T]+(h-T)*(L[R]-L[T]),u<o&&(o=u),u>c&&(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;L<this.data.ys.length;L++)f[`e_${L}`]&&D.push(L);const w=D.length;for(let L=x;L<=R;L++){let M=0;for(let b=0;b<w;b++)M+=(e?this.data.saved.y[D[b]][L]:this.data.ys[D[b]].y[L])||0;M>c&&(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<this.data.ys.length;r++)this.state[`y1_${r}`]=e.min[r],this.state[`y2_${r}`]=e.max[r],this.state[`y1m_${r}`]=n.min[r],this.state[`y2m_${r}`]=n.max[r];else this.state.y1=e.min,this.state.y2=e.max,this.state.y1m=n.min,this.state.y2m=n.max;this.composer=new is({$parent:this.$graph,settings:s,chart:this,state:this.state,data:this.data,graphStyle:this.graphStyle}),this.animator=new Yt({state:this.state,composer:this.composer});const o={line:Rt,step:Rt,bar:es,area:Qt};[["graph",o[this.graphStyle],this.$graph],["axisX",ts,this.$graph],["fade",as,this.$graph],["axisY",ss,this.$graph],["tip",ns,this.$graph,{onClick:this.toggleZoom}],["mini",o[this.graphStyle],this.$graph,{mini:!0}],["handle",os,this.$graph,{cb:this.onHandleMove}],["switchers",hs,this.$switchers,{onClick:this.onSwitcherChange,onLongTap:this.onSwitcherChange,onEnter:this.onSwitcherEnter,onLeave:this.onSwitcherLeave}]].forEach(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;u<i.y.length;u++){this.data.ys[u].y=i.y[u];const x=i.hidden.indexOf(this.data.ys[u].id)===-1;this.state[`e_${u}`]=x,this.state[`o_${u}`]=x?1:0,this.state[`om_${u}`]=x?1:0,o[u]=x}this.switchers.render(o);const c=this.data.x[0],r=this.data.x[this.data.x.length-1];this.data.dates=[],this.data.datesShort=[],this.data.datesRange=[];const d=lt("xTooltipFormatter",this.data,1),h=lt("xTickFormatter",this.data,1),m=lt("xRangeFormatter",this.data,1);let l=0;for(let u=0;u<this.data.x.length;u++)this.data.dates[u]=d(this.data.x[u],!0),this.data.datesShort[u]=h(this.data.x[u],!0),this.data.datesRange[u]=m(this.data.x[u],!0),this.data.datesShort[u].length>l&&(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;y<r;y++)f=y-c,m[f]=this.data.x[y],l[f]=this.data.dates[y],p[f]=this.data.datesShort[y],g[f]=this.data.datesRange[y];for(let y=0;y<this.data.ys.length;y++){T[y]=T[y]||[],$=T[y],x=this.data.ys[y].y;for(let A=c;A<r;A++)$[A-c]=x[A]}const S=[],D=[],w=[],L=lt("xTooltipFormatter",this.data,1),M=lt("xTickFormatter",this.data,1),b=lt("xRangeFormatter",this.data,1);let I=0;for(let y=n;y<=o;y++){f=y-n+r,m[f]=i.x[y],l[f]=L(m[f],!0),p[f]=M(m[f],!0),g[f]=b(m[f],!0),p[f].length>I&&(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<this.data.ys.length;y++){T[y]=T[y]||[],$=T[y],x=this.data.ys[y].y,_=i.y[y],R[y]=R[y]||[],u=R[y];for(let A=n;A<=o;A++){let F;this.graphStyle==="bar"?F=x[D[A]]||0:this.graphStyle==="step"?F=x[D[A]]:F=x[D[A]]+(S[A]-D[A])*(x[w[A]]-x[D[A]]);const z=_[A];this.graphStyle!=="bar"&&isNaN(F)&&!isNaN(z)&&(F=0),$[A-n+r]=z,u[A-n+r]=F}}for(let y=d+1;y<=h;y++)f=y-d+o+r,m[f]=this.data.x[y],l[f]=this.data.dates[y],p[f]=this.data.datesShort[y],g[f]=this.data.datesRange[y];for(let y=0;y<this.data.ys.length;y++){T[y]=T[y]||[],$=T[y],x=this.data.ys[y].y;for(let A=d+1;A<=h;A++)$[A-d+o+r]=x[A]}this.state.detailInd1=r,this.state.detailInd2=r+o-n,this.data.x=m,this.data.dates=l,this.data.datesShort=p,this.data.datesRange=g;for(let y=0;y<this.data.ys.length;y++)this.data.ys[y].y=T[y],this.data.ys[y].yFrom=R[y]}revertDetails(){this.data.x=this.data.saved.x,this.data.dates=this.data.saved.dates,this.data.datesShort=this.data.saved.datesShort,this.data.datesRange=this.data.saved.datesRange;for(let t=0;t<this.data.ys.length;++t)this.data.ys[t].y=this.data.saved.y[t]}}export{wt as default};
|
|
//# sourceMappingURL=chart-BIax9IsQ.js.map
|